@energycap/components 0.42.4-esbuild.20250131-1219 → 0.42.4-esbuild.20250131-1256

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 (324) hide show
  1. package/esm2022/energycap-components.mjs +5 -0
  2. package/esm2022/lib/components.module.mjs +423 -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/esm2022/lib/controls/button/copy-button.directive.mjs +28 -0
  7. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +91 -0
  9. package/esm2022/lib/controls/calendar/calendar.component.mjs +248 -0
  10. package/esm2022/lib/controls/calendar/calendar.types.mjs +2 -0
  11. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -0
  13. package/esm2022/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +57 -0
  15. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +62 -0
  16. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +100 -0
  17. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +101 -0
  18. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +76 -0
  19. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +79 -0
  20. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +210 -0
  21. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +81 -0
  22. package/esm2022/lib/controls/date-input/date-input.component.mjs +464 -0
  23. package/esm2022/lib/controls/date-input/date-input.types.mjs +44 -0
  24. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +243 -0
  25. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +261 -0
  26. package/esm2022/lib/controls/form-control/form-control.component.mjs +98 -0
  27. package/esm2022/lib/controls/form-control-base.mjs +151 -0
  28. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  29. package/esm2022/lib/controls/form-group/form-group.component.mjs +261 -0
  30. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +31 -0
  31. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
  32. package/esm2022/lib/controls/link-button/link-button.component.mjs +11 -0
  33. package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
  34. package/esm2022/lib/controls/navigation/link-item.mjs +2 -0
  35. package/esm2022/lib/controls/navigation/nav-group.mjs +39 -0
  36. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  37. package/esm2022/lib/controls/navigation/nav-item.mjs +2 -0
  38. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
  39. package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
  40. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +3 -0
  41. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +82 -0
  42. package/esm2022/lib/controls/select/select.component.mjs +88 -0
  43. package/esm2022/lib/controls/tabs/tabs.component.mjs +47 -0
  44. package/esm2022/lib/controls/textbox/textbox.component.mjs +155 -0
  45. package/esm2022/lib/core/cache.service.mjs +105 -0
  46. package/esm2022/lib/core/custom-validators.mjs +29 -0
  47. package/esm2022/lib/core/date-time-helper.mjs +228 -0
  48. package/esm2022/lib/core/error.service.mjs +61 -0
  49. package/esm2022/lib/core/router-helper.service.mjs +111 -0
  50. package/esm2022/lib/core/scroll.service.mjs +89 -0
  51. package/esm2022/lib/core/telemetry-tracker.service.mjs +16 -0
  52. package/esm2022/lib/core/telemetry.service.mjs +38 -0
  53. package/esm2022/lib/core/validation-message.service.mjs +185 -0
  54. package/esm2022/lib/core/validation-patterns.mjs +31 -0
  55. package/esm2022/lib/core/window.service.mjs +186 -0
  56. package/esm2022/lib/display/app-bar/app-bar.component.mjs +46 -0
  57. package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
  58. package/esm2022/lib/display/avatar/avatar.service.mjs +64 -0
  59. package/esm2022/lib/display/confirm/confirm.component.mjs +168 -0
  60. package/esm2022/lib/display/dialog/dialog-content.mjs +2 -0
  61. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  62. package/esm2022/lib/display/dialog/dialog-types.mjs +77 -0
  63. package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
  64. package/esm2022/lib/display/dialog/dialog.service.mjs +71 -0
  65. package/esm2022/lib/display/help/help-types.mjs +2 -0
  66. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  67. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +54 -0
  68. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  69. package/esm2022/lib/display/item-display/item-display.component.mjs +81 -0
  70. package/esm2022/lib/display/json-display/json-display.component.mjs +47 -0
  71. package/esm2022/lib/display/resizable/resizable-base.mjs +120 -0
  72. package/esm2022/lib/display/resizable/resizable.component.mjs +57 -0
  73. package/esm2022/lib/display/spinner/spinner.component.mjs +12 -0
  74. package/esm2022/lib/display/splash/splash.component.mjs +42 -0
  75. package/esm2022/lib/display/splash/splash.service.mjs +35 -0
  76. package/esm2022/lib/display/table/resizable-column.component.mjs +20 -0
  77. package/esm2022/lib/display/table/resizable-table.directive.mjs +227 -0
  78. package/esm2022/lib/display/table/searchable-table.component.mjs +342 -0
  79. package/esm2022/lib/display/table/table-detail-row.component.mjs +28 -0
  80. package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
  81. package/esm2022/lib/display/table/table-master-header-row.component.mjs +14 -0
  82. package/esm2022/lib/display/table/table-master-row.component.mjs +163 -0
  83. package/esm2022/lib/display/table/table-pagination.component.mjs +155 -0
  84. package/esm2022/lib/display/table/table-selectable-row.component.mjs +235 -0
  85. package/esm2022/lib/display/table/table.component.mjs +249 -0
  86. package/esm2022/lib/display/tags/tag.mjs +18 -0
  87. package/esm2022/lib/display/tags/tags.component.mjs +77 -0
  88. package/esm2022/lib/display/toast/toast/toast.component.mjs +77 -0
  89. package/esm2022/lib/display/toast/toast-types.mjs +8 -0
  90. package/esm2022/lib/display/toast/toast.service.mjs +35 -0
  91. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
  92. package/esm2022/lib/display/tooltip/tooltip.component.mjs +28 -0
  93. package/esm2022/lib/display/tooltip/tooltip.service.mjs +78 -0
  94. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  95. package/esm2022/lib/display/tour/tour-types.mjs +34 -0
  96. package/esm2022/lib/display/tour/tour.component.mjs +398 -0
  97. package/esm2022/lib/display/tour/tour.service.mjs +75 -0
  98. package/esm2022/lib/display/tree/tree.component.mjs +135 -0
  99. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  100. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  101. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  102. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -0
  103. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
  104. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  105. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  106. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  107. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  108. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  109. package/esm2022/lib/shared/display.mjs +6 -0
  110. package/esm2022/lib/shared/form-group.helper.mjs +67 -0
  111. package/esm2022/lib/shared/json-helper.mjs +19 -0
  112. package/esm2022/lib/shared/lodash-helper.mjs +52 -0
  113. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +387 -0
  114. package/esm2022/lib/shared/page/page-statuses.mjs +23 -0
  115. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +23 -0
  116. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
  117. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +17 -0
  118. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +17 -0
  119. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +38 -0
  120. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  121. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +148 -0
  122. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +40 -0
  123. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +57 -0
  124. package/esm2022/lib/shared/user-preference.service.mjs +17 -0
  125. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  126. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -0
  127. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -0
  128. package/esm2022/public-api.mjs +117 -0
  129. package/fesm2022/energycap-components.mjs +13219 -0
  130. package/fesm2022/energycap-components.mjs.map +1 -0
  131. package/index.d.ts +5 -0
  132. package/lib/components.module.d.ts +92 -0
  133. package/lib/controls/banner/banner.component.d.ts +50 -0
  134. package/lib/controls/button/button.component.d.ts +78 -0
  135. package/lib/controls/button/copy-button-base.directive.d.ts +20 -0
  136. package/lib/controls/button/copy-button.directive.d.ts +14 -0
  137. package/lib/controls/button/copy-table-button.directive.d.ts +19 -0
  138. package/lib/controls/calendar/calendar-item.component.d.ts +22 -0
  139. package/lib/controls/calendar/calendar.component.d.ts +52 -0
  140. package/lib/controls/calendar/calendar.types.d.ts +11 -0
  141. package/lib/controls/checkbox/checkbox.component.d.ts +65 -0
  142. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -0
  143. package/lib/controls/combobox/combobox.component.d.ts +418 -0
  144. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -0
  145. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -0
  146. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -0
  147. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -0
  148. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -0
  149. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -0
  150. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -0
  151. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -0
  152. package/lib/controls/date-input/date-input.component.d.ts +115 -0
  153. package/lib/controls/date-input/date-input.types.d.ts +62 -0
  154. package/lib/controls/dropdown/dropdown.component.d.ts +161 -0
  155. package/lib/controls/file-upload/file-upload.component.d.ts +124 -0
  156. package/lib/controls/form-control/form-control.component.d.ts +28 -0
  157. package/lib/controls/form-control-base.d.ts +110 -0
  158. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -0
  159. package/lib/controls/form-group/form-group.component.d.ts +105 -0
  160. package/lib/controls/help-popover/help-popover.component.d.ts +11 -0
  161. package/lib/controls/item-picker/item-picker.component.d.ts +164 -0
  162. package/lib/controls/link-button/link-button.component.d.ts +5 -0
  163. package/lib/controls/menu/menu.component.d.ts +255 -0
  164. package/lib/controls/navigation/link-item.d.ts +32 -0
  165. package/lib/controls/navigation/nav-group.d.ts +18 -0
  166. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -0
  167. package/lib/controls/navigation/nav-item.d.ts +31 -0
  168. package/lib/controls/numericbox/numericbox.component.d.ts +148 -0
  169. package/lib/controls/popover/popover.component.d.ts +51 -0
  170. package/lib/controls/radio-button/radio-button-option.d.ts +19 -0
  171. package/lib/controls/radio-button/radio-button.component.d.ts +53 -0
  172. package/lib/controls/select/select.component.d.ts +44 -0
  173. package/lib/controls/tabs/tabs.component.d.ts +30 -0
  174. package/lib/controls/textbox/textbox.component.d.ts +107 -0
  175. package/lib/core/cache.service.d.ts +33 -0
  176. package/lib/core/custom-validators.d.ts +20 -0
  177. package/lib/core/date-time-helper.d.ts +101 -0
  178. package/lib/core/error.service.d.ts +20 -0
  179. package/lib/core/router-helper.service.d.ts +48 -0
  180. package/lib/core/scroll.service.d.ts +36 -0
  181. package/lib/core/telemetry-tracker.service.d.ts +13 -0
  182. package/lib/core/telemetry.service.d.ts +31 -0
  183. package/lib/core/validation-message.service.d.ts +26 -0
  184. package/lib/core/validation-patterns.d.ts +22 -0
  185. package/lib/core/window.service.d.ts +116 -0
  186. package/lib/display/app-bar/app-bar.component.d.ts +20 -0
  187. package/lib/display/avatar/avatar.component.d.ts +35 -0
  188. package/lib/display/avatar/avatar.service.d.ts +24 -0
  189. package/lib/display/confirm/confirm.component.d.ts +123 -0
  190. package/lib/display/dialog/dialog-content.d.ts +19 -0
  191. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -0
  192. package/lib/display/dialog/dialog-types.d.ts +130 -0
  193. package/lib/display/dialog/dialog.component.d.ts +120 -0
  194. package/lib/display/dialog/dialog.service.d.ts +48 -0
  195. package/lib/display/help/help-types.d.ts +33 -0
  196. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -0
  197. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -0
  198. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -0
  199. package/lib/display/item-display/item-display.component.d.ts +43 -0
  200. package/lib/display/json-display/json-display.component.d.ts +16 -0
  201. package/lib/display/resizable/resizable-base.d.ts +67 -0
  202. package/lib/display/resizable/resizable.component.d.ts +31 -0
  203. package/lib/display/spinner/spinner.component.d.ts +5 -0
  204. package/lib/display/splash/splash.component.d.ts +16 -0
  205. package/lib/display/splash/splash.service.d.ts +22 -0
  206. package/lib/display/table/resizable-column.component.d.ts +10 -0
  207. package/lib/display/table/resizable-table.directive.d.ts +93 -0
  208. package/lib/display/table/searchable-table.component.d.ts +206 -0
  209. package/lib/display/table/table-detail-row.component.d.ts +8 -0
  210. package/lib/display/table/table-locked-column.component.d.ts +20 -0
  211. package/lib/display/table/table-master-header-row.component.d.ts +9 -0
  212. package/lib/display/table/table-master-row.component.d.ts +113 -0
  213. package/lib/display/table/table-pagination.component.d.ts +91 -0
  214. package/lib/display/table/table-selectable-row.component.d.ts +102 -0
  215. package/lib/display/table/table.component.d.ts +121 -0
  216. package/lib/display/tags/tag.d.ts +18 -0
  217. package/lib/display/tags/tags.component.d.ts +48 -0
  218. package/lib/display/toast/toast/toast.component.d.ts +23 -0
  219. package/lib/display/toast/toast-types.d.ts +24 -0
  220. package/lib/display/toast/toast.service.d.ts +20 -0
  221. package/lib/display/toast/toaster/toaster.component.d.ts +35 -0
  222. package/lib/display/tooltip/tooltip.component.d.ts +70 -0
  223. package/lib/display/tooltip/tooltip.service.d.ts +16 -0
  224. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -0
  225. package/lib/display/tour/tour-types.d.ts +70 -0
  226. package/lib/display/tour/tour.component.d.ts +147 -0
  227. package/lib/display/tour/tour.service.d.ts +38 -0
  228. package/lib/display/tree/tree.component.d.ts +75 -0
  229. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -0
  230. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -0
  231. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -0
  232. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -0
  233. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -0
  234. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -0
  235. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -0
  236. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -0
  237. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -0
  238. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -0
  239. package/lib/shared/display.d.ts +42 -0
  240. package/lib/shared/form-group.helper.d.ts +31 -0
  241. package/lib/shared/json-helper.d.ts +7 -0
  242. package/lib/shared/lodash-helper.d.ts +18 -0
  243. package/lib/shared/page/page-base/page-base.component.d.ts +259 -0
  244. package/lib/shared/page/page-statuses.d.ts +13 -0
  245. package/lib/shared/page/page-title/page-title.component.d.ts +9 -0
  246. package/lib/shared/page/page-view/page-view.component.d.ts +102 -0
  247. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -0
  248. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -0
  249. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -0
  250. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -0
  251. package/lib/shared/testing/public-mocks.spec.d.ts +90 -0
  252. package/lib/shared/testing/spy-factory.spec.d.ts +27 -0
  253. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -0
  254. package/lib/shared/user-preference.service.d.ts +13 -0
  255. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -0
  256. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -0
  257. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -0
  258. package/package.json +1 -5
  259. package/public-api.d.ts +113 -0
  260. package/schematics/collection.json +10 -0
  261. package/schematics/rxjs-7-upgrade/index.d.ts +3 -0
  262. package/schematics/rxjs-7-upgrade/index.js +68 -0
  263. package/schematics/rxjs-7-upgrade/index.js.map +1 -0
  264. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -0
  265. package/schematics/rxjs-7-upgrade/schema.js +3 -0
  266. package/schematics/rxjs-7-upgrade/schema.js.map +1 -0
  267. package/schematics/rxjs-7-upgrade/schema.json +14 -0
  268. package/schematics/utilities/typescript.d.ts +7 -0
  269. package/schematics/utilities/typescript.js +42 -0
  270. package/schematics/utilities/typescript.js.map +1 -0
  271. package/schematics/utilities/workspace.d.ts +8 -0
  272. package/schematics/utilities/workspace.js +72 -0
  273. package/schematics/utilities/workspace.js.map +1 -0
  274. package/src/assets/images/email-icon.png +0 -0
  275. package/src/assets/images/email-logo.png +0 -0
  276. package/src/assets/images/favicon-ech.svg +7 -0
  277. package/src/assets/images/favicon-esa.svg +6 -0
  278. package/src/assets/images/favicon-eum.svg +6 -0
  279. package/src/assets/images/favicon.svg +5 -0
  280. package/src/assets/images/icon-carbonhub.svg +10 -0
  281. package/src/assets/images/icon-eum.svg +5 -0
  282. package/src/assets/images/icon-ucp.svg +5 -0
  283. package/src/assets/images/icon-wattics.svg +5 -0
  284. package/src/assets/images/icon.svg +4 -0
  285. package/src/assets/images/logo.svg +3 -0
  286. package/src/assets/images/splash.gif +0 -0
  287. package/src/assets/locales/en_US.json +59 -0
  288. package/src/assets/scripts/unsupported-browser.js +17 -0
  289. package/src/styles/_base.scss +38 -0
  290. package/src/styles/_colors.scss +96 -0
  291. package/src/styles/_core.scss +4 -0
  292. package/src/styles/_functions.scss +114 -0
  293. package/src/styles/_global-variables.scss +232 -0
  294. package/src/styles/_icons.scss +24 -0
  295. package/src/styles/bootstrap/_grid.scss +34 -0
  296. package/src/styles/bootstrap/_reboot.scss +323 -0
  297. package/src/styles/components/_card.scss +21 -0
  298. package/src/styles/components/_link-icons.scss +38 -0
  299. package/src/styles/components/_splash.scss +57 -0
  300. package/src/styles/components/_unsupported-browsers.scss +24 -0
  301. package/src/styles/email/_email-base.scss +228 -0
  302. package/src/styles/email/email.scss +43 -0
  303. package/src/styles/index.scss +27 -0
  304. package/src/styles/mixins/_animations.scss +18 -0
  305. package/src/styles/mixins/_button-base.scss +185 -0
  306. package/src/styles/mixins/_card-base.scss +40 -0
  307. package/src/styles/mixins/_common.scss +52 -0
  308. package/src/styles/mixins/_dialog-base.scss +96 -0
  309. package/src/styles/mixins/_form-control-base.scss +641 -0
  310. package/src/styles/mixins/_login.scss +74 -0
  311. package/src/styles/mixins/_menu-base.scss +153 -0
  312. package/src/styles/mixins/_overlay-base.scss +33 -0
  313. package/src/styles/mixins/_resizable-base.scss +57 -0
  314. package/src/styles/mixins/_spinner-base.scss +34 -0
  315. package/src/styles/mixins/_table-base.scss +298 -0
  316. package/src/styles/mixins/_tabs-base.scss +110 -0
  317. package/src/styles/mixins/_tags-base.scss +116 -0
  318. package/src/styles/mixins/_text.scss +89 -0
  319. package/src/styles/mixins.scss +15 -0
  320. package/src/styles/utilities/_borders.scss +30 -0
  321. package/src/styles/utilities/_common.scss +49 -0
  322. package/src/styles/utilities/_layout.scss +116 -0
  323. package/src/styles/utilities/_spacing.scss +65 -0
  324. package/src/styles/utilities/_text.scss +139 -0
@@ -0,0 +1,228 @@
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
+ // CONSTANTS
8
+ ///////////////////////////////////////////////////////
9
+ static { this.beginningOfTime = new Date(1899, 11, 31); }
10
+ /** 3000-01-01 */
11
+ static { this.endOfTime = new Date(3000, 0, 1); }
12
+ /** 3000-01-01 UTC */
13
+ static { this.endOfTimeUTC = moment.utc('3000-01-01').toDate(); }
14
+ /** Default effective date for new AccountMeter relationships: 2010-01-01 */
15
+ static { this.defaultAccountMeterEffectiveDate = new Date(2010, 0, 1); }
16
+ /** The default date that a newly created account becomes effective: 2010-01-01 */
17
+ static { this.defaultAccountServiceEffectiveDate = new Date(2010, 0, 1); }
18
+ /** Minimum date for all datepickers: 1980-01-01 */
19
+ static { this.minDatePickerDate = new Date(1980, 0, 1); }
20
+ /** 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" */
21
+ static { this.maxDatePickerDate = new Date(3000, 0, 1, 23, 59, 59); }
22
+ /** Timestamp formats */
23
+ static { this.defaultDateFormat = "yyyy-MM-dd"; }
24
+ static { this.defaultTimeFormat = "HH:mm:ss"; }
25
+ static { this.defaultTimestampFormat = `${DateTimeHelper.defaultDateFormat} ${DateTimeHelper.defaultTimeFormat}`; }
26
+ /** List of valid bill import date formats
27
+ * Warning! Do not use these for actual formatting of dates
28
+ */
29
+ static { this.billImportFormatDateFormats = [
30
+ { label: "mm/dd/yyyy", value: "mm/dd/yyyy" }, { label: "Month dd yyyy", value: "Month dd yyyy" },
31
+ { label: "dd/mm/yyyy", value: "dd/mm/yyyy" }, { label: "dd Month yyyy", value: "dd Month yyyy" }, { label: "yyyymmdd", value: "yyyymmdd" }
32
+ ]; }
33
+ /**
34
+ * User input formats that we will parse into a date
35
+ * when the users date format preference has month before day
36
+ */
37
+ static { this.monthFirstParseFormats = [
38
+ "yyyy/MM/dd",
39
+ "MM/dd/yyyy",
40
+ "MMddyyyy",
41
+ "MM/dd/yy",
42
+ "MMddyy",
43
+ "MM/dd",
44
+ "yyyy.MM.dd",
45
+ "MM.dd.yyyy",
46
+ "MM.dd.yy",
47
+ "MM.dd",
48
+ "yyyy-MM-dd",
49
+ "MM-dd-yyyy",
50
+ "MM-dd-yy",
51
+ "MM-dd",
52
+ "yyyyMMdd"
53
+ ]; }
54
+ /**
55
+ * User input formats that we will parse into a date
56
+ * when the users date format preference has month before day.
57
+ * To be used with moment.js. Moment ignores non-alphanumeric characters
58
+ * so dates like 2020/09/10 will be parsed the same as 2020-09-10
59
+ */
60
+ static { this.momentMonthFirstParseFormats = [
61
+ 'M-D',
62
+ 'MM-DD',
63
+ 'M-D-YY',
64
+ 'MM-DD-YY',
65
+ 'MMDDYYYY',
66
+ 'YYYYMMDD',
67
+ 'YYYY-MM-DD',
68
+ 'MM-DD-YYYY'
69
+ ]; }
70
+ /**
71
+ * User input formats that we will parse into a date
72
+ * when the users date format preference has day before month
73
+ */
74
+ static { this.dateFirstParseFormats = [
75
+ "yyyy/dd/MM",
76
+ "dd/MM/yyyy",
77
+ "ddMMyyyy",
78
+ "dd/MM/yy",
79
+ "ddMMyy",
80
+ "dd/MM",
81
+ "yyyy.dd.MM",
82
+ "dd.MM.yyyy",
83
+ "dd.MM.yy",
84
+ "dd.MM",
85
+ "yyyy-dd-MM",
86
+ "dd-MM-yyyy",
87
+ "dd-MM-yy",
88
+ "dd-MM",
89
+ "yyyyDDmm"
90
+ ]; }
91
+ /**
92
+ * User input formats that we will parse into a date
93
+ * when the users date format preference has day before month.
94
+ * To be used with moment.js. Moment ignores non-alphanumeric characters
95
+ * so dates like 2020/09/10 will be parsed the same as 2020-09-10
96
+ */
97
+ static { this.momentDateFirstParseFormats = [
98
+ 'D-M',
99
+ 'DD-MM',
100
+ 'D-M-YY',
101
+ 'DD-MM-YY',
102
+ 'DDMMYYYY',
103
+ 'YYYYMMDD',
104
+ 'YYYY-MM-DD',
105
+ 'DD-MM-YYYY'
106
+ ]; }
107
+ /**
108
+ * Formats used to parse dates that are in the medium or long format by moment js.
109
+ * These are shared by date-first and month-first date formats. The date can't be
110
+ * parsed differently based on the date preference since the month is not numeric.
111
+ * This is not an exhaustive list of formats, but it should cover most common formats.
112
+ */
113
+ static { this.momentMedAndLongDateFormats = [
114
+ 'DD MMM',
115
+ 'MMM DD',
116
+ 'DD MMM YY',
117
+ 'DD MMM YYYY',
118
+ 'DD MMMM YYYY',
119
+ 'MMM D, YY',
120
+ 'MMM D, YYYY',
121
+ 'MMM DD, YYYY',
122
+ 'MMMM D, YYYY',
123
+ 'MMMM DD, YYYY',
124
+ 'MMM YY',
125
+ 'MMM YYYY',
126
+ 'MMMM YYYY',
127
+ 'MMM, YY',
128
+ 'MMM, YYYY',
129
+ 'MMMM, YYYY',
130
+ ]; }
131
+ /**
132
+ * Format to display the time portion of a datetime
133
+ */
134
+ static { this.timeFormat = 'HH:mm:ss'; }
135
+ ///////////////////////////////////////////////////////
136
+ // METHODS
137
+ ///////////////////////////////////////////////////////
138
+ /**
139
+ * Return true if @see date is equal to the @see endOfTime
140
+ */
141
+ static isEndOfTime(date, timeZoneOffset = false) {
142
+ const endOfTime = timeZoneOffset ? this.endOfTimeUTC : this.endOfTime;
143
+ return this.isSameDay(date, endOfTime);
144
+ }
145
+ /**
146
+ * Compare two dates and return true if they represent the same year, month, and day (time is ignored).
147
+ */
148
+ static isSameDay(date1, date2) {
149
+ return moment(date1).isSame(moment(date2), 'day');
150
+ }
151
+ /**
152
+ * Get the parse formats based on the given date format. If no date format is
153
+ * given, or we don't recognize the format, return the month first parse formats.
154
+ *
155
+ */
156
+ static getParseFormats(dateFormat) {
157
+ let map = {
158
+ 'MM/DD/YYYY': this.monthFirstParseFormats,
159
+ 'MM-DD-YYYY': this.monthFirstParseFormats,
160
+ 'DD/MM/YYYY': this.dateFirstParseFormats,
161
+ 'DD-MM-YYYY': this.dateFirstParseFormats,
162
+ 'YYYY/MM/DD': this.monthFirstParseFormats,
163
+ 'YYYY-MM-DD': this.monthFirstParseFormats
164
+ };
165
+ return dateFormat ? map[dateFormat] : this.monthFirstParseFormats;
166
+ }
167
+ /**
168
+ * Get the moment parse formats based on the given date format. If no date format is
169
+ * given, or we don't recognize the format, return the month first parse formats.
170
+ */
171
+ static getMomentParseFormats(dateFormat) {
172
+ let map = {
173
+ 'MM/DD/YYYY': [...this.momentMonthFirstParseFormats, ...this.momentMedAndLongDateFormats],
174
+ 'MM-DD-YYYY': [...this.momentMonthFirstParseFormats, ...this.momentMedAndLongDateFormats],
175
+ 'DD/MM/YYYY': [...this.momentDateFirstParseFormats, ...this.momentMedAndLongDateFormats],
176
+ 'DD-MM-YYYY': [...this.momentDateFirstParseFormats, ...this.momentMedAndLongDateFormats],
177
+ 'YYYY/MM/DD': [...this.momentMonthFirstParseFormats, ...this.momentMedAndLongDateFormats],
178
+ 'YYYY-MM-DD': [...this.momentMonthFirstParseFormats, ...this.momentMedAndLongDateFormats]
179
+ };
180
+ return dateFormat ? map[dateFormat] : this.momentMonthFirstParseFormats;
181
+ }
182
+ /**
183
+ * Get relationship start date (favoring date in partialFormState if exists)
184
+ * * return default account-meter effective date if no start date found
185
+ *
186
+ */
187
+ static getAccountMeterStartDate(partialFormState, accountMeter) {
188
+ let startDate = partialFormState.effectiveFrom || accountMeter.startDate;
189
+ return startDate ? new Date(startDate) : DateTimeHelper.defaultAccountMeterEffectiveDate;
190
+ }
191
+ /**
192
+ * Get relationship end date (favoring date in partialFormState if exists)
193
+ * * return null if no stored date or end date is 1/1/3000
194
+ */
195
+ static getAccountMeterEndDate(partialFormState, accountMeter) {
196
+ let endDate = partialFormState.effectiveTo || accountMeter.endDate;
197
+ if (endDate && !DateTimeHelper.isEndOfTime(endDate)) {
198
+ return new Date(endDate);
199
+ }
200
+ return null;
201
+ }
202
+ static isDateBetween(date, startDate, endDate, includeStart, includeEnd) {
203
+ let inclusivity = '()';
204
+ if (includeStart && includeEnd) {
205
+ inclusivity = '[]';
206
+ }
207
+ else if (includeStart) {
208
+ inclusivity = '[)';
209
+ }
210
+ else if (includeEnd) {
211
+ inclusivity = '(]';
212
+ }
213
+ // If a start date is not provide, we'll use our beginning of time instead
214
+ startDate = startDate || this.beginningOfTime;
215
+ // If an end date is not provided, we'll use our end of time instead
216
+ endDate = endDate || this.endOfTime;
217
+ return moment(date).isBetween(startDate, endDate, 'day', inclusivity);
218
+ }
219
+ static stringToDate(dateString) {
220
+ if (dateString === null || dateString === undefined) {
221
+ return dateString;
222
+ }
223
+ else {
224
+ return moment(dateString).toDate();
225
+ }
226
+ }
227
+ }
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS10aW1lLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlL2RhdGUtdGltZS1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBSTVCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFFdkIsdURBQXVEO0lBQ3ZELFlBQVk7SUFDWix1REFBdUQ7YUFFekMsb0JBQWUsR0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTNELGlCQUFpQjthQUNILGNBQVMsR0FBUyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXJELHFCQUFxQjthQUNQLGlCQUFZLEdBQVMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUVyRSw0RUFBNEU7YUFDOUQscUNBQWdDLEdBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU1RSxrRkFBa0Y7YUFDcEUsdUNBQWtDLEdBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU5RSxtREFBbUQ7YUFDckMsc0JBQWlCLEdBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU3RCxtTEFBbUw7YUFDckssc0JBQWlCLEdBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsQ0FBQztJQUVwRSx3QkFBd0I7YUFDVixzQkFBaUIsR0FBVyxZQUFZLENBQUM7YUFDekMsc0JBQWlCLEdBQVcsVUFB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U0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBcUM7UUFDOUQsSUFBSSxVQUFVLEtBQUssSUFBSSxJQUFJLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5cclxudHlwZSBEYXRlRm9ybWF0TWFwID0geyBbZm9ybWF0OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciBjbGFzcyB0aGF0IHByb3ZpZGVzIGNvbW1vbiBkYXRlIGNvbnN0YW50cyBhbmQgaGVscGZ1bCBkYXRlIGZ1bmN0aW9uc1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGVUaW1lSGVscGVyIHtcclxuXHJcbiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAvLyBDT05TVEFOVFNcclxuICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGJlZ2lubmluZ09mVGltZTogRGF0ZSA9IG5ldyBEYXRlKDE4OTksMTEsMzEpO1xyXG4gICAgIFxyXG4gICAgLyoqIDMwMDAtMDEtMDEgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZW5kT2ZUaW1lOiBEYXRlID0gbmV3IERhdGUoMzAwMCwgMCwgMSk7XHJcblxyXG4gICAgLyoqIDMwMDAtMDEtMDEgVVRDICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGVuZE9mVGltZVVUQzogRGF0ZSA9IG1vbWVudC51dGMoJzMwMDAtMDEtMDEnKS50b0RhdGUoKTtcclxuXHJcbiAgICAvKiogRGVmYXVsdCBlZmZlY3RpdmUgZGF0ZSBmb3IgbmV3IEFjY291bnRNZXRlciByZWxhdGlvbnNoaXBzOiAyMDEwLTAxLTAxICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGRlZmF1bHRBY2NvdW50TWV0ZXJFZmZlY3RpdmVEYXRlOiBEYXRlID0gbmV3IERhdGUoMjAxMCwgMCwgMSk7XHJcblxyXG4gICAgLyoqIFRoZSBkZWZhdWx0IGRhdGUgdGhhdCBhIG5ld2x5IGNyZWF0ZWQgYWNjb3VudCBiZWNvbWVzIGVmZmVjdGl2ZTogMjAxMC0wMS0wMSAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWZhdWx0QWNjb3VudFNlcnZpY2VFZmZlY3RpdmVEYXRlOiBEYXRlID0gbmV3IERhdGUoMjAxMCwgMCwgMSk7XHJcblxyXG4gICAgLyoqIE1pbmltdW0gZGF0ZSBmb3IgYWxsIGRhdGVwaWNrZXJzOiAxOTgwLTAxLTAxICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG1pbkRhdGVQaWNrZXJEYXRlOiBEYXRlID0gbmV3IERhdGUoMTk4MCwgMCwgMSk7XHJcblxyXG4gICAgLyoqIE1heGltdW0gZGF0ZSBmb3IgYWxsIGRhdGVwaWNrZXJzOiAzMDAwLTAxLTAxIDExOjU5OjU5IFBNIHRvIGFsbG93IGZvciBsb2NhbCB0aW1lIG9mZnNldCB3b3JraW5nIGluIGZvciAzMDAwLTAxLTAxIGRhdGVzLCB3aGljaCB3ZSBzdG9yZSBpbiB0aGUgZGIgdG8gcmVwcmVzZW50IFwiZW5kIG9mIHRpbWVcIiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBtYXhEYXRlUGlja2VyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKDMwMDAsMCwxLDIzLDU5LDU5KTtcclxuXHJcbiAgICAvKiogVGltZXN0YW1wIGZvcm1hdHMgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZGVmYXVsdERhdGVGb3JtYXQ6IHN0cmluZyA9IFwieXl5eS1NTS1kZFwiO1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWZhdWx0VGltZUZvcm1hdDogc3RyaW5nID0gXCJISDptbTpzc1wiO1xyXG4gICAgcHVibGljIHN0YXRpYyBkZWZhdWx0VGltZXN0YW1wRm9ybWF0OiBzdHJpbmcgPSBgJHtEYXRlVGltZUhlbHBlci5kZWZhdWx0RGF0ZUZvcm1hdH0gJHtEYXRlVGltZUhlbHBlci5kZWZhdWx0VGltZUZvcm1hdH1gO1xyXG5cclxuICAgIC8qKiBMaXN0IG9mIHZhbGlkIGJpbGwgaW1wb3J0IGRhdGUgZm9ybWF0c1xyXG4gICAgICogIFdhcm5pbmchIERvIG5vdCB1c2UgdGhlc2UgZm9yIGFjdHVhbCBmb3JtYXR0aW5nIG9mIGRhdGVzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgYmlsbEltcG9ydEZvcm1hdERhdGVGb3JtYXRzID0gW1xyXG4gICAgICAgIHsgbGFiZWw6IFwibW0vZGQveXl5eVwiLCB2YWx1ZTogXCJtbS9kZC95eXl5XCIgfSwgeyBsYWJlbDogXCJNb250aCBkZCB5eXl5XCIsIHZhbHVlOiBcIk1vbnRoIGRkIHl5eXlcIiB9LCBcclxuICAgICAgICB7IGxhYmVsOiBcImRkL21tL3l5eXlcIiwgdmFsdWU6IFwiZGQvbW0veXl5eVwiIH0sIHsgbGFiZWw6IFwiZGQgTW9udGggeXl5eVwiLCB2YWx1ZTogXCJkZCBNb250aCB5eXl5XCIgfSwgeyBsYWJlbDogXCJ5eXl5bW1kZFwiLCB2YWx1ZTogXCJ5eXl5bW1kZFwiIH1dO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlciBpbnB1dCBmb3JtYXRzIHRoYXQgd2Ugd2lsbCBwYXJzZSBpbnRvIGEgZGF0ZVxyXG4gICAgICogd2hlbiB0aGUgdXNlcnMgZGF0ZSBmb3JtYXQgcHJlZmVyZW5jZSBoYXMgbW9udGggYmVmb3JlIGRheVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG1vbnRoRmlyc3RQYXJzZUZvcm1hdHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgIFwieXl5eS9NTS9kZFwiLFxyXG4gICAgICAgIFwiTU0vZGQveXl5eVwiLFxyXG4gICAgICAgIFwiTU1kZHl5eXlcIixcclxuICAgICAgICBcIk1NL2RkL3l5XCIsXHJcbiAgICAgICAgXCJNTWRkeXlcIixcclxuICAgICAgICBcIk1NL2RkXCIsXHJcbiAgICAgICAgXCJ5eXl5Lk1NLmRkXCIsXHJcbiAgICAgICAgXCJNTS5kZC55eXl5XCIsXHJcbiAgICAgICAgXCJNTS5kZC55eVwiLFxyXG4gICAgICAgIFwiTU0uZGRcIixcclxuICAgICAgICBcInl5eXktTU0tZGRcIixcclxuICAgICAgICBcIk1NLWRkLXl5eXlcIixcclxuICAgICAgICBcIk1NLWRkLXl5XCIsXHJcbiAgICAgICAgXCJNTS1kZFwiLFxyXG4gICAgICAgIFwieXl5eU1NZGRcIlxyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZXIgaW5wdXQgZm9ybWF0cyB0aGF0IHdlIHdpbGwgcGFyc2UgaW50byBhIGRhdGVcclxuICAgICAqIHdoZW4gdGhlIHVzZXJzIGRhdGUgZm9ybWF0IHByZWZlcmVuY2UgaGFzIG1vbnRoIGJlZm9yZSBkYXkuXHJcbiAgICAgKiBUbyBiZSB1c2VkIHdpdGggbW9tZW50LmpzLiBNb21lbnQgaWdub3JlcyBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnNcclxuICAgICAqIHNvIGRhdGVzIGxpa2UgMjAyMC8wOS8xMCB3aWxsIGJlIHBhcnNlZCB0aGUgc2FtZSBhcyAyMDIwLTA5LTEwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgbW9tZW50TW9udGhGaXJzdFBhcnNlRm9ybWF0czogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgJ00tRCcsXHJcbiAgICAgICAgJ01NLUREJyxcclxuICAgICAgICAnTS1ELVlZJyxcclxuICAgICAgICAnTU0tREQtWVknLFxyXG4gICAgICAgICdNTUREWVlZWScsXHJcbiAgICAgICAgJ1lZWVlNTUREJyxcclxuICAgICAgICAnWVlZWS1NTS1ERCcsXHJcbiAgICAgICAgJ01NLURELVlZWVknXHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlciBpbnB1dCBmb3JtYXRzIHRoYXQgd2Ugd2lsbCBwYXJzZSBpbnRvIGEgZGF0ZVxyXG4gICAgICogd2hlbiB0aGUgdXNlcnMgZGF0ZSBmb3JtYXQgcHJlZmVyZW5jZSBoYXMgZGF5IGJlZm9yZSBtb250aFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGRhdGVGaXJzdFBhcnNlRm9ybWF0czogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgXCJ5eXl5L2RkL01NXCIsXHJcbiAgICAgICAgXCJkZC9NTS95eXl5XCIsXHJcbiAgICAgICAgXCJkZE1NeXl5eVwiLFxyXG4gICAgICAgIFwiZGQvTU0veXlcIixcclxuICAgICAgICBcImRkTU15eVwiLFxyXG4gICAgICAgIFwiZGQvTU1cIixcclxuICAgICAgICBcInl5eXkuZGQuTU1cIixcclxuICAgICAgICBcImRkLk1NLnl5eXlcIixcclxuICAgICAgICBcImRkLk1NLnl5XCIsXHJcbiAgICAgICAgXCJkZC5NTVwiLFxyXG4gICAgICAgIFwieXl5eS1kZC1NTVwiLFxyXG4gICAgICAgIFwiZGQtTU0teXl5eVwiLFxyXG4gICAgICAgIFwiZGQtTU0teXlcIixcclxuICAgICAgICBcImRkLU1NXCIsXHJcbiAgICAgICAgXCJ5eXl5RERtbVwiXHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXNlciBpbnB1dCBmb3JtYXRzIHRoYXQgd2Ugd2lsbCBwYXJzZSBpbnRvIGEgZGF0ZVxyXG4gICAgICogd2hlbiB0aGUgdXNlcnMgZGF0ZSBmb3JtYXQgcHJlZmVyZW5jZSBoYXMgZGF5IGJlZm9yZSBtb250aC5cclxuICAgICAqIFRvIGJlIHVzZWQgd2l0aCBtb21lbnQuanMuIE1vbWVudCBpZ25vcmVzIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyc1xyXG4gICAgICogc28gZGF0ZXMgbGlrZSAyMDIwLzA5LzEwIHdpbGwgYmUgcGFyc2VkIHRoZSBzYW1lIGFzIDIwMjAtMDktMTBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBtb21lbnREYXRlRmlyc3RQYXJzZUZvcm1hdHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICdELU0nLFxyXG4gICAgICAgICdERC1NTScsXHJcbiAgICAgICAgJ0QtTS1ZWScsXHJcbiAgICAgICAgJ0RELU1NLVlZJyxcclxuICAgICAgICAnRERNTVlZWVknLFxyXG4gICAgICAgICdZWVlZTU1ERCcsXHJcbiAgICAgICAgJ1lZWVktTU0tREQnLFxyXG4gICAgICAgICdERC1NTS1ZWVlZJ1xyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdHMgdXNlZCB0byBwYXJzZSBkYXRlcyB0aGF0IGFyZSBpbiB0aGUgbWVkaXVtIG9yIGxvbmcgZm9ybWF0IGJ5IG1vbWVudCBqcy5cclxuICAgICAqIFRoZXNlIGFyZSBzaGFyZWQgYnkgZGF0ZS1maXJzdCBhbmQgbW9udGgtZmlyc3QgZGF0ZSBmb3JtYXRzLiBUaGUgZGF0ZSBjYW4ndCBiZVxyXG4gICAgICogcGFyc2VkIGRpZmZlcmVudGx5IGJhc2VkIG9uIHRoZSBkYXRlIHByZWZlcmVuY2Ugc2luY2UgdGhlIG1vbnRoIGlzIG5vdCBudW1lcmljLlxyXG4gICAgICogVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0IG9mIGZvcm1hdHMsIGJ1dCBpdCBzaG91bGQgY292ZXIgbW9zdCBjb21tb24gZm9ybWF0cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBtb21lbnRNZWRBbmRMb25nRGF0ZUZvcm1hdHM6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICdERCBNTU0nLFxyXG4gICAgICAgICdNTU0gREQnLFxyXG4gICAgICAgICdERCBNTU0gWVknLFxyXG4gICAgICAgICdERCBNTU0gWVlZWScsXHJcbiAgICAgICAgJ0REIE1NTU0gWVlZWScsXHJcbiAgICAgICAgJ01NTSBELCBZWScsXHJcbiAgICAgICAgJ01NTSBELCBZWVlZJyxcclxuICAgICAgICAnTU1NIERELCBZWVlZJyxcclxuICAgICAgICAnTU1NTSBELCBZWVlZJyxcclxuICAgICAgICAnTU1NTSBERCwgWVlZWScsXHJcbiAgICAgICAgJ01NTSBZWScsXHJcbiAgICAgICAgJ01NTSBZWVlZJyxcclxuICAgICAgICAnTU1NTSBZWVlZJyxcclxuICAgICAgICAnTU1NLCBZWScsXHJcbiAgICAgICAgJ01NTSwgWVlZWScsXHJcbiAgICAgICAgJ01NTU0sIFlZWVknLFxyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcm1hdCB0byBkaXNwbGF5IHRoZSB0aW1lIHBvcnRpb24gb2YgYSBkYXRldGltZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHRpbWVGb3JtYXQ6IHN0cmluZyA9ICdISDptbTpzcyc7XHJcblxyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgLy8gTUVUSE9EU1xyXG4gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJuIHRydWUgaWYgQHNlZSBkYXRlIGlzIGVxdWFsIHRvIHRoZSBAc2VlIGVuZE9mVGltZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGlzRW5kT2ZUaW1lKGRhdGU6IERhdGUgfCBtb21lbnQuTW9tZW50IHwgc3RyaW5nLCB0aW1lWm9uZU9mZnNldDogYm9vbGVhbiA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgZW5kT2ZUaW1lID0gdGltZVpvbmVPZmZzZXQgPyB0aGlzLmVuZE9mVGltZVVUQyA6IHRoaXMuZW5kT2ZUaW1lO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZURheShkYXRlLCBlbmRPZlRpbWUpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbXBhcmUgdHdvIGRhdGVzIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSB5ZWFyLCBtb250aCwgYW5kIGRheSAodGltZSBpcyBpZ25vcmVkKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBpc1NhbWVEYXkoZGF0ZTE6IERhdGUgfCBtb21lbnQuTW9tZW50IHwgc3RyaW5nLCBkYXRlMjogRGF0ZSB8IG1vbWVudC5Nb21lbnQgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUxKS5pc1NhbWUobW9tZW50KGRhdGUyKSwgJ2RheScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IHRoZSBwYXJzZSBmb3JtYXRzIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRlIGZvcm1hdC4gSWYgbm8gZGF0ZSBmb3JtYXQgaXNcclxuICAgICAqIGdpdmVuLCBvciB3ZSBkb24ndCByZWNvZ25pemUgdGhlIGZvcm1hdCwgcmV0dXJuIHRoZSBtb250aCBmaXJzdCBwYXJzZSBmb3JtYXRzLlxyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UGFyc2VGb3JtYXRzKGRhdGVGb3JtYXQ/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGxldCBtYXA6IERhdGVGb3JtYXRNYXAgPSB7XHJcbiAgICAgICAgICAgICdNTS9ERC9ZWVlZJzogdGhpcy5tb250aEZpcnN0UGFyc2VGb3JtYXRzLFxyXG4gICAgICAgICAgICAnTU0tREQtWVlZWSc6IHRoaXMubW9udGhGaXJzdFBhcnNlRm9ybWF0cyxcclxuICAgICAgICAgICAgJ0REL01NL1lZWVknOiB0aGlzLmRhdGVGaXJzdFBhcnNlRm9ybWF0cyxcclxuICAgICAgICAgICAgJ0RELU1NLVlZWVknOiB0aGlzLmRhdGVGaXJzdFBhcnNlRm9ybWF0cyxcclxuICAgICAgICAgICAgJ1lZWVkvTU0vREQnOiB0aGlzLm1vbnRoRmlyc3RQYXJzZUZvcm1hdHMsXHJcbiAgICAgICAgICAgICdZWVlZLU1NLUREJzogdGhpcy5tb250aEZpcnN0UGFyc2VGb3JtYXRzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGVGb3JtYXQgPyBtYXBbZGF0ZUZvcm1hdF0gOiB0aGlzLm1vbnRoRmlyc3RQYXJzZUZvcm1hdHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIG1vbWVudCBwYXJzZSBmb3JtYXRzIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRlIGZvcm1hdC4gSWYgbm8gZGF0ZSBmb3JtYXQgaXNcclxuICAgICAqIGdpdmVuLCBvciB3ZSBkb24ndCByZWNvZ25pemUgdGhlIGZvcm1hdCwgcmV0dXJuIHRoZSBtb250aCBmaXJzdCBwYXJzZSBmb3JtYXRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldE1vbWVudFBhcnNlRm9ybWF0cyhkYXRlRm9ybWF0Pzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBsZXQgbWFwOiBEYXRlRm9ybWF0TWFwID0ge1xyXG4gICAgICAgICAgICAnTU0vREQvWVlZWSc6IFsuLi50aGlzLm1vbWVudE1vbnRoRmlyc3RQYXJzZUZvcm1hdHMsIC4uLnRoaXMubW9tZW50TWVkQW5kTG9uZ0RhdGVGb3JtYXRzXSxcclxuICAgICAgICAgICAgJ01NLURELVlZWVknOiBbLi4udGhpcy5tb21lbnRNb250aEZpcnN0UGFyc2VGb3JtYXRzLCAuLi50aGlzLm1vbWVudE1lZEFuZExvbmdEYXRlRm9ybWF0c10sXHJcbiAgICAgICAgICAgICdERC9NTS9ZWVlZJzogWy4uLnRoaXMubW9tZW50RGF0ZUZpcnN0UGFyc2VGb3JtYXRzLCAuLi50aGlzLm1vbWVudE1lZEFuZExvbmdEYXRlRm9ybWF0c10sXHJcbiAgICAgICAgICAgICdERC1NTS1ZWVlZJzogWy4uLnRoaXMubW9tZW50RGF0ZUZpcnN0UGFyc2VGb3JtYXRzLCAuLi50aGlzLm1vbWVudE1lZEFuZExvbmdEYXRlRm9ybWF0c10sXHJcbiAgICAgICAgICAgICdZWVlZL01NL0REJzogWy4uLnRoaXMubW9tZW50TW9udGhGaXJzdFBhcnNlRm9ybWF0cywgLi4udGhpcy5tb21lbnRNZWRBbmRMb25nRGF0ZUZvcm1hdHNdLFxyXG4gICAgICAgICAgICAnWVlZWS1NTS1ERCc6IFsuLi50aGlzLm1vbWVudE1vbnRoRmlyc3RQYXJzZUZvcm1hdHMsIC4uLnRoaXMubW9tZW50TWVkQW5kTG9uZ0RhdGVGb3JtYXRzXVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRlRm9ybWF0ID8gbWFwW2RhdGVGb3JtYXRdIDogdGhpcy5tb21lbnRNb250aEZpcnN0UGFyc2VGb3JtYXRzO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVsYXRpb25zaGlwIHN0YXJ0IGRhdGUgKGZhdm9yaW5nIGRhdGUgaW4gcGFydGlhbEZvcm1TdGF0ZSBpZiBleGlzdHMpXHJcbiAgICAgKiAqIHJldHVybiBkZWZhdWx0IGFjY291bnQtbWV0ZXIgZWZmZWN0aXZlIGRhdGUgaWYgbm8gc3RhcnQgZGF0ZSBmb3VuZFxyXG4gICAgICogXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0QWNjb3VudE1ldGVyU3RhcnREYXRlKHBhcnRpYWxGb3JtU3RhdGU6IGFueSwgYWNjb3VudE1ldGVyOiB7IHN0YXJ0RGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQgfSk6IERhdGUge1xyXG4gICAgICAgIGxldCBzdGFydERhdGUgPSBwYXJ0aWFsRm9ybVN0YXRlLmVmZmVjdGl2ZUZyb20gfHwgYWNjb3VudE1ldGVyLnN0YXJ0RGF0ZTtcclxuICAgICAgICByZXR1cm4gc3RhcnREYXRlID8gbmV3IERhdGUoc3RhcnREYXRlKSA6IERhdGVUaW1lSGVscGVyLmRlZmF1bHRBY2NvdW50TWV0ZXJFZmZlY3RpdmVEYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgcmVsYXRpb25zaGlwIGVuZCBkYXRlIChmYXZvcmluZyBkYXRlIGluIHBhcnRpYWxGb3JtU3RhdGUgaWYgZXhpc3RzKVxyXG4gICAgICogKiByZXR1cm4gbnVsbCBpZiBubyBzdG9yZWQgZGF0ZSBvciBlbmQgZGF0ZSBpcyAxLzEvMzAwMFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldEFjY291bnRNZXRlckVuZERhdGUocGFydGlhbEZvcm1TdGF0ZTogYW55LCBhY2NvdW50TWV0ZXI6IHsgZW5kRGF0ZTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQgfSk6IERhdGUgfCBudWxsIHtcclxuICAgICAgICBsZXQgZW5kRGF0ZSA9IHBhcnRpYWxGb3JtU3RhdGUuZWZmZWN0aXZlVG8gfHwgYWNjb3VudE1ldGVyLmVuZERhdGU7XHJcbiAgICAgICAgaWYgKGVuZERhdGUgJiYgIURhdGVUaW1lSGVscGVyLmlzRW5kT2ZUaW1lKGVuZERhdGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShlbmREYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBzdGF0aWMgaXNEYXRlQmV0d2VlbihcclxuICAgICAgICBkYXRlOiBEYXRlLCBcclxuICAgICAgICBzdGFydERhdGU/OiBEYXRlIHwgbnVsbCwgXHJcbiAgICAgICAgZW5kRGF0ZT86IERhdGUgfCBudWxsLCBcclxuICAgICAgICBpbmNsdWRlU3RhcnQ/OiBib29sZWFuLCBcclxuICAgICAgICBpbmNsdWRlRW5kPzogYm9vbGVhblxyXG4gICAgKTpib29sZWFuIHtcclxuICAgICAgICBsZXQgaW5jbHVzaXZpdHk6ICcoKScgfCAnWyknIHwgJyhdJyB8ICdbXScgPSAnKCknO1xyXG4gICAgICAgIGlmIChpbmNsdWRlU3RhcnQgJiYgaW5jbHVkZUVuZCApIHtcclxuICAgICAgICAgICAgaW5jbHVzaXZpdHkgPSAnW10nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZVN0YXJ0KSB7XHJcbiAgICAgICAgICAgIGluY2x1c2l2aXR5ID0gJ1spJztcclxuICAgICAgICB9IGVsc2UgaWYgKGluY2x1ZGVFbmQpIHtcclxuICAgICAgICAgICAgaW5jbHVzaXZpdHkgPSAnKF0nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgYSBzdGFydCBkYXRlIGlzIG5vdCBwcm92aWRlLCB3ZSdsbCB1c2Ugb3VyIGJlZ2lubmluZyBvZiB0aW1lIGluc3RlYWRcclxuICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUgfHwgdGhpcy5iZWdpbm5pbmdPZlRpbWU7XHJcblxyXG4gICAgICAgIC8vIElmIGFuIGVuZCBkYXRlIGlzIG5vdCBwcm92aWRlZCwgd2UnbGwgdXNlIG91ciBlbmQgb2YgdGltZSBpbnN0ZWFkXHJcbiAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUgfHwgdGhpcy5lbmRPZlRpbWU7XHJcblxyXG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZSkuaXNCZXR3ZWVuKHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgJ2RheScsIGluY2x1c2l2aXR5KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHN0cmluZ1RvRGF0ZShkYXRlU3RyaW5nOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgICBpZiAoZGF0ZVN0cmluZyA9PT0gbnVsbCB8fCBkYXRlU3RyaW5nID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICByZXR1cm4gZGF0ZVN0cmluZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVTdHJpbmcpLnRvRGF0ZSgpO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,61 @@
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ErrorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
53
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ErrorService, providedIn: 'root' }); }
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ErrorService, decorators: [{
56
+ type: Injectable,
57
+ args: [{
58
+ providedIn: 'root'
59
+ }]
60
+ }], ctorParameters: () => [] });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlL2Vycm9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxVQUFVLFVBQVUsQ0FBQyxhQUFrQjtJQUMzQyx1RUFBdUU7SUFDdkUsSUFBSSxhQUFhLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hJLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxJQUFJLGFBQWEsQ0FBQyxLQUFLLElBQUksYUFBYSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFLRCxNQUFNLE9BQU8sWUFBWTtJQUV2QixnQkFBZ0IsQ0FBQztJQUVqQjs7Ozs7OztPQU9HO0lBQ0ksYUFBYSxDQUFDLGFBQWtCLEVBQUUsbUJBQTRCO1FBQ25FLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdEMsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSxJQUFJLGVBQWUsR0FBVyxtQkFBbUIsSUFBSSx3QkFBd0IsQ0FBQztRQUU5RSxJQUFJLGFBQWEsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUM7Z0JBQ0gsZUFBZSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2RixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixrR0FBa0c7Z0JBQ2xHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZUFBZSxDQUFDLEtBQVU7UUFDL0IsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyRCxPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDOytHQXpDVSxZQUFZO21IQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBcGlFcnJvcihlcnJvclJlc3BvbnNlOiBhbnkpOiBib29sZWFuIHtcclxuICAvLyBlcnJvclJlc3BvbnNlIGlzIHR5cGVkIEh0dHBFcnJvclJlc3BvbnNlIGlmIHRoZSBhcGkgcmV0dXJucyBhbiBlcnJvclxyXG4gIGlmIChlcnJvclJlc3BvbnNlLmVycm9yICYmIGVycm9yUmVzcG9uc2UuZXJyb3IuaGFzT3duUHJvcGVydHkoJ3N0YXR1cycpICYmIGVycm9yUmVzcG9uc2UuZXJyb3Iuc3RhdHVzLmhhc093blByb3BlcnR5KCdtZXNzYWdlJykpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy8gQmlsbENBUHR1cmUgQVBJcyByZXR1cm4gZXJyb3JzIGluIGEgZGlmZmVyZW50IGZvcm1hdFxyXG4gIGlmIChlcnJvclJlc3BvbnNlLmVycm9yICYmIGVycm9yUmVzcG9uc2UuZXJyb3IuaGFzT3duUHJvcGVydHkoJ01lc3NhZ2UnKSkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVycm9yU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGFuIGVycm9yIHRoYXQgY29tZXMgZnJvbSB0aGUgQVBJIGZvciB1c2UgaW5zaWRlIHRoZSBmb3Jtc1xyXG4gICAqIEluIG1vc3QgY2FzZXMgdGhpcyBpc24ndCByZXF1aXJlZCBiZWNhdXNlIHRoZSBlcnJvciBoYW5kbGVyIHdpbGwgZG8gaXQgYXV0b21hdGljYWxseSxcclxuICAgKiBidXQgaWYgeW91IG5lZWQgdG8gYW5hbHl6ZSB0aGUgZXJyb3IgbWVzc2FnZSB5b3UgY2FuIHVzZSB0aGlzIHRvIGV4dHJhY3QgaXQgc2FmZWx5LlxyXG4gICAqIE5PVEU6IEJlY2F1c2UgaXQgY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb24gdGhlIHJlc3VsdCBpcyBub3QgdHJhbnNsYXRlZC4gWW91IG11c3QgdHJhbnNsYXRlXHJcbiAgICogaXQgYmVmb3JlIHByb3ZpZGluZyBpdCB0byB0aGUgdXNlci5cclxuICAgKiBAcGFyYW0gZXJyb3IgVGhlIGVycm9yIG9iamVjdCBmcm9tIHRoZSBBUElcclxuICAgKi9cclxuICBwdWJsaWMgcGFyc2VBcGlFcnJvcihlcnJvclJlc3BvbnNlOiBhbnksIHVua25vd25FcnJvckRlZmF1bHQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiBlcnJvclJlc3BvbnNlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gZXJyb3JSZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBlcnJvclJlc3BvbnNlIGlzIHR5cGVkIEh0dHBFcnJvclJlc3BvbnNlIGlmIHRoZSBhcGkgcmV0dXJucyBhbiBlcnJvclxyXG4gICAgbGV0IGFwaUVycm9yTWVzc2FnZTogc3RyaW5nID0gdW5rbm93bkVycm9yRGVmYXVsdCB8fCAnRGVmYXVsdFVua25vd25FcnJvcl9TQyc7XHJcblxyXG4gICAgaWYgKGVycm9yUmVzcG9uc2UgJiYgaXNBcGlFcnJvcihlcnJvclJlc3BvbnNlKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGFwaUVycm9yTWVzc2FnZSA9IGVycm9yUmVzcG9uc2UuZXJyb3Iuc3RhdHVzPy5tZXNzYWdlIHx8IGVycm9yUmVzcG9uc2UuZXJyb3IuTWVzc2FnZTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAvL2xvZyB0aGUgcmVhbCBlcnJvciB0byB0aGUgY29uc29sZSAoZm9yIGRldmVsb3BlcnMpIGJ1dCBqdXN0IHJldHVybiB0aGUgZ2VuZXJpYyBlcnJvciB0byB0aGUgdXNlclxyXG4gICAgICAgIHRoaXMubG9nQ29uc29sZUVycm9yKGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5sb2dDb25zb2xlRXJyb3IoZXJyb3JSZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFwaUVycm9yTWVzc2FnZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEp1c3QgYSBzYWZlIHdyYXBwZXIgYXJvdW5kIGNvbnNvbGUuZXJyb3IgaW4gY2FzZSB0aGUgYnJvd3NlciBkb2Vzbid0IGhhdmUgb25lIGV4cG9zZWRcclxuICAgKi9cclxuICBwdWJsaWMgbG9nQ29uc29sZUVycm9yKGVycm9yOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChjb25zb2xlICYmIHR5cGVvZiAoY29uc29sZS5lcnJvcikgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgY29uc29sZS5lcnJvcigndW5rbm93biBlcnJvcjonLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,111 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { convertToParamMap, NavigationEnd, NavigationStart } from "@angular/router";
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RouterHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
103
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RouterHelper, providedIn: 'root' }); }
104
+ }
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RouterHelper, decorators: [{
106
+ type: Injectable,
107
+ args: [{
108
+ providedIn: 'root'
109
+ }]
110
+ }] });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLWhlbHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvcmUvcm91dGVyLWhlbHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUEwQyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUF3QyxNQUFNLGlCQUFpQixDQUFDO0FBQ2xLLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLeEMsTUFBTSxPQUFPLFlBQVk7SUFDdkI7Ozs7O09BS0c7SUFDSSxrQkFBa0IsQ0FBQyxLQUE2QjtRQUNyRCxNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLG9CQUFvQixDQUFDLEtBQTZCO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLG9CQUFvQixDQUFDLEtBQTZCO1FBQ3ZELElBQUksR0FBRyxHQUFVLEVBQUUsQ0FBQztRQUNwQixNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxrQkFBa0IsQ0FBQyxTQUF5QjtRQUNqRCxJQUFJLFFBQVEsR0FBaUIsRUFBRSxDQUFDO1FBRWhDLE1BQU0sZ0JBQWdCLEdBQTBCLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDckUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxRCxNQUFNLGtCQUFrQixHQUEwQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUM7WUFDOUUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO2dCQUN2QixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksc0JBQXNCLENBQUMsS0FBcUI7UUFDakQsT0FBTyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyw0QkFBNEIsQ0FBSSxTQUEyQixFQUFFLGdCQUE4QyxFQUFFLE1BQWM7UUFDdEksSUFBSSxhQUFhLEdBQVksS0FBSyxDQUFDO1FBQ25DLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNuQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksZUFBZSxJQUFJLENBQUMsWUFBWSxhQUFhLENBQUMsQ0FDeEUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2YsYUFBYSxHQUFHLElBQUksQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQztZQUNILElBQUksTUFBTSxHQUFHLE1BQU0sU0FBUyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNuQixNQUFNLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFDRCxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsT0FBTyxNQUFNLENBQUM7UUFFaEIsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQzsrR0ExR1UsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIGNvbnZlcnRUb1BhcmFtTWFwLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFBhcmFtTWFwLCBQYXJhbXMsIFJvdXRlciwgVXJsU2VnbWVudCB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUm91dGVySGVscGVyIHtcclxuICAvKipcclxuICAgKiBUcmF2ZXJzZXMgdGhlIHBhdGhGcm9tUm9vdCBhbmQgY29tYmluZXMgYWxsIG9mIHRoZSByb3V0ZSBwYXJhbWV0ZXJzIGludG9cclxuICAgKiBvbmUgUGFyYW1zIG9iamVjdCBhbmQgcmV0dXJucyBpdFxyXG4gICAqIEBwYXJhbSByb3V0ZSAtIEFjdGl2YXRlZFJvdXRlU25hcHNob3RcclxuICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvcm91dGVyL0FjdGl2YXRlZFJvdXRlU25hcHNob3QjcGF0aEZyb21Sb290XHJcbiAgICovXHJcbiAgcHVibGljIGdldEZ1bGxSb3V0ZVBhcmFtcyhyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IFBhcmFtcyB7XHJcbiAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9O1xyXG4gICAgcm91dGUucGF0aEZyb21Sb290LmZvckVhY2goc25hcHNob3QgPT4ge1xyXG4gICAgICBzbmFwc2hvdC5wYXJhbU1hcC5rZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBwYXJhbXNba2V5XSA9IHNuYXBzaG90LnBhcmFtTWFwLmdldChrZXkpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYXZlcnNlcyB0aGUgcGF0aEZyb21Sb290IGFuZCBjb21iaW5lcyBhbGwgb2YgdGhlIHJvdXRlIHBhcmFtdGVycyBpbnRvXHJcbiAgICogb25lIFBhcmFtTWFwIGFuZCByZXR1cm5zIGl0XHJcbiAgICogQHBhcmFtIHJvdXRlIC0gQWN0aXZhdGVkUm91dGVTbmFwc2hvdFxyXG4gICAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2FwaS9yb3V0ZXIvQWN0aXZhdGVkUm91dGVTbmFwc2hvdCNwYXRoRnJvbVJvb3RcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0RnVsbFJvdXRlUGFyYW1NYXAocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBQYXJhbU1hcCB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldEZ1bGxSb3V0ZVBhcmFtcyhyb3V0ZSk7XHJcbiAgICByZXR1cm4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKTtcclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogVHJhdmVyc2VzIHRoZSBwYXRoRnJvbVJvb3QgYW5kIGNvbWJpbmVzIGFsbCBvZiB0aGUgcm91dGUgcGF0aHMgaW50b1xyXG4gICAqIGEgdXJsIGZyb20gcm9vdCB0byB0aGUgcHJvdmlkZWQgYWN0aXZhdGVkIHJvdXRlLlxyXG4gICAqIEBwYXJhbSByb3V0ZSAtIEFjdGl2YXRlZFJvdXRlU25hcHNob3RcclxuICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9hcGkvcm91dGVyL0FjdGl2YXRlZFJvdXRlU25hcHNob3QjcGF0aEZyb21Sb290XHJcbiAgICovXHJcbiAgcHVibGljIHNlcmlhbGl6ZVVybEZyb21Sb290KHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogc3RyaW5nIHtcclxuICAgIGxldCB1cmw6c3RyaW5nID0gJyc7XHJcbiAgICBjb25zdCBwYXRoczogc3RyaW5nW10gPSBbXTtcclxuICAgIHJvdXRlLnBhdGhGcm9tUm9vdC5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICByLnVybC5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgIHBhdGhzLnB1c2gocy5wYXRoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHVybCA9IHBhdGhzLmpvaW4oJy8nKTtcclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb29rIGF0IHRoZSBmaXJzdCB0d28gY2hpbGQgYWN0aXZhdGVkIHJvdXRlcyBvZiBhIHBhZ2Ugcm91dGUgYW5kIGNvbWJpbmUgdGhlIFxyXG4gICAqIHVybCBzZWdtZW50cyBvZiBlYWNoLiBUaGVzZSB3aWxsIGNvbnRhaW4gdGhlIHBhdGhzIGZvciB0aGUgY3VycmVudCB2aWV3IHRoYXRcclxuICAgKiBjb3JyZXNwb25kIHRvIGEgcHJpbWFyeSBhbmQgc2Vjb25kYXJ5IHRhYi4gQXNzdW1lcyB0aGUgVVJMIHN0cnVjdHVyZSBpcyBcclxuICAgKiAve3BhZ2V9L3twcmltYXJ5fS97c2Vjb25kYXJ5fVxyXG4gICAqIEBwYXJhbSBwYWdlUm91dGUgLSBUaGUgQWN0aXZhdGVkUm91dGUgZm9yIHRoZSAncGFnZScgcG9ydGlvbiBvZiB0aGUgdXJsLiBFLmcuIG1ldGVyLzptZXRlcklkXHJcbiAgICovXHJcbiAgcHVibGljIGdldFZpZXdVcmxTZWdtZW50cyhwYWdlUm91dGU6IEFjdGl2YXRlZFJvdXRlKTogVXJsU2VnbWVudFtdIHtcclxuICAgIGxldCBzZWdtZW50czogVXJsU2VnbWVudFtdID0gW107XHJcblxyXG4gICAgY29uc3QgcHJpbWFyeVZpZXdSb3V0ZTogQWN0aXZhdGVkUm91dGUgfCBudWxsID0gcGFnZVJvdXRlLmZpcnN0Q2hpbGQ7XHJcbiAgICBpZiAocHJpbWFyeVZpZXdSb3V0ZSkge1xyXG4gICAgICBzZWdtZW50cyA9IHNlZ21lbnRzLmNvbmNhdChwcmltYXJ5Vmlld1JvdXRlLnNuYXBzaG90LnVybCk7XHJcbiAgICAgIGNvbnN0IHNlY29uZGFyeVZpZXdSb3V0ZTogQWN0aXZhdGVkUm91dGUgfCBudWxsID0gcHJpbWFyeVZpZXdSb3V0ZS5maXJzdENoaWxkO1xyXG4gICAgICBpZiAoc2Vjb25kYXJ5Vmlld1JvdXRlKSB7XHJcbiAgICAgICAgc2VnbWVudHMgPSBzZWdtZW50cy5jb25jYXQoc2Vjb25kYXJ5Vmlld1JvdXRlLnNuYXBzaG90LnVybCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VnbWVudHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSAnbGFzdCBmaXJzdENoaWxkJyBvZiB0aGUgcHJvdmlkZWQgcm91dGUgdHJlZVxyXG4gICAqIEBwYXJhbSByb3V0ZSAtIEFjdGl2YXRlZFJvdXRlXHJcbiAgICovXHJcbiAgcHVibGljIGdldExhc3RSb3V0ZURlc2NlbmRhbnQocm91dGU6IEFjdGl2YXRlZFJvdXRlKTogQWN0aXZhdGVkUm91dGUge1xyXG4gICAgd2hpbGUgKHJvdXRlLmZpcnN0Q2hpbGQpIHtcclxuICAgICAgcm91dGUgPSByb3V0ZS5maXJzdENoaWxkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvdXRlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV3JhcCBjb2RlIHRoYXQgd2lsbCBmb3JjZSB0aGUgdXNlciB0byBuYXZpZ2F0ZSBiYXNlZCBvbiBzb21lIG5ldHdvcmsgY2FsbCBpbiBhIHBpZWNlIG9mIGxvZ2ljIHRoYXQgd2lsbCBjYW5jZWwgdGhlIGFjdGlvbiBpZiB0aGVyZSBpcyBhbm90aGVyXHJcbiAgICogbmF2aWdhdGlvbiBldmVudCB3aGlsZSB3ZSB3YWl0IGZvciB0aGUgY2FsbCB0byBjb21wbGV0ZS4gVGhpcyBpcyBhIGNvbW1vbiBwcm9ibGVtIHdpdGggdHJ5aW5nIHRvIHBpY2sgYSBkZWZhdWx0IGNoaWxkIHdoZW4gYSB1c2VyIHN3aXRjaGVzIGJldHdlZW4gbW9kdWxlcy5cclxuICAgKiBAcGFyYW0gYXN5bmNDYWxsIFRoZSBhc3luYyBjb2RlIHRvIGV4ZWN1dGUgd2hpbGUgd2F0Y2hpbmcgZm9yIHJvdXRlciBuYXZpZ2F0aW9uIGV2ZW50cy4gVGhpcyBjb2RlIGFsd2F5cyBleGVjdXRlZCBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZFxyXG4gICAqIEBwYXJhbSBkb0lmTm9OYXZpZ2F0aW9uIFRoZSBjb2RlIHRvIGV4ZWN1dGUgb25seSBpZiBubyBuYXZpZ2F0aW9uIGV2ZW50cyBoYXBwZW4gd2hpbGUgYXN5bmNDYWxsIGlzIGV4ZWN1dGluZy4gSXQgaXMgcGFzc2VkIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jIGNhbGxcclxuICAgKiBAcGFyYW0gcm91dGVyIFRoZSByb3V0ZXIgaW5zdGFuY2UgdG8gbGlzdGVuIGZvciBuYXZpZ2F0aW9uIGV2ZW50cy5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgZXhlY3V0ZVdpdGhOYXZpZ2F0aW9uV2F0Y2hlcjxUPihhc3luY0NhbGw6ICgpID0+IFByb21pc2U8VD4sIGRvSWZOb05hdmlnYXRpb246IChyZXN1bHQ6IFQpID0+IFByb21pc2U8dm9pZD4sIHJvdXRlcjogUm91dGVyKTogUHJvbWlzZTxUPiB7XHJcbiAgICBsZXQgZXZlbnRPY2N1cnJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgbGV0IHN1YnNjcmlwdGlvbiA9IHJvdXRlci5ldmVudHMucGlwZShcclxuICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCB8fCBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgZXZlbnRPY2N1cnJlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgYXN5bmNDYWxsKCk7XHJcbiAgICAgIGlmICghZXZlbnRPY2N1cnJlZCkge1xyXG4gICAgICAgIGF3YWl0IGRvSWZOb05hdmlnYXRpb24ocmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,89 @@
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ScrollService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
81
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ScrollService, providedIn: 'root' }); }
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ScrollService, decorators: [{
84
+ type: Injectable,
85
+ args: [{
86
+ providedIn: 'root'
87
+ }]
88
+ }], ctorParameters: () => [] });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS9zY3JvbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sYUFBYTtJQUV0QixnQkFBZ0IsQ0FBQztJQUVqQjs7Ozs7Ozs7O09BU0c7SUFDSSxZQUFZLENBQUMsdUJBQStCLEVBQUUscUJBQTZCLEVBQUUsVUFBVSxHQUFHLEVBQUU7UUFDL0YsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksYUFBYSxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakIsT0FBTztRQUNYLENBQUM7UUFFRCxJQUFJLFVBQVUsR0FBRyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGFBQWEsR0FBRyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUU1RCwyRUFBMkU7UUFDM0UsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDakYsZUFBZSxDQUFDLFNBQVM7Z0JBQ3JCLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7UUFDdEYsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSx3QkFBd0IsQ0FBQyx1QkFBK0I7UUFDM0QsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3RFLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEIsT0FBTyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsdUJBQXVCLG1CQUFtQixDQUFDLENBQUM7WUFDL0UsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyx1QkFBK0IsRUFBRSxRQUFnQjtRQUNyRSxJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDdEUsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNsQixlQUFlLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLHVCQUF1QixtQkFBbUIsQ0FBQyxDQUFDO1FBQ25GLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0JBQWtCLENBQUMsdUJBQStCLEVBQUUscUJBQTZCO1FBQ3BGLElBQUksQ0FBQztZQUNELElBQUksZUFBZSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN0RSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNsQixJQUFJLGVBQWUsR0FBRyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLENBQUM7Z0JBQ3JFLHVGQUF1RjtnQkFDdkYsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEdBQUcsRUFBRSxDQUFDLENBQUE7WUFDM0YsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyx5REFBeUQsdUJBQXVCLHVCQUF1QixxQkFBcUIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pKLENBQUM7SUFDTCxDQUFDOytHQWhGUSxhQUFhO21IQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTY3JvbGxTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBjb250YWluZXIgYW5kIHRoZSB0YXJnZXQgZWxlbWVudCB0byBzY3JvbGwgdG8sIHdlIHdpbGwgc2V0IHRoZSBzY3JvbGwgdG9wIG9uXHJcbiAgICAgKiAgdGhlIGNvbnRhaW5lciB0byBicmluZyB0aGUgdGFyZ2V0IGludG8gdmlldy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IgQSB2YWxpZCBDU1Mgc2VsZWN0b3Igc3RyaW5nIGZvciB0aGUgc2Nyb2xsIGNvbnRhaW5lci5cclxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50U2VsZWN0b3IgQSB2YWxpZCBDU1Mgc2VsZWN0b3Igc3RyaW5nIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQuXHJcbiAgICAgKiBAcGFyYW0gdG9wUGFkZGluZyBUaGUgYW1vdW50IG9mIHNwYWNlIHRvIGxlYXZlIGFib3ZlIHRoZSB0YXJnZXRcclxuICAgICAqIHRvIGtlZXAgaXQgZnJvbSBiZWluZyBwaW5uZWQgdG8gdGhlIHRvcCBvZiB0aGUgc2Nyb2xsQ29udGFpbmVyLiBEZWZhdWx0c1xyXG4gICAgICogdG8gMzJweCwgdGhlIGRlZmF1bHQgaGVpZ2h0IG9mIGEgbWVudSBpdGVtLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2Nyb2xsVG9JdGVtKHNjcm9sbENvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcsIHRhcmdldEVsZW1lbnRTZWxlY3Rvcjogc3RyaW5nLCB0b3BQYWRkaW5nID0gMzIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzY3JvbGxDb250YWluZXJTZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKCFzY3JvbGxDb250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdGFyZ2V0RWxlbWVudCA9IHNjcm9sbENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKHRhcmdldEVsZW1lbnRTZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKCF0YXJnZXRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXRSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBsZXQgY29udGFpbmVyUmVjdCA9IHNjcm9sbENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgLy8gT25seSBzY3JvbGwgaWYgdGhlIHRhcmdldCBpcyBvdXRzaWRlIG9mIHRoZSB2aWV3IGJvdW5kcyBvZiB0aGUgY29udGFpbmVyXHJcbiAgICAgICAgaWYgKHRhcmdldFJlY3QuYm90dG9tID4gY29udGFpbmVyUmVjdC5ib3R0b20gfHwgdGFyZ2V0UmVjdC50b3AgPCBjb250YWluZXJSZWN0LnRvcCkge1xyXG4gICAgICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID1cclxuICAgICAgICAgICAgICAgICh0YXJnZXRSZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wKSArIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgLSB0b3BQYWRkaW5nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbFRvcCBwcm9wZXJ0eSBmb3IgYW4gSFRNTEVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlY3RvclxyXG4gICAgICogQHBhcmFtIHNjcm9sbENvbnRhaW5lclNlbGVjdG9yIEEgdmFsaWQgQ1NTIHNlbGVjdG9yXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50U2Nyb2xsUG9zaXRpb24oc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3I6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHNjcm9sbENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IpO1xyXG4gICAgICAgIGlmIChzY3JvbGxDb250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3A7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU2Nyb2xsIGNvbnRhaW5lciAnJHtzY3JvbGxDb250YWluZXJTZWxlY3Rvcn0nIGRvZXMgbm90IGV4aXN0LmApO1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgdGhlIHNjcm9sbFRvcCBvZiBhbiBIVE1MRWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIHRvIGEgc3BlY2lmaWMgcG9zaXRpb25cclxuICAgICAqIEBwYXJhbSBzY3JvbGxDb250YWluZXJTZWxlY3RvciBBIHZhbGlkIENTUyBzZWxlY3RvclxyXG4gICAgICogQHBhcmFtIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzY3JvbGxUb1Bvc2l0aW9uKHNjcm9sbENvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzY3JvbGxDb250YWluZXJTZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKHNjcm9sbENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBzY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gcG9zaXRpb247XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU2Nyb2xsIGNvbnRhaW5lciAnJHtzY3JvbGxDb250YWluZXJTZWxlY3Rvcn0nIGRvZXMgbm90IGV4aXN0LmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqICBHaXZlbiBhIGNvbnRhaW5lciBhbmQgdGhlIHRhcmdldCBlbGVtZW50IHRvIHNjcm9sbCB0bywgd2Ugd2lsbCBzZXQgdGhlIHNjcm9sbCB0b3Agb25cclxuICAgICAqICB0aGUgY29udGFpbmVyIHRvIGJyaW5nIHRoZSB0YXJnZXQgaW50byB2aWV3LCB3aXRoIHRoZSBpdGVtIGluIHRoZSBjZW50ZXIgb2YgdGhlIHNjcm9sbCBjb250YWluZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNjcm9sbENvbnRhaW5lclNlbGVjdG9yIEEgdmFsaWQgQ1NTIHNlbGVjdG9yIHN0cmluZyBmb3IgdGhlIHNjcm9sbCBjb250YWluZXIuXHJcbiAgICAgKiBAcGFyYW0gdGFyZ2V0RWxlbWVudFNlbGVjdG9yIEEgdmFsaWQgQ1NTIHNlbGVjdG9yIHN0cmluZyBmb3IgdGhlIHRhcmdldCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2Nyb2xsSXRlbUNlbnRlcmVkKHNjcm9sbENvbnRhaW5lclNlbGVjdG9yOiBzdHJpbmcsIHRhcmdldEVsZW1lbnRTZWxlY3Rvcjogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHNjcm9sbENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICBpZiAoc2Nyb2xsQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29udGFpbmVySGVpZ2h0ID0gc2Nyb2xsQ29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgICAgICAgICAgIC8vIFBhZCB0aGUgdG9wIHdpdGggaGFsZiBvZiB0aGUgaGVpZ2h0IG9mIHRoZSBjb250YWluZXIgdG8gcHV0IHRoZSB0YXJnZXQgaW4gdGhlIG1pZGRsZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0l0ZW0oc2Nyb2xsQ29udGFpbmVyU2VsZWN0b3IsIHRhcmdldEVsZW1lbnRTZWxlY3RvciwgY29udGFpbmVySGVpZ2h0ICogLjUpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBzY3JvbGxpbmcgdGFyZ2V0IGludG8gdmlldy4gQ29udGFpbmVyIHNlbGVjdG9yOiAke3Njcm9sbENvbnRhaW5lclNlbGVjdG9yfS4gVGFyZ2V0IHNlbGVjdG9yOiAgJHt0YXJnZXRFbGVtZW50U2VsZWN0b3J9YCwgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,16 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /** Default No-op telemetry implementation */
4
+ export class TelemetryTrackerService {
5
+ trackPageView(pageName, url, properties) { }
6
+ trackEvent(name, properties, measurements) { }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TelemetryTrackerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TelemetryTrackerService, providedIn: 'root' }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TelemetryTrackerService, decorators: [{
11
+ type: Injectable,
12
+ args: [{
13
+ providedIn: 'root'
14
+ }]
15
+ }] });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LXRyYWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlL3RlbGVtZXRyeS10cmFja2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsNkNBQTZDO0FBQzdDLE1BQU0sT0FBTyx1QkFBdUI7SUFDM0IsYUFBYSxDQUFDLFFBQWdCLEVBQUUsR0FBVSxFQUFFLFVBQStDLElBQUksQ0FBQztJQUNoRyxVQUFVLENBQUMsSUFBWSxFQUFFLFVBQW1DLEVBQUUsWUFBb0MsSUFBSSxDQUFDOytHQUZuRyx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUh0QixNQUFNOzs0RkFHUCx1QkFBdUI7a0JBSm5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG4vKiogRGVmYXVsdCBOby1vcCB0ZWxlbWV0cnkgaW1wbGVtZW50YXRpb24gKi9cclxuZXhwb3J0IGNsYXNzIFRlbGVtZXRyeVRyYWNrZXJTZXJ2aWNlIHtcclxuICBwdWJsaWMgdHJhY2tQYWdlVmlldyhwYWdlTmFtZTogc3RyaW5nLCB1cmw6c3RyaW5nLCBwcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfSkgeyB9XHJcbiAgcHVibGljIHRyYWNrRXZlbnQobmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzoge1trZXk6IHN0cmluZ106c3RyaW5nfSwgbWVhc3VyZW1lbnRzPzoge1t2YWw6c3RyaW5nXTpudW1iZXJ9KSB7IH1cclxufVxyXG4iXX0=
@@ -0,0 +1,38 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./telemetry-tracker.service";
4
+ export class TelemetryService {
5
+ constructor(telemetryTrackerService) {
6
+ this.telemetryTrackerService = telemetryTrackerService;
7
+ }
8
+ /**
9
+ * Tracks a Page View / State change
10
+ *
11
+ * @param {string} pageName
12
+ * @param {string} url
13
+ * @memberof TelemetryService
14
+ */
15
+ trackPageView(pageName, url, properties) {
16
+ this.telemetryTrackerService.trackPageView(pageName, url, properties);
17
+ }
18
+ /**
19
+ * Tracks a generic event
20
+ *
21
+ * @param {string} name
22
+ * @param {{[key: string]:string}} [properties]
23
+ * @param {{[val:string]:number}} [measurements]
24
+ * @memberof TelemetryService
25
+ */
26
+ trackEvent(name, properties, measurements) {
27
+ this.telemetryTrackerService.trackEvent(name, properties, measurements);
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TelemetryService, deps: [{ token: i1.TelemetryTrackerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
30
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TelemetryService, providedIn: 'root' }); }
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TelemetryService, decorators: [{
33
+ type: Injectable,
34
+ args: [{
35
+ providedIn: 'root'
36
+ }]
37
+ }], ctorParameters: () => [{ type: i1.TelemetryTrackerService }] });
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFvQix1QkFBZ0Q7UUFBaEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtJQUFHLENBQUM7SUFFeEU7Ozs7OztPQU1HO0lBQ0ksYUFBYSxDQUFDLFFBQWdCLEVBQUUsR0FBVSxFQUFFLFVBQStDO1FBQ2hHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFVBQVUsQ0FBQyxJQUFZLEVBQUUsVUFBbUMsRUFBRSxZQUFvQztRQUN2RyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUUsQ0FBQzsrR0F6QlUsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlUcmFja2VyU2VydmljZSB9IGZyb20gJy4vdGVsZW1ldHJ5LXRyYWNrZXIuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZWxlbWV0cnlUcmFja2VyU2VydmljZTogVGVsZW1ldHJ5VHJhY2tlclNlcnZpY2UpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrcyBhIFBhZ2UgVmlldyAvIFN0YXRlIGNoYW5nZSBcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFnZU5hbWUgXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBcclxuICAgKiBAbWVtYmVyb2YgVGVsZW1ldHJ5U2VydmljZVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0cmFja1BhZ2VWaWV3KHBhZ2VOYW1lOiBzdHJpbmcsIHVybDpzdHJpbmcsIHByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9KSB7XHJcbiAgICB0aGlzLnRlbGVtZXRyeVRyYWNrZXJTZXJ2aWNlLnRyYWNrUGFnZVZpZXcocGFnZU5hbWUsIHVybCwgcHJvcGVydGllcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja3MgYSBnZW5lcmljIGV2ZW50XHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgXHJcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTpzdHJpbmd9fSBbcHJvcGVydGllc10gXHJcbiAgICogQHBhcmFtIHt7W3ZhbDpzdHJpbmddOm51bWJlcn19IFttZWFzdXJlbWVudHNdIFxyXG4gICAqIEBtZW1iZXJvZiBUZWxlbWV0cnlTZXJ2aWNlXHJcbiAgICovXHJcbiAgcHVibGljIHRyYWNrRXZlbnQobmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzoge1trZXk6IHN0cmluZ106c3RyaW5nfSwgbWVhc3VyZW1lbnRzPzoge1t2YWw6c3RyaW5nXTpudW1iZXJ9KSB7XHJcbiAgICB0aGlzLnRlbGVtZXRyeVRyYWNrZXJTZXJ2aWNlLnRyYWNrRXZlbnQobmFtZSwgcHJvcGVydGllcywgbWVhc3VyZW1lbnRzKTtcclxuICB9XHJcbn1cclxuIl19