@energycap/components 0.41.1-ECAP-26841-date-input-features.20250108-1149 → 0.42.1

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 (357) hide show
  1. package/{esm2020 → esm2022}/energycap-components.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/components.module.mjs +423 -423
  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 +91 -0
  9. package/esm2022/lib/controls/calendar/calendar.component.mjs +248 -0
  10. package/{esm2020 → esm2022}/lib/controls/calendar/calendar.types.mjs +1 -1
  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-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 +465 -0
  23. package/{esm2020 → esm2022}/lib/controls/date-input/date-input.types.mjs +44 -44
  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/{esm2020 → esm2022}/lib/controls/help-popover/help-popover.component.mjs +31 -31
  31. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
  32. package/{esm2020 → esm2022}/lib/controls/link-button/link-button.component.mjs +11 -11
  33. package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
  34. package/{esm2020 → esm2022}/lib/controls/navigation/link-item.mjs +1 -1
  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/{esm2020 → esm2022}/lib/controls/navigation/nav-item.mjs +1 -1
  38. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
  39. package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
  40. package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button-option.mjs +2 -2
  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/{esm2020 → esm2022}/lib/core/telemetry-tracker.service.mjs +16 -16
  52. package/{esm2020 → esm2022}/lib/core/telemetry.service.mjs +38 -38
  53. package/esm2022/lib/core/validation-message.service.mjs +185 -0
  54. package/{esm2020 → esm2022}/lib/core/validation-patterns.mjs +30 -30
  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/{esm2020 → esm2022}/lib/display/dialog/dialog-content.mjs +1 -1
  61. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  62. package/{esm2020 → esm2022}/lib/display/dialog/dialog-types.mjs +76 -76
  63. package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
  64. package/{esm2020 → esm2022}/lib/display/dialog/dialog.service.mjs +71 -71
  65. package/{esm2020 → esm2022}/lib/display/help/help-types.mjs +1 -1
  66. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  67. package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
  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/{esm2020 → esm2022}/lib/display/resizable/resizable.component.mjs +52 -52
  73. package/{esm2020 → esm2022}/lib/display/spinner/spinner.component.mjs +12 -12
  74. package/esm2022/lib/display/splash/splash.component.mjs +42 -0
  75. package/{esm2020 → esm2022}/lib/display/splash/splash.service.mjs +35 -35
  76. package/{esm2020 → esm2022}/lib/display/table/resizable-column.component.mjs +20 -20
  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/{esm2020 → esm2022}/lib/display/table/table-detail-row.component.mjs +19 -19
  80. package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
  81. package/{esm2020 → esm2022}/lib/display/table/table-master-header-row.component.mjs +14 -14
  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/{esm2020 → esm2022}/lib/display/toast/toast-types.mjs +7 -7
  90. package/{esm2020 → esm2022}/lib/display/toast/toast.service.mjs +35 -35
  91. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
  92. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.component.mjs +28 -28
  93. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.service.mjs +78 -78
  94. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  95. package/{esm2020 → esm2022}/lib/display/tour/tour-types.mjs +33 -33
  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/{esm2020 → esm2022}/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -100
  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/{esm2020 → esm2022}/lib/shared/page/page-statuses.mjs +22 -22
  115. package/{esm2020 → esm2022}/lib/shared/page/page-title/page-title.component.mjs +23 -23
  116. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
  117. package/{esm2020 → esm2022}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
  118. package/{esm2020 → esm2022}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
  119. package/{esm2020 → esm2022}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
  120. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  121. package/{esm2020 → esm2022}/lib/shared/testing/public-mocks.spec.mjs +148 -148
  122. package/{esm2020 → esm2022}/lib/shared/testing/spy-factory.spec.mjs +39 -39
  123. package/{esm2020 → esm2022}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
  124. package/{esm2020 → esm2022}/lib/shared/user-preference.service.mjs +17 -17
  125. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  126. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
  127. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
  128. package/{esm2020 → esm2022}/public-api.mjs +116 -116
  129. package/{fesm2020 → fesm2022}/energycap-components.mjs +12956 -12952
  130. package/fesm2022/energycap-components.mjs.map +1 -0
  131. package/index.d.ts +5 -5
  132. package/lib/components.module.d.ts +92 -92
  133. package/lib/controls/banner/banner.component.d.ts +50 -50
  134. package/lib/controls/button/button.component.d.ts +78 -78
  135. package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
  136. package/lib/controls/button/copy-button.directive.d.ts +14 -14
  137. package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
  138. package/lib/controls/calendar/calendar-item.component.d.ts +22 -22
  139. package/lib/controls/calendar/calendar.component.d.ts +52 -52
  140. package/lib/controls/calendar/calendar.types.d.ts +11 -11
  141. package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
  142. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
  143. package/lib/controls/combobox/combobox.component.d.ts +418 -418
  144. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -42
  145. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -21
  146. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -21
  147. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -21
  148. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -18
  149. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -18
  150. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -21
  151. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -20
  152. package/lib/controls/date-input/date-input.component.d.ts +115 -115
  153. package/lib/controls/date-input/date-input.types.d.ts +62 -62
  154. package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
  155. package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
  156. package/lib/controls/form-control/form-control.component.d.ts +28 -28
  157. package/lib/controls/form-control-base.d.ts +110 -110
  158. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
  159. package/lib/controls/form-group/form-group.component.d.ts +105 -105
  160. package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
  161. package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
  162. package/lib/controls/link-button/link-button.component.d.ts +5 -5
  163. package/lib/controls/menu/menu.component.d.ts +255 -255
  164. package/lib/controls/navigation/link-item.d.ts +32 -32
  165. package/lib/controls/navigation/nav-group.d.ts +18 -18
  166. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
  167. package/lib/controls/navigation/nav-item.d.ts +31 -31
  168. package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
  169. package/lib/controls/popover/popover.component.d.ts +51 -51
  170. package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
  171. package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
  172. package/lib/controls/select/select.component.d.ts +44 -44
  173. package/lib/controls/tabs/tabs.component.d.ts +30 -30
  174. package/lib/controls/textbox/textbox.component.d.ts +107 -107
  175. package/lib/core/cache.service.d.ts +33 -33
  176. package/lib/core/custom-validators.d.ts +20 -20
  177. package/lib/core/date-time-helper.d.ts +101 -101
  178. package/lib/core/error.service.d.ts +20 -20
  179. package/lib/core/router-helper.service.d.ts +48 -48
  180. package/lib/core/scroll.service.d.ts +36 -36
  181. package/lib/core/telemetry-tracker.service.d.ts +13 -13
  182. package/lib/core/telemetry.service.d.ts +31 -31
  183. package/lib/core/validation-message.service.d.ts +26 -26
  184. package/lib/core/validation-patterns.d.ts +22 -22
  185. package/lib/core/window.service.d.ts +116 -116
  186. package/lib/display/app-bar/app-bar.component.d.ts +20 -20
  187. package/lib/display/avatar/avatar.component.d.ts +35 -35
  188. package/lib/display/avatar/avatar.service.d.ts +24 -24
  189. package/lib/display/confirm/confirm.component.d.ts +123 -123
  190. package/lib/display/dialog/dialog-content.d.ts +19 -19
  191. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
  192. package/lib/display/dialog/dialog-types.d.ts +130 -130
  193. package/lib/display/dialog/dialog.component.d.ts +120 -120
  194. package/lib/display/dialog/dialog.service.d.ts +48 -48
  195. package/lib/display/help/help-types.d.ts +33 -33
  196. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
  197. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
  198. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
  199. package/lib/display/item-display/item-display.component.d.ts +43 -43
  200. package/lib/display/json-display/json-display.component.d.ts +16 -16
  201. package/lib/display/resizable/resizable-base.d.ts +67 -67
  202. package/lib/display/resizable/resizable.component.d.ts +31 -31
  203. package/lib/display/spinner/spinner.component.d.ts +5 -5
  204. package/lib/display/splash/splash.component.d.ts +16 -16
  205. package/lib/display/splash/splash.service.d.ts +22 -22
  206. package/lib/display/table/resizable-column.component.d.ts +10 -10
  207. package/lib/display/table/resizable-table.directive.d.ts +93 -93
  208. package/lib/display/table/searchable-table.component.d.ts +206 -206
  209. package/lib/display/table/table-detail-row.component.d.ts +8 -8
  210. package/lib/display/table/table-locked-column.component.d.ts +20 -20
  211. package/lib/display/table/table-master-header-row.component.d.ts +9 -9
  212. package/lib/display/table/table-master-row.component.d.ts +113 -113
  213. package/lib/display/table/table-pagination.component.d.ts +91 -91
  214. package/lib/display/table/table-selectable-row.component.d.ts +102 -102
  215. package/lib/display/table/table.component.d.ts +121 -121
  216. package/lib/display/tags/tag.d.ts +18 -18
  217. package/lib/display/tags/tags.component.d.ts +48 -48
  218. package/lib/display/toast/toast/toast.component.d.ts +23 -23
  219. package/lib/display/toast/toast-types.d.ts +24 -24
  220. package/lib/display/toast/toast.service.d.ts +20 -20
  221. package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
  222. package/lib/display/tooltip/tooltip.component.d.ts +70 -70
  223. package/lib/display/tooltip/tooltip.service.d.ts +16 -16
  224. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
  225. package/lib/display/tour/tour-types.d.ts +70 -70
  226. package/lib/display/tour/tour.component.d.ts +147 -147
  227. package/lib/display/tour/tour.service.d.ts +38 -38
  228. package/lib/display/tree/tree.component.d.ts +75 -75
  229. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
  230. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
  231. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
  232. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -23
  233. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
  234. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
  235. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
  236. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
  237. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
  238. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
  239. package/lib/shared/display.d.ts +42 -42
  240. package/lib/shared/form-group.helper.d.ts +31 -31
  241. package/lib/shared/json-helper.d.ts +7 -7
  242. package/lib/shared/lodash-helper.d.ts +18 -18
  243. package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
  244. package/lib/shared/page/page-statuses.d.ts +13 -13
  245. package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
  246. package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
  247. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
  248. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
  249. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
  250. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
  251. package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
  252. package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
  253. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
  254. package/lib/shared/user-preference.service.d.ts +13 -13
  255. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
  256. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
  257. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
  258. package/package.json +12 -18
  259. package/public-api.d.ts +113 -113
  260. package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
  261. package/schematics/rxjs-7-upgrade/index.js +67 -67
  262. package/schematics/rxjs-7-upgrade/index.js.map +1 -1
  263. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
  264. package/schematics/rxjs-7-upgrade/schema.js +2 -2
  265. package/schematics/utilities/typescript.d.ts +7 -7
  266. package/schematics/utilities/typescript.js +41 -41
  267. package/schematics/utilities/workspace.d.ts +8 -8
  268. package/schematics/utilities/workspace.js +71 -71
  269. package/schematics/utilities/workspace.js.map +1 -1
  270. package/esm2020/lib/controls/banner/banner.component.mjs +0 -109
  271. package/esm2020/lib/controls/button/button.component.mjs +0 -106
  272. package/esm2020/lib/controls/button/copy-button-base.directive.mjs +0 -67
  273. package/esm2020/lib/controls/button/copy-table-button.directive.mjs +0 -43
  274. package/esm2020/lib/controls/calendar/calendar-item.component.mjs +0 -91
  275. package/esm2020/lib/controls/calendar/calendar.component.mjs +0 -248
  276. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +0 -140
  277. package/esm2020/lib/controls/combobox/combobox.component.mjs +0 -879
  278. package/esm2020/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  279. package/esm2020/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  280. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  281. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  282. package/esm2020/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  283. package/esm2020/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  284. package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  285. package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  286. package/esm2020/lib/controls/date-input/date-input.component.mjs +0 -465
  287. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +0 -243
  288. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +0 -261
  289. package/esm2020/lib/controls/form-control/form-control.component.mjs +0 -98
  290. package/esm2020/lib/controls/form-control-base.mjs +0 -151
  291. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  292. package/esm2020/lib/controls/form-group/form-group.component.mjs +0 -261
  293. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +0 -329
  294. package/esm2020/lib/controls/menu/menu.component.mjs +0 -485
  295. package/esm2020/lib/controls/navigation/nav-group.mjs +0 -39
  296. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  297. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +0 -372
  298. package/esm2020/lib/controls/popover/popover.component.mjs +0 -117
  299. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +0 -82
  300. package/esm2020/lib/controls/select/select.component.mjs +0 -88
  301. package/esm2020/lib/controls/tabs/tabs.component.mjs +0 -47
  302. package/esm2020/lib/controls/textbox/textbox.component.mjs +0 -155
  303. package/esm2020/lib/core/cache.service.mjs +0 -105
  304. package/esm2020/lib/core/custom-validators.mjs +0 -29
  305. package/esm2020/lib/core/date-time-helper.mjs +0 -228
  306. package/esm2020/lib/core/error.service.mjs +0 -61
  307. package/esm2020/lib/core/router-helper.service.mjs +0 -111
  308. package/esm2020/lib/core/scroll.service.mjs +0 -89
  309. package/esm2020/lib/core/validation-message.service.mjs +0 -185
  310. package/esm2020/lib/core/window.service.mjs +0 -186
  311. package/esm2020/lib/display/app-bar/app-bar.component.mjs +0 -46
  312. package/esm2020/lib/display/avatar/avatar.component.mjs +0 -67
  313. package/esm2020/lib/display/avatar/avatar.service.mjs +0 -64
  314. package/esm2020/lib/display/confirm/confirm.component.mjs +0 -168
  315. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  316. package/esm2020/lib/display/dialog/dialog.component.mjs +0 -281
  317. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  318. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
  319. package/esm2020/lib/display/item-display/item-display.component.mjs +0 -81
  320. package/esm2020/lib/display/json-display/json-display.component.mjs +0 -47
  321. package/esm2020/lib/display/resizable/resizable-base.mjs +0 -120
  322. package/esm2020/lib/display/splash/splash.component.mjs +0 -42
  323. package/esm2020/lib/display/table/resizable-table.directive.mjs +0 -227
  324. package/esm2020/lib/display/table/searchable-table.component.mjs +0 -342
  325. package/esm2020/lib/display/table/table-locked-column.component.mjs +0 -58
  326. package/esm2020/lib/display/table/table-master-row.component.mjs +0 -163
  327. package/esm2020/lib/display/table/table-pagination.component.mjs +0 -155
  328. package/esm2020/lib/display/table/table-selectable-row.component.mjs +0 -235
  329. package/esm2020/lib/display/table/table.component.mjs +0 -249
  330. package/esm2020/lib/display/tags/tag.mjs +0 -18
  331. package/esm2020/lib/display/tags/tags.component.mjs +0 -77
  332. package/esm2020/lib/display/toast/toast/toast.component.mjs +0 -77
  333. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +0 -114
  334. package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  335. package/esm2020/lib/display/tour/tour.component.mjs +0 -398
  336. package/esm2020/lib/display/tour/tour.service.mjs +0 -75
  337. package/esm2020/lib/display/tree/tree.component.mjs +0 -135
  338. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  339. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  340. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  341. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +0 -163
  342. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
  343. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  344. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  345. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  346. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  347. package/esm2020/lib/shared/display.mjs +0 -6
  348. package/esm2020/lib/shared/form-group.helper.mjs +0 -67
  349. package/esm2020/lib/shared/json-helper.mjs +0 -19
  350. package/esm2020/lib/shared/lodash-helper.mjs +0 -51
  351. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +0 -387
  352. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +0 -147
  353. package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  354. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  355. package/fesm2015/energycap-components.mjs +0 -13373
  356. package/fesm2015/energycap-components.mjs.map +0 -1
  357. package/fesm2020/energycap-components.mjs.map +0 -1
@@ -1,185 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { forkJoin, lastValueFrom } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@ngx-translate/core";
5
- import * as i2 from "../shared/display/pipes/date-display.pipe";
6
- /**
7
- * "Weak Type" describing interpolation parameters for NumericBox
8
- */
9
- class NumericBoxInterpolationParameters {
10
- }
11
- /**
12
- * Service to take {@link ValidationErrors} and return meaningful error messages
13
- */
14
- export class ValidationMessageService {
15
- constructor(translate, dateDisplayPipe) {
16
- this.translate = translate;
17
- this.dateDisplayPipe = dateDisplayPipe;
18
- }
19
- /**
20
- * Get meaningful error messages from {@link ValidationErrors}
21
- */
22
- getErrorMessages(errors) {
23
- /** Array of observables returned from the TranslateService. */
24
- let translationObservables = new Array();
25
- if (errors !== null) {
26
- for (var errorKey in errors) {
27
- // it would be nice to have typing on the ValidationErrors
28
- let error = errors[errorKey];
29
- switch (errorKey) {
30
- case 'email':
31
- translationObservables.push(this.translate.get('InvalidEmailValidationMessage_LC'));
32
- break;
33
- case 'required':
34
- translationObservables.push(this.translate.get('is required'));
35
- break;
36
- case 'requiredPlural':
37
- translationObservables.push(this.translate.get('RequiredPluralValidationMessage_LC'));
38
- break;
39
- case 'minlength':
40
- translationObservables.push(this.translate
41
- .get('MinLengthValidationMessage_LC', { minLength: error.requiredLength }));
42
- break;
43
- case 'maxlength':
44
- translationObservables.push(this.translate
45
- .get(`MaxLengthValidationMessage`, { maxLength: error.requiredLength }));
46
- break;
47
- case 'pattern':
48
- translationObservables.push(this.translate.get('IncorrectFormat_LC'));
49
- break;
50
- case 'min':
51
- translationObservables.push(this.translate
52
- .get('MinValueValidationMessage_LC', { minValue: error.min }));
53
- break;
54
- case 'max':
55
- translationObservables.push(this.translate
56
- .get('MaxValueValidationMessage_LC', { maxValue: error.max }));
57
- break;
58
- case 'zipCodeInvalidFormat':
59
- translationObservables.push(this.translate.get('must be 5–9 numbers'));
60
- break;
61
- case 'postalCodeInvalidFormat':
62
- translationObservables.push(this.translate
63
- .get('must be 6 characters, alternating letters and numbers'));
64
- break;
65
- case 'zipCodeNotFound':
66
- translationObservables.push(this.translate
67
- .get('ZipCodeNotFoundValidationMessage_LC'));
68
- break;
69
- // Custom validator from the NumericboxComponent
70
- case 'numericbox':
71
- translationObservables.push(this.getNumericBoxValidationMessages(error));
72
- break;
73
- case 'addnew':
74
- translationObservables.push(this.translate.get('CouldNotBeAddedValidationMessage_LC'));
75
- break;
76
- // Kendo datepicker min error
77
- case 'minError':
78
- case 'minDate':
79
- var value = this.dateDisplayPipe.transform(error.minValue);
80
- translationObservables.push(this.translate
81
- .get('MinValueValidationMessage_LC', { minValue: value }));
82
- break;
83
- // Kendo datepicker max error
84
- case 'maxError':
85
- case 'maxDate':
86
- var value = this.dateDisplayPipe.transform(error.maxValue, true);
87
- translationObservables.push(this.translate
88
- .get('MaxValueValidationMessage_LC', { maxValue: value }));
89
- break;
90
- // Custom validator for the DateRangeComponent
91
- case 'dateRange':
92
- translationObservables.push(this.translate.get('DateRangeValidationMessage_LC'));
93
- break;
94
- case 'password':
95
- translationObservables.push(this.translate.get('PasswordValidationMessage_LC'));
96
- break;
97
- // Custom validator from the TextboxComponent
98
- case 'textbox':
99
- translationObservables.push(this.getTextBoxValidationMessages(error));
100
- break;
101
- case 'notUnique':
102
- translationObservables.push(this.translate.get('MustBeUnique_LC'));
103
- break;
104
- case 'json':
105
- translationObservables.push(this.translate.get('JsonValidationMessage_SC'));
106
- break;
107
- case 'passwordInvalid':
108
- translationObservables.push(this.translate.get('PasswordInvalidValidationMessage_LC'));
109
- break;
110
- case 'domain':
111
- translationObservables.push(this.translate.get('DomainValidationMessage_SC'));
112
- break;
113
- case 'invalidFile':
114
- case 'invalidFormula':
115
- translationObservables.push(this.translate.get('is invalid'));
116
- break;
117
- default:
118
- break;
119
- }
120
- }
121
- if (translationObservables.length > 0) {
122
- // forkJoin returns an Observable that emits when all its observables complete.
123
- // When forkjoin emits, it emits an array containing the last value returned from
124
- // each of its observables.
125
- // @see https://www.learnrxjs.io/operators/combination/forkjoin.html
126
- // We convert this to a promise so the form controls can display the error messages
127
- // asynchronously.
128
- return lastValueFrom(forkJoin(translationObservables));
129
- }
130
- }
131
- return Promise.resolve(new Array());
132
- }
133
- /**
134
- * Get proper validation message for @see NumericBoxComponent
135
- */
136
- getNumericBoxValidationMessages(error) {
137
- let interpolationParameters = {};
138
- let type = 'Integer';
139
- if (error.decimals) {
140
- interpolationParameters.precision = error.decimals;
141
- type = 'Decimal';
142
- }
143
- if (error.min !== undefined && error.max !== undefined) {
144
- interpolationParameters.minValue = error.min;
145
- interpolationParameters.maxValue = error.max;
146
- return this.translate.get(`${type}BetweenValidationMessage_LC`, interpolationParameters);
147
- }
148
- if (error.min !== undefined) {
149
- interpolationParameters.minValue = error.min;
150
- return this.translate.get(`${type}MinValidationMessage_LC`, interpolationParameters);
151
- }
152
- if (error.max !== undefined) {
153
- interpolationParameters.maxValue = error.max;
154
- return this.translate.get(`${type}MaxValidationMessage_LC`, interpolationParameters);
155
- }
156
- if (error.maxPrecisionDigits) {
157
- interpolationParameters.maxPrecisionDigits = error.maxPrecisionDigits;
158
- return this.translate.get('MaxPrecisionDigitsValidationMessage_LC', interpolationParameters);
159
- }
160
- if (error.decimals) {
161
- return this.translate.get('DecimalValidationMessage_LC', interpolationParameters);
162
- }
163
- return this.translate.get('IncorrectFormat_LC');
164
- }
165
- /**
166
- * Given the advanced textbox validation params construct the error message
167
- */
168
- getTextBoxValidationMessages(error) {
169
- if (error.unique) {
170
- return this.translate.get('TextboxRequiredAndUnique_LC', { minLength: error.minLength, maxLength: error.maxLength });
171
- }
172
- else {
173
- return this.translate.get('TextboxRequired_LC', { minLength: error.minLength, maxLength: error.maxLength });
174
- }
175
- }
176
- }
177
- ValidationMessageService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValidationMessageService, deps: [{ token: i1.TranslateService }, { token: i2.DateDisplayPipe }], target: i0.ɵɵFactoryTarget.Injectable });
178
- ValidationMessageService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValidationMessageService, providedIn: 'root' });
179
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ValidationMessageService, decorators: [{
180
- type: Injectable,
181
- args: [{
182
- providedIn: 'root'
183
- }]
184
- }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.DateDisplayPipe }]; } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBSzNEOztHQUVHO0FBQ0gsTUFBTSxpQ0FBaUM7Q0FNdEM7QUFFRDs7R0FFRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsWUFDWSxTQUEyQixFQUMzQixlQUFnQztRQURoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDeEMsQ0FBQztJQUdMOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsTUFBK0I7UUFFbkQsK0RBQStEO1FBQy9ELElBQUksc0JBQXNCLEdBQUcsSUFBSSxLQUFLLEVBQXNCLENBQUM7UUFFN0QsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBRWpCLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO2dCQUN6QiwwREFBMEQ7Z0JBQzFELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0IsUUFBUSxRQUFRLEVBQUU7b0JBQ2QsS0FBSyxPQUFPO3dCQUNSLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUM7d0JBQ3BGLE1BQU07b0JBRVYsS0FBSyxVQUFVO3dCQUNYLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUM3RCxNQUFNO29CQUNW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QUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMvRztJQUNMLENBQUM7O3FIQXhNVSx3QkFBd0I7eUhBQXhCLHdCQUF3QixjQUZ2QixNQUFNOzJGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFRleHRib3hWYWxpZGF0b3JQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vY29udHJvbHMvdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVEaXNwbGF5UGlwZSB9IGZyb20gJy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL2RhdGUtZGlzcGxheS5waXBlJztcclxuXHJcbi8qKlxyXG4gKiBcIldlYWsgVHlwZVwiIGRlc2NyaWJpbmcgaW50ZXJwb2xhdGlvbiBwYXJhbWV0ZXJzIGZvciBOdW1lcmljQm94XHJcbiAqL1xyXG5jbGFzcyBOdW1lcmljQm94SW50ZXJwb2xhdGlvblBhcmFtZXRlcnMge1xyXG4gICAgcHVibGljIHByZWNpc2lvbj86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtaW5WYWx1ZT86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtYXhWYWx1ZT86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtaW5NYXhSYW5nZT86IHN0cmluZztcclxuICAgIHB1YmxpYyBtYXhQcmVjaXNpb25EaWdpdHM/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIHRvIHRha2Uge0BsaW5rIFZhbGlkYXRpb25FcnJvcnN9IGFuZCByZXR1cm4gbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlc1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGRhdGVEaXNwbGF5UGlwZTogRGF0ZURpc3BsYXlQaXBlXHJcbiAgKSB7IH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VzIGZyb20ge0BsaW5rIFZhbGlkYXRpb25FcnJvcnN9XHJcbiAgICovXHJcbiAgcHVibGljIGdldEVycm9yTWVzc2FnZXMoZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCk6IFByb21pc2U8QXJyYXk8YW55Pj4ge1xyXG5cclxuICAgICAgLyoqIEFycmF5IG9mIG9ic2VydmFibGVzIHJldHVybmVkIGZyb20gdGhlIFRyYW5zbGF0ZVNlcnZpY2UuICovXHJcbiAgICAgIGxldCB0cmFuc2xhdGlvbk9ic2VydmFibGVzID0gbmV3IEFycmF5PE9ic2VydmFibGU8c3RyaW5nPj4oKTtcclxuXHJcbiAgICAgIGlmIChlcnJvcnMgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICBmb3IgKHZhciBlcnJvcktleSBpbiBlcnJvcnMpIHtcclxuICAgICAgICAgICAgICAvLyBpdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgdHlwaW5nIG9uIHRoZSBWYWxpZGF0aW9uRXJyb3JzXHJcbiAgICAgICAgICAgICAgbGV0IGVycm9yID0gZXJyb3JzW2Vycm9yS2V5XTtcclxuXHJcbiAgICAgICAgICAgICAgc3dpdGNoIChlcnJvcktleSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdlbWFpbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdJbnZhbGlkRW1haWxWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnaXMgcmVxdWlyZWQnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkUGx1cmFsJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnUmVxdWlyZWRQbHVyYWxWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01pbkxlbmd0aFZhbGlkYXRpb25NZXNzYWdlX0xDJywgeyBtaW5MZW5ndGg6IGVycm9yLnJlcXVpcmVkTGVuZ3RoIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoYE1heExlbmd0aFZhbGlkYXRpb25NZXNzYWdlYCwgeyBtYXhMZW5ndGg6IGVycm9yLnJlcXVpcmVkTGVuZ3RoIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAncGF0dGVybic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdJbmNvcnJlY3RGb3JtYXRfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdNaW5WYWx1ZVZhbGlkYXRpb25NZXNzYWdlX0xDJywgeyBtaW5WYWx1ZTogZXJyb3IubWluIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01heFZhbHVlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCB7IG1heFZhbHVlOiBlcnJvci5tYXggfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd6aXBDb2RlSW52YWxpZEZvcm1hdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdtdXN0IGJlIDXigJM5IG51bWJlcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bvc3RhbENvZGVJbnZhbGlkRm9ybWF0JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ211c3QgYmUgNiBjaGFyYWN0ZXJzLCBhbHRlcm5hdGluZyBsZXR0ZXJzIGFuZCBudW1iZXJzJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd6aXBDb2RlTm90Rm91bmQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnWmlwQ29kZU5vdEZvdW5kVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbSB2YWxpZGF0b3IgZnJvbSB0aGUgTnVtZXJpY2JveENvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdudW1lcmljYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLmdldE51bWVyaWNCb3hWYWxpZGF0aW9uTWVzc2FnZXMoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnYWRkbmV3JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ0NvdWxkTm90QmVBZGRlZFZhbGlkYXRpb25NZXNzYWdlX0xDJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBLZW5kbyBkYXRlcGlja2VyIG1pbiBlcnJvclxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdtaW5FcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbkRhdGUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5kYXRlRGlzcGxheVBpcGUudHJhbnNmb3JtKGVycm9yLm1pblZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01pblZhbHVlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCB7IG1pblZhbHVlOiB2YWx1ZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEtlbmRvIGRhdGVwaWNrZXIgbWF4IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21heEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4RGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRhdGVEaXNwbGF5UGlwZS50cmFuc2Zvcm0oZXJyb3IubWF4VmFsdWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnTWF4VmFsdWVWYWxpZGF0aW9uTWVzc2FnZV9MQycsIHsgbWF4VmFsdWU6IHZhbHVlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gQ3VzdG9tIHZhbGlkYXRvciBmb3IgdGhlIERhdGVSYW5nZUNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRlUmFuZ2UnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnRGF0ZVJhbmdlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ1Bhc3N3b3JkVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbSB2YWxpZGF0b3IgZnJvbSB0aGUgVGV4dGJveENvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0Ym94JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLmdldFRleHRCb3hWYWxpZGF0aW9uTWVzc2FnZXMoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbm90VW5pcXVlJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ011c3RCZVVuaXF1ZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdKc29uVmFsaWRhdGlvbk1lc3NhZ2VfU0MnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3N3b3JkSW52YWxpZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdQYXNzd29yZEludmFsaWRWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnZG9tYWluJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ0RvbWFpblZhbGlkYXRpb25NZXNzYWdlX1NDJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2ludmFsaWRGaWxlJzpcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnaW52YWxpZEZvcm11bGEnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnaXMgaW52YWxpZCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0cmFuc2xhdGlvbk9ic2VydmFibGVzLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gZm9ya0pvaW4gcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiBhbGwgaXRzIG9ic2VydmFibGVzIGNvbXBsZXRlLlxyXG4gICAgICAgICAgICAgIC8vIFdoZW4gZm9ya2pvaW4gZW1pdHMsIGl0IGVtaXRzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxhc3QgdmFsdWUgcmV0dXJuZWQgZnJvbVxyXG4gICAgICAgICAgICAgIC8vIGVhY2ggb2YgaXRzIG9ic2VydmFibGVzLlxyXG4gICAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly93d3cubGVhcm5yeGpzLmlvL29wZXJhdG9ycy9jb21iaW5hdGlvbi9mb3Jram9pbi5odG1sXHJcbiAgICAgICAgICAgICAgLy8gV2UgY29udmVydCB0aGlzIHRvIGEgcHJvbWlzZSBzbyB0aGUgZm9ybSBjb250cm9scyBjYW4gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZXNcclxuICAgICAgICAgICAgICAvLyBhc3luY2hyb25vdXNseS5cclxuICAgICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShmb3JrSm9pbih0cmFuc2xhdGlvbk9ic2VydmFibGVzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEFycmF5PHN0cmluZz4oKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHByb3BlciB2YWxpZGF0aW9uIG1lc3NhZ2UgZm9yIEBzZWUgTnVtZXJpY0JveENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0TnVtZXJpY0JveFZhbGlkYXRpb25NZXNzYWdlcyhlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgbGV0IGludGVycG9sYXRpb25QYXJhbWV0ZXJzOiBOdW1lcmljQm94SW50ZXJwb2xhdGlvblBhcmFtZXRlcnMgPSB7fTtcclxuICAgICAgbGV0IHR5cGU6IHN0cmluZyA9ICdJbnRlZ2VyJztcclxuXHJcbiAgICAgIGlmIChlcnJvci5kZWNpbWFscykge1xyXG4gICAgICAgICAgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMucHJlY2lzaW9uID0gZXJyb3IuZGVjaW1hbHM7XHJcbiAgICAgICAgICB0eXBlID0gJ0RlY2ltYWwnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWluICE9PSB1bmRlZmluZWQgJiYgZXJyb3IubWF4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1pblZhbHVlID0gZXJyb3IubWluO1xyXG4gICAgICAgICAgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMubWF4VmFsdWUgPSBlcnJvci5tYXg7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KGAke3R5cGV9QmV0d2VlblZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWluICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1pblZhbHVlID0gZXJyb3IubWluO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldChgJHt0eXBlfU1pblZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWF4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1heFZhbHVlID0gZXJyb3IubWF4O1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldChgJHt0eXBlfU1heFZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWF4UHJlY2lzaW9uRGlnaXRzKSB7XHJcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uUGFyYW1ldGVycy5tYXhQcmVjaXNpb25EaWdpdHMgPSBlcnJvci5tYXhQcmVjaXNpb25EaWdpdHM7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KCdNYXhQcmVjaXNpb25EaWdpdHNWYWxpZGF0aW9uTWVzc2FnZV9MQycsIGludGVycG9sYXRpb25QYXJhbWV0ZXJzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVycm9yLmRlY2ltYWxzKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KCdEZWNpbWFsVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCBpbnRlcnBvbGF0aW9uUGFyYW1ldGVycyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0luY29ycmVjdEZvcm1hdF9MQycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gdGhlIGFkdmFuY2VkIHRleHRib3ggdmFsaWRhdGlvbiBwYXJhbXMgY29uc3RydWN0IHRoZSBlcnJvciBtZXNzYWdlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRUZXh0Qm94VmFsaWRhdGlvbk1lc3NhZ2VzKGVycm9yOiBUZXh0Ym94VmFsaWRhdG9yUGFyYW1ldGVycyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIGlmIChlcnJvci51bmlxdWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ1RleHRib3hSZXF1aXJlZEFuZFVuaXF1ZV9MQycsIHsgbWluTGVuZ3RoOiBlcnJvci5taW5MZW5ndGgsIG1heExlbmd0aDogZXJyb3IubWF4TGVuZ3RoIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldCgnVGV4dGJveFJlcXVpcmVkX0xDJywgeyBtaW5MZW5ndGg6IGVycm9yLm1pbkxlbmd0aCwgbWF4TGVuZ3RoOiBlcnJvci5tYXhMZW5ndGggfSk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
@@ -1,186 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { fromEvent } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/router";
5
- /**
6
- * Service to help with interfacing with the window object
7
- * and navigating around the application (going outside of the Angular 2+ router)
8
- */
9
- export class WindowService {
10
- /**
11
- * Tracks if there are any unsaved changes that the user could lose.
12
- *
13
- * It is set up as `get` only because it is set with `addNavigateAwayPrompt`.
14
- *
15
- * This also includes adding a prompt to the window itself (in addition to
16
- * working with the `CanDeactivateUnsavedChanges` guard) to cover page reloads
17
- * which do not trigger router events.
18
- */
19
- get hasUnsavedChanges() {
20
- return this._hasUnsavedChanges;
21
- }
22
- /**
23
- * Expose the innerWidth on the window global. Protects against errors when code
24
- * is running on a non-browser platform.
25
- */
26
- get innerWidth() {
27
- return window ? window.innerWidth : undefined;
28
- }
29
- constructor(router, activatedRoute) {
30
- this.router = router;
31
- this.activatedRoute = activatedRoute;
32
- this._hasUnsavedChanges = false;
33
- /**
34
- * Function called when the window `beforeunload` event is fired.
35
- *
36
- * A reference to the function that was passed to `window.addEventListener`
37
- * must be retained for `window.removeEventListener` to function properly.
38
- *
39
- * Some browsers require the event's `returnValue` to be set to show the confirmation
40
- * dialog.
41
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
42
- */
43
- this.beforeUnloadFunction = (event) => {
44
- // Cancel the event as stated by the standard.
45
- event.preventDefault();
46
- // Chrome requires returnValue to be set.
47
- event.returnValue = '';
48
- };
49
- if (window) {
50
- this.resized = fromEvent(window, 'resize');
51
- }
52
- }
53
- /**
54
- * Navigates to the previous page the user had visited
55
- */
56
- goBack() {
57
- window.history.back();
58
- }
59
- /**An abstraction around the browsers window history length.
60
- * Returns zero if unable to access or running outside a browser context
61
- */
62
- getHistoryLength() {
63
- return window?.history?.length || 0;
64
- }
65
- /**
66
- * Navigate to any url you know the path to
67
- * @param url The URL to navigate to
68
- *
69
- * @deprecated For legacy support only; use `router.navigateByUrl` instead
70
- */
71
- async navigateToUrl(url) {
72
- try {
73
- if (url.indexOf('/app/') === 0) {
74
- await this.router.navigateByUrl(url.substring(5));
75
- }
76
- else {
77
- await this.router.navigateByUrl(url);
78
- }
79
- }
80
- catch (e) {
81
- // If the router throws we will try to navigate to the fully qualified url as a last ditch effort.
82
- // This can happen if we missed a link that needs to be converted to ng5 or our ng1Href directive
83
- // didn't handle a link correctly
84
- window.location.href = url;
85
- }
86
- }
87
- /**
88
- * Adds a `beforeunload` function to the window to alert the user that there are about to leave
89
- * the current page and ask if they'd like to leave or stay
90
- */
91
- addNavigateAwayPrompt() {
92
- this._hasUnsavedChanges = true;
93
- window.addEventListener("beforeunload", this.beforeUnloadFunction);
94
- }
95
- /**
96
- * Removes the `beforeunload` function added to the window
97
- */
98
- removeNavigateAwayPrompt() {
99
- this._hasUnsavedChanges = false;
100
- window.removeEventListener("beforeunload", this.beforeUnloadFunction);
101
- }
102
- /**
103
- * Send data to another window.
104
- *
105
- * __SECURITY RISK__ - Always use a specific target origin. Failing to provide a specific target origin can allow
106
- * malicious sites to receive the message.
107
- *
108
- * @param targetWindow - Window to send the message to
109
- * @param message - Data to send
110
- * @param targetOrigin - What the URI of the target window must be for the message to be sent.
111
- * If sending data to another EnergyCAP window, this should always be `window.location.origin` to ensure
112
- * that only instances of EnergyCAP app receive the message.
113
- */
114
- postMessage(targetWindow, message, targetOrigin) {
115
- targetWindow.postMessage(message, targetOrigin);
116
- }
117
- /**
118
- * Open a new window
119
- * @param url - The URL of the resource to be loaded
120
- */
121
- openNew(url) {
122
- window.open(url, '_blank');
123
- }
124
- /**
125
- * A wrapper around the router for changing the query params for the current url
126
- * without creating a new history entry or removing any existing query parameters.
127
- * The provided params are updated if they already exist or added to the url if they don't
128
- *
129
- * @returns a promise that resolves to true if the navigation succeeds, false if something (like a guard) blocks it.
130
- * In normal use, the navigation should succeed unless we use query params to block access to a route the user is already on
131
- */
132
- async modifyHistoryQueryParamsSubset(queryParams) {
133
- return this.router.navigate([], {
134
- relativeTo: this.activatedRoute,
135
- replaceUrl: true,
136
- queryParams: queryParams,
137
- queryParamsHandling: 'merge',
138
- });
139
- }
140
- /**A wrapper around the default javascript confirm dialog to allow us to unit test dependent code.
141
- * Of course eventually we'd like to have pretty confirmations for everything, but in some cases it wasn't worth the extra time
142
- * so we're using this instead.
143
- */
144
- confirm(prompt) {
145
- return Promise.resolve(confirm(prompt));
146
- }
147
- /**
148
- * Close the current window or a window instance if one is provided
149
- * @param windowInstance - Window to close (optional)
150
- */
151
- closeWindow(windowInstance) {
152
- if (windowInstance) {
153
- windowInstance.close();
154
- }
155
- else {
156
- window.close();
157
- }
158
- }
159
- getLocation() {
160
- return window.location.pathname + window.location.hash;
161
- }
162
- /** Get the current value of the full url, including protocol, host and path */
163
- getFullUrl() {
164
- return window.location.href;
165
- }
166
- /** Get the current value of the base url, including protocol, domain and port (if explicitly specified) */
167
- getBaseUrl() {
168
- return window.location.origin;
169
- }
170
- /**
171
- * Reloads the browser window.
172
- * NOT RECOMMENDED. Seek other options for reloading content within Angular before resorting to this.
173
- */
174
- reloadWindow() {
175
- window.location.reload();
176
- }
177
- }
178
- WindowService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: WindowService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable });
179
- WindowService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: WindowService, providedIn: 'root' });
180
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: WindowService, decorators: [{
181
- type: Injectable,
182
- args: [{
183
- providedIn: 'root'
184
- }]
185
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }]; } });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS93aW5kb3cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUU3Qzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQUV0Qjs7Ozs7Ozs7T0FRRztJQUNILElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFBO0lBQ2xDLENBQUM7SUFHRDs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBT0QsWUFDWSxNQUFhLEVBQ2IsY0FBOEI7UUFEOUIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCbEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBZ0s1Qzs7Ozs7Ozs7O1dBU0c7UUFDSyx5QkFBb0IsR0FBRyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN4RCw4Q0FBOEM7WUFDOUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLHlDQUF5QztZQUN6QyxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUM7UUE1SkUsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMx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O2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogU2VydmljZSB0byBoZWxwIHdpdGggaW50ZXJmYWNpbmcgd2l0aCB0aGUgd2luZG93IG9iamVjdFxyXG4gKiBhbmQgbmF2aWdhdGluZyBhcm91bmQgdGhlIGFwcGxpY2F0aW9uIChnb2luZyBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIDIrIHJvdXRlcilcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2luZG93U2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFja3MgaWYgdGhlcmUgYXJlIGFueSB1bnNhdmVkIGNoYW5nZXMgdGhhdCB0aGUgdXNlciBjb3VsZCBsb3NlLlxyXG4gICAgICpcclxuICAgICAqIEl0IGlzIHNldCB1cCBhcyBgZ2V0YCBvbmx5IGJlY2F1c2UgaXQgaXMgc2V0IHdpdGggYGFkZE5hdmlnYXRlQXdheVByb21wdGAuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBhbHNvIGluY2x1ZGVzIGFkZGluZyBhIHByb21wdCB0byB0aGUgd2luZG93IGl0c2VsZiAoaW4gYWRkaXRpb24gdG9cclxuICAgICAqIHdvcmtpbmcgd2l0aCB0aGUgYENhbkRlYWN0aXZhdGVVbnNhdmVkQ2hhbmdlc2AgZ3VhcmQpIHRvIGNvdmVyIHBhZ2UgcmVsb2Fkc1xyXG4gICAgICogd2hpY2ggZG8gbm90IHRyaWdnZXIgcm91dGVyIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNVbnNhdmVkQ2hhbmdlcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGFzVW5zYXZlZENoYW5nZXNcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2hhc1Vuc2F2ZWRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogRXhwb3NlIHRoZSBpbm5lcldpZHRoIG9uIHRoZSB3aW5kb3cgZ2xvYmFsLiBQcm90ZWN0cyBhZ2FpbnN0IGVycm9ycyB3aGVuIGNvZGVcclxuICAgICAqIGlzIHJ1bm5pbmcgb24gYSBub24tYnJvd3NlciBwbGF0Zm9ybS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbm5lcldpZHRoKCk6IG51bWJlcnx1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9ic2VydmFibGUgb2YgdGhlIHdpbmRvdyByZXNpemUgZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2l6ZWQ/OiBPYnNlcnZhYmxlPEV2ZW50PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICAgICkgeyBcclxuICAgICAgICBpZiAod2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplZCA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UgdGhlIHVzZXIgaGFkIHZpc2l0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdvQmFjaygpIHtcclxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqQW4gYWJzdHJhY3Rpb24gYXJvdW5kIHRoZSBicm93c2VycyB3aW5kb3cgaGlzdG9yeSBsZW5ndGguXHJcbiAgICAgKiBSZXR1cm5zIHplcm8gaWYgdW5hYmxlIHRvIGFjY2VzcyBvciBydW5uaW5nIG91dHNpZGUgYSBicm93c2VyIGNvbnRleHRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEhpc3RvcnlMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93Py5oaXN0b3J5Py5sZW5ndGggfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlIHRvIGFueSB1cmwgeW91IGtub3cgdGhlIHBhdGggdG9cclxuICAgICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBuYXZpZ2F0ZSB0b1xyXG4gICAgICpcclxuICAgICAqIEBkZXByZWNhdGVkIEZvciBsZWdhY3kgc3VwcG9ydCBvbmx5OyB1c2UgYHJvdXRlci5uYXZpZ2F0ZUJ5VXJsYCBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBuYXZpZ2F0ZVRvVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvYXBwLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybC5zdWJzdHJpbmcoNSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgcm91dGVyIHRocm93cyB3ZSB3aWxsIHRyeSB0byBuYXZpZ2F0ZSB0byB0aGUgZnVsbHkgcXVhbGlmaWVkIHVybCBhcyBhIGxhc3QgZGl0Y2ggZWZmb3J0LlxyXG4gICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgbWlzc2VkIGEgbGluayB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBuZzUgb3Igb3VyIG5nMUhyZWYgZGlyZWN0aXZlXHJcbiAgICAgICAgICAgIC8vIGRpZG4ndCBoYW5kbGUgYSBsaW5rIGNvcnJlY3RseVxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgYGJlZm9yZXVubG9hZGAgZnVuY3Rpb24gdG8gdGhlIHdpbmRvdyB0byBhbGVydCB0aGUgdXNlciB0aGF0IHRoZXJlIGFyZSBhYm91dCB0byBsZWF2ZVxyXG4gICAgICogdGhlIGN1cnJlbnQgcGFnZSBhbmQgYXNrIGlmIHRoZXknZCBsaWtlIHRvIGxlYXZlIG9yIHN0YXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZE5hdmlnYXRlQXdheVByb21wdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oYXNVbnNhdmVkQ2hhbmdlcyA9IHRydWU7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgdGhpcy5iZWZvcmVVbmxvYWRGdW5jdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBgYmVmb3JldW5sb2FkYCBmdW5jdGlvbiBhZGRlZCB0byB0aGUgd2luZG93XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZW1vdmVOYXZpZ2F0ZUF3YXlQcm9tcHQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB0aGlzLmJlZm9yZVVubG9hZEZ1bmN0aW9uKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIGRhdGEgdG8gYW5vdGhlciB3aW5kb3cuXHJcbiAgICAgKlxyXG4gICAgICogX19TRUNVUklUWSBSSVNLX18gLSBBbHdheXMgdXNlIGEgc3BlY2lmaWMgdGFyZ2V0IG9yaWdpbi4gRmFpbGluZyB0byBwcm92aWRlIGEgc3BlY2lmaWMgdGFyZ2V0IG9yaWdpbiBjYW4gYWxsb3dcclxuICAgICAqIG1hbGljaW91cyBzaXRlcyB0byByZWNlaXZlIHRoZSBtZXNzYWdlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YXJnZXRXaW5kb3cgLSBXaW5kb3cgdG8gc2VuZCB0aGUgbWVzc2FnZSB0b1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBEYXRhIHRvIHNlbmRcclxuICAgICAqIEBwYXJhbSB0YXJnZXRPcmlnaW4gLSBXaGF0IHRoZSBVUkkgb2YgdGhlIHRhcmdldCB3aW5kb3cgbXVzdCBiZSBmb3IgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudC5cclxuICAgICAqIElmIHNlbmRpbmcgZGF0YSB0byBhbm90aGVyIEVuZXJneUNBUCB3aW5kb3csIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSBgd2luZG93LmxvY2F0aW9uLm9yaWdpbmAgdG8gZW5zdXJlXHJcbiAgICAgKiB0aGF0IG9ubHkgaW5zdGFuY2VzIG9mIEVuZXJneUNBUCBhcHAgcmVjZWl2ZSB0aGUgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvc3RNZXNzYWdlKHRhcmdldFdpbmRvdzogV2luZG93LCBtZXNzYWdlOiBhbnksIHRhcmdldE9yaWdpbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGFyZ2V0V2luZG93LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIGEgbmV3IHdpbmRvd1xyXG4gICAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlIHRvIGJlIGxvYWRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3Blbk5ldyh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB3cmFwcGVyIGFyb3VuZCB0aGUgcm91dGVyIGZvciBjaGFuZ2luZyB0aGUgcXVlcnkgcGFyYW1zIGZvciB0aGUgY3VycmVudCB1cmwgXHJcbiAgICAgKiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGhpc3RvcnkgZW50cnkgb3IgcmVtb3ZpbmcgYW55IGV4aXN0aW5nIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICAgKiBUaGUgcHJvdmlkZWQgcGFyYW1zIGFyZSB1cGRhdGVkIGlmIHRoZXkgYWxyZWFkeSBleGlzdCBvciBhZGRlZCB0byB0aGUgdXJsIGlmIHRoZXkgZG9uJ3RcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBzdWNjZWVkcywgZmFsc2UgaWYgc29tZXRoaW5nIChsaWtlIGEgZ3VhcmQpIGJsb2NrcyBpdC5cclxuICAgICAqIEluIG5vcm1hbCB1c2UsIHRoZSBuYXZpZ2F0aW9uIHNob3VsZCBzdWNjZWVkIHVubGVzcyB3ZSB1c2UgcXVlcnkgcGFyYW1zIHRvIGJsb2NrIGFjY2VzcyB0byBhIHJvdXRlIHRoZSB1c2VyIGlzIGFscmVhZHkgb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG1vZGlmeUhpc3RvcnlRdWVyeVBhcmFtc1N1YnNldChxdWVyeVBhcmFtczogUGFyYW1zKSA6IFByb21pc2U8Ym9vbGVhbj57XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKCBbXSwge1xyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsIFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKkEgd3JhcHBlciBhcm91bmQgdGhlIGRlZmF1bHQgamF2YXNjcmlwdCBjb25maXJtIGRpYWxvZyB0byBhbGxvdyB1cyB0byB1bml0IHRlc3QgZGVwZW5kZW50IGNvZGUuXHJcbiAgICAgKiBPZiBjb3Vyc2UgZXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gaGF2ZSBwcmV0dHkgY29uZmlybWF0aW9ucyBmb3IgZXZlcnl0aGluZywgYnV0IGluIHNvbWUgY2FzZXMgaXQgd2Fzbid0IHdvcnRoIHRoZSBleHRyYSB0aW1lXHJcbiAgICAgKiBzbyB3ZSdyZSB1c2luZyB0aGlzIGluc3RlYWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25maXJtKHByb21wdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maXJtKHByb21wdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvc2UgdGhlIGN1cnJlbnQgd2luZG93IG9yIGEgd2luZG93IGluc3RhbmNlIGlmIG9uZSBpcyBwcm92aWRlZFxyXG4gICAgICogQHBhcmFtIHdpbmRvd0luc3RhbmNlIC0gV2luZG93IHRvIGNsb3NlIChvcHRpb25hbClcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsb3NlV2luZG93KHdpbmRvd0luc3RhbmNlPzogV2luZG93KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHdpbmRvd0luc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvd0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMb2NhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uaGFzaDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmdWxsIHVybCwgaW5jbHVkaW5nIHByb3RvY29sLCBob3N0IGFuZCBwYXRoICovXHJcbiAgICBwdWJsaWMgZ2V0RnVsbFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBiYXNlIHVybCwgaW5jbHVkaW5nIHByb3RvY29sLCBkb21haW4gYW5kIHBvcnQgKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSAqL1xyXG4gICAgcHVibGljIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbG9hZHMgdGhlIGJyb3dzZXIgd2luZG93LlxyXG4gICAgICogTk9UIFJFQ09NTUVOREVELiBTZWVrIG90aGVyIG9wdGlvbnMgZm9yIHJlbG9hZGluZyBjb250ZW50IHdpdGhpbiBBbmd1bGFyIGJlZm9yZSByZXNvcnRpbmcgdG8gdGhpcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbG9hZFdpbmRvdygpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgd2luZG93IGBiZWZvcmV1bmxvYWRgIGV2ZW50IGlzIGZpcmVkLlxyXG4gICAgICpcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBwYXNzZWQgdG8gYHdpbmRvdy5hZGRFdmVudExpc3RlbmVyYFxyXG4gICAgICogbXVzdCBiZSByZXRhaW5lZCBmb3IgYHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyYCB0byBmdW5jdGlvbiBwcm9wZXJseS5cclxuICAgICAqXHJcbiAgICAgKiBTb21lIGJyb3dzZXJzIHJlcXVpcmUgdGhlIGV2ZW50J3MgYHJldHVyblZhbHVlYCB0byBiZSBzZXQgdG8gc2hvdyB0aGUgY29uZmlybWF0aW9uXHJcbiAgICAgKiBkaWFsb2cuXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvYmVmb3JldW5sb2FkX2V2ZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYmVmb3JlVW5sb2FkRnVuY3Rpb24gPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBldmVudCBhcyBzdGF0ZWQgYnkgdGhlIHN0YW5kYXJkLlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgLy8gQ2hyb21lIHJlcXVpcmVzIHJldHVyblZhbHVlIHRvIGJlIHNldC5cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnO1xyXG4gICAgfTtcclxufVxyXG4iXX0=
@@ -1,46 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../avatar/avatar.service";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "../../controls/dropdown/dropdown.component";
6
- import * as i4 from "../avatar/avatar.component";
7
- export class AppBarComponent {
8
- constructor(avatarService) {
9
- this.avatarService = avatarService;
10
- this.userMenuItems = [];
11
- this.userMenuWidth = 0;
12
- this.userMenuMinWidth = 160;
13
- this.userMenuTabindex = 0;
14
- this.iconPath = '/assets/images/icon.svg';
15
- this.menuItems = [];
16
- this.userItem = [];
17
- }
18
- ngOnChanges() {
19
- if (this.user) {
20
- this.userItem[0] = { label: this.avatarService.getAvatarLabels(this.user).full || '', display: 'heading' };
21
- }
22
- else {
23
- this.userItem = [];
24
- }
25
- this.menuItems = [...this.userItem, ...this.userMenuItems];
26
- }
27
- }
28
- AppBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AppBarComponent, deps: [{ token: i1.AvatarService }], target: i0.ɵɵFactoryTarget.Component });
29
- AppBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AppBarComponent, selector: "ec-app-bar", inputs: { user: "user", userMenuItems: "userMenuItems", userMenuWidth: "userMenuWidth", userMenuMinWidth: "userMenuMinWidth", userMenuTabindex: "userMenuTabindex", iconPath: "iconPath" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"logo-container\">\r\n <img src=\"{{iconPath}}\"\r\n alt=\"EnergyCAP Platform\">\r\n</section>\r\n\r\n<section class=\"title-container\">\r\n <ng-content select=\".app-bar-title\"></ng-content>\r\n</section>\r\n\r\n<section class=\"actions-container\">\r\n <ng-content select=\".app-bar-actions\"></ng-content>\r\n <ec-dropdown id=\"AppBarUserMenu\"\r\n *ngIf=\"userMenuItems.length; else avatar\"\r\n [items]=\"menuItems\"\r\n [buttonCustomTemplate]=\"avatar\"\r\n [showArrow]=\"false\"\r\n [menuWidth]=\"userMenuWidth\"\r\n [menuMinWidth]=\"userMenuMinWidth\"\r\n [tabindex]=\"userMenuTabindex\"></ec-dropdown>\r\n</section>\r\n\r\n<ng-template #avatar>\r\n <ec-avatar [user]=\"user\"></ec-avatar>\r\n</ng-template>", styles: [":host{display:flex;height:3rem;align-items:center;width:100%;padding:0 .75rem 0 1rem;background-color:var(--ec-background-color);position:relative;z-index:var(--ec-z-index-navbar)}:host ::ng-deep .app-bar-actions{display:flex;align-items:center;justify-content:flex-end;margin-right:.25rem}section{flex:1 1}.logo-container img{width:2rem;height:2rem}.title-container{text-align:center}.actions-container{display:flex;justify-content:flex-end}#AppBarUserMenu ::ng-deep ec-button{--ec-border-radius: 50%}#AppBarUserMenu ::ng-deep ec-button.active>.ec-button-custom{background-color:transparent;border-color:var(--ec-color-primary-light)}#AppBarUserMenu ::ng-deep ec-button .ec-button-custom:focus{background-color:var(--ec-background-color)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DropdownComponent, selector: "ec-dropdown", inputs: ["id", "autofocus", "status", "disabled", "label", "icon", "buttonType", "buttonAlignment", "buttonTitle", "tabindex", "showArrow", "items", "menuTemplateType", "menuTitle", "menuHeight", "menuWidth", "menuMinWidth", "menuPosition", "menuFooter", "popupFixed", "buttonCustomTemplate", "pending"], outputs: ["itemSelected", "popupOpened"] }, { kind: "component", type: i4.AvatarComponent, selector: "ec-avatar", inputs: ["user"] }] });
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AppBarComponent, decorators: [{
31
- type: Component,
32
- args: [{ selector: 'ec-app-bar', template: "<section class=\"logo-container\">\r\n <img src=\"{{iconPath}}\"\r\n alt=\"EnergyCAP Platform\">\r\n</section>\r\n\r\n<section class=\"title-container\">\r\n <ng-content select=\".app-bar-title\"></ng-content>\r\n</section>\r\n\r\n<section class=\"actions-container\">\r\n <ng-content select=\".app-bar-actions\"></ng-content>\r\n <ec-dropdown id=\"AppBarUserMenu\"\r\n *ngIf=\"userMenuItems.length; else avatar\"\r\n [items]=\"menuItems\"\r\n [buttonCustomTemplate]=\"avatar\"\r\n [showArrow]=\"false\"\r\n [menuWidth]=\"userMenuWidth\"\r\n [menuMinWidth]=\"userMenuMinWidth\"\r\n [tabindex]=\"userMenuTabindex\"></ec-dropdown>\r\n</section>\r\n\r\n<ng-template #avatar>\r\n <ec-avatar [user]=\"user\"></ec-avatar>\r\n</ng-template>", styles: [":host{display:flex;height:3rem;align-items:center;width:100%;padding:0 .75rem 0 1rem;background-color:var(--ec-background-color);position:relative;z-index:var(--ec-z-index-navbar)}:host ::ng-deep .app-bar-actions{display:flex;align-items:center;justify-content:flex-end;margin-right:.25rem}section{flex:1 1}.logo-container img{width:2rem;height:2rem}.title-container{text-align:center}.actions-container{display:flex;justify-content:flex-end}#AppBarUserMenu ::ng-deep ec-button{--ec-border-radius: 50%}#AppBarUserMenu ::ng-deep ec-button.active>.ec-button-custom{background-color:transparent;border-color:var(--ec-color-primary-light)}#AppBarUserMenu ::ng-deep ec-button .ec-button-custom:focus{background-color:var(--ec-background-color)}\n"] }]
33
- }], ctorParameters: function () { return [{ type: i1.AvatarService }]; }, propDecorators: { user: [{
34
- type: Input
35
- }], userMenuItems: [{
36
- type: Input
37
- }], userMenuWidth: [{
38
- type: Input
39
- }], userMenuMinWidth: [{
40
- type: Input
41
- }], userMenuTabindex: [{
42
- type: Input
43
- }], iconPath: [{
44
- type: Input
45
- }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9hcHAtYmFyL2FwcC1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvYXBwLWJhci9hcHAtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFVNUQsTUFBTSxPQUFPLGVBQWU7SUFZMUIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFWdkMsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixhQUFRLEdBQUcseUJBQXlCLENBQUM7UUFFOUMsY0FBUyxHQUFlLEVBQUUsQ0FBQTtRQUVsQixhQUFRLEdBQWUsRUFBRSxDQUFDO0lBRWtCLENBQUM7SUFFOUMsV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQztTQUMxRzthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdELENBQUM7OzRHQXRCVSxlQUFlO2dHQUFmLGVBQWUsbVFDVjVCLDQwQkF1QmM7MkZEYkQsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZO29HQUtiLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF2YXRhclVzZXIgfSBmcm9tICcuLi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF2YXRhclNlcnZpY2UgfSBmcm9tICcuLi9hdmF0YXIvYXZhdGFyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1hcHAtYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLWJhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHVzZXI/OiBBdmF0YXJVc2VyO1xyXG4gIEBJbnB1dCgpIHVzZXJNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuICBASW5wdXQoKSB1c2VyTWVudVdpZHRoID0gMDtcclxuICBASW5wdXQoKSB1c2VyTWVudU1pbldpZHRoID0gMTYwO1xyXG4gIEBJbnB1dCgpIHVzZXJNZW51VGFiaW5kZXggPSAwO1xyXG4gIEBJbnB1dCgpIGljb25QYXRoID0gJy9hc3NldHMvaW1hZ2VzL2ljb24uc3ZnJztcclxuICBcclxuICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXVxyXG5cclxuICBwcml2YXRlIHVzZXJJdGVtOiBNZW51SXRlbVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXZhdGFyU2VydmljZTogQXZhdGFyU2VydmljZSkgeyB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnVzZXIpIHtcclxuICAgICAgdGhpcy51c2VySXRlbVswXSA9IHtsYWJlbDogdGhpcy5hdmF0YXJTZXJ2aWNlLmdldEF2YXRhckxhYmVscyh0aGlzLnVzZXIpLmZ1bGwgfHwgJycsIGRpc3BsYXk6ICdoZWFkaW5nJ307XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJJdGVtID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tZW51SXRlbXMgPSBbLi4udGhpcy51c2VySXRlbSwgLi4udGhpcy51c2VyTWVudUl0ZW1zXTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxyXG4gIDxpbWcgc3JjPVwie3tpY29uUGF0aH19XCJcclxuICAgICAgIGFsdD1cIkVuZXJneUNBUCBQbGF0Zm9ybVwiPlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiPlxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5hcHAtYmFyLXRpdGxlXCI+PC9uZy1jb250ZW50PlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmFwcC1iYXItYWN0aW9uc1wiPjwvbmctY29udGVudD5cclxuICA8ZWMtZHJvcGRvd24gaWQ9XCJBcHBCYXJVc2VyTWVudVwiXHJcbiAgICAgICAgICAgICAgICpuZ0lmPVwidXNlck1lbnVJdGVtcy5sZW5ndGg7IGVsc2UgYXZhdGFyXCJcclxuICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgIFtidXR0b25DdXN0b21UZW1wbGF0ZV09XCJhdmF0YXJcIlxyXG4gICAgICAgICAgICAgICBbc2hvd0Fycm93XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgW21lbnVXaWR0aF09XCJ1c2VyTWVudVdpZHRoXCJcclxuICAgICAgICAgICAgICAgW21lbnVNaW5XaWR0aF09XCJ1c2VyTWVudU1pbldpZHRoXCJcclxuICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInVzZXJNZW51VGFiaW5kZXhcIj48L2VjLWRyb3Bkb3duPlxyXG48L3NlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2YXRhcj5cclxuICA8ZWMtYXZhdGFyIFt1c2VyXT1cInVzZXJcIj48L2VjLWF2YXRhcj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -1,67 +0,0 @@
1
- import { Component, Input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "./avatar.service";
4
- export class AvatarComponent {
5
- constructor(el, renderer, avatarService) {
6
- this.el = el;
7
- this.renderer = renderer;
8
- this.avatarService = avatarService;
9
- /** Color map base on the first let of the label */
10
- this.colors = {
11
- abcde01: 'red',
12
- fghij23: 'orange',
13
- klmn15: 'yellow',
14
- opqr67: 'green',
15
- stuv8: 'blue',
16
- wxyz9: 'purple'
17
- };
18
- /** Label is defaulted to HI in the rare case the user does not have a first name, last name, email or username */
19
- this.label = 'HI';
20
- /** Track the current CSS class so we can remove it if the user changes before setting the next one */
21
- this.currentCSSClass = '';
22
- }
23
- ngOnChanges(changes) {
24
- if (!changes.user.firstChange && !this.user) {
25
- console.error(`AvatarComponent expected a value for the [user] input but got ${this.user} instead.`);
26
- }
27
- this.updateLabel();
28
- this.updateColor();
29
- }
30
- /**
31
- * Update the Avatar label
32
- *
33
- */
34
- updateLabel() {
35
- if (this.user) {
36
- this.label = this.avatarService.getAvatarLabels(this.user).abbreviation;
37
- }
38
- }
39
- /**
40
- * Sets the color of the Avatar based on the first letter of the label. If the label is HI or is not
41
- * a letter, default to gray.
42
- */
43
- updateColor() {
44
- if (this.currentCSSClass) {
45
- this.renderer.removeClass(this.el.nativeElement, this.currentCSSClass);
46
- }
47
- let color = 'gray';
48
- if (this.label !== 'HI' && this.label) {
49
- for (let key in this.colors) {
50
- if (key.includes(this.label[0].toLowerCase())) {
51
- color = this.colors[key];
52
- }
53
- }
54
- }
55
- this.currentCSSClass = `avatar-${color}`;
56
- this.renderer.addClass(this.el.nativeElement, this.currentCSSClass);
57
- }
58
- }
59
- AvatarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AvatarComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.AvatarService }], target: i0.ɵɵFactoryTarget.Component });
60
- AvatarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: AvatarComponent, selector: "ec-avatar", inputs: { user: "user" }, usesOnChanges: true, ngImport: i0, template: '{{label}}', isInline: true, styles: [":host{display:flex;width:2.25rem;height:2.25rem;align-items:center;justify-content:center;font-size:1rem;line-height:1.25rem;border-radius:50%;color:var(--ec-color-primary-light);text-transform:uppercase}:host.avatar-red{background-color:var(--ec-avatar-background-color-red, var(--ec-color-red-5));color:var(--ec-avatar-color-red, var(--ec-color-primary-light))}:host.avatar-orange{background-color:var(--ec-avatar-background-color-orange, var(--ec-color-orange-5));color:var(--ec-avatar-color-orange, var(--ec-color-primary-light))}:host.avatar-yellow{background-color:var(--ec-avatar-background-color-yellow, var(--ec-color-yellow-5));color:var(--ec-avatar-color-yellow, var(--ec-color-secondary-dark))}:host.avatar-green{background-color:var(--ec-avatar-background-color-green, var(--ec-color-green-5));color:var(--ec-avatar-color-green, var(--ec-color-primary-light))}:host.avatar-blue{background-color:var(--ec-avatar-background-color-blue, var(--ec-color-blue-5));color:var(--ec-avatar-color-blue, var(--ec-color-primary-light))}:host.avatar-purple{background-color:var(--ec-avatar-background-color-purple, var(--ec-color-purple-5));color:var(--ec-avatar-color-purple, var(--ec-color-primary-light))}:host.avatar-gray{background-color:var(--ec-avatar-background-color-gray, var(--ec-color-gray-3));color:var(--ec-avatar-color-gray, var(--ec-color-primary-light))}\n"] });
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: AvatarComponent, decorators: [{
62
- type: Component,
63
- args: [{ selector: 'ec-avatar', template: '{{label}}', styles: [":host{display:flex;width:2.25rem;height:2.25rem;align-items:center;justify-content:center;font-size:1rem;line-height:1.25rem;border-radius:50%;color:var(--ec-color-primary-light);text-transform:uppercase}:host.avatar-red{background-color:var(--ec-avatar-background-color-red, var(--ec-color-red-5));color:var(--ec-avatar-color-red, var(--ec-color-primary-light))}:host.avatar-orange{background-color:var(--ec-avatar-background-color-orange, var(--ec-color-orange-5));color:var(--ec-avatar-color-orange, var(--ec-color-primary-light))}:host.avatar-yellow{background-color:var(--ec-avatar-background-color-yellow, var(--ec-color-yellow-5));color:var(--ec-avatar-color-yellow, var(--ec-color-secondary-dark))}:host.avatar-green{background-color:var(--ec-avatar-background-color-green, var(--ec-color-green-5));color:var(--ec-avatar-color-green, var(--ec-color-primary-light))}:host.avatar-blue{background-color:var(--ec-avatar-background-color-blue, var(--ec-color-blue-5));color:var(--ec-avatar-color-blue, var(--ec-color-primary-light))}:host.avatar-purple{background-color:var(--ec-avatar-background-color-purple, var(--ec-color-purple-5));color:var(--ec-avatar-color-purple, var(--ec-color-primary-light))}:host.avatar-gray{background-color:var(--ec-avatar-background-color-gray, var(--ec-color-gray-3));color:var(--ec-avatar-color-gray, var(--ec-color-primary-light))}\n"] }]
64
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.AvatarService }]; }, propDecorators: { user: [{
65
- type: Input
66
- }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L2F2YXRhci9hdmF0YXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFpRixNQUFNLGVBQWUsQ0FBQzs7O0FBZWhJLE1BQU0sT0FBTyxlQUFlO0lBb0IxQixZQUFvQixFQUFjLEVBQVUsUUFBbUIsRUFBVSxhQUE0QjtRQUFqRixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBbEJyRyxtREFBbUQ7UUFDM0MsV0FBTSxHQUFHO1lBQ2YsT0FBTyxFQUFFLEtBQUs7WUFDZCxPQUFPLEVBQUUsUUFBUTtZQUNqQixNQUFNLEVBQUUsUUFBUTtZQUNoQixNQUFNLEVBQUUsT0FBTztZQUNmLEtBQUssRUFBRSxNQUFNO1lBQ2IsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQTtRQUlELGtIQUFrSDtRQUMzRyxVQUFLLEdBQUcsSUFBSSxDQUFDO1FBRXBCLHNHQUFzRztRQUM5RixvQkFBZSxHQUFHLEVBQUUsQ0FBQztJQUUyRSxDQUFDO0lBRXpHLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQzNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUVBQWlFLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDO1NBQ3RHO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUM7U0FDekU7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssV0FBVztRQUNqQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ25CLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNyQyxLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQzNCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7b0JBQzdDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUMxQjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsS0FBSyxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7OzRHQTVEVSxlQUFlO2dHQUFmLGVBQWUsZ0dBSGhCLFdBQVc7MkZBR1YsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxXQUFXLFlBQ1gsV0FBVztxSkFlWixJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdmF0YXJTZXJ2aWNlIH0gZnJvbSAnLi9hdmF0YXIuc2VydmljZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF2YXRhclVzZXIge1xyXG4gIGZpcnN0TmFtZT86IHN0cmluZztcclxuICBsYXN0TmFtZT86IHN0cmluZztcclxuICBlbWFpbD86IHN0cmluZztcclxuICB1c2VybmFtZT86IHN0cmluZztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1hdmF0YXInLFxyXG4gIHRlbXBsYXRlOiAne3tsYWJlbH19JyxcclxuICBzdHlsZVVybHM6IFsnLi9hdmF0YXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXZhdGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuXHJcbiAgLyoqIENvbG9yIG1hcCBiYXNlIG9uIHRoZSBmaXJzdCBsZXQgb2YgdGhlIGxhYmVsICovXHJcbiAgcHJpdmF0ZSBjb2xvcnMgPSB7XHJcbiAgICBhYmNkZTAxOiAncmVkJyxcclxuICAgIGZnaGlqMjM6ICdvcmFuZ2UnLFxyXG4gICAga2xtbjE1OiAneWVsbG93JyxcclxuICAgIG9wcXI2NzogJ2dyZWVuJyxcclxuICAgIHN0dXY4OiAnYmx1ZScsXHJcbiAgICB3eHl6OTogJ3B1cnBsZSdcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHVzZXIhOiBBdmF0YXJVc2VyO1xyXG5cclxuICAvKiogTGFiZWwgaXMgZGVmYXVsdGVkIHRvIEhJIGluIHRoZSByYXJlIGNhc2UgdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSBhIGZpcnN0IG5hbWUsIGxhc3QgbmFtZSwgZW1haWwgb3IgdXNlcm5hbWUgKi9cclxuICBwdWJsaWMgbGFiZWwgPSAnSEknO1xyXG5cclxuICAvKiogVHJhY2sgdGhlIGN1cnJlbnQgQ1NTIGNsYXNzIHNvIHdlIGNhbiByZW1vdmUgaXQgaWYgdGhlIHVzZXIgY2hhbmdlcyBiZWZvcmUgc2V0dGluZyB0aGUgbmV4dCBvbmUgKi9cclxuICBwcml2YXRlIGN1cnJlbnRDU1NDbGFzcyA9ICcnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgYXZhdGFyU2VydmljZTogQXZhdGFyU2VydmljZSkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKCFjaGFuZ2VzLnVzZXIuZmlyc3RDaGFuZ2UgJiYgIXRoaXMudXNlcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBBdmF0YXJDb21wb25lbnQgZXhwZWN0ZWQgYSB2YWx1ZSBmb3IgdGhlIFt1c2VyXSBpbnB1dCBidXQgZ290ICR7dGhpcy51c2VyfSBpbnN0ZWFkLmApO1xyXG4gICAgfSBcclxuICAgICAgXHJcbiAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUNvbG9yKCk7ICAgIFxyXG4gIH1cclxuXHJcbiAgLyoqIFxyXG4gICAqIFVwZGF0ZSB0aGUgQXZhdGFyIGxhYmVsIFxyXG4gICAqIFxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlTGFiZWwoKSB7XHJcbiAgICBpZiAodGhpcy51c2VyKSB7XHJcbiAgICAgIHRoaXMubGFiZWwgPSB0aGlzLmF2YXRhclNlcnZpY2UuZ2V0QXZhdGFyTGFiZWxzKHRoaXMudXNlcikuYWJicmV2aWF0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFxyXG4gICAqIFNldHMgdGhlIGNvbG9yIG9mIHRoZSBBdmF0YXIgYmFzZWQgb24gdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgbGFiZWwuIElmIHRoZSBsYWJlbCBpcyBISSBvciBpcyBub3RcclxuICAgKiBhIGxldHRlciwgZGVmYXVsdCB0byBncmF5LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlQ29sb3IoKSB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50Q1NTQ2xhc3MpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY3VycmVudENTU0NsYXNzKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY29sb3IgPSAnZ3JheSc7XHJcbiAgICBpZiAodGhpcy5sYWJlbCAhPT0gJ0hJJyAmJiB0aGlzLmxhYmVsKSB7XHJcbiAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLmNvbG9ycykge1xyXG4gICAgICAgIGlmIChrZXkuaW5jbHVkZXModGhpcy5sYWJlbFswXS50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgY29sb3IgPSB0aGlzLmNvbG9yc1trZXldO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50Q1NTQ2xhc3MgPSBgYXZhdGFyLSR7Y29sb3J9YDtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCB0aGlzLmN1cnJlbnRDU1NDbGFzcyk7XHJcbiAgfVxyXG59Il19