@energycap/components 0.41.0 → 0.41.1-ECAP-27592-angular-17.20241219-1718

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 (258) hide show
  1. package/{esm2020 → esm2022}/energycap-components.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/components.module.mjs +418 -418
  3. package/{esm2020 → esm2022}/lib/controls/banner/banner.component.mjs +109 -109
  4. package/{esm2020 → esm2022}/lib/controls/button/button.component.mjs +106 -106
  5. package/{esm2020 → esm2022}/lib/controls/button/copy-button-base.directive.mjs +67 -67
  6. package/{esm2020 → esm2022}/lib/controls/button/copy-button.directive.mjs +28 -28
  7. package/{esm2020 → esm2022}/lib/controls/button/copy-table-button.directive.mjs +43 -43
  8. package/{esm2020 → esm2022}/lib/controls/calendar/calendar-item.component.mjs +59 -59
  9. package/{esm2020 → esm2022}/lib/controls/calendar/calendar.component.mjs +200 -200
  10. package/{esm2020 → esm2022}/lib/controls/calendar/calendar.types.mjs +3 -3
  11. package/{esm2020 → esm2022}/lib/controls/checkbox/checkbox.component.mjs +140 -140
  12. package/{esm2020 → esm2022}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
  13. package/{esm2020 → esm2022}/lib/controls/combobox/combobox.component.mjs +879 -879
  14. package/{esm2020 → esm2022}/lib/controls/date-input/date-input.component.mjs +256 -256
  15. package/{esm2020 → esm2022}/lib/controls/dropdown/dropdown.component.mjs +243 -243
  16. package/{esm2020 → esm2022}/lib/controls/file-upload/file-upload.component.mjs +261 -261
  17. package/{esm2020 → esm2022}/lib/controls/form-control/form-control.component.mjs +104 -104
  18. package/{esm2020 → esm2022}/lib/controls/form-control-base.mjs +151 -151
  19. package/{esm2020 → esm2022}/lib/controls/form-control-label/form-control-label.component.mjs +136 -136
  20. package/{esm2020 → esm2022}/lib/controls/form-group/form-group.component.mjs +261 -261
  21. package/{esm2020 → esm2022}/lib/controls/help-popover/help-popover.component.mjs +31 -31
  22. package/{esm2020 → esm2022}/lib/controls/item-picker/item-picker.component.mjs +329 -329
  23. package/{esm2020 → esm2022}/lib/controls/link-button/link-button.component.mjs +11 -11
  24. package/{esm2020 → esm2022}/lib/controls/menu/menu.component.mjs +485 -485
  25. package/{esm2020 → esm2022}/lib/controls/navigation/link-item.mjs +1 -1
  26. package/{esm2020 → esm2022}/lib/controls/navigation/nav-group.mjs +38 -38
  27. package/{esm2020 → esm2022}/lib/controls/navigation/nav-item-active.directive.mjs +92 -92
  28. package/{esm2020 → esm2022}/lib/controls/navigation/nav-item.mjs +1 -1
  29. package/{esm2020 → esm2022}/lib/controls/numericbox/numericbox.component.mjs +372 -372
  30. package/{esm2020 → esm2022}/lib/controls/popover/popover.component.mjs +117 -117
  31. package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button-option.mjs +2 -2
  32. package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button.component.mjs +82 -82
  33. package/{esm2020 → esm2022}/lib/controls/select/select.component.mjs +88 -88
  34. package/{esm2020 → esm2022}/lib/controls/tabs/tabs.component.mjs +47 -47
  35. package/{esm2020 → esm2022}/lib/controls/textbox/textbox.component.mjs +155 -155
  36. package/{esm2020 → esm2022}/lib/core/cache.service.mjs +105 -105
  37. package/esm2022/lib/core/custom-validators.mjs +29 -0
  38. package/esm2022/lib/core/date-time-helper.mjs +220 -0
  39. package/{esm2020 → esm2022}/lib/core/error.service.mjs +61 -61
  40. package/{esm2020 → esm2022}/lib/core/router-helper.service.mjs +111 -111
  41. package/{esm2020 → esm2022}/lib/core/scroll.service.mjs +89 -89
  42. package/{esm2020 → esm2022}/lib/core/telemetry-tracker.service.mjs +16 -16
  43. package/{esm2020 → esm2022}/lib/core/telemetry.service.mjs +38 -38
  44. package/{esm2020 → esm2022}/lib/core/validation-message.service.mjs +185 -185
  45. package/{esm2020 → esm2022}/lib/core/validation-patterns.mjs +30 -30
  46. package/{esm2020 → esm2022}/lib/core/window.service.mjs +186 -186
  47. package/{esm2020 → esm2022}/lib/display/app-bar/app-bar.component.mjs +46 -46
  48. package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
  49. package/{esm2020 → esm2022}/lib/display/avatar/avatar.service.mjs +64 -64
  50. package/{esm2020 → esm2022}/lib/display/confirm/confirm.component.mjs +168 -168
  51. package/{esm2020 → esm2022}/lib/display/dialog/dialog-content.mjs +1 -1
  52. package/{esm2020 → esm2022}/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -63
  53. package/{esm2020 → esm2022}/lib/display/dialog/dialog-types.mjs +76 -76
  54. package/{esm2020 → esm2022}/lib/display/dialog/dialog.component.mjs +281 -281
  55. package/{esm2020 → esm2022}/lib/display/dialog/dialog.service.mjs +71 -71
  56. package/{esm2020 → esm2022}/lib/display/help/help-types.mjs +1 -1
  57. package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-base.mjs +111 -111
  58. package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
  59. package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -61
  60. package/{esm2020 → esm2022}/lib/display/item-display/item-display.component.mjs +81 -81
  61. package/{esm2020 → esm2022}/lib/display/json-display/json-display.component.mjs +47 -47
  62. package/{esm2020 → esm2022}/lib/display/resizable/resizable-base.mjs +120 -120
  63. package/{esm2020 → esm2022}/lib/display/resizable/resizable.component.mjs +52 -52
  64. package/{esm2020 → esm2022}/lib/display/spinner/spinner.component.mjs +12 -12
  65. package/{esm2020 → esm2022}/lib/display/splash/splash.component.mjs +42 -42
  66. package/{esm2020 → esm2022}/lib/display/splash/splash.service.mjs +35 -35
  67. package/{esm2020 → esm2022}/lib/display/table/resizable-column.component.mjs +20 -20
  68. package/{esm2020 → esm2022}/lib/display/table/resizable-table.directive.mjs +227 -227
  69. package/{esm2020 → esm2022}/lib/display/table/searchable-table.component.mjs +342 -342
  70. package/{esm2020 → esm2022}/lib/display/table/table-detail-row.component.mjs +19 -19
  71. package/{esm2020 → esm2022}/lib/display/table/table-locked-column.component.mjs +58 -58
  72. package/{esm2020 → esm2022}/lib/display/table/table-master-header-row.component.mjs +14 -14
  73. package/{esm2020 → esm2022}/lib/display/table/table-master-row.component.mjs +163 -163
  74. package/{esm2020 → esm2022}/lib/display/table/table-pagination.component.mjs +155 -155
  75. package/{esm2020 → esm2022}/lib/display/table/table-selectable-row.component.mjs +235 -235
  76. package/{esm2020 → esm2022}/lib/display/table/table.component.mjs +249 -249
  77. package/{esm2020 → esm2022}/lib/display/tags/tag.mjs +17 -17
  78. package/{esm2020 → esm2022}/lib/display/tags/tags.component.mjs +77 -77
  79. package/{esm2020 → esm2022}/lib/display/toast/toast/toast.component.mjs +77 -77
  80. package/{esm2020 → esm2022}/lib/display/toast/toast-types.mjs +7 -7
  81. package/{esm2020 → esm2022}/lib/display/toast/toast.service.mjs +35 -35
  82. package/{esm2020 → esm2022}/lib/display/toast/toaster/toaster.component.mjs +114 -114
  83. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.component.mjs +28 -28
  84. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.service.mjs +78 -78
  85. package/{esm2020 → esm2022}/lib/display/tooltip-directive/tooltip.directive.mjs +173 -173
  86. package/{esm2020 → esm2022}/lib/display/tour/tour-types.mjs +33 -33
  87. package/{esm2020 → esm2022}/lib/display/tour/tour.component.mjs +398 -398
  88. package/{esm2020 → esm2022}/lib/display/tour/tour.service.mjs +75 -75
  89. package/{esm2020 → esm2022}/lib/display/tree/tree.component.mjs +135 -135
  90. package/{esm2020 → esm2022}/lib/display/view-overlay/view-overlay.component.mjs +58 -58
  91. package/{esm2020 → esm2022}/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -32
  92. package/{esm2020 → esm2022}/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -111
  93. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
  94. package/{esm2020 → esm2022}/lib/shared/display/pipes/date-display.pipe.mjs +50 -50
  95. package/{esm2020 → esm2022}/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -30
  96. package/{esm2020 → esm2022}/lib/shared/display/pipes/relative-date.pipe.mjs +62 -62
  97. package/{esm2020 → esm2022}/lib/shared/display/pipes/row-count.pipe.mjs +48 -48
  98. package/{esm2020 → esm2022}/lib/shared/display/pipes/time-display.pipe.mjs +41 -41
  99. package/esm2022/lib/shared/display.mjs +6 -0
  100. package/esm2022/lib/shared/form-group.helper.mjs +67 -0
  101. package/{esm2020 → esm2022}/lib/shared/json-helper.mjs +18 -18
  102. package/esm2022/lib/shared/lodash-helper.mjs +52 -0
  103. package/{esm2020 → esm2022}/lib/shared/page/page-base/page-base.component.mjs +387 -387
  104. package/{esm2020 → esm2022}/lib/shared/page/page-statuses.mjs +22 -22
  105. package/{esm2020 → esm2022}/lib/shared/page/page-title/page-title.component.mjs +23 -23
  106. package/{esm2020 → esm2022}/lib/shared/page/page-view/page-view.component.mjs +147 -147
  107. package/{esm2020 → esm2022}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
  108. package/{esm2020 → esm2022}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
  109. package/{esm2020 → esm2022}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
  110. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  111. package/{esm2020 → esm2022}/lib/shared/testing/public-mocks.spec.mjs +148 -148
  112. package/{esm2020 → esm2022}/lib/shared/testing/spy-factory.spec.mjs +39 -39
  113. package/{esm2020 → esm2022}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
  114. package/{esm2020 → esm2022}/lib/shared/user-preference.service.mjs +17 -17
  115. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -246
  116. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
  117. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
  118. package/{esm2020 → esm2022}/public-api.mjs +114 -114
  119. package/{fesm2020 → fesm2022}/energycap-components.mjs +11797 -11793
  120. package/fesm2022/energycap-components.mjs.map +1 -0
  121. package/index.d.ts +5 -5
  122. package/lib/components.module.d.ts +91 -91
  123. package/lib/controls/banner/banner.component.d.ts +50 -50
  124. package/lib/controls/button/button.component.d.ts +78 -78
  125. package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
  126. package/lib/controls/button/copy-button.directive.d.ts +14 -14
  127. package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
  128. package/lib/controls/calendar/calendar-item.component.d.ts +17 -17
  129. package/lib/controls/calendar/calendar.component.d.ts +54 -54
  130. package/lib/controls/calendar/calendar.types.d.ts +7 -7
  131. package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
  132. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
  133. package/lib/controls/combobox/combobox.component.d.ts +418 -418
  134. package/lib/controls/date-input/date-input.component.d.ts +80 -80
  135. package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
  136. package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
  137. package/lib/controls/form-control/form-control.component.d.ts +30 -30
  138. package/lib/controls/form-control-base.d.ts +110 -110
  139. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
  140. package/lib/controls/form-group/form-group.component.d.ts +105 -105
  141. package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
  142. package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
  143. package/lib/controls/link-button/link-button.component.d.ts +5 -5
  144. package/lib/controls/menu/menu.component.d.ts +255 -255
  145. package/lib/controls/navigation/link-item.d.ts +32 -32
  146. package/lib/controls/navigation/nav-group.d.ts +18 -18
  147. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
  148. package/lib/controls/navigation/nav-item.d.ts +31 -31
  149. package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
  150. package/lib/controls/popover/popover.component.d.ts +51 -51
  151. package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
  152. package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
  153. package/lib/controls/select/select.component.d.ts +44 -44
  154. package/lib/controls/tabs/tabs.component.d.ts +30 -30
  155. package/lib/controls/textbox/textbox.component.d.ts +107 -107
  156. package/lib/core/cache.service.d.ts +33 -33
  157. package/lib/core/custom-validators.d.ts +20 -20
  158. package/lib/core/date-time-helper.d.ts +101 -101
  159. package/lib/core/error.service.d.ts +20 -20
  160. package/lib/core/router-helper.service.d.ts +48 -48
  161. package/lib/core/scroll.service.d.ts +36 -36
  162. package/lib/core/telemetry-tracker.service.d.ts +13 -13
  163. package/lib/core/telemetry.service.d.ts +31 -31
  164. package/lib/core/validation-message.service.d.ts +26 -26
  165. package/lib/core/validation-patterns.d.ts +22 -22
  166. package/lib/core/window.service.d.ts +116 -116
  167. package/lib/display/app-bar/app-bar.component.d.ts +20 -20
  168. package/lib/display/avatar/avatar.component.d.ts +35 -35
  169. package/lib/display/avatar/avatar.service.d.ts +24 -24
  170. package/lib/display/confirm/confirm.component.d.ts +123 -123
  171. package/lib/display/dialog/dialog-content.d.ts +19 -19
  172. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
  173. package/lib/display/dialog/dialog-types.d.ts +130 -130
  174. package/lib/display/dialog/dialog.component.d.ts +120 -120
  175. package/lib/display/dialog/dialog.service.d.ts +48 -48
  176. package/lib/display/help/help-types.d.ts +33 -33
  177. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
  178. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
  179. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
  180. package/lib/display/item-display/item-display.component.d.ts +43 -43
  181. package/lib/display/json-display/json-display.component.d.ts +16 -16
  182. package/lib/display/resizable/resizable-base.d.ts +67 -67
  183. package/lib/display/resizable/resizable.component.d.ts +31 -31
  184. package/lib/display/spinner/spinner.component.d.ts +5 -5
  185. package/lib/display/splash/splash.component.d.ts +16 -16
  186. package/lib/display/splash/splash.service.d.ts +22 -22
  187. package/lib/display/table/resizable-column.component.d.ts +10 -10
  188. package/lib/display/table/resizable-table.directive.d.ts +93 -93
  189. package/lib/display/table/searchable-table.component.d.ts +206 -206
  190. package/lib/display/table/table-detail-row.component.d.ts +8 -8
  191. package/lib/display/table/table-locked-column.component.d.ts +20 -20
  192. package/lib/display/table/table-master-header-row.component.d.ts +9 -9
  193. package/lib/display/table/table-master-row.component.d.ts +113 -113
  194. package/lib/display/table/table-pagination.component.d.ts +91 -91
  195. package/lib/display/table/table-selectable-row.component.d.ts +102 -102
  196. package/lib/display/table/table.component.d.ts +121 -121
  197. package/lib/display/tags/tag.d.ts +18 -18
  198. package/lib/display/tags/tags.component.d.ts +48 -48
  199. package/lib/display/toast/toast/toast.component.d.ts +23 -23
  200. package/lib/display/toast/toast-types.d.ts +24 -24
  201. package/lib/display/toast/toast.service.d.ts +20 -20
  202. package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
  203. package/lib/display/tooltip/tooltip.component.d.ts +70 -70
  204. package/lib/display/tooltip/tooltip.service.d.ts +16 -16
  205. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
  206. package/lib/display/tour/tour-types.d.ts +70 -70
  207. package/lib/display/tour/tour.component.d.ts +147 -147
  208. package/lib/display/tour/tour.service.d.ts +38 -38
  209. package/lib/display/tree/tree.component.d.ts +75 -75
  210. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
  211. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
  212. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
  213. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
  214. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
  215. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
  216. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
  217. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
  218. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
  219. package/lib/shared/display.d.ts +42 -42
  220. package/lib/shared/form-group.helper.d.ts +31 -31
  221. package/lib/shared/json-helper.d.ts +7 -7
  222. package/lib/shared/lodash-helper.d.ts +18 -18
  223. package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
  224. package/lib/shared/page/page-statuses.d.ts +13 -13
  225. package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
  226. package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
  227. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
  228. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
  229. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
  230. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
  231. package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
  232. package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
  233. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
  234. package/lib/shared/user-preference.service.d.ts +13 -13
  235. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
  236. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
  237. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
  238. package/package.json +12 -18
  239. package/public-api.d.ts +111 -111
  240. package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
  241. package/schematics/rxjs-7-upgrade/index.js +67 -67
  242. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
  243. package/schematics/rxjs-7-upgrade/schema.js +2 -2
  244. package/schematics/utilities/typescript.d.ts +7 -7
  245. package/schematics/utilities/typescript.js +41 -41
  246. package/schematics/utilities/workspace.d.ts +8 -8
  247. package/schematics/utilities/workspace.js +71 -71
  248. package/esm2020/lib/core/custom-validators.mjs +0 -29
  249. package/esm2020/lib/core/date-time-helper.mjs +0 -220
  250. package/esm2020/lib/display/avatar/avatar.component.mjs +0 -67
  251. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +0 -163
  252. package/esm2020/lib/shared/display.mjs +0 -6
  253. package/esm2020/lib/shared/form-group.helper.mjs +0 -67
  254. package/esm2020/lib/shared/lodash-helper.mjs +0 -51
  255. package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  256. package/fesm2015/energycap-components.mjs +0 -12211
  257. package/fesm2015/energycap-components.mjs.map +0 -1
  258. package/fesm2020/energycap-components.mjs.map +0 -1
@@ -1,31 +1,31 @@
1
- /** Regex to flag all spaces */
2
- export const findAllSpacesPattern = / /g;
3
- /** Pattern to validate United States zip codes. Allows numbers and dash only */
4
- export const unitedStatesZipCodeRegex = /^[0-9-]+$/;
5
- /** Pattern to validate Canadian postal codes,
6
- * must follow the 'letter number letter space number letter number' pattern */
7
- export const canadianPostalCodeRegex = /^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$/;
8
- /** Pattern to validate other country zip codes, anything goes */
9
- export const otherZipCodeRegex = /.*/;
10
- /** Pattern to validate a correct date format */
11
- export const dateInputFormatRegex = /^[0-9./-]+$/;
12
- /** Pattern to validate integer numbers. Negative sign is optional and will not
13
- * invalidate if just a minus sign is entered in the input, any digit `0-9` is allowed
14
- */
15
- export const integerPattern = new RegExp("^(-)?([\\d]+)?$");
16
- /** Pattern to validate most public domains */
17
- export const domainPattern = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/i;
18
- /**
19
- * Function to return a decimal RegExp. Takes in the number of decimals to validate
20
- * against
21
- */
22
- export const getDecimalPattern = (decimals) => {
23
- let decimalPattern;
24
- // Decimal portion, allowing zero to the maximum allowed decimals
25
- // This enables us to allow a number like "1." or "." and not invalidate
26
- let decimalPortion = "{0," + decimals.toString() + "}";
27
- // Negative sign is optional as well as the decimal, any digit 0-9 is allowed
28
- decimalPattern = new RegExp(`^((((-)?\\d+\\.?\\d${decimalPortion}?)|((-)?\\.?\\d${decimalPortion})))?$`);
29
- return decimalPattern;
30
- };
1
+ /** Regex to flag all spaces */
2
+ export const findAllSpacesPattern = / /g;
3
+ /** Pattern to validate United States zip codes. Allows numbers and dash only */
4
+ export const unitedStatesZipCodeRegex = /^[0-9-]+$/;
5
+ /** Pattern to validate Canadian postal codes,
6
+ * must follow the 'letter number letter space number letter number' pattern */
7
+ export const canadianPostalCodeRegex = /^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$/;
8
+ /** Pattern to validate other country zip codes, anything goes */
9
+ export const otherZipCodeRegex = /.*/;
10
+ /** Pattern to validate a correct date format */
11
+ export const dateInputFormatRegex = /^[0-9./-]+$/;
12
+ /** Pattern to validate integer numbers. Negative sign is optional and will not
13
+ * invalidate if just a minus sign is entered in the input, any digit `0-9` is allowed
14
+ */
15
+ export const integerPattern = new RegExp("^(-)?([\\d]+)?$");
16
+ /** Pattern to validate most public domains */
17
+ export const domainPattern = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$/i;
18
+ /**
19
+ * Function to return a decimal RegExp. Takes in the number of decimals to validate
20
+ * against
21
+ */
22
+ export const getDecimalPattern = (decimals) => {
23
+ let decimalPattern;
24
+ // Decimal portion, allowing zero to the maximum allowed decimals
25
+ // This enables us to allow a number like "1." or "." and not invalidate
26
+ let decimalPortion = "{0," + decimals.toString() + "}";
27
+ // Negative sign is optional as well as the decimal, any digit 0-9 is allowed
28
+ decimalPattern = new RegExp(`^((((-)?\\d+\\.?\\d${decimalPortion}?)|((-)?\\.?\\d${decimalPortion})))?$`);
29
+ return decimalPattern;
30
+ };
31
31
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1wYXR0ZXJucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlL3ZhbGlkYXRpb24tcGF0dGVybnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFXLElBQUksQ0FBQztBQUVqRCxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQVcsV0FBVyxDQUFDO0FBRTVEO2dGQUNnRjtBQUNoRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBVyw0Q0FBNEMsQ0FBQztBQUU1RixpRUFBaUU7QUFDakUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQVcsSUFBSSxDQUFDO0FBRTlDLGdEQUFnRDtBQUNoRCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBVyxhQUFhLENBQUM7QUFFMUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQVcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVwRSw4Q0FBOEM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFXLCtFQUErRSxDQUFDO0FBRXJIOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFO0lBQ2xELElBQUksY0FBc0IsQ0FBQztJQUUzQixpRUFBaUU7SUFDakUsd0VBQXdFO0lBQ3hFLElBQUksY0FBYyxHQUFXLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQy9ELDZFQUE2RTtJQUM3RSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsc0JBQXNCLGNBQWMsa0JBQWtCLGNBQWMsT0FBTyxDQUFDLENBQUM7SUFFekcsT0FBTyxjQUFjLENBQUM7QUFDMUIsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIFJlZ2V4IHRvIGZsYWcgYWxsIHNwYWNlcyAqL1xyXG5leHBvcnQgY29uc3QgZmluZEFsbFNwYWNlc1BhdHRlcm46IFJlZ0V4cCA9IC8gL2c7XHJcblxyXG4vKiogUGF0dGVybiB0byB2YWxpZGF0ZSBVbml0ZWQgU3RhdGVzIHppcCBjb2Rlcy4gIEFsbG93cyBudW1iZXJzIGFuZCBkYXNoIG9ubHkgKi9cclxuZXhwb3J0IGNvbnN0IHVuaXRlZFN0YXRlc1ppcENvZGVSZWdleDogUmVnRXhwID0gL15bMC05LV0rJC87XHJcblxyXG4vKiogUGF0dGVybiB0byB2YWxpZGF0ZSBDYW5hZGlhbiBwb3N0YWwgY29kZXMsXHJcbiAqICBtdXN0IGZvbGxvdyB0aGUgJ2xldHRlciBudW1iZXIgbGV0dGVyIHNwYWNlIG51bWJlciBsZXR0ZXIgbnVtYmVyJyBwYXR0ZXJuICovXHJcbmV4cG9ydCBjb25zdCBjYW5hZGlhblBvc3RhbENvZGVSZWdleDogUmVnRXhwID0gL15bYS16QS1aXVswLTldW2EtekEtWl0gWzAtOV1bYS16QS1aXVswLTldJC87XHJcblxyXG4vKiogUGF0dGVybiB0byB2YWxpZGF0ZSBvdGhlciBjb3VudHJ5IHppcCBjb2RlcywgYW55dGhpbmcgZ29lcyAqL1xyXG5leHBvcnQgY29uc3Qgb3RoZXJaaXBDb2RlUmVnZXg6IFJlZ0V4cCA9IC8uKi87XHJcblxyXG4vKiogUGF0dGVybiB0byB2YWxpZGF0ZSBhIGNvcnJlY3QgZGF0ZSBmb3JtYXQgKi9cclxuZXhwb3J0IGNvbnN0IGRhdGVJbnB1dEZvcm1hdFJlZ2V4OiBSZWdFeHAgPSAvXlswLTkuLy1dKyQvO1xyXG5cclxuLyoqIFBhdHRlcm4gdG8gdmFsaWRhdGUgaW50ZWdlciBudW1iZXJzLiAgTmVnYXRpdmUgc2lnbiBpcyBvcHRpb25hbCBhbmQgd2lsbCBub3RcclxuICogIGludmFsaWRhdGUgaWYganVzdCBhIG1pbnVzIHNpZ24gaXMgZW50ZXJlZCBpbiB0aGUgaW5wdXQsIGFueSBkaWdpdCBgMC05YCBpcyBhbGxvd2VkXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaW50ZWdlclBhdHRlcm46IFJlZ0V4cCA9IG5ldyBSZWdFeHAoXCJeKC0pPyhbXFxcXGRdKyk/JFwiKTtcclxuXHJcbi8qKiBQYXR0ZXJuIHRvIHZhbGlkYXRlIG1vc3QgcHVibGljIGRvbWFpbnMgKi9cclxuZXhwb3J0IGNvbnN0IGRvbWFpblBhdHRlcm46IFJlZ0V4cCA9IC9eKD86W2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/XFwuKStbYS16MC05XVthLXowLTktXXswLDYxfVthLXowLTldJC9pO1xyXG5cclxuLyoqXHJcbiAqIEZ1bmN0aW9uIHRvIHJldHVybiBhIGRlY2ltYWwgUmVnRXhwLiAgVGFrZXMgaW4gdGhlIG51bWJlciBvZiBkZWNpbWFscyB0byB2YWxpZGF0ZVxyXG4gKiBhZ2FpbnN0XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgZ2V0RGVjaW1hbFBhdHRlcm4gPSAoZGVjaW1hbHM6IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IGRlY2ltYWxQYXR0ZXJuOiBSZWdFeHA7XHJcblxyXG4gICAgLy8gRGVjaW1hbCBwb3J0aW9uLCBhbGxvd2luZyB6ZXJvIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgZGVjaW1hbHNcclxuICAgIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBhbGxvdyBhIG51bWJlciBsaWtlIFwiMS5cIiBvciBcIi5cIiBhbmQgbm90IGludmFsaWRhdGVcclxuICAgIGxldCBkZWNpbWFsUG9ydGlvbjogc3RyaW5nID0gXCJ7MCxcIiArIGRlY2ltYWxzLnRvU3RyaW5nKCkgKyBcIn1cIjtcclxuICAgIC8vIE5lZ2F0aXZlIHNpZ24gaXMgb3B0aW9uYWwgYXMgd2VsbCBhcyB0aGUgZGVjaW1hbCwgYW55IGRpZ2l0IDAtOSBpcyBhbGxvd2VkXHJcbiAgICBkZWNpbWFsUGF0dGVybiA9IG5ldyBSZWdFeHAoYF4oKCgoLSk/XFxcXGQrXFxcXC4/XFxcXGQke2RlY2ltYWxQb3J0aW9ufT8pfCgoLSk/XFxcXC4/XFxcXGQke2RlY2ltYWxQb3J0aW9ufSkpKT8kYCk7XHJcblxyXG4gICAgcmV0dXJuIGRlY2ltYWxQYXR0ZXJuO1xyXG59XHJcbiJdfQ==
@@ -1,186 +1,186 @@
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
- WindowServicefac = 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS93aW5kb3cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUU3Qzs7O0dBR0c7QUFJSCxNQUFNLE9BQU8sYUFBYTtJQUV0Qjs7Ozs7Ozs7T0FRRztJQUNILElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFBO0lBQ2xDLENBQUM7SUFHRDs7O09BR0c7SUFDSCxJQUFXLFVBQVU7UUFDakIsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBT0QsWUFDWSxNQUFhLEVBQ2IsY0FBOEI7UUFEOUIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQWpCbEMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBZ0s1Qzs7Ozs7Ozs7O1dBU0c7UUFDSyx5QkFBb0IsR0FBRyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN4RCw4Q0FBOEM7WUFDOUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLHlDQUF5QztZQUN6QyxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUM7UUE1SkUsSUFBSSxNQUFNLEVBQUU7WUFDUixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDbkIsT0FBTyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFXO1FBQ2xDLElBQUk7WUFDQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM1QixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRDtpQkFBTTtnQkFDSCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3hDO1NBQ0o7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLGtHQUFrRztZQUNsRyxpR0FBaUc7WUFDakcsaUNBQWlDO1lBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxxQkFBcUI7UUFDeEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7T0FFRztJQUNJLHdCQUF3QjtRQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUdEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksV0FBVyxDQUFDLFlBQW9CLEVBQUUsT0FBWSxFQUFFLFlBQW9CO1FBQ3ZFLFlBQVksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDSSxPQUFPLENBQUMsR0FBVztRQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxXQUFtQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFFLEVBQUUsRUFBRTtZQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDL0IsVUFBVSxFQUFFLElBQUk7WUFDaEIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsbUJBQW1CLEVBQUUsT0FBTztTQUMvQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxDQUFDLE1BQWM7UUFDekIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQUMsY0FBdUI7UUFDdEMsSUFBSSxjQUFjLEVBQUU7WUFDaEIsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzFCO2FBQU07WUFDSCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDO0lBRU0sV0FBVztRQUNkLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDM0QsQ0FBQztJQUVELCtFQUErRTtJQUN4RSxVQUFVO1FBQ2IsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsMkdBQTJHO0lBQ3BHLFVBQVU7UUFDYixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxZQUFZO1FBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM3QixDQUFDOzswR0E1S1EsYUFBYTs4R0FBYixhQUFhLGNBRlYsTUFBTTsyRkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKipcclxuICogU2VydmljZSB0byBoZWxwIHdpdGggaW50ZXJmYWNpbmcgd2l0aCB0aGUgd2luZG93IG9iamVjdFxyXG4gKiBhbmQgbmF2aWdhdGluZyBhcm91bmQgdGhlIGFwcGxpY2F0aW9uIChnb2luZyBvdXRzaWRlIG9mIHRoZSBBbmd1bGFyIDIrIHJvdXRlcilcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgV2luZG93U2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUcmFja3MgaWYgdGhlcmUgYXJlIGFueSB1bnNhdmVkIGNoYW5nZXMgdGhhdCB0aGUgdXNlciBjb3VsZCBsb3NlLlxyXG4gICAgICpcclxuICAgICAqIEl0IGlzIHNldCB1cCBhcyBgZ2V0YCBvbmx5IGJlY2F1c2UgaXQgaXMgc2V0IHdpdGggYGFkZE5hdmlnYXRlQXdheVByb21wdGAuXHJcbiAgICAgKlxyXG4gICAgICogVGhpcyBhbHNvIGluY2x1ZGVzIGFkZGluZyBhIHByb21wdCB0byB0aGUgd2luZG93IGl0c2VsZiAoaW4gYWRkaXRpb24gdG9cclxuICAgICAqIHdvcmtpbmcgd2l0aCB0aGUgYENhbkRlYWN0aXZhdGVVbnNhdmVkQ2hhbmdlc2AgZ3VhcmQpIHRvIGNvdmVyIHBhZ2UgcmVsb2Fkc1xyXG4gICAgICogd2hpY2ggZG8gbm90IHRyaWdnZXIgcm91dGVyIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBoYXNVbnNhdmVkQ2hhbmdlcygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGFzVW5zYXZlZENoYW5nZXNcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2hhc1Vuc2F2ZWRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogRXhwb3NlIHRoZSBpbm5lcldpZHRoIG9uIHRoZSB3aW5kb3cgZ2xvYmFsLiBQcm90ZWN0cyBhZ2FpbnN0IGVycm9ycyB3aGVuIGNvZGVcclxuICAgICAqIGlzIHJ1bm5pbmcgb24gYSBub24tYnJvd3NlciBwbGF0Zm9ybS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbm5lcldpZHRoKCk6IG51bWJlcnx1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9ic2VydmFibGUgb2YgdGhlIHdpbmRvdyByZXNpemUgZXZlbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2l6ZWQ/OiBPYnNlcnZhYmxlPEV2ZW50PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjpSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICAgICkgeyBcclxuICAgICAgICBpZiAod2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplZCA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UgdGhlIHVzZXIgaGFkIHZpc2l0ZWRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdvQmFjaygpIHtcclxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqQW4gYWJzdHJhY3Rpb24gYXJvdW5kIHRoZSBicm93c2VycyB3aW5kb3cgaGlzdG9yeSBsZW5ndGguXHJcbiAgICAgKiBSZXR1cm5zIHplcm8gaWYgdW5hYmxlIHRvIGFjY2VzcyBvciBydW5uaW5nIG91dHNpZGUgYSBicm93c2VyIGNvbnRleHRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEhpc3RvcnlMZW5ndGgoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gd2luZG93Py5oaXN0b3J5Py5sZW5ndGggfHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlIHRvIGFueSB1cmwgeW91IGtub3cgdGhlIHBhdGggdG9cclxuICAgICAqIEBwYXJhbSB1cmwgVGhlIFVSTCB0byBuYXZpZ2F0ZSB0b1xyXG4gICAgICpcclxuICAgICAqIEBkZXByZWNhdGVkIEZvciBsZWdhY3kgc3VwcG9ydCBvbmx5OyB1c2UgYHJvdXRlci5uYXZpZ2F0ZUJ5VXJsYCBpbnN0ZWFkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBuYXZpZ2F0ZVRvVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCcvYXBwLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybC5zdWJzdHJpbmcoNSkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgcm91dGVyIHRocm93cyB3ZSB3aWxsIHRyeSB0byBuYXZpZ2F0ZSB0byB0aGUgZnVsbHkgcXVhbGlmaWVkIHVybCBhcyBhIGxhc3QgZGl0Y2ggZWZmb3J0LlxyXG4gICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgbWlzc2VkIGEgbGluayB0aGF0IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBuZzUgb3Igb3VyIG5nMUhyZWYgZGlyZWN0aXZlXHJcbiAgICAgICAgICAgIC8vIGRpZG4ndCBoYW5kbGUgYSBsaW5rIGNvcnJlY3RseVxyXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIGEgYGJlZm9yZXVubG9hZGAgZnVuY3Rpb24gdG8gdGhlIHdpbmRvdyB0byBhbGVydCB0aGUgdXNlciB0aGF0IHRoZXJlIGFyZSBhYm91dCB0byBsZWF2ZVxyXG4gICAgICogdGhlIGN1cnJlbnQgcGFnZSBhbmQgYXNrIGlmIHRoZXknZCBsaWtlIHRvIGxlYXZlIG9yIHN0YXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZE5hdmlnYXRlQXdheVByb21wdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oYXNVbnNhdmVkQ2hhbmdlcyA9IHRydWU7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmV1bmxvYWRcIiwgdGhpcy5iZWZvcmVVbmxvYWRGdW5jdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBgYmVmb3JldW5sb2FkYCBmdW5jdGlvbiBhZGRlZCB0byB0aGUgd2luZG93XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZW1vdmVOYXZpZ2F0ZUF3YXlQcm9tcHQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCB0aGlzLmJlZm9yZVVubG9hZEZ1bmN0aW9uKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIGRhdGEgdG8gYW5vdGhlciB3aW5kb3cuXHJcbiAgICAgKlxyXG4gICAgICogX19TRUNVUklUWSBSSVNLX18gLSBBbHdheXMgdXNlIGEgc3BlY2lmaWMgdGFyZ2V0IG9yaWdpbi4gRmFpbGluZyB0byBwcm92aWRlIGEgc3BlY2lmaWMgdGFyZ2V0IG9yaWdpbiBjYW4gYWxsb3dcclxuICAgICAqIG1hbGljaW91cyBzaXRlcyB0byByZWNlaXZlIHRoZSBtZXNzYWdlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YXJnZXRXaW5kb3cgLSBXaW5kb3cgdG8gc2VuZCB0aGUgbWVzc2FnZSB0b1xyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgLSBEYXRhIHRvIHNlbmRcclxuICAgICAqIEBwYXJhbSB0YXJnZXRPcmlnaW4gLSBXaGF0IHRoZSBVUkkgb2YgdGhlIHRhcmdldCB3aW5kb3cgbXVzdCBiZSBmb3IgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudC5cclxuICAgICAqIElmIHNlbmRpbmcgZGF0YSB0byBhbm90aGVyIEVuZXJneUNBUCB3aW5kb3csIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSBgd2luZG93LmxvY2F0aW9uLm9yaWdpbmAgdG8gZW5zdXJlXHJcbiAgICAgKiB0aGF0IG9ubHkgaW5zdGFuY2VzIG9mIEVuZXJneUNBUCBhcHAgcmVjZWl2ZSB0aGUgbWVzc2FnZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvc3RNZXNzYWdlKHRhcmdldFdpbmRvdzogV2luZG93LCBtZXNzYWdlOiBhbnksIHRhcmdldE9yaWdpbjogc3RyaW5nKSB7XHJcbiAgICAgICAgdGFyZ2V0V2luZG93LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIGEgbmV3IHdpbmRvd1xyXG4gICAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgb2YgdGhlIHJlc291cmNlIHRvIGJlIGxvYWRlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3Blbk5ldyh1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQSB3cmFwcGVyIGFyb3VuZCB0aGUgcm91dGVyIGZvciBjaGFuZ2luZyB0aGUgcXVlcnkgcGFyYW1zIGZvciB0aGUgY3VycmVudCB1cmwgXHJcbiAgICAgKiB3aXRob3V0IGNyZWF0aW5nIGEgbmV3IGhpc3RvcnkgZW50cnkgb3IgcmVtb3ZpbmcgYW55IGV4aXN0aW5nIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICAgKiBUaGUgcHJvdmlkZWQgcGFyYW1zIGFyZSB1cGRhdGVkIGlmIHRoZXkgYWxyZWFkeSBleGlzdCBvciBhZGRlZCB0byB0aGUgdXJsIGlmIHRoZXkgZG9uJ3RcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgbmF2aWdhdGlvbiBzdWNjZWVkcywgZmFsc2UgaWYgc29tZXRoaW5nIChsaWtlIGEgZ3VhcmQpIGJsb2NrcyBpdC5cclxuICAgICAqIEluIG5vcm1hbCB1c2UsIHRoZSBuYXZpZ2F0aW9uIHNob3VsZCBzdWNjZWVkIHVubGVzcyB3ZSB1c2UgcXVlcnkgcGFyYW1zIHRvIGJsb2NrIGFjY2VzcyB0byBhIHJvdXRlIHRoZSB1c2VyIGlzIGFscmVhZHkgb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIGFzeW5jIG1vZGlmeUhpc3RvcnlRdWVyeVBhcmFtc1N1YnNldChxdWVyeVBhcmFtczogUGFyYW1zKSA6IFByb21pc2U8Ym9vbGVhbj57XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKCBbXSwge1xyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsIFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKkEgd3JhcHBlciBhcm91bmQgdGhlIGRlZmF1bHQgamF2YXNjcmlwdCBjb25maXJtIGRpYWxvZyB0byBhbGxvdyB1cyB0byB1bml0IHRlc3QgZGVwZW5kZW50IGNvZGUuXHJcbiAgICAgKiBPZiBjb3Vyc2UgZXZlbnR1YWxseSB3ZSdkIGxpa2UgdG8gaGF2ZSBwcmV0dHkgY29uZmlybWF0aW9ucyBmb3IgZXZlcnl0aGluZywgYnV0IGluIHNvbWUgY2FzZXMgaXQgd2Fzbid0IHdvcnRoIHRoZSBleHRyYSB0aW1lXHJcbiAgICAgKiBzbyB3ZSdyZSB1c2luZyB0aGlzIGluc3RlYWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25maXJtKHByb21wdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjb25maXJtKHByb21wdCkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xvc2UgdGhlIGN1cnJlbnQgd2luZG93IG9yIGEgd2luZG93IGluc3RhbmNlIGlmIG9uZSBpcyBwcm92aWRlZFxyXG4gICAgICogQHBhcmFtIHdpbmRvd0luc3RhbmNlIC0gV2luZG93IHRvIGNsb3NlIChvcHRpb25hbClcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsb3NlV2luZG93KHdpbmRvd0luc3RhbmNlPzogV2luZG93KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHdpbmRvd0luc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvd0luc3RhbmNlLmNsb3NlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRMb2NhdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uaGFzaDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmdWxsIHVybCwgaW5jbHVkaW5nIHByb3RvY29sLCBob3N0IGFuZCBwYXRoICovXHJcbiAgICBwdWJsaWMgZ2V0RnVsbFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogR2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBiYXNlIHVybCwgaW5jbHVkaW5nIHByb3RvY29sLCBkb21haW4gYW5kIHBvcnQgKGlmIGV4cGxpY2l0bHkgc3BlY2lmaWVkKSAqL1xyXG4gICAgcHVibGljIGdldEJhc2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbG9hZHMgdGhlIGJyb3dzZXIgd2luZG93LlxyXG4gICAgICogTk9UIFJFQ09NTUVOREVELiBTZWVrIG90aGVyIG9wdGlvbnMgZm9yIHJlbG9hZGluZyBjb250ZW50IHdpdGhpbiBBbmd1bGFyIGJlZm9yZSByZXNvcnRpbmcgdG8gdGhpcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbG9hZFdpbmRvdygpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgd2luZG93IGBiZWZvcmV1bmxvYWRgIGV2ZW50IGlzIGZpcmVkLlxyXG4gICAgICpcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiB0aGF0IHdhcyBwYXNzZWQgdG8gYHdpbmRvdy5hZGRFdmVudExpc3RlbmVyYFxyXG4gICAgICogbXVzdCBiZSByZXRhaW5lZCBmb3IgYHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyYCB0byBmdW5jdGlvbiBwcm9wZXJseS5cclxuICAgICAqXHJcbiAgICAgKiBTb21lIGJyb3dzZXJzIHJlcXVpcmUgdGhlIGV2ZW50J3MgYHJldHVyblZhbHVlYCB0byBiZSBzZXQgdG8gc2hvdyB0aGUgY29uZmlybWF0aW9uXHJcbiAgICAgKiBkaWFsb2cuXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvYmVmb3JldW5sb2FkX2V2ZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYmVmb3JlVW5sb2FkRnVuY3Rpb24gPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8gQ2FuY2VsIHRoZSBldmVudCBhcyBzdGF0ZWQgYnkgdGhlIHN0YW5kYXJkLlxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgLy8gQ2hyb21lIHJlcXVpcmVzIHJldHVyblZhbHVlIHRvIGJlIHNldC5cclxuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICcnO1xyXG4gICAgfTtcclxufVxyXG4iXX0=
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
178
+ static { thisprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WindowService, providedIn: 'root' }); }
179
+ }
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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 +1,46 @@
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
- AppBarComponentfac = 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
+ 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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppBarComponent, deps: [{ token: i1.AvatarService }], target: i0.ɵɵFactoryTarget.Component }); }
28
+ static { thiscmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", 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"] }] }); }
29
+ }
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9hcHAtYmFyL2FwcC1iYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvYXBwLWJhci9hcHAtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFVNUQsTUFBTSxPQUFPLGVBQWU7SUFZMUIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFWdkMsa0JBQWEsR0FBZSxFQUFFLENBQUM7UUFDL0Isa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIscUJBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQixhQUFRLEdBQUcseUJBQXlCLENBQUM7UUFFOUMsY0FBUyxHQUFlLEVBQUUsQ0FBQTtRQUVsQixhQUFRLEdBQWUsRUFBRSxDQUFDO0lBRWtCLENBQUM7SUFFOUMsV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUMsQ0FBQztTQUMxRzthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdELENBQUM7K0dBdEJVLGVBQWU7bUdBQWYsZUFBZSxtUUNWNUIsNDBCQXVCYzs7NEZEYkQsZUFBZTtrQkFMM0IsU0FBUzsrQkFDRSxZQUFZO29HQUtiLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF2YXRhclVzZXIgfSBmcm9tICcuLi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF2YXRhclNlcnZpY2UgfSBmcm9tICcuLi9hdmF0YXIvYXZhdGFyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1hcHAtYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLWJhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcHBCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIHVzZXI/OiBBdmF0YXJVc2VyO1xyXG4gIEBJbnB1dCgpIHVzZXJNZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuICBASW5wdXQoKSB1c2VyTWVudVdpZHRoID0gMDtcclxuICBASW5wdXQoKSB1c2VyTWVudU1pbldpZHRoID0gMTYwO1xyXG4gIEBJbnB1dCgpIHVzZXJNZW51VGFiaW5kZXggPSAwO1xyXG4gIEBJbnB1dCgpIGljb25QYXRoID0gJy9hc3NldHMvaW1hZ2VzL2ljb24uc3ZnJztcclxuICBcclxuICBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXVxyXG5cclxuICBwcml2YXRlIHVzZXJJdGVtOiBNZW51SXRlbVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXZhdGFyU2VydmljZTogQXZhdGFyU2VydmljZSkgeyB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnVzZXIpIHtcclxuICAgICAgdGhpcy51c2VySXRlbVswXSA9IHtsYWJlbDogdGhpcy5hdmF0YXJTZXJ2aWNlLmdldEF2YXRhckxhYmVscyh0aGlzLnVzZXIpLmZ1bGwgfHwgJycsIGRpc3BsYXk6ICdoZWFkaW5nJ307XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJJdGVtID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tZW51SXRlbXMgPSBbLi4udGhpcy51c2VySXRlbSwgLi4udGhpcy51c2VyTWVudUl0ZW1zXTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJsb2dvLWNvbnRhaW5lclwiPlxyXG4gIDxpbWcgc3JjPVwie3tpY29uUGF0aH19XCJcclxuICAgICAgIGFsdD1cIkVuZXJneUNBUCBQbGF0Zm9ybVwiPlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cInRpdGxlLWNvbnRhaW5lclwiPlxyXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIi5hcHAtYmFyLXRpdGxlXCI+PC9uZy1jb250ZW50PlxyXG48L3NlY3Rpb24+XHJcblxyXG48c2VjdGlvbiBjbGFzcz1cImFjdGlvbnMtY29udGFpbmVyXCI+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmFwcC1iYXItYWN0aW9uc1wiPjwvbmctY29udGVudD5cclxuICA8ZWMtZHJvcGRvd24gaWQ9XCJBcHBCYXJVc2VyTWVudVwiXHJcbiAgICAgICAgICAgICAgICpuZ0lmPVwidXNlck1lbnVJdGVtcy5sZW5ndGg7IGVsc2UgYXZhdGFyXCJcclxuICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgIFtidXR0b25DdXN0b21UZW1wbGF0ZV09XCJhdmF0YXJcIlxyXG4gICAgICAgICAgICAgICBbc2hvd0Fycm93XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgW21lbnVXaWR0aF09XCJ1c2VyTWVudVdpZHRoXCJcclxuICAgICAgICAgICAgICAgW21lbnVNaW5XaWR0aF09XCJ1c2VyTWVudU1pbldpZHRoXCJcclxuICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInVzZXJNZW51VGFiaW5kZXhcIj48L2VjLWRyb3Bkb3duPlxyXG48L3NlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2YXRhcj5cclxuICA8ZWMtYXZhdGFyIFt1c2VyXT1cInVzZXJcIj48L2VjLWF2YXRhcj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=