@energycap/components 0.41.1-ECAP-26841-date-input-features.20250108-1012 → 0.42.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 (353) hide show
  1. package/{esm2020 → esm2022}/energycap-components.mjs +4 -4
  2. package/esm2022/lib/components.module.mjs +418 -0
  3. package/esm2022/lib/controls/banner/banner.component.mjs +109 -0
  4. package/esm2022/lib/controls/button/button.component.mjs +106 -0
  5. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +67 -0
  6. package/{esm2020 → esm2022}/lib/controls/button/copy-button.directive.mjs +28 -28
  7. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +59 -0
  9. package/esm2022/lib/controls/calendar/calendar.component.mjs +200 -0
  10. package/esm2022/lib/controls/calendar/calendar.types.mjs +4 -0
  11. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/{esm2020 → esm2022}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
  13. package/esm2022/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2022/lib/controls/date-input/date-input.component.mjs +256 -0
  15. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +243 -0
  16. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +261 -0
  17. package/esm2022/lib/controls/form-control/form-control.component.mjs +104 -0
  18. package/esm2022/lib/controls/form-control-base.mjs +151 -0
  19. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  20. package/esm2022/lib/controls/form-group/form-group.component.mjs +261 -0
  21. package/{esm2020 → esm2022}/lib/controls/help-popover/help-popover.component.mjs +31 -31
  22. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
  23. package/{esm2020 → esm2022}/lib/controls/link-button/link-button.component.mjs +11 -11
  24. package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
  25. package/{esm2020 → esm2022}/lib/controls/navigation/link-item.mjs +1 -1
  26. package/esm2022/lib/controls/navigation/nav-group.mjs +39 -0
  27. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  28. package/{esm2020 → esm2022}/lib/controls/navigation/nav-item.mjs +1 -1
  29. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
  30. package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
  31. package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button-option.mjs +2 -2
  32. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +82 -0
  33. package/esm2022/lib/controls/select/select.component.mjs +88 -0
  34. package/esm2022/lib/controls/tabs/tabs.component.mjs +47 -0
  35. package/esm2022/lib/controls/textbox/textbox.component.mjs +155 -0
  36. package/esm2022/lib/core/cache.service.mjs +105 -0
  37. package/esm2022/lib/core/custom-validators.mjs +29 -0
  38. package/esm2022/lib/core/date-time-helper.mjs +220 -0
  39. package/esm2022/lib/core/error.service.mjs +61 -0
  40. package/esm2022/lib/core/router-helper.service.mjs +111 -0
  41. package/esm2022/lib/core/scroll.service.mjs +89 -0
  42. package/{esm2020 → esm2022}/lib/core/telemetry-tracker.service.mjs +16 -16
  43. package/{esm2020 → esm2022}/lib/core/telemetry.service.mjs +38 -38
  44. package/esm2022/lib/core/validation-message.service.mjs +185 -0
  45. package/{esm2020 → esm2022}/lib/core/validation-patterns.mjs +30 -30
  46. package/esm2022/lib/core/window.service.mjs +186 -0
  47. package/esm2022/lib/display/app-bar/app-bar.component.mjs +46 -0
  48. package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
  49. package/esm2022/lib/display/avatar/avatar.service.mjs +64 -0
  50. package/esm2022/lib/display/confirm/confirm.component.mjs +168 -0
  51. package/{esm2020 → esm2022}/lib/display/dialog/dialog-content.mjs +1 -1
  52. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  53. package/{esm2020 → esm2022}/lib/display/dialog/dialog-types.mjs +76 -76
  54. package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
  55. package/{esm2020 → esm2022}/lib/display/dialog/dialog.service.mjs +71 -71
  56. package/{esm2020 → esm2022}/lib/display/help/help-types.mjs +1 -1
  57. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  58. package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
  59. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  60. package/esm2022/lib/display/item-display/item-display.component.mjs +81 -0
  61. package/esm2022/lib/display/json-display/json-display.component.mjs +47 -0
  62. package/esm2022/lib/display/resizable/resizable-base.mjs +120 -0
  63. package/{esm2020 → esm2022}/lib/display/resizable/resizable.component.mjs +52 -52
  64. package/{esm2020 → esm2022}/lib/display/spinner/spinner.component.mjs +12 -12
  65. package/esm2022/lib/display/splash/splash.component.mjs +42 -0
  66. package/{esm2020 → esm2022}/lib/display/splash/splash.service.mjs +35 -35
  67. package/{esm2020 → esm2022}/lib/display/table/resizable-column.component.mjs +20 -20
  68. package/esm2022/lib/display/table/resizable-table.directive.mjs +227 -0
  69. package/esm2022/lib/display/table/searchable-table.component.mjs +342 -0
  70. package/{esm2020 → esm2022}/lib/display/table/table-detail-row.component.mjs +19 -19
  71. package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
  72. package/{esm2020 → esm2022}/lib/display/table/table-master-header-row.component.mjs +14 -14
  73. package/esm2022/lib/display/table/table-master-row.component.mjs +163 -0
  74. package/esm2022/lib/display/table/table-pagination.component.mjs +155 -0
  75. package/esm2022/lib/display/table/table-selectable-row.component.mjs +235 -0
  76. package/esm2022/lib/display/table/table.component.mjs +249 -0
  77. package/esm2022/lib/display/tags/tag.mjs +18 -0
  78. package/esm2022/lib/display/tags/tags.component.mjs +77 -0
  79. package/esm2022/lib/display/toast/toast/toast.component.mjs +77 -0
  80. package/{esm2020 → esm2022}/lib/display/toast/toast-types.mjs +7 -7
  81. package/{esm2020 → esm2022}/lib/display/toast/toast.service.mjs +35 -35
  82. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
  83. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.component.mjs +28 -28
  84. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.service.mjs +78 -78
  85. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  86. package/{esm2020 → esm2022}/lib/display/tour/tour-types.mjs +33 -33
  87. package/esm2022/lib/display/tour/tour.component.mjs +398 -0
  88. package/esm2022/lib/display/tour/tour.service.mjs +75 -0
  89. package/esm2022/lib/display/tree/tree.component.mjs +135 -0
  90. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  91. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  92. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  93. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
  94. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  95. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  96. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  97. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  98. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  99. package/esm2022/lib/shared/display.mjs +6 -0
  100. package/esm2022/lib/shared/form-group.helper.mjs +67 -0
  101. package/esm2022/lib/shared/json-helper.mjs +19 -0
  102. package/esm2022/lib/shared/lodash-helper.mjs +52 -0
  103. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +387 -0
  104. package/{esm2020 → esm2022}/lib/shared/page/page-statuses.mjs +22 -22
  105. package/{esm2020 → esm2022}/lib/shared/page/page-title/page-title.component.mjs +23 -23
  106. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
  107. package/{esm2020 → esm2022}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
  108. package/{esm2020 → esm2022}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
  109. package/{esm2020 → esm2022}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
  110. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  111. package/{esm2020 → esm2022}/lib/shared/testing/public-mocks.spec.mjs +148 -148
  112. package/{esm2020 → esm2022}/lib/shared/testing/spy-factory.spec.mjs +39 -39
  113. package/{esm2020 → esm2022}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
  114. package/{esm2020 → esm2022}/lib/shared/user-preference.service.mjs +17 -17
  115. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  116. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
  117. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
  118. package/esm2022/public-api.mjs +115 -0
  119. package/{fesm2020 → fesm2022}/energycap-components.mjs +11819 -12972
  120. package/fesm2022/energycap-components.mjs.map +1 -0
  121. package/index.d.ts +5 -5
  122. package/lib/components.module.d.ts +91 -92
  123. package/lib/controls/banner/banner.component.d.ts +50 -50
  124. package/lib/controls/button/button.component.d.ts +78 -78
  125. package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
  126. package/lib/controls/button/copy-button.directive.d.ts +14 -14
  127. package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
  128. package/lib/controls/calendar/calendar-item.component.d.ts +17 -22
  129. package/lib/controls/calendar/calendar.component.d.ts +54 -52
  130. package/lib/controls/calendar/calendar.types.d.ts +7 -11
  131. package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
  132. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
  133. package/lib/controls/combobox/combobox.component.d.ts +418 -418
  134. package/lib/controls/date-input/date-input.component.d.ts +80 -115
  135. package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
  136. package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
  137. package/lib/controls/form-control/form-control.component.d.ts +30 -28
  138. package/lib/controls/form-control-base.d.ts +110 -110
  139. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
  140. package/lib/controls/form-group/form-group.component.d.ts +105 -105
  141. package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
  142. package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
  143. package/lib/controls/link-button/link-button.component.d.ts +5 -5
  144. package/lib/controls/menu/menu.component.d.ts +255 -255
  145. package/lib/controls/navigation/link-item.d.ts +32 -32
  146. package/lib/controls/navigation/nav-group.d.ts +18 -18
  147. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
  148. package/lib/controls/navigation/nav-item.d.ts +31 -31
  149. package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
  150. package/lib/controls/popover/popover.component.d.ts +51 -51
  151. package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
  152. package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
  153. package/lib/controls/select/select.component.d.ts +44 -44
  154. package/lib/controls/tabs/tabs.component.d.ts +30 -30
  155. package/lib/controls/textbox/textbox.component.d.ts +107 -107
  156. package/lib/core/cache.service.d.ts +33 -33
  157. package/lib/core/custom-validators.d.ts +20 -20
  158. package/lib/core/date-time-helper.d.ts +101 -101
  159. package/lib/core/error.service.d.ts +20 -20
  160. package/lib/core/router-helper.service.d.ts +48 -48
  161. package/lib/core/scroll.service.d.ts +36 -36
  162. package/lib/core/telemetry-tracker.service.d.ts +13 -13
  163. package/lib/core/telemetry.service.d.ts +31 -31
  164. package/lib/core/validation-message.service.d.ts +26 -26
  165. package/lib/core/validation-patterns.d.ts +22 -22
  166. package/lib/core/window.service.d.ts +116 -116
  167. package/lib/display/app-bar/app-bar.component.d.ts +20 -20
  168. package/lib/display/avatar/avatar.component.d.ts +35 -35
  169. package/lib/display/avatar/avatar.service.d.ts +24 -24
  170. package/lib/display/confirm/confirm.component.d.ts +123 -123
  171. package/lib/display/dialog/dialog-content.d.ts +19 -19
  172. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
  173. package/lib/display/dialog/dialog-types.d.ts +130 -130
  174. package/lib/display/dialog/dialog.component.d.ts +120 -120
  175. package/lib/display/dialog/dialog.service.d.ts +48 -48
  176. package/lib/display/help/help-types.d.ts +33 -33
  177. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
  178. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
  179. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
  180. package/lib/display/item-display/item-display.component.d.ts +43 -43
  181. package/lib/display/json-display/json-display.component.d.ts +16 -16
  182. package/lib/display/resizable/resizable-base.d.ts +67 -67
  183. package/lib/display/resizable/resizable.component.d.ts +31 -31
  184. package/lib/display/spinner/spinner.component.d.ts +5 -5
  185. package/lib/display/splash/splash.component.d.ts +16 -16
  186. package/lib/display/splash/splash.service.d.ts +22 -22
  187. package/lib/display/table/resizable-column.component.d.ts +10 -10
  188. package/lib/display/table/resizable-table.directive.d.ts +93 -93
  189. package/lib/display/table/searchable-table.component.d.ts +206 -206
  190. package/lib/display/table/table-detail-row.component.d.ts +8 -8
  191. package/lib/display/table/table-locked-column.component.d.ts +20 -20
  192. package/lib/display/table/table-master-header-row.component.d.ts +9 -9
  193. package/lib/display/table/table-master-row.component.d.ts +113 -113
  194. package/lib/display/table/table-pagination.component.d.ts +91 -91
  195. package/lib/display/table/table-selectable-row.component.d.ts +102 -102
  196. package/lib/display/table/table.component.d.ts +121 -121
  197. package/lib/display/tags/tag.d.ts +18 -18
  198. package/lib/display/tags/tags.component.d.ts +48 -48
  199. package/lib/display/toast/toast/toast.component.d.ts +23 -23
  200. package/lib/display/toast/toast-types.d.ts +24 -24
  201. package/lib/display/toast/toast.service.d.ts +20 -20
  202. package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
  203. package/lib/display/tooltip/tooltip.component.d.ts +70 -70
  204. package/lib/display/tooltip/tooltip.service.d.ts +16 -16
  205. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
  206. package/lib/display/tour/tour-types.d.ts +70 -70
  207. package/lib/display/tour/tour.component.d.ts +147 -147
  208. package/lib/display/tour/tour.service.d.ts +38 -38
  209. package/lib/display/tree/tree.component.d.ts +75 -75
  210. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
  211. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
  212. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
  213. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
  214. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
  215. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
  216. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
  217. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
  218. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
  219. package/lib/shared/display.d.ts +42 -42
  220. package/lib/shared/form-group.helper.d.ts +31 -31
  221. package/lib/shared/json-helper.d.ts +7 -7
  222. package/lib/shared/lodash-helper.d.ts +18 -18
  223. package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
  224. package/lib/shared/page/page-statuses.d.ts +13 -13
  225. package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
  226. package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
  227. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
  228. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
  229. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
  230. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
  231. package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
  232. package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
  233. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
  234. package/lib/shared/user-preference.service.d.ts +13 -13
  235. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
  236. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
  237. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
  238. package/package.json +12 -18
  239. package/public-api.d.ts +111 -113
  240. package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
  241. package/schematics/rxjs-7-upgrade/index.js +67 -67
  242. package/schematics/rxjs-7-upgrade/index.js.map +1 -1
  243. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
  244. package/schematics/rxjs-7-upgrade/schema.js +2 -2
  245. package/schematics/utilities/typescript.d.ts +7 -7
  246. package/schematics/utilities/typescript.js +41 -41
  247. package/schematics/utilities/workspace.d.ts +8 -8
  248. package/schematics/utilities/workspace.js +71 -71
  249. package/schematics/utilities/workspace.js.map +1 -1
  250. package/src/assets/locales/en_US.json +1 -9
  251. package/esm2020/lib/components.module.mjs +0 -423
  252. package/esm2020/lib/controls/banner/banner.component.mjs +0 -109
  253. package/esm2020/lib/controls/button/button.component.mjs +0 -106
  254. package/esm2020/lib/controls/button/copy-button-base.directive.mjs +0 -67
  255. package/esm2020/lib/controls/button/copy-table-button.directive.mjs +0 -43
  256. package/esm2020/lib/controls/calendar/calendar-item.component.mjs +0 -91
  257. package/esm2020/lib/controls/calendar/calendar.component.mjs +0 -248
  258. package/esm2020/lib/controls/calendar/calendar.types.mjs +0 -2
  259. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +0 -140
  260. package/esm2020/lib/controls/combobox/combobox.component.mjs +0 -879
  261. package/esm2020/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  262. package/esm2020/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  263. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  264. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  265. package/esm2020/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  266. package/esm2020/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  267. package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  268. package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  269. package/esm2020/lib/controls/date-input/date-input.component.mjs +0 -463
  270. package/esm2020/lib/controls/date-input/date-input.types.mjs +0 -44
  271. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +0 -243
  272. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +0 -261
  273. package/esm2020/lib/controls/form-control/form-control.component.mjs +0 -98
  274. package/esm2020/lib/controls/form-control-base.mjs +0 -151
  275. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  276. package/esm2020/lib/controls/form-group/form-group.component.mjs +0 -261
  277. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +0 -329
  278. package/esm2020/lib/controls/menu/menu.component.mjs +0 -485
  279. package/esm2020/lib/controls/navigation/nav-group.mjs +0 -39
  280. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  281. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +0 -372
  282. package/esm2020/lib/controls/popover/popover.component.mjs +0 -117
  283. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +0 -82
  284. package/esm2020/lib/controls/select/select.component.mjs +0 -88
  285. package/esm2020/lib/controls/tabs/tabs.component.mjs +0 -47
  286. package/esm2020/lib/controls/textbox/textbox.component.mjs +0 -155
  287. package/esm2020/lib/core/cache.service.mjs +0 -105
  288. package/esm2020/lib/core/custom-validators.mjs +0 -29
  289. package/esm2020/lib/core/date-time-helper.mjs +0 -228
  290. package/esm2020/lib/core/error.service.mjs +0 -61
  291. package/esm2020/lib/core/router-helper.service.mjs +0 -111
  292. package/esm2020/lib/core/scroll.service.mjs +0 -89
  293. package/esm2020/lib/core/validation-message.service.mjs +0 -185
  294. package/esm2020/lib/core/window.service.mjs +0 -186
  295. package/esm2020/lib/display/app-bar/app-bar.component.mjs +0 -46
  296. package/esm2020/lib/display/avatar/avatar.component.mjs +0 -67
  297. package/esm2020/lib/display/avatar/avatar.service.mjs +0 -64
  298. package/esm2020/lib/display/confirm/confirm.component.mjs +0 -168
  299. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  300. package/esm2020/lib/display/dialog/dialog.component.mjs +0 -281
  301. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  302. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
  303. package/esm2020/lib/display/item-display/item-display.component.mjs +0 -81
  304. package/esm2020/lib/display/json-display/json-display.component.mjs +0 -47
  305. package/esm2020/lib/display/resizable/resizable-base.mjs +0 -120
  306. package/esm2020/lib/display/splash/splash.component.mjs +0 -42
  307. package/esm2020/lib/display/table/resizable-table.directive.mjs +0 -227
  308. package/esm2020/lib/display/table/searchable-table.component.mjs +0 -342
  309. package/esm2020/lib/display/table/table-locked-column.component.mjs +0 -58
  310. package/esm2020/lib/display/table/table-master-row.component.mjs +0 -163
  311. package/esm2020/lib/display/table/table-pagination.component.mjs +0 -155
  312. package/esm2020/lib/display/table/table-selectable-row.component.mjs +0 -235
  313. package/esm2020/lib/display/table/table.component.mjs +0 -249
  314. package/esm2020/lib/display/tags/tag.mjs +0 -18
  315. package/esm2020/lib/display/tags/tags.component.mjs +0 -77
  316. package/esm2020/lib/display/toast/toast/toast.component.mjs +0 -77
  317. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +0 -114
  318. package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  319. package/esm2020/lib/display/tour/tour.component.mjs +0 -398
  320. package/esm2020/lib/display/tour/tour.service.mjs +0 -75
  321. package/esm2020/lib/display/tree/tree.component.mjs +0 -135
  322. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  323. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  324. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  325. package/esm2020/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -100
  326. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +0 -163
  327. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
  328. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  329. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  330. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  331. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  332. package/esm2020/lib/shared/display.mjs +0 -6
  333. package/esm2020/lib/shared/form-group.helper.mjs +0 -67
  334. package/esm2020/lib/shared/json-helper.mjs +0 -19
  335. package/esm2020/lib/shared/lodash-helper.mjs +0 -51
  336. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +0 -387
  337. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +0 -147
  338. package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  339. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  340. package/esm2020/public-api.mjs +0 -117
  341. package/fesm2015/energycap-components.mjs +0 -13371
  342. package/fesm2015/energycap-components.mjs.map +0 -1
  343. package/fesm2020/energycap-components.mjs.map +0 -1
  344. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +0 -42
  345. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +0 -21
  346. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +0 -21
  347. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +0 -21
  348. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +0 -18
  349. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +0 -18
  350. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +0 -21
  351. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +0 -20
  352. package/lib/controls/date-input/date-input.types.d.ts +0 -62
  353. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +0 -23
@@ -1,228 +0,0 @@
1
- import moment from 'moment';
2
- /**
3
- * Helper class that provides common date constants and helpful date functions
4
- */
5
- export class DateTimeHelper {
6
- ///////////////////////////////////////////////////////
7
- // METHODS
8
- ///////////////////////////////////////////////////////
9
- /**
10
- * Return true if @see date is equal to the @see endOfTime
11
- */
12
- static isEndOfTime(date, timeZoneOffset = false) {
13
- const endOfTime = timeZoneOffset ? this.endOfTimeUTC : this.endOfTime;
14
- return this.isSameDay(date, endOfTime);
15
- }
16
- /**
17
- * Compare two dates and return true if they represent the same year, month, and day (time is ignored).
18
- */
19
- static isSameDay(date1, date2) {
20
- return moment(date1).isSame(moment(date2), 'day');
21
- }
22
- /**
23
- * Get the parse formats based on the given date format. If no date format is
24
- * given, or we don't recognize the format, return the month first parse formats.
25
- *
26
- */
27
- static getParseFormats(dateFormat) {
28
- let map = {
29
- 'MM/DD/YYYY': this.monthFirstParseFormats,
30
- 'MM-DD-YYYY': this.monthFirstParseFormats,
31
- 'DD/MM/YYYY': this.dateFirstParseFormats,
32
- 'DD-MM-YYYY': this.dateFirstParseFormats,
33
- 'YYYY/MM/DD': this.monthFirstParseFormats,
34
- 'YYYY-MM-DD': this.monthFirstParseFormats
35
- };
36
- return dateFormat ? map[dateFormat] : this.monthFirstParseFormats;
37
- }
38
- /**
39
- * Get the moment parse formats based on the given date format. If no date format is
40
- * given, or we don't recognize the format, return the month first parse formats.
41
- */
42
- static getMomentParseFormats(dateFormat) {
43
- let map = {
44
- 'MM/DD/YYYY': [...this.momentMonthFirstParseFormats, ...this.momentMedAndLongDateFormats],
45
- 'MM-DD-YYYY': [...this.momentMonthFirstParseFormats, ...this.momentMedAndLongDateFormats],
46
- 'DD/MM/YYYY': [...this.momentDateFirstParseFormats, ...this.momentMedAndLongDateFormats],
47
- 'DD-MM-YYYY': [...this.momentDateFirstParseFormats, ...this.momentMedAndLongDateFormats],
48
- 'YYYY/MM/DD': [...this.momentMonthFirstParseFormats, ...this.momentMedAndLongDateFormats],
49
- 'YYYY-MM-DD': [...this.momentMonthFirstParseFormats, ...this.momentMedAndLongDateFormats]
50
- };
51
- return dateFormat ? map[dateFormat] : this.momentMonthFirstParseFormats;
52
- }
53
- /**
54
- * Get relationship start date (favoring date in partialFormState if exists)
55
- * * return default account-meter effective date if no start date found
56
- *
57
- */
58
- static getAccountMeterStartDate(partialFormState, accountMeter) {
59
- let startDate = partialFormState.effectiveFrom || accountMeter.startDate;
60
- return startDate ? new Date(startDate) : DateTimeHelper.defaultAccountMeterEffectiveDate;
61
- }
62
- /**
63
- * Get relationship end date (favoring date in partialFormState if exists)
64
- * * return null if no stored date or end date is 1/1/3000
65
- */
66
- static getAccountMeterEndDate(partialFormState, accountMeter) {
67
- let endDate = partialFormState.effectiveTo || accountMeter.endDate;
68
- if (endDate && !DateTimeHelper.isEndOfTime(endDate)) {
69
- return new Date(endDate);
70
- }
71
- return null;
72
- }
73
- static isDateBetween(date, startDate, endDate, includeStart, includeEnd) {
74
- let inclusivity = '()';
75
- if (includeStart && includeEnd) {
76
- inclusivity = '[]';
77
- }
78
- else if (includeStart) {
79
- inclusivity = '[)';
80
- }
81
- else if (includeEnd) {
82
- inclusivity = '(]';
83
- }
84
- // If a start date is not provide, we'll use our beginning of time instead
85
- startDate = startDate || this.beginningOfTime;
86
- // If an end date is not provided, we'll use our end of time instead
87
- endDate = endDate || this.endOfTime;
88
- return moment(date).isBetween(startDate, endDate, 'day', inclusivity);
89
- }
90
- static stringToDate(dateString) {
91
- if (dateString === null || dateString === undefined) {
92
- return dateString;
93
- }
94
- else {
95
- return moment(dateString).toDate();
96
- }
97
- }
98
- }
99
- ///////////////////////////////////////////////////////
100
- // CONSTANTS
101
- ///////////////////////////////////////////////////////
102
- DateTimeHelper.beginningOfTime = new Date(1899, 11, 31);
103
- /** 3000-01-01 */
104
- DateTimeHelper.endOfTime = new Date(3000, 0, 1);
105
- /** 3000-01-01 UTC */
106
- DateTimeHelper.endOfTimeUTC = moment.utc('3000-01-01').toDate();
107
- /** Default effective date for new AccountMeter relationships: 2010-01-01 */
108
- DateTimeHelper.defaultAccountMeterEffectiveDate = new Date(2010, 0, 1);
109
- /** The default date that a newly created account becomes effective: 2010-01-01 */
110
- DateTimeHelper.defaultAccountServiceEffectiveDate = new Date(2010, 0, 1);
111
- /** Minimum date for all datepickers: 1980-01-01 */
112
- DateTimeHelper.minDatePickerDate = new Date(1980, 0, 1);
113
- /** Maximum date for all datepickers: 3000-01-01 11:59:59 PM to allow for local time offset working in for 3000-01-01 dates, which we store in the db to represent "end of time" */
114
- DateTimeHelper.maxDatePickerDate = new Date(3000, 0, 1, 23, 59, 59);
115
- /** Timestamp formats */
116
- DateTimeHelper.defaultDateFormat = "yyyy-MM-dd";
117
- DateTimeHelper.defaultTimeFormat = "HH:mm:ss";
118
- DateTimeHelper.defaultTimestampFormat = `${DateTimeHelper.defaultDateFormat} ${DateTimeHelper.defaultTimeFormat}`;
119
- /** List of valid bill import date formats
120
- * Warning! Do not use these for actual formatting of dates
121
- */
122
- DateTimeHelper.billImportFormatDateFormats = [
123
- { label: "mm/dd/yyyy", value: "mm/dd/yyyy" }, { label: "Month dd yyyy", value: "Month dd yyyy" },
124
- { label: "dd/mm/yyyy", value: "dd/mm/yyyy" }, { label: "dd Month yyyy", value: "dd Month yyyy" }, { label: "yyyymmdd", value: "yyyymmdd" }
125
- ];
126
- /**
127
- * User input formats that we will parse into a date
128
- * when the users date format preference has month before day
129
- */
130
- DateTimeHelper.monthFirstParseFormats = [
131
- "yyyy/MM/dd",
132
- "MM/dd/yyyy",
133
- "MMddyyyy",
134
- "MM/dd/yy",
135
- "MMddyy",
136
- "MM/dd",
137
- "yyyy.MM.dd",
138
- "MM.dd.yyyy",
139
- "MM.dd.yy",
140
- "MM.dd",
141
- "yyyy-MM-dd",
142
- "MM-dd-yyyy",
143
- "MM-dd-yy",
144
- "MM-dd",
145
- "yyyyMMdd"
146
- ];
147
- /**
148
- * User input formats that we will parse into a date
149
- * when the users date format preference has month before day.
150
- * To be used with moment.js. Moment ignores non-alphanumeric characters
151
- * so dates like 2020/09/10 will be parsed the same as 2020-09-10
152
- */
153
- DateTimeHelper.momentMonthFirstParseFormats = [
154
- 'M-D',
155
- 'MM-DD',
156
- 'M-D-YY',
157
- 'MM-DD-YY',
158
- 'MMDDYYYY',
159
- 'YYYYMMDD',
160
- 'YYYY-MM-DD',
161
- 'MM-DD-YYYY'
162
- ];
163
- /**
164
- * User input formats that we will parse into a date
165
- * when the users date format preference has day before month
166
- */
167
- DateTimeHelper.dateFirstParseFormats = [
168
- "yyyy/dd/MM",
169
- "dd/MM/yyyy",
170
- "ddMMyyyy",
171
- "dd/MM/yy",
172
- "ddMMyy",
173
- "dd/MM",
174
- "yyyy.dd.MM",
175
- "dd.MM.yyyy",
176
- "dd.MM.yy",
177
- "dd.MM",
178
- "yyyy-dd-MM",
179
- "dd-MM-yyyy",
180
- "dd-MM-yy",
181
- "dd-MM",
182
- "yyyyDDmm"
183
- ];
184
- /**
185
- * User input formats that we will parse into a date
186
- * when the users date format preference has day before month.
187
- * To be used with moment.js. Moment ignores non-alphanumeric characters
188
- * so dates like 2020/09/10 will be parsed the same as 2020-09-10
189
- */
190
- DateTimeHelper.momentDateFirstParseFormats = [
191
- 'D-M',
192
- 'DD-MM',
193
- 'D-M-YY',
194
- 'DD-MM-YY',
195
- 'DDMMYYYY',
196
- 'YYYYMMDD',
197
- 'YYYY-MM-DD',
198
- 'DD-MM-YYYY'
199
- ];
200
- /**
201
- * Formats used to parse dates that are in the medium or long format by moment js.
202
- * These are shared by date-first and month-first date formats. The date can't be
203
- * parsed differently based on the date preference since the month is not numeric.
204
- * This is not an exhaustive list of formats, but it should cover most common formats.
205
- */
206
- DateTimeHelper.momentMedAndLongDateFormats = [
207
- 'DD MMM',
208
- 'MMM DD',
209
- 'DD MMM YY',
210
- 'DD MMM YYYY',
211
- 'DD MMMM YYYY',
212
- 'MMM D, YY',
213
- 'MMM D, YYYY',
214
- 'MMM DD, YYYY',
215
- 'MMMM D, YYYY',
216
- 'MMMM DD, YYYY',
217
- 'MMM YY',
218
- 'MMM YYYY',
219
- 'MMMM YYYY',
220
- 'MMM, YY',
221
- 'MMM, YYYY',
222
- 'MMMM, YYYY',
223
- ];
224
- /**
225
- * Format to display the time portion of a datetime
226
- */
227
- DateTimeHelper.timeFormat = 'HH:mm:ss';
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlL2RhdGUtdGltZS1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFrSnZCLHVEQUF1RDtJQUN2RCxVQUFVO0lBQ1YsdURBQXVEO0lBRXZEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFtQyxFQUFFLGlCQUEwQixLQUFLO1FBQzFGLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFHRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBb0MsRUFBRSxLQUFvQztRQUM5RixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUEwQjtRQUNwRCxJQUFJLEdBQUcsR0FBRztZQUNOLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCO1lBQ3pDLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCO1lBQ3pDLFlBQVksRUFBRSxJQUFJLENBQUMscUJBQXFCO1lBQ3hDLFlBQVksRUFBRSxJQUFJLENBQUMscUJBQXFCO1lBQ3hDLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCO1lBQ3pDLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCO1NBQzVDLENB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QUNSLFFBQVE7SUFDUixXQUFXO0lBQ1gsYUFBYTtJQUNiLGNBQWM7SUFDZCxXQUFXO0lBQ1gsYUFBYTtJQUNiLGNBQWM7SUFDZCxjQUFjO0lBQ2QsZUFBZTtJQUNmLFFBQVE7SUFDUixVQUFVO0lBQ1YsV0FBVztJQUNYLFNBQVM7SUFDVCxXQUFXO0lBQ1gsWUFBWTtDQUNmLENBQUM7QUFFRjs7R0FFRztBQUNXLHlCQUFVLEdBQVcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBjbGFzcyB0aGF0IHByb3ZpZGVzIGNvbW1vbiBkYXRlIGNvbnN0YW50cyBhbmQgaGVscGZ1bCBkYXRlIGZ1bmN0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lSGVscGVyIHtcclxuXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBDT05TVEFOVFNcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGJlZ2lubmluZ09mVGltZTogRGF0ZSA9IG5ldyBEYXRlKDE4OTksMTEsMzEpO1xyXG4gICAgIFxyXG4gICAgLyoqIDMwMDAtMDEtMDEgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZW5kT2ZUaW1lOiBEYXRlID0gbmV3IERhdGUoMzAwMCwgMCwgMSk7XHJcblxyXG4gICAgLyoqIDMwMDAtMDEtMDEgVVRDICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGVuZE9mVGltZVVUQzogRGF0ZSA9IG1vbWVudC51dGMoJzMwMDAtMDEtMDEnKS50b0RhdGUoKTtcclxuXHJcbiAgICAvKiogRGVmYXVsdCBlZmZlY3RpdmUgZGF0ZSBmb3IgbmV3IEFjY291bnRNZXRlciByZWxhdGlvbnNoaXBzOiAyMDEwLTAxLTAxICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGRlZmF1bHRBY2NvdW50TWV0ZXJFZmZlY3RpdmVEYXRlOiBEYXRlID0gbmV3IERhdGUoMjAxMCwgMCwgMSk7XHJcblxyXG4gICAgLyoqIFRoZSBkZWZhdWx0IGRhdGUgdGhhdCBhIG5ld2x5IGNyZWF0ZWQgYWNjb3VudCBiZWNvbWVzIGVmZmVjdGl2ZTogMjAxMC0wMS0wMSAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWZhdWx0QWNjb3VudFNlcnZpY2VFZmZlY3RpdmVEYXRlOiBEYXRlID0gbmV3IERhdGUoMjAxMCwgMCwgMSk7XHJcblxyXG4gICAgLyoqIE1pbmltdW0gZGF0ZSBmb3IgYWxsIGRhdGVwaWNrZXJzOiAxOTgwLTAxLTAxICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG1pbkRhdGVQaWNrZXJEYXRlOiBEYXRlID0gbmV3IERhdGUoMTk4MCwgMCwgMSk7XHJcblxyXG4gICAgLyoqIE1heGltdW0gZGF0ZSBmb3IgYWxsIGRhdGVwaWNrZXJzOiAzMDAwLTAxLTAxIDExOjU5OjU5IFBNIHRvIGFsbG93IGZvciBsb2NhbCB0aW1lIG9mZnNldCB3b3JraW5nIGluIGZvciAzMDAwLTAxLTAxIGRhdGVzLCB3aGljaCB3ZSBzdG9yZSBpbiB0aGUgZGIgdG8gcmVwcmVzZW50IFwiZW5kIG9mIHRpbWVcIiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBtYXhEYXRlUGlja2VyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKDMwMDAsMCwxLDIzLDU5LDU5KTtcclxuXHJcbiAgICAvKiogVGltZXN0YW1wIGZvcm1hdHMgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZGVmYXVsdERhdGVGb3JtYXQ6IHN0cmluZyA9IFwieXl5eS1NTS1kZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWZhdWx0VGltZUZvcm1hdDogc3RyaW5nID0gXCJISDptbTpzc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWZhdWx0VGltZXN0YW1wRm9ybWF0OiBzdHJpbmcgPSBgJHtEYXRlVGltZUhlbHBlci5kZWZhdWx0RGF0ZUZvcm1hdH0gJHtEYXRlVGltZUhlbHBlci5kZWZhdWx0VGltZUZvcm1hdH1gO1xyXG5cclxuICAgIC8qKiBMaXN0IG9mIHZhbGlkIGJpbGwgaW1wb3J0IGRhdGUgZm9ybWF0c1xyXG4gICAgICogIFdhcm5pbmchIERvIG5vdCB1c2UgdGhlc2UgZm9yIGFjdHVhbCBmb3JtYXR0aW5nIG9mIGRhdGVzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgYmlsbEltcG9ydEZvcm1hdERhdGVGb3JtYXRzID0gW1xyXG4gICAgICAgIHsgbGFiZWw6IFwibW0vZGQveXl5eVwiLCB2YWx1ZTogXCJtbS9kZC95eXl5XCIgfSwgeyBsYWJlbDogXCJNb250aCBkZCB5eXl5XCIsIHZhbHVlOiBcIk1vbnRoIGRkIHl5eXlcIiB9LCBcclxuICAgICAgICB7IGxhYmVsOiBcImRkL21tL3l5eXlcIiwgdmFsdWU6IFwiZGQvbW0veXl5eVwiIH0sIHsgbGFiZWw6IFwiZGQgTW9udGggeXl5eVwiLCB2YWx1ZTogXCJkZCBNb250aCB5eXl5XCIgfSwgeyBsYWJlbDogXCJ5eXl5bW1kZFwiLCB2YWx1ZTogXCJ5eXl5bW1kZFwiIH1dO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlciBpbnB1dCBmb3JtYXRzIHRoYXQgd2Ugd2lsbCBwYXJzZSBpbnRvIGEgZGF0ZVxyXG4gICAgICogd2hlbiB0aGUgdXNlcnMgZGF0ZSBmb3JtYXQgcHJlZmVyZW5jZSBoYXMgbW9udGggYmVmb3JlIGRheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG1vbnRoRmlyc3RQYXJzZUZvcm1hdHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIFwieXl5eS9NTS9kZFwiLFxyXG4gICAgICAgIFwiTU0vZGQveXl5eVwiLFxyXG4gICAgICAgIFwiTU1kZHl5eXlcIixcclxuICAgICAgICBcIk1NL2RkL3l5XCIsXHJcbiAgICAgICAgXCJNTWRkeXlcIixcclxuICAgICAgICBcIk1NL2RkXCIsXHJcbiAgICAgICAgXCJ5eXl5Lk1NLmRkXCIsXHJcbiAgICAgICAgXCJNTS5kZC55eXl5XCIsXHJcbiAgICAgICAgXCJNTS5kZC55eVwiLFxyXG4gICAgICAgIFwiTU0uZGRcIixcclxuICAgICAgICBcInl5eXktTU0tZGRcIixcclxuICAgICAgICBcIk1NLWRkLXl5eXlcIixcclxuICAgICAgICBcIk1NLWRkLXl5XCIsXHJcbiAgICAgICAgXCJNTS1kZFwiLFxyXG4gICAgICAgIFwieXl5eU1NZGRcIlxyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgaW5wdXQgZm9ybWF0cyB0aGF0IHdlIHdpbGwgcGFyc2UgaW50byBhIGRhdGVcclxuICAgICAqIHdoZW4gdGhlIHVzZXJzIGRhdGUgZm9ybWF0IHByZWZlcmVuY2UgaGFzIG1vbnRoIGJlZm9yZSBkYXkuXHJcbiAgICAgKiBUbyBiZSB1c2VkIHdpdGggbW9tZW50LmpzLiBNb21lbnQgaWdub3JlcyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnNcclxuICAgICAqIHNvIGRhdGVzIGxpa2UgMjAyMC8wOS8xMCB3aWxsIGJlIHBhcnNlZCB0aGUgc2FtZSBhcyAyMDIwLTA5LTEwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgbW9tZW50TW9udGhGaXJzdFBhcnNlRm9ybWF0czogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgJ00tRCcsXHJcbiAgICAgICAgJ01NLUREJyxcclxuICAgICAgICAnTS1ELVlZJyxcclxuICAgICAgICAnTU0tREQtWVknLFxyXG4gICAgICAgICdNTUREWVlZWScsXHJcbiAgICAgICAgJ1lZWVlNTUREJyxcclxuICAgICAgICAnWVlZWS1NTS1ERCcsXHJcbiAgICAgICAgJ01NLURELVlZWVknXHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlciBpbnB1dCBmb3JtYXRzIHRoYXQgd2Ugd2lsbCBwYXJzZSBpbnRvIGEgZGF0ZVxyXG4gICAgICogd2hlbiB0aGUgdXNlcnMgZGF0ZSBmb3JtYXQgcHJlZmVyZW5jZSBoYXMgZGF5IGJlZm9yZSBtb250aFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGRhdGVGaXJzdFBhcnNlRm9ybWF0czogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXCJ5eXl5L2RkL01NXCIsXHJcbiAgICAgICAgXCJkZC9NTS95eXl5XCIsXHJcbiAgICAgICAgXCJkZE1NeXl5eVwiLFxyXG4gICAgICAgIFwiZGQvTU0veXlcIixcclxuICAgICAgICBcImRkTU15eVwiLFxyXG4gICAgICAgIFwiZGQvTU1cIixcclxuICAgICAgICBcInl5eXkuZGQuTU1cIixcclxuICAgICAgICBcImRkLk1NLnl5eXlcIixcclxuICAgICAgICBcImRkLk1NLnl5XCIsXHJcbiAgICAgICAgXCJkZC5NTVwiLFxyXG4gICAgICAgIFwieXl5eS1kZC1NTVwiLFxyXG4gICAgICAgIFwiZGQtTU0teXl5eVwiLFxyXG4gICAgICAgIFwiZGQtTU0teXlcIixcclxuICAgICAgICBcImRkLU1NXCIsXHJcbiAgICAgICAgXCJ5eXl5RERtbVwiXHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlciBpbnB1dCBmb3JtYXRzIHRoYXQgd2Ugd2lsbCBwYXJzZSBpbnRvIGEgZGF0ZVxyXG4gICAgICogd2hlbiB0aGUgdXNlcnMgZGF0ZSBmb3JtYXQgcHJlZmVyZW5jZSBoYXMgZGF5IGJlZm9yZSBtb250aC5cclxuICAgICAqIFRvIGJlIHVzZWQgd2l0aCBtb21lbnQuanMuIE1vbWVudCBpZ25vcmVzIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyc1xyXG4gICAgICogc28gZGF0ZXMgbGlrZSAyMDIwLzA5LzEwIHdpbGwgYmUgcGFyc2VkIHRoZSBzYW1lIGFzIDIwMjAtMDktMTBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBtb21lbnREYXRlRmlyc3RQYXJzZUZvcm1hdHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICdELU0nLFxyXG4gICAgICAgICdERC1NTScsXHJcbiAgICAgICAgJ0QtTS1ZWScsXHJcbiAgICAgICAgJ0RELU1NLVlZJyxcclxuICAgICAgICAnRERNTVlZWVknLFxyXG4gICAgICAgICdZWVlZTU1ERCcsXHJcbiAgICAgICAgJ1lZWVktTU0tREQnLFxyXG4gICAgICAgICdERC1NTS1ZWVlZJ1xyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdHMgdXNlZCB0byBwYXJzZSBkYXRlcyB0aGF0IGFyZSBpbiB0aGUgbWVkaXVtIG9yIGxvbmcgZm9ybWF0IGJ5IG1vbWVudCBqcy5cclxuICAgICAqIFRoZXNlIGFyZSBzaGFyZWQgYnkgZGF0ZS1maXJzdCBhbmQgbW9udGgtZmlyc3QgZGF0ZSBmb3JtYXRzLiBUaGUgZGF0ZSBjYW4ndCBiZVxyXG4gICAgICogcGFyc2VkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHRoZSBkYXRlIHByZWZlcmVuY2Ugc2luY2UgdGhlIG1vbnRoIGlzIG5vdCBudW1lcmljLlxyXG4gICAgICogVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0IG9mIGZvcm1hdHMsIGJ1dCBpdCBzaG91bGQgY292ZXIgbW9zdCBjb21tb24gZm9ybWF0cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBtb21lbnRNZWRBbmRMb25nRGF0ZUZvcm1hdHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICdERCBNTU0nLFxyXG4gICAgICAgICdNTU0gREQnLFxyXG4gICAgICAgICdERCBNTU0gWVknLFxyXG4gICAgICAgICdERCBNTU0gWVlZWScsXHJcbiAgICAgICAgJ0REIE1NTU0gWVlZWScsXHJcbiAgICAgICAgJ01NTSBELCBZWScsXHJcbiAgICAgICAgJ01NTSBELCBZWVlZJyxcclxuICAgICAgICAnTU1NIERELCBZWVlZJyxcclxuICAgICAgICAnTU1NTSBELCBZWVlZJyxcclxuICAgICAgICAnTU1NTSBERCwgWVlZWScsXHJcbiAgICAgICAgJ01NTSBZWScsXHJcbiAgICAgICAgJ01NTSBZWVlZJyxcclxuICAgICAgICAnTU1NTSBZWVlZJyxcclxuICAgICAgICAnTU1NLCBZWScsXHJcbiAgICAgICAgJ01NTSwgWVlZWScsXHJcbiAgICAgICAgJ01NTU0sIFlZWVknLFxyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCB0byBkaXNwbGF5IHRoZSB0aW1lIHBvcnRpb24gb2YgYSBkYXRldGltZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHRpbWVGb3JtYXQ6IHN0cmluZyA9ICdISDptbTpzcyc7XHJcblxyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTUVUSE9EU1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgQHNlZSBkYXRlIGlzIGVxdWFsIHRvIHRoZSBAc2VlIGVuZE9mVGltZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzRW5kT2ZUaW1lKGRhdGU6IERhdGUgfCBtb21lbnQuTW9tZW50IHwgc3RyaW5nLCB0aW1lWm9uZU9mZnNldDogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZW5kT2ZUaW1lID0gdGltZVpvbmVPZmZzZXQgPyB0aGlzLmVuZE9mVGltZVVUQyA6IHRoaXMuZW5kT2ZUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZURheShkYXRlLCBlbmRPZlRpbWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmUgdHdvIGRhdGVzIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSB5ZWFyLCBtb250aCwgYW5kIGRheSAodGltZSBpcyBpZ25vcmVkKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBpc1NhbWVEYXkoZGF0ZTE6IERhdGUgfCBtb21lbnQuTW9tZW50IHwgc3RyaW5nLCBkYXRlMjogRGF0ZSB8IG1vbWVudC5Nb21lbnQgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUxKS5pc1NhbWUobW9tZW50KGRhdGUyKSwgJ2RheScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBwYXJzZSBmb3JtYXRzIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRlIGZvcm1hdC4gSWYgbm8gZGF0ZSBmb3JtYXQgaXNcclxuICAgICAqIGdpdmVuLCBvciB3ZSBkb24ndCByZWNvZ25pemUgdGhlIGZvcm1hdCwgcmV0dXJuIHRoZSBtb250aCBmaXJzdCBwYXJzZSBmb3JtYXRzLlxyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UGFyc2VGb3JtYXRzKGRhdGVGb3JtYXQ/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGxldCBtYXAgPSB7XHJcbiAgICAgICAgICAgICdNTS9ERC9ZWVlZJzogdGhpcy5tb250aEZpcnN0UGFyc2VGb3JtYXRzLFxyXG4gICAgICAgICAgICAnTU0tREQtWVlZWSc6IHRoaXMubW9udGhGaXJzdFBhcnNlRm9ybWF0cyxcclxuICAgICAgICAgICAgJ0REL01NL1lZWVknOiB0aGlzLmRhdGVGaXJzdFBhcnNlRm9ybWF0cyxcclxuICAgICAgICAgICAgJ0RELU1NLVlZWVknOiB0aGlzLmRhdGVGaXJzdFBhcnNlRm9ybWF0cyxcclxuICAgICAgICAgICAgJ1lZWVkvTU0vREQnOiB0aGlzLm1vbnRoRmlyc3RQYXJzZUZvcm1hdHMsXHJcbiAgICAgICAgICAgICdZWVlZLU1NLUREJzogdGhpcy5tb250aEZpcnN0UGFyc2VGb3JtYXRzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGVGb3JtYXQgPyBtYXBbZGF0ZUZvcm1hdF0gOiB0aGlzLm1vbnRoRmlyc3RQYXJzZUZvcm1hdHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIG1vbWVudCBwYXJzZSBmb3JtYXRzIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRlIGZvcm1hdC4gSWYgbm8gZGF0ZSBmb3JtYXQgaXNcclxuICAgICAqIGdpdmVuLCBvciB3ZSBkb24ndCByZWNvZ25pemUgdGhlIGZvcm1hdCwgcmV0dXJuIHRoZSBtb250aCBmaXJzdCBwYXJzZSBmb3JtYXRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE1vbWVudFBhcnNlRm9ybWF0cyhkYXRlRm9ybWF0Pzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBsZXQgbWFwID0ge1xyXG4gICAgICAgICAgICAnTU0vREQvWVlZWSc6IFsuLi50aGlzLm1vbWVudE1vbnRoRmlyc3RQYXJzZUZvcm1hdHMsIC4uLnRoaXMubW9tZW50TWVkQW5kTG9uZ0RhdGVGb3JtYXRzXSxcclxuICAgICAgICAgICAgJ01NLURELVlZWVknOiBbLi4udGhpcy5tb21lbnRNb250aEZpcnN0UGFyc2VGb3JtYXRzLCAuLi50aGlzLm1vbWVudE1lZEFuZExvbmdEYXRlRm9ybWF0c10sXHJcbiAgICAgICAgICAgICdERC9NTS9ZWVlZJzogWy4uLnRoaXMubW9tZW50RGF0ZUZpcnN0UGFyc2VGb3JtYXRzLCAuLi50aGlzLm1vbWVudE1lZEFuZExvbmdEYXRlRm9ybWF0c10sXHJcbiAgICAgICAgICAgICdERC1NTS1ZWVlZJzogWy4uLnRoaXMubW9tZW50RGF0ZUZpcnN0UGFyc2VGb3JtYXRzLCAuLi50aGlzLm1vbWVudE1lZEFuZExvbmdEYXRlRm9ybWF0c10sXHJcbiAgICAgICAgICAgICdZWVlZL01NL0REJzogWy4uLnRoaXMubW9tZW50TW9udGhGaXJzdFBhcnNlRm9ybWF0cywgLi4udGhpcy5tb21lbnRNZWRBbmRMb25nRGF0ZUZvcm1hdHNdLFxyXG4gICAgICAgICAgICAnWVlZWS1NTS1ERCc6IFsuLi50aGlzLm1vbWVudE1vbnRoRmlyc3RQYXJzZUZvcm1hdHMsIC4uLnRoaXMubW9tZW50TWVkQW5kTG9uZ0RhdGVGb3JtYXRzXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRlRm9ybWF0ID8gbWFwW2RhdGVGb3JtYXRdIDogdGhpcy5tb21lbnRNb250aEZpcnN0UGFyc2VGb3JtYXRzO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVsYXRpb25zaGlwIHN0YXJ0IGRhdGUgKGZhdm9yaW5nIGRhdGUgaW4gcGFydGlhbEZvcm1TdGF0ZSBpZiBleGlzdHMpXHJcbiAgICAgKiAqIHJldHVybiBkZWZhdWx0IGFjY291bnQtbWV0ZXIgZWZmZWN0aXZlIGRhdGUgaWYgbm8gc3RhcnQgZGF0ZSBmb3VuZFxyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWNjb3VudE1ldGVyU3RhcnREYXRlKHBhcnRpYWxGb3JtU3RhdGU6IGFueSwgYWNjb3VudE1ldGVyOiB7IHN0YXJ0RGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQgfSk6IERhdGUge1xyXG4gICAgICAgIGxldCBzdGFydERhdGUgPSBwYXJ0aWFsRm9ybVN0YXRlLmVmZmVjdGl2ZUZyb20gfHwgYWNjb3VudE1ldGVyLnN0YXJ0RGF0ZTtcclxuICAgICAgICByZXR1cm4gc3RhcnREYXRlID8gbmV3IERhdGUoc3RhcnREYXRlKSA6IERhdGVUaW1lSGVscGVyLmRlZmF1bHRBY2NvdW50TWV0ZXJFZmZlY3RpdmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVsYXRpb25zaGlwIGVuZCBkYXRlIChmYXZvcmluZyBkYXRlIGluIHBhcnRpYWxGb3JtU3RhdGUgaWYgZXhpc3RzKVxyXG4gICAgICogKiByZXR1cm4gbnVsbCBpZiBubyBzdG9yZWQgZGF0ZSBvciBlbmQgZGF0ZSBpcyAxLzEvMzAwMFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEFjY291bnRNZXRlckVuZERhdGUocGFydGlhbEZvcm1TdGF0ZTogYW55LCBhY2NvdW50TWV0ZXI6IHsgZW5kRGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQgfSk6IERhdGUgfCBudWxsIHtcclxuICAgICAgICBsZXQgZW5kRGF0ZSA9IHBhcnRpYWxGb3JtU3RhdGUuZWZmZWN0aXZlVG8gfHwgYWNjb3VudE1ldGVyLmVuZERhdGU7XHJcbiAgICAgICAgaWYgKGVuZERhdGUgJiYgIURhdGVUaW1lSGVscGVyLmlzRW5kT2ZUaW1lKGVuZERhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlbmREYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBzdGF0aWMgaXNEYXRlQmV0d2VlbihcclxuICAgICAgICBkYXRlOiBEYXRlLCBcclxuICAgICAgICBzdGFydERhdGU/OiBEYXRlIHwgbnVsbCwgXHJcbiAgICAgICAgZW5kRGF0ZT86IERhdGUgfCBudWxsLCBcclxuICAgICAgICBpbmNsdWRlU3RhcnQ/OiBib29sZWFuLCBcclxuICAgICAgICBpbmNsdWRlRW5kPzogYm9vbGVhblxyXG4gICAgKTpib29sZWFuIHtcclxuICAgICAgICBsZXQgaW5jbHVzaXZpdHk6ICcoKScgfCAnWyknIHwgJyhdJyB8ICdbXScgPSAnKCknO1xyXG4gICAgICAgIGlmIChpbmNsdWRlU3RhcnQgJiYgaW5jbHVkZUVuZCApIHtcclxuICAgICAgICAgICAgaW5jbHVzaXZpdHkgPSAnW10nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZVN0YXJ0KSB7XHJcbiAgICAgICAgICAgIGluY2x1c2l2aXR5ID0gJ1spJztcclxuICAgICAgICB9IGVsc2UgaWYgKGluY2x1ZGVFbmQpIHtcclxuICAgICAgICAgICAgaW5jbHVzaXZpdHkgPSAnKF0nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgYSBzdGFydCBkYXRlIGlzIG5vdCBwcm92aWRlLCB3ZSdsbCB1c2Ugb3VyIGJlZ2lubmluZyBvZiB0aW1lIGluc3RlYWRcclxuICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUgfHwgdGhpcy5iZWdpbm5pbmdPZlRpbWU7XHJcblxyXG4gICAgICAgIC8vIElmIGFuIGVuZCBkYXRlIGlzIG5vdCBwcm92aWRlZCwgd2UnbGwgdXNlIG91ciBlbmQgb2YgdGltZSBpbnN0ZWFkXHJcbiAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUgfHwgdGhpcy5lbmRPZlRpbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZSkuaXNCZXR3ZWVuKHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgJ2RheScsIGluY2x1c2l2aXR5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHN0cmluZ1RvRGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgICBpZiAoZGF0ZVN0cmluZyA9PT0gbnVsbCB8fCBkYXRlU3RyaW5nID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gZGF0ZVN0cmluZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVTdHJpbmcpLnRvRGF0ZSgpO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9XHJcbn0iXX0=
@@ -1,61 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export function isApiError(errorResponse) {
4
- // errorResponse is typed HttpErrorResponse if the api returns an error
5
- if (errorResponse.error && errorResponse.error.hasOwnProperty('status') && errorResponse.error.status.hasOwnProperty('message')) {
6
- return true;
7
- }
8
- // BillCAPture APIs return errors in a different format
9
- if (errorResponse.error && errorResponse.error.hasOwnProperty('Message')) {
10
- return true;
11
- }
12
- return false;
13
- }
14
- export class ErrorService {
15
- constructor() { }
16
- /**
17
- * Parse an error that comes from the API for use inside the forms
18
- * In most cases this isn't required because the error handler will do it automatically,
19
- * but if you need to analyze the error message you can use this to extract it safely.
20
- * NOTE: Because it can be used for comparison the result is not translated. You must translate
21
- * it before providing it to the user.
22
- * @param error The error object from the API
23
- */
24
- parseApiError(errorResponse, unknownErrorDefault) {
25
- if (typeof errorResponse === 'string') {
26
- return errorResponse;
27
- }
28
- // errorResponse is typed HttpErrorResponse if the api returns an error
29
- let apiErrorMessage = unknownErrorDefault || 'DefaultUnknownError_SC';
30
- if (errorResponse && isApiError(errorResponse)) {
31
- try {
32
- apiErrorMessage = errorResponse.error.status?.message || errorResponse.error.Message;
33
- }
34
- catch (error) {
35
- //log the real error to the console (for developers) but just return the generic error to the user
36
- this.logConsoleError(error);
37
- }
38
- }
39
- else {
40
- this.logConsoleError(errorResponse);
41
- }
42
- return apiErrorMessage;
43
- }
44
- /**
45
- * Just a safe wrapper around console.error in case the browser doesn't have one exposed
46
- */
47
- logConsoleError(error) {
48
- if (console && typeof (console.error) === 'function') {
49
- console.error('unknown error:', error);
50
- }
51
- }
52
- }
53
- ErrorService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
54
- ErrorService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ErrorService, providedIn: 'root' });
55
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ErrorService, decorators: [{
56
- type: Injectable,
57
- args: [{
58
- providedIn: 'root'
59
- }]
60
- }], ctorParameters: function () { return []; } });
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlL2Vycm9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxVQUFVLFVBQVUsQ0FBQyxhQUFrQjtJQUMzQyx1RUFBdUU7SUFDdkUsSUFBSSxhQUFhLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUMvSCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsdURBQXVEO0lBQ3ZELElBQUksYUFBYSxDQUFDLEtBQUssSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN4RSxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBS0QsTUFBTSxPQUFPLFlBQVk7SUFFdkIsZ0JBQWdCLENBQUM7SUFFakI7Ozs7Ozs7T0FPRztJQUNJLGFBQWEsQ0FBQyxhQUFrQixFQUFFLG1CQUE0QjtRQUNuRSxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxPQUFPLGFBQWEsQ0FBQztTQUN0QjtRQUVELHVFQUF1RTtRQUN2RSxJQUFJLGVBQWUsR0FBVyxtQkFBbUIsSUFBSSx3QkFBd0IsQ0FBQztRQUU5RSxJQUFJLGFBQWEsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDOUMsSUFBSTtnQkFDRixlQUFlLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ3RGO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2Qsa0dBQWtHO2dCQUNsRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdCO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDckM7UUFFRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlLENBQUMsS0FBVTtRQUMvQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLFVBQVUsRUFBRTtZQUNwRCxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQzs7eUdBekNVLFlBQVk7NkdBQVosWUFBWSxjQUZYLE1BQU07MkZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXBpRXJyb3IoZXJyb3JSZXNwb25zZTogYW55KTogYm9vbGVhbiB7XHJcbiAgLy8gZXJyb3JSZXNwb25zZSBpcyB0eXBlZCBIdHRwRXJyb3JSZXNwb25zZSBpZiB0aGUgYXBpIHJldHVybnMgYW4gZXJyb3JcclxuICBpZiAoZXJyb3JSZXNwb25zZS5lcnJvciAmJiBlcnJvclJlc3BvbnNlLmVycm9yLmhhc093blByb3BlcnR5KCdzdGF0dXMnKSAmJiBlcnJvclJlc3BvbnNlLmVycm9yLnN0YXR1cy5oYXNPd25Qcm9wZXJ0eSgnbWVzc2FnZScpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIEJpbGxDQVB0dXJlIEFQSXMgcmV0dXJuIGVycm9ycyBpbiBhIGRpZmZlcmVudCBmb3JtYXRcclxuICBpZiAoZXJyb3JSZXNwb25zZS5lcnJvciAmJiBlcnJvclJlc3BvbnNlLmVycm9yLmhhc093blByb3BlcnR5KCdNZXNzYWdlJykpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcnJvclNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhbiBlcnJvciB0aGF0IGNvbWVzIGZyb20gdGhlIEFQSSBmb3IgdXNlIGluc2lkZSB0aGUgZm9ybXNcclxuICAgKiBJbiBtb3N0IGNhc2VzIHRoaXMgaXNuJ3QgcmVxdWlyZWQgYmVjYXVzZSB0aGUgZXJyb3IgaGFuZGxlciB3aWxsIGRvIGl0IGF1dG9tYXRpY2FsbHksXHJcbiAgICogYnV0IGlmIHlvdSBuZWVkIHRvIGFuYWx5emUgdGhlIGVycm9yIG1lc3NhZ2UgeW91IGNhbiB1c2UgdGhpcyB0byBleHRyYWN0IGl0IHNhZmVseS5cclxuICAgKiBOT1RFOiBCZWNhdXNlIGl0IGNhbiBiZSB1c2VkIGZvciBjb21wYXJpc29uIHRoZSByZXN1bHQgaXMgbm90IHRyYW5zbGF0ZWQuIFlvdSBtdXN0IHRyYW5zbGF0ZVxyXG4gICAqIGl0IGJlZm9yZSBwcm92aWRpbmcgaXQgdG8gdGhlIHVzZXIuXHJcbiAgICogQHBhcmFtIGVycm9yIFRoZSBlcnJvciBvYmplY3QgZnJvbSB0aGUgQVBJXHJcbiAgICovXHJcbiAgcHVibGljIHBhcnNlQXBpRXJyb3IoZXJyb3JSZXNwb25zZTogYW55LCB1bmtub3duRXJyb3JEZWZhdWx0Pzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgZXJyb3JSZXNwb25zZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIGVycm9yUmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXJyb3JSZXNwb25zZSBpcyB0eXBlZCBIdHRwRXJyb3JSZXNwb25zZSBpZiB0aGUgYXBpIHJldHVybnMgYW4gZXJyb3JcclxuICAgIGxldCBhcGlFcnJvck1lc3NhZ2U6IHN0cmluZyA9IHVua25vd25FcnJvckRlZmF1bHQgfHwgJ0RlZmF1bHRVbmtub3duRXJyb3JfU0MnO1xyXG5cclxuICAgIGlmIChlcnJvclJlc3BvbnNlICYmIGlzQXBpRXJyb3IoZXJyb3JSZXNwb25zZSkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhcGlFcnJvck1lc3NhZ2UgPSBlcnJvclJlc3BvbnNlLmVycm9yLnN0YXR1cz8ubWVzc2FnZSB8fCBlcnJvclJlc3BvbnNlLmVycm9yLk1lc3NhZ2U7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgLy9sb2cgdGhlIHJlYWwgZXJyb3IgdG8gdGhlIGNvbnNvbGUgKGZvciBkZXZlbG9wZXJzKSBidXQganVzdCByZXR1cm4gdGhlIGdlbmVyaWMgZXJyb3IgdG8gdGhlIHVzZXJcclxuICAgICAgICB0aGlzLmxvZ0NvbnNvbGVFcnJvcihlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9nQ29uc29sZUVycm9yKGVycm9yUmVzcG9uc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhcGlFcnJvck1lc3NhZ2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBKdXN0IGEgc2FmZSB3cmFwcGVyIGFyb3VuZCBjb25zb2xlLmVycm9yIGluIGNhc2UgdGhlIGJyb3dzZXIgZG9lc24ndCBoYXZlIG9uZSBleHBvc2VkXHJcbiAgICovXHJcbiAgcHVibGljIGxvZ0NvbnNvbGVFcnJvcihlcnJvcjogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoY29uc29sZSAmJiB0eXBlb2YgKGNvbnNvbGUuZXJyb3IpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ3Vua25vd24gZXJyb3I6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,111 +0,0 @@
1
- import { convertToParamMap, NavigationStart, NavigationEnd } from "@angular/router";
2
- import { Injectable } from "@angular/core";
3
- import { filter } from 'rxjs/operators';
4
- import * as i0 from "@angular/core";
5
- export class RouterHelper {
6
- /**
7
- * Traverses the pathFromRoot and combines all of the route parameters into
8
- * one Params object and returns it
9
- * @param route - ActivatedRouteSnapshot
10
- * @see https://angular.io/api/router/ActivatedRouteSnapshot#pathFromRoot
11
- */
12
- getFullRouteParams(route) {
13
- const params = {};
14
- route.pathFromRoot.forEach(snapshot => {
15
- snapshot.paramMap.keys.forEach(key => {
16
- params[key] = snapshot.paramMap.get(key);
17
- });
18
- });
19
- return params;
20
- }
21
- /**
22
- * Traverses the pathFromRoot and combines all of the route paramters into
23
- * one ParamMap and returns it
24
- * @param route - ActivatedRouteSnapshot
25
- * @see https://angular.io/api/router/ActivatedRouteSnapshot#pathFromRoot
26
- */
27
- getFullRouteParamMap(route) {
28
- const params = this.getFullRouteParams(route);
29
- return convertToParamMap(params);
30
- }
31
- /**
32
- * Traverses the pathFromRoot and combines all of the route paths into
33
- * a url from root to the provided activated route.
34
- * @param route - ActivatedRouteSnapshot
35
- * @see https://angular.io/api/router/ActivatedRouteSnapshot#pathFromRoot
36
- */
37
- serializeUrlFromRoot(route) {
38
- let url = '';
39
- const paths = [];
40
- route.pathFromRoot.forEach(r => {
41
- r.url.forEach(s => {
42
- paths.push(s.path);
43
- });
44
- });
45
- url = paths.join('/');
46
- return url;
47
- }
48
- /**
49
- * Look at the first two child activated routes of a page route and combine the
50
- * url segments of each. These will contain the paths for the current view that
51
- * correspond to a primary and secondary tab. Assumes the URL structure is
52
- * /{page}/{primary}/{secondary}
53
- * @param pageRoute - The ActivatedRoute for the 'page' portion of the url. E.g. meter/:meterId
54
- */
55
- getViewUrlSegments(pageRoute) {
56
- let segments = [];
57
- const primaryViewRoute = pageRoute.firstChild;
58
- if (primaryViewRoute) {
59
- segments = segments.concat(primaryViewRoute.snapshot.url);
60
- const secondaryViewRoute = primaryViewRoute.firstChild;
61
- if (secondaryViewRoute) {
62
- segments = segments.concat(secondaryViewRoute.snapshot.url);
63
- }
64
- }
65
- return segments;
66
- }
67
- /**
68
- * Returns the 'last firstChild' of the provided route tree
69
- * @param route - ActivatedRoute
70
- */
71
- getLastRouteDescendant(route) {
72
- while (route.firstChild) {
73
- route = route.firstChild;
74
- }
75
- return route;
76
- }
77
- /**
78
- * Wrap code that will force the user to navigate based on some network call in a piece of logic that will cancel the action if there is another
79
- * navigation event while we wait for the call to complete. This is a common problem with trying to pick a default child when a user switches between modules.
80
- * @param asyncCall The async code to execute while watching for router navigation events. This code always executed and the result is returned
81
- * @param doIfNoNavigation The code to execute only if no navigation events happen while asyncCall is executing. It is passed the result of the async call
82
- * @param router The router instance to listen for navigation events.
83
- */
84
- async executeWithNavigationWatcher(asyncCall, doIfNoNavigation, router) {
85
- let eventOccurred = false;
86
- let subscription = router.events.pipe(filter(e => e instanceof NavigationStart || e instanceof NavigationEnd)).subscribe(() => {
87
- eventOccurred = true;
88
- });
89
- try {
90
- let result = await asyncCall();
91
- if (!eventOccurred) {
92
- await doIfNoNavigation(result);
93
- }
94
- subscription.unsubscribe();
95
- return result;
96
- }
97
- catch (error) {
98
- subscription.unsubscribe();
99
- throw error;
100
- }
101
- }
102
- }
103
- RouterHelper.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RouterHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
104
- RouterHelper.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RouterHelper, providedIn: 'root' });
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: RouterHelper, decorators: [{
106
- type: Injectable,
107
- args: [{
108
- providedIn: 'root'
109
- }]
110
- }] });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUvcm91dGVyLWhlbHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0MsaUJBQWlCLEVBQWdELGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsSyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLeEMsTUFBTSxPQUFPLFlBQVk7SUFDdkI7Ozs7O09BS0c7SUFDSSxrQkFBa0IsQ0FBQyxLQUE2QjtRQUNyRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLG9CQUFvQixDQUFDLEtBQTZCO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLG9CQUFvQixDQUFDLEtBQTZCO1FBQ3ZELElBQUksR0FBRyxHQUFVLEVBQUUsQ0FBQztRQUNwQixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0IsQ0FBQyxTQUF5QjtRQUNqRCxJQUFJLFFBQVEsR0FBaUIsRUFBRSxDQUFDO1FBRWhDLE1BQU0sZ0JBQWdCLEdBQTBCLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDckUsSUFBSSxnQkFBZ0IsRUFBRTtZQUNwQixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUQsTUFBTSxrQkFBa0IsR0FBMEIsZ0JBQWdCLENBQUMsVUFBVSxDQUFDO1lBQzlFLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3RCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM3RDtTQUNGO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHNCQUFzQixDQUFDLEtBQXFCO1FBQ2pELE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUN2QixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBSSxTQUEyQixFQUFFLGdCQUE4QyxFQUFFLE1BQWM7UUFDdEksSUFBSSxhQUFhLEdBQVksS0FBSyxDQUFDO1FBQ25DLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksZUFBZSxJQUFJLENBQUMsWUFBWSxhQUFhLENBQUMsQ0FDeEUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2YsYUFBYSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUk7WUFDRixJQUFJLE1BQU0sR0FBRyxNQUFNLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ2xCLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEM7WUFDRCxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsT0FBTyxNQUFNLENBQUM7U0FFZjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sS0FBSyxDQUFDO1NBQ2I7SUFDSCxDQUFDOzt5R0ExR1UsWUFBWTs2R0FBWixZQUFZLGNBRlgsTUFBTTsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhcmFtcywgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgY29udmVydFRvUGFyYW1NYXAsIFBhcmFtTWFwLCBBY3RpdmF0ZWRSb3V0ZSwgVXJsU2VnbWVudCwgUm91dGVyLCBOYXZpZ2F0aW9uU3RhcnQsIE5hdmlnYXRpb25FbmQgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb3V0ZXJIZWxwZXIge1xyXG4gIC8qKlxyXG4gICAqIFRyYXZlcnNlcyB0aGUgcGF0aEZyb21Sb290IGFuZCBjb21iaW5lcyBhbGwgb2YgdGhlIHJvdXRlIHBhcmFtZXRlcnMgaW50b1xyXG4gICAqIG9uZSBQYXJhbXMgb2JqZWN0IGFuZCByZXR1cm5zIGl0XHJcbiAgICogQHBhcmFtIHJvdXRlIC0gQWN0aXZhdGVkUm91dGVTbmFwc2hvdFxyXG4gICAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9yb3V0ZXIvQWN0aXZhdGVkUm91dGVTbmFwc2hvdCNwYXRoRnJvbVJvb3RcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0RnVsbFJvdXRlUGFyYW1zKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogUGFyYW1zIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xyXG4gICAgcm91dGUucGF0aEZyb21Sb290LmZvckVhY2goc25hcHNob3QgPT4ge1xyXG4gICAgICBzbmFwc2hvdC5wYXJhbU1hcC5rZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBwYXJhbXNba2V5XSA9IHNuYXBzaG90LnBhcmFtTWFwLmdldChrZXkpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYXZlcnNlcyB0aGUgcGF0aEZyb21Sb290IGFuZCBjb21iaW5lcyBhbGwgb2YgdGhlIHJvdXRlIHBhcmFtdGVycyBpbnRvXHJcbiAgICogb25lIFBhcmFtTWFwIGFuZCByZXR1cm5zIGl0XHJcbiAgICogQHBhcmFtIHJvdXRlIC0gQWN0aXZhdGVkUm91dGVTbmFwc2hvdFxyXG4gICAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9yb3V0ZXIvQWN0aXZhdGVkUm91dGVTbmFwc2hvdCNwYXRoRnJvbVJvb3RcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0RnVsbFJvdXRlUGFyYW1NYXAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBQYXJhbU1hcCB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldEZ1bGxSb3V0ZVBhcmFtcyhyb3V0ZSk7XHJcbiAgICByZXR1cm4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogVHJhdmVyc2VzIHRoZSBwYXRoRnJvbVJvb3QgYW5kIGNvbWJpbmVzIGFsbCBvZiB0aGUgcm91dGUgcGF0aHMgaW50b1xyXG4gICAqIGEgdXJsIGZyb20gcm9vdCB0byB0aGUgcHJvdmlkZWQgYWN0aXZhdGVkIHJvdXRlLlxyXG4gICAqIEBwYXJhbSByb3V0ZSAtIEFjdGl2YXRlZFJvdXRlU25hcHNob3RcclxuICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvcm91dGVyL0FjdGl2YXRlZFJvdXRlU25hcHNob3QjcGF0aEZyb21Sb290XHJcbiAgICovXHJcbiAgcHVibGljIHNlcmlhbGl6ZVVybEZyb21Sb290KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogc3RyaW5nIHtcclxuICAgIGxldCB1cmw6c3RyaW5nID0gJyc7XHJcbiAgICBjb25zdCBwYXRoczogc3RyaW5nW10gPSBbXTtcclxuICAgIHJvdXRlLnBhdGhGcm9tUm9vdC5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICByLnVybC5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgIHBhdGhzLnB1c2gocy5wYXRoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHVybCA9IHBhdGhzLmpvaW4oJy8nKTtcclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb29rIGF0IHRoZSBmaXJzdCB0d28gY2hpbGQgYWN0aXZhdGVkIHJvdXRlcyBvZiBhIHBhZ2Ugcm91dGUgYW5kIGNvbWJpbmUgdGhlIFxyXG4gICAqIHVybCBzZWdtZW50cyBvZiBlYWNoLiBUaGVzZSB3aWxsIGNvbnRhaW4gdGhlIHBhdGhzIGZvciB0aGUgY3VycmVudCB2aWV3IHRoYXRcclxuICAgKiBjb3JyZXNwb25kIHRvIGEgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IHRhYi4gQXNzdW1lcyB0aGUgVVJMIHN0cnVjdHVyZSBpcyBcclxuICAgKiAve3BhZ2V9L3twcmltYXJ5fS97c2Vjb25kYXJ5fVxyXG4gICAqIEBwYXJhbSBwYWdlUm91dGUgLSBUaGUgQWN0aXZhdGVkUm91dGUgZm9yIHRoZSAncGFnZScgcG9ydGlvbiBvZiB0aGUgdXJsLiBFLmcuIG1ldGVyLzptZXRlcklkXHJcbiAgICovXHJcbiAgcHVibGljIGdldFZpZXdVcmxTZWdtZW50cyhwYWdlUm91dGU6IEFjdGl2YXRlZFJvdXRlKTogVXJsU2VnbWVudFtdIHtcclxuICAgIGxldCBzZWdtZW50czogVXJsU2VnbWVudFtdID0gW107XHJcblxyXG4gICAgY29uc3QgcHJpbWFyeVZpZXdSb3V0ZTogQWN0aXZhdGVkUm91dGUgfCBudWxsID0gcGFnZVJvdXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICBpZiAocHJpbWFyeVZpZXdSb3V0ZSkge1xyXG4gICAgICBzZWdtZW50cyA9IHNlZ21lbnRzLmNvbmNhdChwcmltYXJ5Vmlld1JvdXRlLnNuYXBzaG90LnVybCk7XHJcbiAgICAgIGNvbnN0IHNlY29uZGFyeVZpZXdSb3V0ZTogQWN0aXZhdGVkUm91dGUgfCBudWxsID0gcHJpbWFyeVZpZXdSb3V0ZS5maXJzdENoaWxkO1xyXG4gICAgICBpZiAoc2Vjb25kYXJ5Vmlld1JvdXRlKSB7XHJcbiAgICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy5jb25jYXQoc2Vjb25kYXJ5Vmlld1JvdXRlLnNuYXBzaG90LnVybCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VnbWVudHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSAnbGFzdCBmaXJzdENoaWxkJyBvZiB0aGUgcHJvdmlkZWQgcm91dGUgdHJlZVxyXG4gICAqIEBwYXJhbSByb3V0ZSAtIEFjdGl2YXRlZFJvdXRlXHJcbiAgICovXHJcbiAgcHVibGljIGdldExhc3RSb3V0ZURlc2NlbmRhbnQocm91dGU6IEFjdGl2YXRlZFJvdXRlKTogQWN0aXZhdGVkUm91dGUge1xyXG4gICAgd2hpbGUgKHJvdXRlLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgcm91dGUgPSByb3V0ZS5maXJzdENoaWxkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV3JhcCBjb2RlIHRoYXQgd2lsbCBmb3JjZSB0aGUgdXNlciB0byBuYXZpZ2F0ZSBiYXNlZCBvbiBzb21lIG5ldHdvcmsgY2FsbCBpbiBhIHBpZWNlIG9mIGxvZ2ljIHRoYXQgd2lsbCBjYW5jZWwgdGhlIGFjdGlvbiBpZiB0aGVyZSBpcyBhbm90aGVyXHJcbiAgICogbmF2aWdhdGlvbiBldmVudCB3aGlsZSB3ZSB3YWl0IGZvciB0aGUgY2FsbCB0byBjb21wbGV0ZS4gVGhpcyBpcyBhIGNvbW1vbiBwcm9ibGVtIHdpdGggdHJ5aW5nIHRvIHBpY2sgYSBkZWZhdWx0IGNoaWxkIHdoZW4gYSB1c2VyIHN3aXRjaGVzIGJldHdlZW4gbW9kdWxlcy5cclxuICAgKiBAcGFyYW0gYXN5bmNDYWxsIFRoZSBhc3luYyBjb2RlIHRvIGV4ZWN1dGUgd2hpbGUgd2F0Y2hpbmcgZm9yIHJvdXRlciBuYXZpZ2F0aW9uIGV2ZW50cy4gVGhpcyBjb2RlIGFsd2F5cyBleGVjdXRlZCBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZFxyXG4gICAqIEBwYXJhbSBkb0lmTm9OYXZpZ2F0aW9uIFRoZSBjb2RlIHRvIGV4ZWN1dGUgb25seSBpZiBubyBuYXZpZ2F0aW9uIGV2ZW50cyBoYXBwZW4gd2hpbGUgYXN5bmNDYWxsIGlzIGV4ZWN1dGluZy4gSXQgaXMgcGFzc2VkIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jIGNhbGxcclxuICAgKiBAcGFyYW0gcm91dGVyIFRoZSByb3V0ZXIgaW5zdGFuY2UgdG8gbGlzdGVuIGZvciBuYXZpZ2F0aW9uIGV2ZW50cy5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZXhlY3V0ZVdpdGhOYXZpZ2F0aW9uV2F0Y2hlcjxUPihhc3luY0NhbGw6ICgpID0+IFByb21pc2U8VD4sIGRvSWZOb05hdmlnYXRpb246IChyZXN1bHQ6IFQpID0+IFByb21pc2U8dm9pZD4sIHJvdXRlcjogUm91dGVyKTogUHJvbWlzZTxUPiB7XHJcbiAgICBsZXQgZXZlbnRPY2N1cnJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHN1YnNjcmlwdGlvbiA9IHJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCB8fCBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgZXZlbnRPY2N1cnJlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmNDYWxsKCk7XHJcbiAgICAgIGlmICghZXZlbnRPY2N1cnJlZCkge1xyXG4gICAgICAgIGF3YWl0IGRvSWZOb05hdmlnYXRpb24ocmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,89 +0,0 @@
1
- import { Injectable } from "@angular/core";
2
- import * as i0 from "@angular/core";
3
- export class ScrollService {
4
- constructor() { }
5
- /**
6
- * Given a container and the target element to scroll to, we will set the scroll top on
7
- * the container to bring the target into view.
8
- *
9
- * @param scrollContainerSelector A valid CSS selector string for the scroll container.
10
- * @param targetElementSelector A valid CSS selector string for the target element.
11
- * @param topPadding The amount of space to leave above the target
12
- * to keep it from being pinned to the top of the scrollContainer. Defaults
13
- * to 32px, the default height of a menu item.
14
- */
15
- scrollToItem(scrollContainerSelector, targetElementSelector, topPadding = 32) {
16
- let scrollContainer = document.querySelector(scrollContainerSelector);
17
- if (!scrollContainer) {
18
- return;
19
- }
20
- let targetElement = scrollContainer.querySelector(targetElementSelector);
21
- if (!targetElement) {
22
- return;
23
- }
24
- let targetRect = targetElement.getBoundingClientRect();
25
- let containerRect = scrollContainer.getBoundingClientRect();
26
- // Only scroll if the target is outside of the view bounds of the container
27
- if (targetRect.bottom > containerRect.bottom || targetRect.top < containerRect.top) {
28
- scrollContainer.scrollTop =
29
- (targetRect.top - containerRect.top) + scrollContainer.scrollTop - topPadding;
30
- }
31
- }
32
- /**
33
- * Return the value of the scrollTop property for an HTMLElement that matches the selector
34
- * @param scrollContainerSelector A valid CSS selector
35
- */
36
- getCurrentScrollPosition(scrollContainerSelector) {
37
- let scrollContainer = document.querySelector(scrollContainerSelector);
38
- if (scrollContainer) {
39
- return scrollContainer.scrollTop;
40
- }
41
- else {
42
- console.error(`Scroll container '${scrollContainerSelector}' does not exist.`);
43
- return 0;
44
- }
45
- }
46
- /**
47
- * Set the scrollTop of an HTMLElement that matches the selector to a specific position
48
- * @param scrollContainerSelector A valid CSS selector
49
- * @param position
50
- */
51
- scrollToPosition(scrollContainerSelector, position) {
52
- let scrollContainer = document.querySelector(scrollContainerSelector);
53
- if (scrollContainer) {
54
- scrollContainer.scrollTop = position;
55
- }
56
- else {
57
- console.error(`Scroll container '${scrollContainerSelector}' does not exist.`);
58
- }
59
- }
60
- /**
61
- * Given a container and the target element to scroll to, we will set the scroll top on
62
- * the container to bring the target into view, with the item in the center of the scroll container.
63
- *
64
- * @param scrollContainerSelector A valid CSS selector string for the scroll container.
65
- * @param targetElementSelector A valid CSS selector string for the target element.
66
- */
67
- scrollItemCentered(scrollContainerSelector, targetElementSelector) {
68
- try {
69
- let scrollContainer = document.querySelector(scrollContainerSelector);
70
- if (scrollContainer) {
71
- let containerHeight = scrollContainer.getBoundingClientRect().height;
72
- // Pad the top with half of the height of the container to put the target in the middle
73
- this.scrollToItem(scrollContainerSelector, targetElementSelector, containerHeight * .5);
74
- }
75
- }
76
- catch (error) {
77
- console.error(`Error scrolling target into view. Container selector: ${scrollContainerSelector}. Target selector: ${targetElementSelector}`, error);
78
- }
79
- }
80
- }
81
- ScrollService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ScrollService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
82
- ScrollService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ScrollService, providedIn: 'root' });
83
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ScrollService, decorators: [{
84
- type: Injectable,
85
- args: [{
86
- providedIn: 'root'
87
- }]
88
- }], ctorParameters: function () { return []; } });
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS9zY3JvbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sYUFBYTtJQUV0QixnQkFBZ0IsQ0FBQztJQUVqQjs7Ozs7Ozs7O09BU0c7SUFDSSxZQUFZLENBQUMsdUJBQStCLEVBQUUscUJBQTZCLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDL0YsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDbEIsT0FBTztTQUNWO1FBQ0QsSUFBSSxhQUFhLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEIsT0FBTztTQUNWO1FBRUQsSUFBSSxVQUFVLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdkQsSUFBSSxhQUFhLEdBQUcsZUFBZSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFNUQsMkVBQTJFO1FBQzNFLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRTtZQUNoRixlQUFlLENBQUMsU0FBUztnQkFDckIsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztTQUNyRjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSx3QkFBd0IsQ0FBQyx1QkFBK0I7UUFDM0QsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3RFLElBQUksZUFBZSxFQUFFO1lBQ2pCLE9BQU8sZUFBZSxDQUFDLFNBQVMsQ0FBQztTQUNwQzthQUFNO1lBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsdUJBQXVCLG1CQUFtQixDQUFDLENBQUM7WUFDL0UsT0FBTyxDQUFDLENBQUM7U0FDWjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCLENBQUMsdUJBQStCLEVBQUUsUUFBZ0I7UUFDckUsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3RFLElBQUksZUFBZSxFQUFFO1lBQ2pCLGVBQWUsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1NBQ3hDO2FBQU07WUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQix1QkFBdUIsbUJBQW1CLENBQUMsQ0FBQztTQUNsRjtJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0IsQ0FBQyx1QkFBK0IsRUFBRSxxQkFBNkI7UUFDcEYsSUFBSTtZQUNBLElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN0RSxJQUFJLGVBQWUsRUFBRTtnQkFDakIsSUFBSSxlQUFlLEdBQUcsZUFBZSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDO2dCQUNyRSx1RkFBdUY7Z0JBQ3ZGLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFBO2FBQzFGO1NBQ0o7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMseURBQXlELHVCQUF1Qix1QkFBdUIscUJBQXFCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4SjtJQUNMLENBQUM7OzBHQWhGUSxhQUFhOzhHQUFiLGFBQWEsY0FGVixNQUFNOzJGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjcm9sbFNlcnZpY2Uge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHaXZlbiBhIGNvbnRhaW5lciBhbmQgdGhlIHRhcmdldCBlbGVtZW50IHRvIHNjcm9sbCB0bywgd2Ugd2lsbCBzZXQgdGhlIHNjcm9sbCB0b3Agb25cclxuICAgICAqICB0aGUgY29udGFpbmVyIHRvIGJyaW5nIHRoZSB0YXJnZXQgaW50byB2aWV3LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzY3JvbGxDb250YWluZXJTZWxlY3RvciBBIHZhbGlkIENTUyBzZWxlY3RvciBzdHJpbmcgZm9yIHRoZSBzY3JvbGwgY29udGFpbmVyLlxyXG4gICAgICogQHBhcmFtIHRhcmdldEVsZW1lbnRTZWxlY3RvciBBIHZhbGlkIENTUyBzZWxlY3RvciBzdHJpbmcgZm9yIHRoZSB0YXJnZXQgZWxlbWVudC5cclxuICAgICAqIEBwYXJhbSB0b3BQYWRkaW5nIFRoZSBhbW91bnQgb2Ygc3BhY2UgdG8gbGVhdmUgYWJvdmUgdGhlIHRhcmdldFxyXG4gICAgICogdG8ga2VlcCBpdCBmcm9tIGJlaW5nIHBpbm5lZCB0byB0aGUgdG9wIG9mIHRoZSBzY3JvbGxDb250YWluZXIuIERlZmF1bHRzXHJcbiAgICAgKiB0byAzMnB4LCB0aGUgZGVmYXVsdCBoZWlnaHQgb2YgYSBtZW51IGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzY3JvbGxUb0l0ZW0oc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZywgdGFyZ2V0RWxlbWVudFNlbGVjdG9yOiBzdHJpbmcsIHRvcFBhZGRpbmcgPSAzMik6IHZvaWQge1xyXG4gICAgICAgIGxldCBzY3JvbGxDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNjcm9sbENvbnRhaW5lclNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoIXNjcm9sbENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0YXJnZXRFbGVtZW50ID0gc2Nyb2xsQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IodGFyZ2V0RWxlbWVudFNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoIXRhcmdldEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHRhcmdldFJlY3QgPSB0YXJnZXRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGxldCBjb250YWluZXJSZWN0ID0gc2Nyb2xsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICAvLyBPbmx5IHNjcm9sbCBpZiB0aGUgdGFyZ2V0IGlzIG91dHNpZGUgb2YgdGhlIHZpZXcgYm91bmRzIG9mIHRoZSBjb250YWluZXJcclxuICAgICAgICBpZiAodGFyZ2V0UmVjdC5ib3R0b20gPiBjb250YWluZXJSZWN0LmJvdHRvbSB8fCB0YXJnZXRSZWN0LnRvcCA8IGNvbnRhaW5lclJlY3QudG9wKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPVxyXG4gICAgICAgICAgICAgICAgKHRhcmdldFJlY3QudG9wIC0gY29udGFpbmVyUmVjdC50b3ApICsgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCAtIHRvcFBhZGRpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgc2Nyb2xsVG9wIHByb3BlcnR5IGZvciBhbiBIVE1MRWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yXHJcbiAgICAgKiBAcGFyYW0gc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IgQSB2YWxpZCBDU1Mgc2VsZWN0b3JcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEN1cnJlbnRTY3JvbGxQb3NpdGlvbihzY3JvbGxDb250YWluZXJTZWxlY3Rvcjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzY3JvbGxDb250YWluZXJTZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKHNjcm9sbENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICByZXR1cm4gc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTY3JvbGwgY29udGFpbmVyICcke3Njcm9sbENvbnRhaW5lclNlbGVjdG9yfScgZG9lcyBub3QgZXhpc3QuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldCB0aGUgc2Nyb2xsVG9wIG9mIGFuIEhUTUxFbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IgdG8gYSBzcGVjaWZpYyBwb3NpdGlvblxyXG4gICAgICogQHBhcmFtIHNjcm9sbENvbnRhaW5lclNlbGVjdG9yIEEgdmFsaWQgQ1NTIHNlbGVjdG9yXHJcbiAgICAgKiBAcGFyYW0gcG9zaXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNjcm9sbFRvUG9zaXRpb24oc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGxldCBzY3JvbGxDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNjcm9sbENvbnRhaW5lclNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoc2Nyb2xsQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBwb3NpdGlvbjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTY3JvbGwgY29udGFpbmVyICcke3Njcm9sbENvbnRhaW5lclNlbGVjdG9yfScgZG9lcyBub3QgZXhpc3QuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEdpdmVuIGEgY29udGFpbmVyIGFuZCB0aGUgdGFyZ2V0IGVsZW1lbnQgdG8gc2Nyb2xsIHRvLCB3ZSB3aWxsIHNldCB0aGUgc2Nyb2xsIHRvcCBvblxyXG4gICAgICogIHRoZSBjb250YWluZXIgdG8gYnJpbmcgdGhlIHRhcmdldCBpbnRvIHZpZXcsIHdpdGggdGhlIGl0ZW0gaW4gdGhlIGNlbnRlciBvZiB0aGUgc2Nyb2xsIGNvbnRhaW5lci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IgQSB2YWxpZCBDU1Mgc2VsZWN0b3Igc3RyaW5nIGZvciB0aGUgc2Nyb2xsIGNvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50U2VsZWN0b3IgQSB2YWxpZCBDU1Mgc2VsZWN0b3Igc3RyaW5nIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzY3JvbGxJdGVtQ2VudGVyZWQoc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZywgdGFyZ2V0RWxlbWVudFNlbGVjdG9yOiBzdHJpbmcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzY3JvbGxDb250YWluZXJTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIGlmIChzY3JvbGxDb250YWluZXIpIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb250YWluZXJIZWlnaHQgPSBzY3JvbGxDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgLy8gUGFkIHRoZSB0b3Agd2l0aCBoYWxmIG9mIHRoZSBoZWlnaHQgb2YgdGhlIGNvbnRhaW5lciB0byBwdXQgdGhlIHRhcmdldCBpbiB0aGUgbWlkZGxlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvSXRlbShzY3JvbGxDb250YWluZXJTZWxlY3RvciwgdGFyZ2V0RWxlbWVudFNlbGVjdG9yLCBjb250YWluZXJIZWlnaHQgKiAuNSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHNjcm9sbGluZyB0YXJnZXQgaW50byB2aWV3LiBDb250YWluZXIgc2VsZWN0b3I6ICR7c2Nyb2xsQ29udGFpbmVyU2VsZWN0b3J9LiBUYXJnZXQgc2VsZWN0b3I6ICAke3RhcmdldEVsZW1lbnRTZWxlY3Rvcn1gLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==