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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/{esm2020 → esm2022}/energycap-components.mjs +4 -4
  2. package/esm2022/lib/components.module.mjs +418 -0
  3. package/esm2022/lib/controls/banner/banner.component.mjs +109 -0
  4. package/esm2022/lib/controls/button/button.component.mjs +106 -0
  5. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +67 -0
  6. package/{esm2020 → esm2022}/lib/controls/button/copy-button.directive.mjs +28 -28
  7. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +59 -0
  9. package/esm2022/lib/controls/calendar/calendar.component.mjs +200 -0
  10. package/esm2022/lib/controls/calendar/calendar.types.mjs +4 -0
  11. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/{esm2020 → esm2022}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
  13. package/esm2022/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2022/lib/controls/date-input/date-input.component.mjs +256 -0
  15. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +243 -0
  16. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +261 -0
  17. package/esm2022/lib/controls/form-control/form-control.component.mjs +104 -0
  18. package/esm2022/lib/controls/form-control-base.mjs +151 -0
  19. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  20. package/esm2022/lib/controls/form-group/form-group.component.mjs +261 -0
  21. package/{esm2020 → esm2022}/lib/controls/help-popover/help-popover.component.mjs +31 -31
  22. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
  23. package/{esm2020 → esm2022}/lib/controls/link-button/link-button.component.mjs +11 -11
  24. package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
  25. package/{esm2020 → esm2022}/lib/controls/navigation/link-item.mjs +1 -1
  26. package/esm2022/lib/controls/navigation/nav-group.mjs +39 -0
  27. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  28. package/{esm2020 → esm2022}/lib/controls/navigation/nav-item.mjs +1 -1
  29. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
  30. package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
  31. package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button-option.mjs +2 -2
  32. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +82 -0
  33. package/esm2022/lib/controls/select/select.component.mjs +88 -0
  34. package/esm2022/lib/controls/tabs/tabs.component.mjs +47 -0
  35. package/esm2022/lib/controls/textbox/textbox.component.mjs +155 -0
  36. package/esm2022/lib/core/cache.service.mjs +105 -0
  37. package/esm2022/lib/core/custom-validators.mjs +29 -0
  38. package/esm2022/lib/core/date-time-helper.mjs +220 -0
  39. package/esm2022/lib/core/error.service.mjs +61 -0
  40. package/esm2022/lib/core/router-helper.service.mjs +111 -0
  41. package/esm2022/lib/core/scroll.service.mjs +89 -0
  42. package/{esm2020 → esm2022}/lib/core/telemetry-tracker.service.mjs +16 -16
  43. package/{esm2020 → esm2022}/lib/core/telemetry.service.mjs +38 -38
  44. package/esm2022/lib/core/validation-message.service.mjs +185 -0
  45. package/{esm2020 → esm2022}/lib/core/validation-patterns.mjs +30 -30
  46. package/esm2022/lib/core/window.service.mjs +186 -0
  47. package/esm2022/lib/display/app-bar/app-bar.component.mjs +46 -0
  48. package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
  49. package/esm2022/lib/display/avatar/avatar.service.mjs +64 -0
  50. package/esm2022/lib/display/confirm/confirm.component.mjs +168 -0
  51. package/{esm2020 → esm2022}/lib/display/dialog/dialog-content.mjs +1 -1
  52. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  53. package/{esm2020 → esm2022}/lib/display/dialog/dialog-types.mjs +76 -76
  54. package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
  55. package/{esm2020 → esm2022}/lib/display/dialog/dialog.service.mjs +71 -71
  56. package/{esm2020 → esm2022}/lib/display/help/help-types.mjs +1 -1
  57. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  58. package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
  59. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  60. package/esm2022/lib/display/item-display/item-display.component.mjs +81 -0
  61. package/esm2022/lib/display/json-display/json-display.component.mjs +47 -0
  62. package/esm2022/lib/display/resizable/resizable-base.mjs +120 -0
  63. package/{esm2020 → esm2022}/lib/display/resizable/resizable.component.mjs +52 -52
  64. package/{esm2020 → esm2022}/lib/display/spinner/spinner.component.mjs +12 -12
  65. package/esm2022/lib/display/splash/splash.component.mjs +42 -0
  66. package/{esm2020 → esm2022}/lib/display/splash/splash.service.mjs +35 -35
  67. package/{esm2020 → esm2022}/lib/display/table/resizable-column.component.mjs +20 -20
  68. package/esm2022/lib/display/table/resizable-table.directive.mjs +227 -0
  69. package/esm2022/lib/display/table/searchable-table.component.mjs +342 -0
  70. package/{esm2020 → esm2022}/lib/display/table/table-detail-row.component.mjs +19 -19
  71. package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
  72. package/{esm2020 → esm2022}/lib/display/table/table-master-header-row.component.mjs +14 -14
  73. package/esm2022/lib/display/table/table-master-row.component.mjs +163 -0
  74. package/esm2022/lib/display/table/table-pagination.component.mjs +155 -0
  75. package/esm2022/lib/display/table/table-selectable-row.component.mjs +235 -0
  76. package/esm2022/lib/display/table/table.component.mjs +249 -0
  77. package/esm2022/lib/display/tags/tag.mjs +18 -0
  78. package/esm2022/lib/display/tags/tags.component.mjs +77 -0
  79. package/esm2022/lib/display/toast/toast/toast.component.mjs +77 -0
  80. package/{esm2020 → esm2022}/lib/display/toast/toast-types.mjs +7 -7
  81. package/{esm2020 → esm2022}/lib/display/toast/toast.service.mjs +35 -35
  82. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
  83. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.component.mjs +28 -28
  84. package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.service.mjs +78 -78
  85. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  86. package/{esm2020 → esm2022}/lib/display/tour/tour-types.mjs +33 -33
  87. package/esm2022/lib/display/tour/tour.component.mjs +398 -0
  88. package/esm2022/lib/display/tour/tour.service.mjs +75 -0
  89. package/esm2022/lib/display/tree/tree.component.mjs +135 -0
  90. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  91. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  92. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  93. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
  94. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  95. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  96. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  97. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  98. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  99. package/esm2022/lib/shared/display.mjs +6 -0
  100. package/esm2022/lib/shared/form-group.helper.mjs +67 -0
  101. package/esm2022/lib/shared/json-helper.mjs +19 -0
  102. package/esm2022/lib/shared/lodash-helper.mjs +52 -0
  103. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +387 -0
  104. package/{esm2020 → esm2022}/lib/shared/page/page-statuses.mjs +22 -22
  105. package/{esm2020 → esm2022}/lib/shared/page/page-title/page-title.component.mjs +23 -23
  106. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
  107. package/{esm2020 → esm2022}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
  108. package/{esm2020 → esm2022}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
  109. package/{esm2020 → esm2022}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
  110. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  111. package/{esm2020 → esm2022}/lib/shared/testing/public-mocks.spec.mjs +148 -148
  112. package/{esm2020 → esm2022}/lib/shared/testing/spy-factory.spec.mjs +39 -39
  113. package/{esm2020 → esm2022}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
  114. package/{esm2020 → esm2022}/lib/shared/user-preference.service.mjs +17 -17
  115. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  116. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
  117. package/{esm2020 → esm2022}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
  118. package/esm2022/public-api.mjs +115 -0
  119. package/{fesm2020 → fesm2022}/energycap-components.mjs +11819 -12974
  120. package/fesm2022/energycap-components.mjs.map +1 -0
  121. package/index.d.ts +5 -5
  122. package/lib/components.module.d.ts +91 -92
  123. package/lib/controls/banner/banner.component.d.ts +50 -50
  124. package/lib/controls/button/button.component.d.ts +78 -78
  125. package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
  126. package/lib/controls/button/copy-button.directive.d.ts +14 -14
  127. package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
  128. package/lib/controls/calendar/calendar-item.component.d.ts +17 -22
  129. package/lib/controls/calendar/calendar.component.d.ts +54 -52
  130. package/lib/controls/calendar/calendar.types.d.ts +7 -11
  131. package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
  132. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
  133. package/lib/controls/combobox/combobox.component.d.ts +418 -418
  134. package/lib/controls/date-input/date-input.component.d.ts +80 -115
  135. package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
  136. package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
  137. package/lib/controls/form-control/form-control.component.d.ts +30 -28
  138. package/lib/controls/form-control-base.d.ts +110 -110
  139. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
  140. package/lib/controls/form-group/form-group.component.d.ts +105 -105
  141. package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
  142. package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
  143. package/lib/controls/link-button/link-button.component.d.ts +5 -5
  144. package/lib/controls/menu/menu.component.d.ts +255 -255
  145. package/lib/controls/navigation/link-item.d.ts +32 -32
  146. package/lib/controls/navigation/nav-group.d.ts +18 -18
  147. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
  148. package/lib/controls/navigation/nav-item.d.ts +31 -31
  149. package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
  150. package/lib/controls/popover/popover.component.d.ts +51 -51
  151. package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
  152. package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
  153. package/lib/controls/select/select.component.d.ts +44 -44
  154. package/lib/controls/tabs/tabs.component.d.ts +30 -30
  155. package/lib/controls/textbox/textbox.component.d.ts +107 -107
  156. package/lib/core/cache.service.d.ts +33 -33
  157. package/lib/core/custom-validators.d.ts +20 -20
  158. package/lib/core/date-time-helper.d.ts +101 -101
  159. package/lib/core/error.service.d.ts +20 -20
  160. package/lib/core/router-helper.service.d.ts +48 -48
  161. package/lib/core/scroll.service.d.ts +36 -36
  162. package/lib/core/telemetry-tracker.service.d.ts +13 -13
  163. package/lib/core/telemetry.service.d.ts +31 -31
  164. package/lib/core/validation-message.service.d.ts +26 -26
  165. package/lib/core/validation-patterns.d.ts +22 -22
  166. package/lib/core/window.service.d.ts +116 -116
  167. package/lib/display/app-bar/app-bar.component.d.ts +20 -20
  168. package/lib/display/avatar/avatar.component.d.ts +35 -35
  169. package/lib/display/avatar/avatar.service.d.ts +24 -24
  170. package/lib/display/confirm/confirm.component.d.ts +123 -123
  171. package/lib/display/dialog/dialog-content.d.ts +19 -19
  172. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
  173. package/lib/display/dialog/dialog-types.d.ts +130 -130
  174. package/lib/display/dialog/dialog.component.d.ts +120 -120
  175. package/lib/display/dialog/dialog.service.d.ts +48 -48
  176. package/lib/display/help/help-types.d.ts +33 -33
  177. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
  178. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
  179. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
  180. package/lib/display/item-display/item-display.component.d.ts +43 -43
  181. package/lib/display/json-display/json-display.component.d.ts +16 -16
  182. package/lib/display/resizable/resizable-base.d.ts +67 -67
  183. package/lib/display/resizable/resizable.component.d.ts +31 -31
  184. package/lib/display/spinner/spinner.component.d.ts +5 -5
  185. package/lib/display/splash/splash.component.d.ts +16 -16
  186. package/lib/display/splash/splash.service.d.ts +22 -22
  187. package/lib/display/table/resizable-column.component.d.ts +10 -10
  188. package/lib/display/table/resizable-table.directive.d.ts +93 -93
  189. package/lib/display/table/searchable-table.component.d.ts +206 -206
  190. package/lib/display/table/table-detail-row.component.d.ts +8 -8
  191. package/lib/display/table/table-locked-column.component.d.ts +20 -20
  192. package/lib/display/table/table-master-header-row.component.d.ts +9 -9
  193. package/lib/display/table/table-master-row.component.d.ts +113 -113
  194. package/lib/display/table/table-pagination.component.d.ts +91 -91
  195. package/lib/display/table/table-selectable-row.component.d.ts +102 -102
  196. package/lib/display/table/table.component.d.ts +121 -121
  197. package/lib/display/tags/tag.d.ts +18 -18
  198. package/lib/display/tags/tags.component.d.ts +48 -48
  199. package/lib/display/toast/toast/toast.component.d.ts +23 -23
  200. package/lib/display/toast/toast-types.d.ts +24 -24
  201. package/lib/display/toast/toast.service.d.ts +20 -20
  202. package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
  203. package/lib/display/tooltip/tooltip.component.d.ts +70 -70
  204. package/lib/display/tooltip/tooltip.service.d.ts +16 -16
  205. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
  206. package/lib/display/tour/tour-types.d.ts +70 -70
  207. package/lib/display/tour/tour.component.d.ts +147 -147
  208. package/lib/display/tour/tour.service.d.ts +38 -38
  209. package/lib/display/tree/tree.component.d.ts +75 -75
  210. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
  211. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
  212. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
  213. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
  214. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
  215. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
  216. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
  217. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
  218. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
  219. package/lib/shared/display.d.ts +42 -42
  220. package/lib/shared/form-group.helper.d.ts +31 -31
  221. package/lib/shared/json-helper.d.ts +7 -7
  222. package/lib/shared/lodash-helper.d.ts +18 -18
  223. package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
  224. package/lib/shared/page/page-statuses.d.ts +13 -13
  225. package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
  226. package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
  227. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
  228. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
  229. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
  230. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
  231. package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
  232. package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
  233. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
  234. package/lib/shared/user-preference.service.d.ts +13 -13
  235. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
  236. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
  237. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
  238. package/package.json +12 -18
  239. package/public-api.d.ts +111 -113
  240. package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
  241. package/schematics/rxjs-7-upgrade/index.js +67 -67
  242. package/schematics/rxjs-7-upgrade/index.js.map +1 -1
  243. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
  244. package/schematics/rxjs-7-upgrade/schema.js +2 -2
  245. package/schematics/utilities/typescript.d.ts +7 -7
  246. package/schematics/utilities/typescript.js +41 -41
  247. package/schematics/utilities/workspace.d.ts +8 -8
  248. package/schematics/utilities/workspace.js +71 -71
  249. package/schematics/utilities/workspace.js.map +1 -1
  250. package/src/assets/locales/en_US.json +1 -9
  251. package/esm2020/lib/components.module.mjs +0 -423
  252. package/esm2020/lib/controls/banner/banner.component.mjs +0 -109
  253. package/esm2020/lib/controls/button/button.component.mjs +0 -106
  254. package/esm2020/lib/controls/button/copy-button-base.directive.mjs +0 -67
  255. package/esm2020/lib/controls/button/copy-table-button.directive.mjs +0 -43
  256. package/esm2020/lib/controls/calendar/calendar-item.component.mjs +0 -91
  257. package/esm2020/lib/controls/calendar/calendar.component.mjs +0 -248
  258. package/esm2020/lib/controls/calendar/calendar.types.mjs +0 -2
  259. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +0 -140
  260. package/esm2020/lib/controls/combobox/combobox.component.mjs +0 -879
  261. package/esm2020/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  262. package/esm2020/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  263. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  264. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  265. package/esm2020/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  266. package/esm2020/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  267. package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  268. package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  269. package/esm2020/lib/controls/date-input/date-input.component.mjs +0 -465
  270. package/esm2020/lib/controls/date-input/date-input.types.mjs +0 -44
  271. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +0 -243
  272. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +0 -261
  273. package/esm2020/lib/controls/form-control/form-control.component.mjs +0 -98
  274. package/esm2020/lib/controls/form-control-base.mjs +0 -151
  275. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  276. package/esm2020/lib/controls/form-group/form-group.component.mjs +0 -261
  277. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +0 -329
  278. package/esm2020/lib/controls/menu/menu.component.mjs +0 -485
  279. package/esm2020/lib/controls/navigation/nav-group.mjs +0 -39
  280. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  281. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +0 -372
  282. package/esm2020/lib/controls/popover/popover.component.mjs +0 -117
  283. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +0 -82
  284. package/esm2020/lib/controls/select/select.component.mjs +0 -88
  285. package/esm2020/lib/controls/tabs/tabs.component.mjs +0 -47
  286. package/esm2020/lib/controls/textbox/textbox.component.mjs +0 -155
  287. package/esm2020/lib/core/cache.service.mjs +0 -105
  288. package/esm2020/lib/core/custom-validators.mjs +0 -29
  289. package/esm2020/lib/core/date-time-helper.mjs +0 -228
  290. package/esm2020/lib/core/error.service.mjs +0 -61
  291. package/esm2020/lib/core/router-helper.service.mjs +0 -111
  292. package/esm2020/lib/core/scroll.service.mjs +0 -89
  293. package/esm2020/lib/core/validation-message.service.mjs +0 -185
  294. package/esm2020/lib/core/window.service.mjs +0 -186
  295. package/esm2020/lib/display/app-bar/app-bar.component.mjs +0 -46
  296. package/esm2020/lib/display/avatar/avatar.component.mjs +0 -67
  297. package/esm2020/lib/display/avatar/avatar.service.mjs +0 -64
  298. package/esm2020/lib/display/confirm/confirm.component.mjs +0 -168
  299. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  300. package/esm2020/lib/display/dialog/dialog.component.mjs +0 -281
  301. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  302. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
  303. package/esm2020/lib/display/item-display/item-display.component.mjs +0 -81
  304. package/esm2020/lib/display/json-display/json-display.component.mjs +0 -47
  305. package/esm2020/lib/display/resizable/resizable-base.mjs +0 -120
  306. package/esm2020/lib/display/splash/splash.component.mjs +0 -42
  307. package/esm2020/lib/display/table/resizable-table.directive.mjs +0 -227
  308. package/esm2020/lib/display/table/searchable-table.component.mjs +0 -342
  309. package/esm2020/lib/display/table/table-locked-column.component.mjs +0 -58
  310. package/esm2020/lib/display/table/table-master-row.component.mjs +0 -163
  311. package/esm2020/lib/display/table/table-pagination.component.mjs +0 -155
  312. package/esm2020/lib/display/table/table-selectable-row.component.mjs +0 -235
  313. package/esm2020/lib/display/table/table.component.mjs +0 -249
  314. package/esm2020/lib/display/tags/tag.mjs +0 -18
  315. package/esm2020/lib/display/tags/tags.component.mjs +0 -77
  316. package/esm2020/lib/display/toast/toast/toast.component.mjs +0 -77
  317. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +0 -114
  318. package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  319. package/esm2020/lib/display/tour/tour.component.mjs +0 -398
  320. package/esm2020/lib/display/tour/tour.service.mjs +0 -75
  321. package/esm2020/lib/display/tree/tree.component.mjs +0 -135
  322. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  323. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  324. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  325. package/esm2020/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -100
  326. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +0 -163
  327. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
  328. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  329. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  330. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  331. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  332. package/esm2020/lib/shared/display.mjs +0 -6
  333. package/esm2020/lib/shared/form-group.helper.mjs +0 -67
  334. package/esm2020/lib/shared/json-helper.mjs +0 -19
  335. package/esm2020/lib/shared/lodash-helper.mjs +0 -51
  336. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +0 -387
  337. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +0 -147
  338. package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  339. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  340. package/esm2020/public-api.mjs +0 -117
  341. package/fesm2015/energycap-components.mjs +0 -13373
  342. package/fesm2015/energycap-components.mjs.map +0 -1
  343. package/fesm2020/energycap-components.mjs.map +0 -1
  344. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +0 -42
  345. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +0 -21
  346. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +0 -21
  347. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +0 -21
  348. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +0 -18
  349. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +0 -18
  350. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +0 -21
  351. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +0 -20
  352. package/lib/controls/date-input/date-input.types.d.ts +0 -62
  353. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +0 -23
@@ -0,0 +1,135 @@
1
+ import { Component, Input, HostBinding, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { MenuComponent } from '../../controls/menu/menu.component';
3
+ import { HierarchyTreeComponent } from '../hierarchy/hierarchy-tree/hierarchy-tree.component';
4
+ import { Overlay } from '../view-overlay/view-overlay.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "../view-overlay/view-overlay.component";
8
+ import * as i3 from "../../controls/menu/menu.component";
9
+ import * as i4 from "../../controls/dropdown/dropdown.component";
10
+ import * as i5 from "../hierarchy/hierarchy-tree/hierarchy-tree.component";
11
+ import * as i6 from "@ngx-translate/core";
12
+ export class TreeComponent {
13
+ /**
14
+ * The ID of the component, bound to the host element's id attribute and passed
15
+ * to child components
16
+ */
17
+ set id(value) {
18
+ this._id = value;
19
+ this.attrId = value;
20
+ }
21
+ ;
22
+ get id() {
23
+ return this._id;
24
+ }
25
+ constructor() {
26
+ /** The value of the host elements id attribute */
27
+ this.attrId = '';
28
+ this._id = '';
29
+ /** The tree's title displayed in the header */
30
+ this.treeTitle = '';
31
+ /** Hides the tree header when set to true */
32
+ this.hideTreeHeader = false;
33
+ /** Used when the tree is in menu mode to tell the menu if it should maintain the selected item
34
+ * Useful in side nav components where this tree component may exist alongside other trees or menus
35
+ * used for navigation. If this tree is in menu mode you would want this set to false so when you select an item
36
+ * from a sibling navigation element the selection will not be maintained.
37
+ */
38
+ this.treeMenuMaintainSelectedItem = true;
39
+ /** Tree overlay */
40
+ this.status = new Overlay('hasData');
41
+ /** Display the tree items with a MenuComponent or a HierarchyTreeComponent */
42
+ this.type = 'hierarchy';
43
+ /** Tree dropdown menu overlay */
44
+ this.menuStatus = new Overlay('hasData');
45
+ /** The menu item template */
46
+ this.menuTemplateType = "checkAndLabel";
47
+ /**
48
+ * When true, the space for the icon is preserved for menu items that do not have icons.
49
+ * Only applicable for iconAndLabel menus. Not applicable to hierarchy trees.
50
+ */
51
+ this.preserveIconSpace = false;
52
+ /** Emits the item currently selected item in the tree */
53
+ this.treeSelection = new EventEmitter();
54
+ /** Emits when a hierarchy tree item is expanded as a hook to load the item's children */
55
+ this.getTreeItemChildren = new EventEmitter();
56
+ /** Emits when a hierarchy tree item is expanded or collapsed */
57
+ this.treeItemToggled = new EventEmitter();
58
+ this.templateType = 'label';
59
+ }
60
+ /** Emits when a tree item is selected */
61
+ onItemSelected(item) {
62
+ this.treeSelection.emit(item);
63
+ }
64
+ /** Emits when a hierarchy tree item is expanded to load the item's children */
65
+ onHierarchyGetItemChildren(item) {
66
+ this.getTreeItemChildren.emit(item);
67
+ }
68
+ /** Emits when a hierarchy tree item is expanded or collapsed */
69
+ onHierarchyItemToggled(item) {
70
+ this.treeItemToggled.emit(item);
71
+ }
72
+ /** Scroll to the tree item that is currently selected. */
73
+ scrollToSelectedItem() {
74
+ if (this.menuComponent) {
75
+ this.menuComponent.scrollToSelectedItem();
76
+ }
77
+ if (this.hierarchyTreeComponent) {
78
+ this.hierarchyTreeComponent.scrollToSelectedItem();
79
+ }
80
+ }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
82
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TreeComponent, selector: "ec-tree", inputs: { id: "id", treeTitle: "treeTitle", hideTreeHeader: "hideTreeHeader", treeItems: "treeItems", treeHierarchyHideRootNode: "treeHierarchyHideRootNode", treeHierarchy: "treeHierarchy", treeMenuMaintainSelectedItem: "treeMenuMaintainSelectedItem", customTreeMenuTemplate: "customTreeMenuTemplate", customHierarchyItemTemplate: "customHierarchyItemTemplate", status: "status", type: "type", menuItems: "menuItems", menuStatus: "menuStatus", menuTemplateType: "menuTemplateType", preserveIconSpace: "preserveIconSpace", templateType: "templateType" }, outputs: { treeSelection: "treeSelection", getTreeItemChildren: "getTreeItemChildren", treeItemToggled: "treeItemToggled" }, host: { properties: { "attr.id": "this.attrId" } }, viewQueries: [{ propertyName: "menuComponent", first: true, predicate: MenuComponent, descendants: true }, { propertyName: "hierarchyTreeComponent", first: true, predicate: HierarchyTreeComponent, descendants: true }], ngImport: i0, template: "<header *ngIf=\"!hideTreeHeader\"\r\n class=\"flex-shrink d-flex align-items-center\">\r\n <h2 id=\"{{id}}_title\"\r\n class=\"flex-grow mr-2 text-heading-1\">{{treeTitle | translate}}</h2>\r\n <ec-dropdown *ngIf=\"menuItems?.length\"\r\n id=\"{{id}}_dropdown\"\r\n class=\"flex-shrink\"\r\n icon=\"icon-menu\"\r\n [menuTemplateType]=\"menuTemplateType\"\r\n menuPosition=\"left\"\r\n [status]=\"menuStatus\"\r\n [popupFixed]=\"true\"\r\n [showArrow]=\"false\"\r\n [menuMinWidth]=\"240\"\r\n [items]=\"menuItems\">\r\n </ec-dropdown>\r\n</header>\r\n\r\n<div class=\"flex-grow d-flex\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [message]=\"status?.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-container *ngIf=\"type === 'menu'\">\r\n <ec-menu [id]=\"id\"\r\n [items]=\"treeItems\"\r\n [templateType]=\"templateType\"\r\n [maintainSelectedItem]=\"treeMenuMaintainSelectedItem\"\r\n [truncateItems]=\"true\"\r\n (selectedChanged)=\"onItemSelected($event)\"\r\n [customMenuTemplate]=\"customTreeMenuTemplate ? customTreeMenuTemplate : undefined\"\r\n [preserveIconSpace]=\"preserveIconSpace\"\r\n class=\"flex-grow\">\r\n </ec-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"type === 'hierarchy'\">\r\n <ec-hierarchy-tree [id]=\"id\"\r\n [rootNode]=\"treeHierarchy\"\r\n [hideRootNode]=\"treeHierarchyHideRootNode\"\r\n (getItemChildren)=\"onHierarchyGetItemChildren($event)\"\r\n (itemToggled)=\"onHierarchyItemToggled($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n [customItemTemplate]=\"customHierarchyItemTemplate\"\r\n class=\"flex-grow d-flex\">\r\n </ec-hierarchy-tree>\r\n </ng-container>\r\n</div>", styles: [":host{display:flex;flex-direction:column}header{height:var(--ec-tree-height-header, 3rem);background-color:var(--ec-tree-background-color, var(--ec-background-color));padding:var(--ec-tree-padding-header, 0 .25rem 0 .5rem);border-bottom:var(--ec-tree-border-bottom-header, var(--ec-border-width) solid var(--ec-border-color))}ec-dropdown.fill{height:var(--ec-tree-height-header, 3rem);width:var(--ec-tree-height-header, 3rem)}ec-menu,ec-hierarchy-tree{--ec-menu-background-color: var(--ec-tree-background-color)}[ecOverlay]{--ec-overlay-background-color: var(--ec-tree-background-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i3.MenuComponent, selector: "ec-menu", inputs: ["id", "items", "selected", "parent", "templateType", "customMenuTemplate", "title", "showNoItems", "noDataText", "enableKeyNav", "highlightedItem", "maintainSelectedItem", "truncateItems", "preserveIconSpace", "dropdownToggleButton"], outputs: ["selectedChanged", "menuClosed"] }, { kind: "component", type: i4.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: i5.HierarchyTreeComponent, selector: "ec-hierarchy-tree", inputs: ["id", "hideRootNode", "customItemTemplate"], outputs: ["itemSelected"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TreeComponent, decorators: [{
85
+ type: Component,
86
+ args: [{ selector: 'ec-tree', template: "<header *ngIf=\"!hideTreeHeader\"\r\n class=\"flex-shrink d-flex align-items-center\">\r\n <h2 id=\"{{id}}_title\"\r\n class=\"flex-grow mr-2 text-heading-1\">{{treeTitle | translate}}</h2>\r\n <ec-dropdown *ngIf=\"menuItems?.length\"\r\n id=\"{{id}}_dropdown\"\r\n class=\"flex-shrink\"\r\n icon=\"icon-menu\"\r\n [menuTemplateType]=\"menuTemplateType\"\r\n menuPosition=\"left\"\r\n [status]=\"menuStatus\"\r\n [popupFixed]=\"true\"\r\n [showArrow]=\"false\"\r\n [menuMinWidth]=\"240\"\r\n [items]=\"menuItems\">\r\n </ec-dropdown>\r\n</header>\r\n\r\n<div class=\"flex-grow d-flex\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [message]=\"status?.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-container *ngIf=\"type === 'menu'\">\r\n <ec-menu [id]=\"id\"\r\n [items]=\"treeItems\"\r\n [templateType]=\"templateType\"\r\n [maintainSelectedItem]=\"treeMenuMaintainSelectedItem\"\r\n [truncateItems]=\"true\"\r\n (selectedChanged)=\"onItemSelected($event)\"\r\n [customMenuTemplate]=\"customTreeMenuTemplate ? customTreeMenuTemplate : undefined\"\r\n [preserveIconSpace]=\"preserveIconSpace\"\r\n class=\"flex-grow\">\r\n </ec-menu>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"type === 'hierarchy'\">\r\n <ec-hierarchy-tree [id]=\"id\"\r\n [rootNode]=\"treeHierarchy\"\r\n [hideRootNode]=\"treeHierarchyHideRootNode\"\r\n (getItemChildren)=\"onHierarchyGetItemChildren($event)\"\r\n (itemToggled)=\"onHierarchyItemToggled($event)\"\r\n (itemSelected)=\"onItemSelected($event)\"\r\n [customItemTemplate]=\"customHierarchyItemTemplate\"\r\n class=\"flex-grow d-flex\">\r\n </ec-hierarchy-tree>\r\n </ng-container>\r\n</div>", styles: [":host{display:flex;flex-direction:column}header{height:var(--ec-tree-height-header, 3rem);background-color:var(--ec-tree-background-color, var(--ec-background-color));padding:var(--ec-tree-padding-header, 0 .25rem 0 .5rem);border-bottom:var(--ec-tree-border-bottom-header, var(--ec-border-width) solid var(--ec-border-color))}ec-dropdown.fill{height:var(--ec-tree-height-header, 3rem);width:var(--ec-tree-height-header, 3rem)}ec-menu,ec-hierarchy-tree{--ec-menu-background-color: var(--ec-tree-background-color)}[ecOverlay]{--ec-overlay-background-color: var(--ec-tree-background-color)}\n"] }]
87
+ }], ctorParameters: () => [], propDecorators: { attrId: [{
88
+ type: HostBinding,
89
+ args: ['attr.id']
90
+ }], id: [{
91
+ type: Input
92
+ }], treeTitle: [{
93
+ type: Input
94
+ }], hideTreeHeader: [{
95
+ type: Input
96
+ }], treeItems: [{
97
+ type: Input
98
+ }], treeHierarchyHideRootNode: [{
99
+ type: Input
100
+ }], treeHierarchy: [{
101
+ type: Input
102
+ }], treeMenuMaintainSelectedItem: [{
103
+ type: Input
104
+ }], customTreeMenuTemplate: [{
105
+ type: Input
106
+ }], customHierarchyItemTemplate: [{
107
+ type: Input
108
+ }], status: [{
109
+ type: Input
110
+ }], type: [{
111
+ type: Input
112
+ }], menuItems: [{
113
+ type: Input
114
+ }], menuStatus: [{
115
+ type: Input
116
+ }], menuTemplateType: [{
117
+ type: Input
118
+ }], preserveIconSpace: [{
119
+ type: Input
120
+ }], treeSelection: [{
121
+ type: Output
122
+ }], getTreeItemChildren: [{
123
+ type: Output
124
+ }], treeItemToggled: [{
125
+ type: Output
126
+ }], menuComponent: [{
127
+ type: ViewChild,
128
+ args: [MenuComponent]
129
+ }], hierarchyTreeComponent: [{
130
+ type: ViewChild,
131
+ args: [HierarchyTreeComponent]
132
+ }], templateType: [{
133
+ type: Input
134
+ }] } });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90cmVlL3RyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdHJlZS90cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsYUFBYSxFQUE4QixNQUFNLG9DQUFvQyxDQUFDO0FBRS9GLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFTakUsTUFBTSxPQUFPLGFBQWE7SUFLeEI7OztPQUdHO0lBQ0gsSUFDVyxFQUFFLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBQUEsQ0FBQztJQUNGLElBQVcsRUFBRTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBcUVEO1FBbkZBLGtEQUFrRDtRQUNuQixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBYzNDLFFBQUcsR0FBVyxFQUFFLENBQUM7UUFFekIsK0NBQStDO1FBQy9CLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFdkMsNkNBQTZDO1FBQzdCLG1CQUFjLEdBQWEsS0FBSyxDQUFDO1FBV2pEOzs7O1dBSUc7UUFDYSxpQ0FBNEIsR0FBWSxJQUFJLENBQUM7UUFRN0QsbUJBQW1CO1FBQ0gsV0FBTSxHQUFhLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTFELDhFQUE4RTtRQUM5RCxTQUFJLEdBQWMsV0FBVyxDQUFDO1FBSzlDLGlDQUFpQztRQUNqQixlQUFVLEdBQWEsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFOUQsNkJBQTZCO1FBQ2IscUJBQWdCLEdBQXNCLGVBQWUsQ0FBQztRQUV0RTs7O1dBR0c7UUFDYSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFbkQseURBQXlEO1FBQ3hDLGtCQUFhLEdBQTJDLElBQUksWUFBWSxFQUFFLENBQUM7UUFFNUYseUZBQXlGO1FBQ3hFLHdCQUFtQixHQUFnQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZGLGdFQUFnRTtRQUMvQyxvQkFBZSxHQUF1QyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQVFoRyxpQkFBWSxHQUFxQixPQUFPLENBQUM7SUFFekMsQ0FBQztJQUVqQix5Q0FBeUM7SUFDbEMsY0FBYyxDQUFDLElBQThCO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCwrRUFBK0U7SUFDeEUsMEJBQTBCLENBQUMsSUFBbUI7UUFDbkQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsZ0VBQWdFO0lBQ3pELHNCQUFzQixDQUFDLElBQTBCO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwwREFBMEQ7SUFDbkQsb0JBQW9CO1FBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQzsrR0EvR1UsYUFBYTttR0FBYixhQUFhLHl6QkE4RWIsYUFBYSx5RkFHYixzQkFBc0IsZ0RDOUZuQywwaEVBK0NNOzs0RkRsQ08sYUFBYTtrQkFMekIsU0FBUzsrQkFDRSxTQUFTO3dEQU9ZLE1BQU07c0JBQXBDLFdBQVc7dUJBQUMsU0FBUztnQkFPWCxFQUFFO3NCQURaLEtBQUs7Z0JBV1UsU0FBUztzQkFBeEIsS0FBSztnQkFHVSxjQUFjO3NCQUE3QixLQUFLO2dCQUdVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBR1UseUJBQXlCO3NCQUF4QyxLQUFLO2dCQUdVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBT1UsNEJBQTRCO3NCQUEzQyxLQUFLO2dCQUdVLHNCQUFzQjtzQkFBckMsS0FBSztnQkFHVSwyQkFBMkI7c0JBQTFDLEtBQUs7Z0JBR1UsTUFBTTtzQkFBckIsS0FBSztnQkFHVSxJQUFJO3NCQUFuQixLQUFLO2dCQUdVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBR1UsVUFBVTtzQkFBekIsS0FBSztnQkFHVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBTVUsaUJBQWlCO3NCQUFoQyxLQUFLO2dCQUdXLGFBQWE7c0JBQTdCLE1BQU07Z0JBR1UsbUJBQW1CO3NCQUFuQyxNQUFNO2dCQUdVLGVBQWU7c0JBQS9CLE1BQU07Z0JBRzBCLGFBQWE7c0JBQTdDLFNBQVM7dUJBQUMsYUFBYTtnQkFHa0Isc0JBQXNCO3NCQUEvRCxTQUFTO3VCQUFDLHNCQUFzQjtnQkFFakIsWUFBWTtzQkFBM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RCaW5kaW5nLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50LCBNZW51SXRlbSwgTWVudVRlbXBsYXRlVHlwZSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb2dnbGVkSGllcmFyY2h5SXRlbSwgSGllcmFyY2h5SXRlbSB9IGZyb20gJy4uL2hpZXJhcmNoeS9oaWVyYXJjaHktYmFzZSc7XHJcbmltcG9ydCB7IEhpZXJhcmNoeVRyZWVDb21wb25lbnQgfSBmcm9tICcuLi9oaWVyYXJjaHkvaGllcmFyY2h5LXRyZWUvaGllcmFyY2h5LXRyZWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uL3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB0eXBlIFRyZWVUeXBlID0gJ2hpZXJhcmNoeScgfCAnbWVudSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXRyZWUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90cmVlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVDb21wb25lbnQge1xyXG5cclxuICAvKiogVGhlIHZhbHVlIG9mIHRoZSBob3N0IGVsZW1lbnRzIGlkIGF0dHJpYnV0ZSAqL1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIHB1YmxpYyBhdHRySWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgSUQgb2YgdGhlIGNvbXBvbmVudCwgYm91bmQgdG8gdGhlIGhvc3QgZWxlbWVudCdzIGlkIGF0dHJpYnV0ZSBhbmQgcGFzc2VkXHJcbiAgICogdG8gY2hpbGQgY29tcG9uZW50c1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBpZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xyXG4gICAgdGhpcy5hdHRySWQgPSB2YWx1ZTtcclxuICB9O1xyXG4gIHB1YmxpYyBnZXQgaWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGhlIHRyZWUncyB0aXRsZSBkaXNwbGF5ZWQgaW4gdGhlIGhlYWRlciAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0cmVlVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogSGlkZXMgdGhlIHRyZWUgaGVhZGVyIHdoZW4gc2V0IHRvIHRydWUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaGlkZVRyZWVIZWFkZXI/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBJdGVtcyB0byBkaXNwbGF5IGluIHRoZSB0cmVlIHdoZW4gdHlwZSBpcyAnbWVudScgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdHJlZUl0ZW1zPzogTWVudUl0ZW1bXTtcclxuXHJcbiAgLyoqIEhpZGUgdGhlIHJvb3QgdHJlZSBpdGVtIHdoZW4gdHlwZSBpcyAnaGllcmFyY2h5JyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0cmVlSGllcmFyY2h5SGlkZVJvb3ROb2RlPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqIEl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIHRyZWUgd2hlbiB0eXBlIGlzICdoaWVyYXJjaHknICovXHJcbiAgQElucHV0KCkgcHVibGljIHRyZWVIaWVyYXJjaHk/OiBIaWVyYXJjaHlJdGVtO1xyXG5cclxuICAvKiogVXNlZCB3aGVuIHRoZSB0cmVlIGlzIGluIG1lbnUgbW9kZSB0byB0ZWxsIHRoZSBtZW51IGlmIGl0IHNob3VsZCBtYWludGFpbiB0aGUgc2VsZWN0ZWQgaXRlbVxyXG4gICAqICBVc2VmdWwgaW4gc2lkZSBuYXYgY29tcG9uZW50cyB3aGVyZSB0aGlzIHRyZWUgY29tcG9uZW50IG1heSBleGlzdCBhbG9uZ3NpZGUgb3RoZXIgdHJlZXMgb3IgbWVudXNcclxuICAgKiAgdXNlZCBmb3IgbmF2aWdhdGlvbi4gSWYgdGhpcyB0cmVlIGlzIGluIG1lbnUgbW9kZSB5b3Ugd291bGQgd2FudCB0aGlzIHNldCB0byBmYWxzZSBzbyB3aGVuIHlvdSBzZWxlY3QgYW4gaXRlbVxyXG4gICAqICBmcm9tIGEgc2libGluZyBuYXZpZ2F0aW9uIGVsZW1lbnQgdGhlIHNlbGVjdGlvbiB3aWxsIG5vdCBiZSBtYWludGFpbmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0cmVlTWVudU1haW50YWluU2VsZWN0ZWRJdGVtOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqIFVzZWQgd2hlbiBhIGN1c3RvbSB0ZW1wbGF0ZSBpcyBuZWVkZWQgZm9yIHRoZSBtZW51IGl0ZW1zIHdoZW4gdGhlIHRyZWUgaXMgaW4gbWVudSBtb2RlICovXHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbVRyZWVNZW51VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCB3aGVuIGEgY3VzdG9tIHRlbXBsYXRlIGlzIG5lZWRlZCBmb3IgdGhlIGhpZXJhcmNoeSBpdGVtcyB3aGVuIHRoZSB0cmVlIGlzIGluIGhpZXJhcmNoeSBtb2RlICovXHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUhpZXJhcmNoeUl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUcmVlIG92ZXJsYXkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgc3RhdHVzPzogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdoYXNEYXRhJyk7XHJcblxyXG4gIC8qKiBEaXNwbGF5IHRoZSB0cmVlIGl0ZW1zIHdpdGggYSBNZW51Q29tcG9uZW50IG9yIGEgSGllcmFyY2h5VHJlZUNvbXBvbmVudCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0eXBlPzogVHJlZVR5cGUgPSAnaGllcmFyY2h5JztcclxuXHJcbiAgLyoqIEl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIGRyb3Bkb3duIG1lbnUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudUl0ZW1zPzogTWVudUl0ZW1bXTtcclxuXHJcbiAgLyoqIFRyZWUgZHJvcGRvd24gbWVudSBvdmVybGF5ICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVTdGF0dXM/OiBPdmVybGF5ID0gbmV3IE92ZXJsYXkoJ2hhc0RhdGEnKTtcclxuXHJcbiAgLyoqIFRoZSBtZW51IGl0ZW0gdGVtcGxhdGUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudVRlbXBsYXRlVHlwZT86IE1lbnVUZW1wbGF0ZVR5cGUgPSBcImNoZWNrQW5kTGFiZWxcIjtcclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0cnVlLCB0aGUgc3BhY2UgZm9yIHRoZSBpY29uIGlzIHByZXNlcnZlZCBmb3IgbWVudSBpdGVtcyB0aGF0IGRvIG5vdCBoYXZlIGljb25zLlxyXG4gICAqIE9ubHkgYXBwbGljYWJsZSBmb3IgaWNvbkFuZExhYmVsIG1lbnVzLiBOb3QgYXBwbGljYWJsZSB0byBoaWVyYXJjaHkgdHJlZXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHByZXNlcnZlSWNvblNwYWNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBFbWl0cyB0aGUgaXRlbSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSBpbiB0aGUgdHJlZSAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgdHJlZVNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPE1lbnVJdGVtIHwgSGllcmFyY2h5SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIGEgaGllcmFyY2h5IHRyZWUgaXRlbSBpcyBleHBhbmRlZCBhcyBhIGhvb2sgdG8gbG9hZCB0aGUgaXRlbSdzIGNoaWxkcmVuICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRUcmVlSXRlbUNoaWxkcmVuOiBFdmVudEVtaXR0ZXI8SGllcmFyY2h5SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIGEgaGllcmFyY2h5IHRyZWUgaXRlbSBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWQgKi9cclxuICBAT3V0cHV0KCkgcHVibGljIHRyZWVJdGVtVG9nZ2xlZDogRXZlbnRFbWl0dGVyPFRvZ2dsZWRIaWVyYXJjaHlJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8VG9nZ2xlZEhpZXJhcmNoeUl0ZW0+KCk7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIE1lbnVDb21wb25lbnQgaW5zdGFuY2UgaW4gdGhlIHRlbXBsYXRlICovXHJcbiAgQFZpZXdDaGlsZChNZW51Q29tcG9uZW50KSBwdWJsaWMgbWVudUNvbXBvbmVudD86IE1lbnVDb21wb25lbnQ7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIEhpZXJhcmNoeVRyZWVDb21wb25lbnQgaW5zdGFuY2UgaW4gdGhlIHRlbXBsYXRlICovXHJcbiAgQFZpZXdDaGlsZChIaWVyYXJjaHlUcmVlQ29tcG9uZW50KSBwdWJsaWMgaGllcmFyY2h5VHJlZUNvbXBvbmVudD86IEhpZXJhcmNoeVRyZWVDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIHB1YmxpYyB0ZW1wbGF0ZVR5cGU6IE1lbnVUZW1wbGF0ZVR5cGUgPSAnbGFiZWwnO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAvKiogRW1pdHMgd2hlbiBhIHRyZWUgaXRlbSBpcyBzZWxlY3RlZCAqL1xyXG4gIHB1YmxpYyBvbkl0ZW1TZWxlY3RlZChpdGVtOiBNZW51SXRlbSB8IEhpZXJhcmNoeUl0ZW0pIHtcclxuICAgIHRoaXMudHJlZVNlbGVjdGlvbi5lbWl0KGl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gYSBoaWVyYXJjaHkgdHJlZSBpdGVtIGlzIGV4cGFuZGVkIHRvIGxvYWQgdGhlIGl0ZW0ncyBjaGlsZHJlbiAqL1xyXG4gIHB1YmxpYyBvbkhpZXJhcmNoeUdldEl0ZW1DaGlsZHJlbihpdGVtOiBIaWVyYXJjaHlJdGVtKSB7XHJcbiAgICB0aGlzLmdldFRyZWVJdGVtQ2hpbGRyZW4uZW1pdChpdGVtKTtcclxuICB9XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIGEgaGllcmFyY2h5IHRyZWUgaXRlbSBpcyBleHBhbmRlZCBvciBjb2xsYXBzZWQgKi9cclxuICBwdWJsaWMgb25IaWVyYXJjaHlJdGVtVG9nZ2xlZChpdGVtOiBUb2dnbGVkSGllcmFyY2h5SXRlbSkge1xyXG4gICAgdGhpcy50cmVlSXRlbVRvZ2dsZWQuZW1pdChpdGVtKTtcclxuICB9XHJcblxyXG4gIC8qKiBTY3JvbGwgdG8gdGhlIHRyZWUgaXRlbSB0aGF0IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gKi9cclxuICBwdWJsaWMgc2Nyb2xsVG9TZWxlY3RlZEl0ZW0oKSB7XHJcbiAgICBpZiAodGhpcy5tZW51Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMubWVudUNvbXBvbmVudC5zY3JvbGxUb1NlbGVjdGVkSXRlbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhpZXJhcmNoeVRyZWVDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5oaWVyYXJjaHlUcmVlQ29tcG9uZW50LnNjcm9sbFRvU2VsZWN0ZWRJdGVtKCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxoZWFkZXIgKm5nSWY9XCIhaGlkZVRyZWVIZWFkZXJcIlxyXG4gICAgICAgIGNsYXNzPVwiZmxleC1zaHJpbmsgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gIDxoMiBpZD1cInt7aWR9fV90aXRsZVwiXHJcbiAgICAgIGNsYXNzPVwiZmxleC1ncm93IG1yLTIgdGV4dC1oZWFkaW5nLTFcIj57e3RyZWVUaXRsZSB8IHRyYW5zbGF0ZX19PC9oMj5cclxuICA8ZWMtZHJvcGRvd24gKm5nSWY9XCJtZW51SXRlbXM/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgIGlkPVwie3tpZH19X2Ryb3Bkb3duXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LXNocmlua1wiXHJcbiAgICAgICAgICAgICAgIGljb249XCJpY29uLW1lbnVcIlxyXG4gICAgICAgICAgICAgICBbbWVudVRlbXBsYXRlVHlwZV09XCJtZW51VGVtcGxhdGVUeXBlXCJcclxuICAgICAgICAgICAgICAgbWVudVBvc2l0aW9uPVwibGVmdFwiXHJcbiAgICAgICAgICAgICAgIFtzdGF0dXNdPVwibWVudVN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgIFtwb3B1cEZpeGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICBbc2hvd0Fycm93XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgW21lbnVNaW5XaWR0aF09XCIyNDBcIlxyXG4gICAgICAgICAgICAgICBbaXRlbXNdPVwibWVudUl0ZW1zXCI+XHJcbiAgPC9lYy1kcm9wZG93bj5cclxuPC9oZWFkZXI+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmxleC1ncm93IGQtZmxleFwiXHJcbiAgICAgZWNPdmVybGF5XHJcbiAgICAgW3N0YXR1c109XCJzdGF0dXM/LnN0YXR1c1wiXHJcbiAgICAgW21lc3NhZ2VdPVwic3RhdHVzPy5tZXNzYWdlXCJcclxuICAgICBbZGlzcGxheUFzTWFza109XCJ0cnVlXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09ICdtZW51J1wiPlxyXG4gICAgPGVjLW1lbnUgW2lkXT1cImlkXCJcclxuICAgICAgICAgICAgIFtpdGVtc109XCJ0cmVlSXRlbXNcIlxyXG4gICAgICAgICAgICAgW3RlbXBsYXRlVHlwZV09XCJ0ZW1wbGF0ZVR5cGVcIlxyXG4gICAgICAgICAgICAgW21haW50YWluU2VsZWN0ZWRJdGVtXT1cInRyZWVNZW51TWFpbnRhaW5TZWxlY3RlZEl0ZW1cIlxyXG4gICAgICAgICAgICAgW3RydW5jYXRlSXRlbXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2VkKT1cIm9uSXRlbVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgW2N1c3RvbU1lbnVUZW1wbGF0ZV09XCJjdXN0b21UcmVlTWVudVRlbXBsYXRlID8gY3VzdG9tVHJlZU1lbnVUZW1wbGF0ZSA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgICBbcHJlc2VydmVJY29uU3BhY2VdPVwicHJlc2VydmVJY29uU3BhY2VcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJmbGV4LWdyb3dcIj5cclxuICAgIDwvZWMtbWVudT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInR5cGUgPT09ICdoaWVyYXJjaHknXCI+XHJcbiAgICA8ZWMtaGllcmFyY2h5LXRyZWUgW2lkXT1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcm9vdE5vZGVdPVwidHJlZUhpZXJhcmNoeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVSb290Tm9kZV09XCJ0cmVlSGllcmFyY2h5SGlkZVJvb3ROb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoZ2V0SXRlbUNoaWxkcmVuKT1cIm9uSGllcmFyY2h5R2V0SXRlbUNoaWxkcmVuKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChpdGVtVG9nZ2xlZCk9XCJvbkhpZXJhcmNoeUl0ZW1Ub2dnbGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChpdGVtU2VsZWN0ZWQpPVwib25JdGVtU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUl0ZW1UZW1wbGF0ZV09XCJjdXN0b21IaWVyYXJjaHlJdGVtVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93IGQtZmxleFwiPlxyXG4gICAgPC9lYy1oaWVyYXJjaHktdHJlZT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+Il19
@@ -0,0 +1,58 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "../../controls/button/button.component";
5
+ import * as i3 from "../spinner/spinner.component";
6
+ import * as i4 from "@ngx-translate/core";
7
+ export class Overlay {
8
+ constructor(status, message) {
9
+ this.status = 'hasData';
10
+ this.message = '';
11
+ this.setStatus(status, message);
12
+ }
13
+ setStatus(status, message, action, noDataTemplate, overlayClassList) {
14
+ this.status = status;
15
+ this.message = message || '';
16
+ this.action = action || undefined;
17
+ this.noDataTemplate = noDataTemplate || undefined;
18
+ this.overlayClassList = overlayClassList || '';
19
+ }
20
+ }
21
+ /**
22
+ * Wraps content in order to show pending, error, and no data states with an optional message/noDataTemplate
23
+ */
24
+ export class ViewOverlayComponent {
25
+ constructor() {
26
+ this.status = 'hasData';
27
+ }
28
+ setStatus(status, message, action, noDataTemplate) {
29
+ this.status = status;
30
+ this.message = message || '';
31
+ this.action = action || undefined;
32
+ this.noDataTemplate = noDataTemplate || undefined;
33
+ }
34
+ actionClicked(event) {
35
+ if (this.action && this.action.onClick) {
36
+ this.action.onClick(event);
37
+ }
38
+ }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ViewOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
40
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ViewOverlayComponent, selector: "[ecOverlay]", inputs: { status: "status", message: "message", action: "action", noDataTemplate: "noDataTemplate", displayAsMask: "displayAsMask", overlayClassList: "overlayClassList" }, ngImport: i0, template: "<!-- Transcluded Content -->\r\n<ng-content *ngIf=\"displayAsMask || (!displayAsMask && status === 'hasData')\"></ng-content>\r\n<!--Used by GI tests to know the overlay status whether we use ngIf or mask version. No visual impact-->\r\n<span [hidden]=\"true\"\r\n\t class=\"overlay-status-{{status}}\"></span>\r\n<!-- Overlay goes last so it is rendered on top of preceding content due to source order -->\r\n<div *ngIf=\"status !== 'hasData'\"\r\n\t class=\"overlay flex-grow {{overlayClassList}}\"\r\n\t [ngClass]=\"{'not-mask': !displayAsMask,\r\n\t\t\t\t'overlay-error': status === 'error',\r\n\t\t\t\t'overlay-nodata': status === 'noData',\r\n\t\t\t\t'overlay-pending': status === 'pending'}\">\r\n\r\n\t<!--Pending Spinner-->\r\n\t<ec-spinner [hidden]=\"status !== 'pending'\"></ec-spinner>\r\n\r\n\t<ng-template [ngIf]=\"status === 'noData' && noDataTemplate\">\r\n\t\t<ng-container *ngTemplateOutlet=\"noDataTemplate\"></ng-container>\r\n\t</ng-template>\r\n\r\n\t<ng-container *ngIf=\"(status === 'noData' && !noDataTemplate) || status !== 'noData'\">\r\n\t\t<!--Status Message-->\r\n\t\t<div id=\"statusMessage\"\r\n\t\t\t class=\"message\"\r\n\t\t\t *ngIf=\"message\"\r\n\t\t\t [ngClass]=\"{'error': status === 'error', 'mt-1': status === 'pending'}\"\r\n\t\t\t [innerHtml]=\"message | translate\">\r\n\t\t</div>\r\n\r\n\t\t<!-- Action -->\r\n\t\t<ec-button type=\"common\"\r\n\t\t\t\t class=\"mt-3\"\r\n\t\t\t\t *ngIf=\"action?.onClick\"\r\n\t\t\t\t [icon]=\"action?.icon\"\r\n\t\t\t\t (clicked)=\"actionClicked($event)\"\r\n\t\t\t\t [label]=\"action?.label\"\r\n\t\t\t\t [hidden]=\"status === 'pending'\">\r\n\t\t</ec-button>\r\n\t</ng-container>\r\n\r\n</div>", styles: [":host{position:relative}:host(.bg-body)>.overlay{background-color:var(--ec-background-color-body)}:host(.bg-body).is-translucent>.overlay{background-color:var(--ec-background-color-overlay)}:host(.bg-content)>.overlay{background-color:var(--ec-background-color)}:host(.bg-content).is-translucent>.overlay{background-color:var(--ec-background-color-overlay)}.overlay{align-items:center;background-color:var(--ec-overlay-background-color, var(--ec-background-color));display:flex;flex-direction:column;justify-content:center;padding:3rem 4rem;z-index:var(--ec-z-index-overlay);position:absolute;inset:0}.overlay.not-mask{position:relative;min-height:100%}.message{color:var(--ec-color-secondary-dark);font-size:var(--ec-font-size-title)}.message.error{color:var(--ec-color-danger);font-size:var(--ec-font-size-title)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i3.SpinnerComponent, selector: "ec-spinner" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ViewOverlayComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ selector: '[ecOverlay]', template: "<!-- Transcluded Content -->\r\n<ng-content *ngIf=\"displayAsMask || (!displayAsMask && status === 'hasData')\"></ng-content>\r\n<!--Used by GI tests to know the overlay status whether we use ngIf or mask version. No visual impact-->\r\n<span [hidden]=\"true\"\r\n\t class=\"overlay-status-{{status}}\"></span>\r\n<!-- Overlay goes last so it is rendered on top of preceding content due to source order -->\r\n<div *ngIf=\"status !== 'hasData'\"\r\n\t class=\"overlay flex-grow {{overlayClassList}}\"\r\n\t [ngClass]=\"{'not-mask': !displayAsMask,\r\n\t\t\t\t'overlay-error': status === 'error',\r\n\t\t\t\t'overlay-nodata': status === 'noData',\r\n\t\t\t\t'overlay-pending': status === 'pending'}\">\r\n\r\n\t<!--Pending Spinner-->\r\n\t<ec-spinner [hidden]=\"status !== 'pending'\"></ec-spinner>\r\n\r\n\t<ng-template [ngIf]=\"status === 'noData' && noDataTemplate\">\r\n\t\t<ng-container *ngTemplateOutlet=\"noDataTemplate\"></ng-container>\r\n\t</ng-template>\r\n\r\n\t<ng-container *ngIf=\"(status === 'noData' && !noDataTemplate) || status !== 'noData'\">\r\n\t\t<!--Status Message-->\r\n\t\t<div id=\"statusMessage\"\r\n\t\t\t class=\"message\"\r\n\t\t\t *ngIf=\"message\"\r\n\t\t\t [ngClass]=\"{'error': status === 'error', 'mt-1': status === 'pending'}\"\r\n\t\t\t [innerHtml]=\"message | translate\">\r\n\t\t</div>\r\n\r\n\t\t<!-- Action -->\r\n\t\t<ec-button type=\"common\"\r\n\t\t\t\t class=\"mt-3\"\r\n\t\t\t\t *ngIf=\"action?.onClick\"\r\n\t\t\t\t [icon]=\"action?.icon\"\r\n\t\t\t\t (clicked)=\"actionClicked($event)\"\r\n\t\t\t\t [label]=\"action?.label\"\r\n\t\t\t\t [hidden]=\"status === 'pending'\">\r\n\t\t</ec-button>\r\n\t</ng-container>\r\n\r\n</div>", styles: [":host{position:relative}:host(.bg-body)>.overlay{background-color:var(--ec-background-color-body)}:host(.bg-body).is-translucent>.overlay{background-color:var(--ec-background-color-overlay)}:host(.bg-content)>.overlay{background-color:var(--ec-background-color)}:host(.bg-content).is-translucent>.overlay{background-color:var(--ec-background-color-overlay)}.overlay{align-items:center;background-color:var(--ec-overlay-background-color, var(--ec-background-color));display:flex;flex-direction:column;justify-content:center;padding:3rem 4rem;z-index:var(--ec-z-index-overlay);position:absolute;inset:0}.overlay.not-mask{position:relative;min-height:100%}.message{color:var(--ec-color-secondary-dark);font-size:var(--ec-font-size-title)}.message.error{color:var(--ec-color-danger);font-size:var(--ec-font-size-title)}\n"] }]
45
+ }], propDecorators: { status: [{
46
+ type: Input
47
+ }], message: [{
48
+ type: Input
49
+ }], action: [{
50
+ type: Input
51
+ }], noDataTemplate: [{
52
+ type: Input
53
+ }], displayAsMask: [{
54
+ type: Input
55
+ }], overlayClassList: [{
56
+ type: Input
57
+ }] } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1vdmVybGF5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdmlldy1vdmVybGF5L3ZpZXctb3ZlcmxheS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBSTlELE1BQU0sT0FBTyxPQUFPO0lBV2xCLFlBQVksTUFBa0IsRUFBRSxPQUFnQjtRQU5oRCxXQUFNLEdBQWUsU0FBUyxDQUFDO1FBQy9CLFlBQU8sR0FBWSxFQUFFLENBQUM7UUFNcEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELFNBQVMsQ0FBQyxNQUFrQixFQUFFLE9BQWdCLEVBQUUsTUFBZ0IsRUFBRSxjQUFpQyxFQUFFLGdCQUF5QjtRQUM1SCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxJQUFJLFNBQVMsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksRUFBRSxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQUdEOztHQUVHO0FBTUgsTUFBTSxPQUFPLG9CQUFvQjtJQUxqQztRQU1XLFdBQU0sR0FBZSxTQUFTLENBQUM7S0E2QnpDO0lBWkMsU0FBUyxDQUFDLE1BQWtCLEVBQUUsT0FBZ0IsRUFBRSxNQUFnQixFQUFFLGNBQWlDO1FBQ2pHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLElBQUksU0FBUyxDQUFDO0lBQ3BELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUN0QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQzsrR0E3QlUsb0JBQW9CO21HQUFwQixvQkFBb0IsK05DcENqQyx5cERBd0NNOzs0RkRKTyxvQkFBb0I7a0JBTGhDLFNBQVM7K0JBQ0UsYUFBYTs4QkFLZCxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBEaXNwbGF5U3RhdHVzLCBWaWV3U3RhdHVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Rpc3BsYXknO1xyXG5cclxuZXhwb3J0IGNsYXNzIE92ZXJsYXkgaW1wbGVtZW50cyBEaXNwbGF5U3RhdHVzIHtcclxuICAvKiogIEBkZXByZWNhdGVkIERlcHJlY2F0ZWQgZHVlIHRvIG5vRGF0YVRlbXBsYXRlIGJlaW5nIHByZWZlcmVkICovXHJcbiAgYWN0aW9uPzogTmF2SXRlbTtcclxuICBub0RhdGFUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgZGlzcGxheUFzTWFzaz86IGJvb2xlYW47XHJcbiAgc3RhdHVzOiBWaWV3U3RhdHVzID0gJ2hhc0RhdGEnO1xyXG4gIG1lc3NhZ2U/OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEFkZGl0aW9uIGNzcyBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSAub3ZlcmxheSBlbGVtZW50ICovXHJcbiAgb3ZlcmxheUNsYXNzTGlzdD86IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3Ioc3RhdHVzOiBWaWV3U3RhdHVzLCBtZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldFN0YXR1cyhzdGF0dXMsIG1lc3NhZ2UpO1xyXG4gIH1cclxuICBzZXRTdGF0dXMoc3RhdHVzOiBWaWV3U3RhdHVzLCBtZXNzYWdlPzogc3RyaW5nLCBhY3Rpb24/OiBOYXZJdGVtLCBub0RhdGFUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT4sIG92ZXJsYXlDbGFzc0xpc3Q/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnJztcclxuICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uIHx8IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubm9EYXRhVGVtcGxhdGUgPSBub0RhdGFUZW1wbGF0ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLm92ZXJsYXlDbGFzc0xpc3QgPSBvdmVybGF5Q2xhc3NMaXN0IHx8ICcnO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBXcmFwcyBjb250ZW50IGluIG9yZGVyIHRvIHNob3cgcGVuZGluZywgZXJyb3IsIGFuZCBubyBkYXRhIHN0YXRlcyB3aXRoIGFuIG9wdGlvbmFsIG1lc3NhZ2Uvbm9EYXRhVGVtcGxhdGVcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnW2VjT3ZlcmxheV0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92aWV3LW92ZXJsYXkuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3ZpZXctb3ZlcmxheS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWaWV3T3ZlcmxheUNvbXBvbmVudCBpbXBsZW1lbnRzIE92ZXJsYXkge1xyXG4gIEBJbnB1dCgpIHN0YXR1czogVmlld1N0YXR1cyA9ICdoYXNEYXRhJztcclxuICBASW5wdXQoKSBtZXNzYWdlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKiogIEBkZXByZWNhdGVkIERlcHJlY2F0ZWQgZHVlIHRvIG5vRGF0YVRlbXBsYXRlIGJlaW5nIHByZWZlcmVkICovXHJcbiAgQElucHV0KCkgYWN0aW9uPzogTmF2SXRlbSB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBub0RhdGFUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hc2sgKG5vdCByZW1vdmUpIHRoZSB0cmFuc2NsdWRlZCBjb250ZW50IGZyb20gdGhlIGRvbSB3aGlsZSBub3QgaGFzRGF0YSBzdGF0dXMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGlzcGxheUFzTWFzaz86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBcclxuICAgKiBBZGRpdGlvbmFsIGNzcyBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSAub3ZlcmxheSBlbGVtZW50IFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG92ZXJsYXlDbGFzc0xpc3Q/OiBzdHJpbmc7XHJcblxyXG4gIHNldFN0YXR1cyhzdGF0dXM6IFZpZXdTdGF0dXMsIG1lc3NhZ2U/OiBzdHJpbmcsIGFjdGlvbj86IE5hdkl0ZW0sIG5vRGF0YVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55Pik6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICcnO1xyXG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb24gfHwgdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5ub0RhdGFUZW1wbGF0ZSA9IG5vRGF0YVRlbXBsYXRlIHx8IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGFjdGlvbkNsaWNrZWQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYWN0aW9uICYmIHRoaXMuYWN0aW9uLm9uQ2xpY2spIHtcclxuICAgICAgdGhpcy5hY3Rpb24ub25DbGljayhldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gVHJhbnNjbHVkZWQgQ29udGVudCAtLT5cclxuPG5nLWNvbnRlbnQgKm5nSWY9XCJkaXNwbGF5QXNNYXNrIHx8ICghZGlzcGxheUFzTWFzayAmJiBzdGF0dXMgPT09ICdoYXNEYXRhJylcIj48L25nLWNvbnRlbnQ+XHJcbjwhLS1Vc2VkIGJ5IEdJIHRlc3RzIHRvIGtub3cgdGhlIG92ZXJsYXkgc3RhdHVzIHdoZXRoZXIgd2UgdXNlIG5nSWYgb3IgbWFzayB2ZXJzaW9uLiBObyB2aXN1YWwgaW1wYWN0LS0+XHJcbjxzcGFuIFtoaWRkZW5dPVwidHJ1ZVwiXHJcblx0ICBjbGFzcz1cIm92ZXJsYXktc3RhdHVzLXt7c3RhdHVzfX1cIj48L3NwYW4+XHJcbjwhLS0gT3ZlcmxheSBnb2VzIGxhc3Qgc28gaXQgaXMgcmVuZGVyZWQgb24gdG9wIG9mIHByZWNlZGluZyBjb250ZW50IGR1ZSB0byBzb3VyY2Ugb3JkZXIgLS0+XHJcbjxkaXYgKm5nSWY9XCJzdGF0dXMgIT09ICdoYXNEYXRhJ1wiXHJcblx0IGNsYXNzPVwib3ZlcmxheSBmbGV4LWdyb3cge3tvdmVybGF5Q2xhc3NMaXN0fX1cIlxyXG5cdCBbbmdDbGFzc109XCJ7J25vdC1tYXNrJzogIWRpc3BsYXlBc01hc2ssXHJcblx0XHRcdFx0J292ZXJsYXktZXJyb3InOiBzdGF0dXMgPT09ICdlcnJvcicsXHJcblx0XHRcdFx0J292ZXJsYXktbm9kYXRhJzogc3RhdHVzID09PSAnbm9EYXRhJyxcclxuXHRcdFx0XHQnb3ZlcmxheS1wZW5kaW5nJzogc3RhdHVzID09PSAncGVuZGluZyd9XCI+XHJcblxyXG5cdDwhLS1QZW5kaW5nIFNwaW5uZXItLT5cclxuXHQ8ZWMtc3Bpbm5lciBbaGlkZGVuXT1cInN0YXR1cyAhPT0gJ3BlbmRpbmcnXCI+PC9lYy1zcGlubmVyPlxyXG5cclxuXHQ8bmctdGVtcGxhdGUgW25nSWZdPVwic3RhdHVzID09PSAnbm9EYXRhJyAmJiBub0RhdGFUZW1wbGF0ZVwiPlxyXG5cdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm5vRGF0YVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0PG5nLWNvbnRhaW5lciAqbmdJZj1cIihzdGF0dXMgPT09ICdub0RhdGEnICYmICFub0RhdGFUZW1wbGF0ZSkgfHwgc3RhdHVzICE9PSAnbm9EYXRhJ1wiPlxyXG5cdFx0PCEtLVN0YXR1cyBNZXNzYWdlLS0+XHJcblx0XHQ8ZGl2IGlkPVwic3RhdHVzTWVzc2FnZVwiXHJcblx0XHRcdCBjbGFzcz1cIm1lc3NhZ2VcIlxyXG5cdFx0XHQgKm5nSWY9XCJtZXNzYWdlXCJcclxuXHRcdFx0IFtuZ0NsYXNzXT1cInsnZXJyb3InOiBzdGF0dXMgPT09ICdlcnJvcicsICdtdC0xJzogc3RhdHVzID09PSAncGVuZGluZyd9XCJcclxuXHRcdFx0IFtpbm5lckh0bWxdPVwibWVzc2FnZSB8IHRyYW5zbGF0ZVwiPlxyXG5cdFx0PC9kaXY+XHJcblxyXG5cdFx0PCEtLSBBY3Rpb24gLS0+XHJcblx0XHQ8ZWMtYnV0dG9uIHR5cGU9XCJjb21tb25cIlxyXG5cdFx0XHRcdCAgIGNsYXNzPVwibXQtM1wiXHJcblx0XHRcdFx0ICAgKm5nSWY9XCJhY3Rpb24/Lm9uQ2xpY2tcIlxyXG5cdFx0XHRcdCAgIFtpY29uXT1cImFjdGlvbj8uaWNvblwiXHJcblx0XHRcdFx0ICAgKGNsaWNrZWQpPVwiYWN0aW9uQ2xpY2tlZCgkZXZlbnQpXCJcclxuXHRcdFx0XHQgICBbbGFiZWxdPVwiYWN0aW9uPy5sYWJlbFwiXHJcblx0XHRcdFx0ICAgW2hpZGRlbl09XCJzdGF0dXMgPT09ICdwZW5kaW5nJ1wiPlxyXG5cdFx0PC9lYy1idXR0b24+XHJcblx0PC9uZy1jb250YWluZXI+XHJcblxyXG48L2Rpdj4iXX0=
@@ -0,0 +1,32 @@
1
+ import { Directive, Input, HostListener, HostBinding } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ClickAreaForDirective {
4
+ constructor() { }
5
+ ngOnInit() {
6
+ this.isTargetClickable = typeof this.targetEl?.dispatchEvent === 'function';
7
+ }
8
+ onClick(event) {
9
+ if (this.isTargetClickable) {
10
+ event.preventDefault();
11
+ this.targetEl.dispatchEvent(new Event('click'));
12
+ }
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ClickAreaForDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
15
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: ClickAreaForDirective, selector: "[ecClickAreaFor]", inputs: { targetEl: ["ecClickAreaFor", "targetEl"] }, host: { listeners: { "click": "onClick($event)" }, properties: { "class.cursor-pointer": "this.targetEl" } }, ngImport: i0 }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ClickAreaForDirective, decorators: [{
18
+ type: Directive,
19
+ args: [{
20
+ selector: '[ecClickAreaFor]'
21
+ }]
22
+ }], ctorParameters: () => [], propDecorators: { targetEl: [{
23
+ type: HostBinding,
24
+ args: ['class.cursor-pointer']
25
+ }, {
26
+ type: Input,
27
+ args: ['ecClickAreaFor']
28
+ }], onClick: [{
29
+ type: HostListener,
30
+ args: ['click', ['$event']]
31
+ }] } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stYXJlYS1mb3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC9kaXJlY3RpdmVzL2NsaWNrLWFyZWEtZm9yL2NsaWNrLWFyZWEtZm9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFVLE1BQU0sZUFBZSxDQUFDOztBQVNwRixNQUFNLE9BQU8scUJBQXFCO0lBUWhDLGdCQUFlLENBQUM7SUFFaEIsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxLQUFLLFVBQVUsQ0FBQztJQUM5RSxDQUFDO0lBRWtDLE9BQU8sQ0FBQyxLQUFZO1FBQ3JELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNILENBQUM7K0dBbkJVLHFCQUFxQjttR0FBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQUhqQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7aUJBQzdCO3dEQUtRLFFBQVE7c0JBRmQsV0FBVzt1QkFBQyxzQkFBc0I7O3NCQUNsQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFXWSxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIEhvc3RMaXN0ZW5lciwgSG9zdEJpbmRpbmcsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGlja2FibGVFbGVtZW50IHtcclxuICBkaXNwYXRjaEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQ7XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2VjQ2xpY2tBcmVhRm9yXSdcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaWNrQXJlYUZvckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY3Vyc29yLXBvaW50ZXInKVxyXG4gIEBJbnB1dCgnZWNDbGlja0FyZWFGb3InKSBcclxuICBwdWJsaWMgdGFyZ2V0RWw/OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgaXNUYXJnZXRDbGlja2FibGUhOiBib29sZWFuO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzVGFyZ2V0Q2xpY2thYmxlID0gdHlwZW9mIHRoaXMudGFyZ2V0RWw/LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbic7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5pc1RhcmdldENsaWNrYWJsZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB0aGlzLnRhcmdldEVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjbGljaycpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,111 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { debounceTime, takeUntil } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../core/window.service";
6
+ /**
7
+ * Conditionally include content in the DOM based on the width of the viewport. Use to programmatically implement reponsive layouts and prevent duplicate markup and listeners.
8
+ * In most scenarios CSS media queries is sufficient to hide/show elements responsively. However, in some cases media queries would result in duplicate markup and listeners
9
+ * that could cause undesired side effects and it is preferred to us programmatic elements to achieve the layout.
10
+ */
11
+ export class IfViewportWidthDirective {
12
+ constructor(viewContainer, templateRef, windowService) {
13
+ this.viewContainer = viewContainer;
14
+ this.templateRef = templateRef;
15
+ this.windowService = windowService;
16
+ /**
17
+ * Used to unsubscribe when the directive is removed from the DOM
18
+ */
19
+ this.destroyed = new Subject();
20
+ /**
21
+ * Internally tracks whether the directive and its content is included in the DOM
22
+ */
23
+ this.isVisible = false;
24
+ }
25
+ ngOnInit() {
26
+ // Window may not available if this code is not being run on a browser platform.
27
+ // If there is no window or innerWidth abort initialization
28
+ if (this.windowService.innerWidth === undefined) {
29
+ return;
30
+ }
31
+ // Check for required values. If none are set, log error and abort initialization
32
+ if (!this.width) {
33
+ console.error(`A min or max width was not provided. Provide a value for 'min' or 'max' by assigning a single value or object to the directive. E.g. *ecIfViewportWidth="800" (assigned to min) or *ecIfViewportWidth="{min: 800, max: 1280}"`);
34
+ return;
35
+ }
36
+ else if (typeof this.width === 'number') {
37
+ this.minWidth = this.width;
38
+ }
39
+ else if (this.width !== undefined) {
40
+ this.minWidth = this.width.min;
41
+ this.maxWidth = this.width.max;
42
+ }
43
+ if (this.windowService.resized) {
44
+ this.windowService.resized.pipe(debounceTime(100), takeUntil(this.destroyed)).subscribe(() => {
45
+ this.updateVisibility();
46
+ });
47
+ }
48
+ this.updateVisibility();
49
+ }
50
+ /**
51
+ * Get the current viewport width and determin if the directive's content should be
52
+ * included in the DOM based on the min and max width settings
53
+ */
54
+ updateVisibility() {
55
+ const viewportWidth = this.windowService.innerWidth;
56
+ if (this.minWidth !== undefined && this.maxWidth !== undefined) {
57
+ if (viewportWidth >= this.minWidth && viewportWidth <= this.maxWidth) {
58
+ this.show();
59
+ }
60
+ else {
61
+ this.hide();
62
+ }
63
+ }
64
+ else if (this.minWidth !== undefined) {
65
+ if (viewportWidth >= this.minWidth) {
66
+ this.show();
67
+ }
68
+ else {
69
+ this.hide();
70
+ }
71
+ }
72
+ else if (this.maxWidth !== undefined) {
73
+ if (viewportWidth <= this.maxWidth) {
74
+ this.show();
75
+ }
76
+ else {
77
+ this.hide();
78
+ }
79
+ }
80
+ }
81
+ /**
82
+ * Add the directive's content to the DOM
83
+ */
84
+ show() {
85
+ if (!this.isVisible) {
86
+ this.viewContainer.createEmbeddedView(this.templateRef);
87
+ this.isVisible = true;
88
+ }
89
+ }
90
+ /**
91
+ * Remove the directive's content from the DOM
92
+ */
93
+ hide() {
94
+ if (this.isVisible) {
95
+ this.viewContainer.clear();
96
+ this.isVisible = false;
97
+ }
98
+ }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IfViewportWidthDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1.WindowService }], target: i0.ɵɵFactoryTarget.Directive }); }
100
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: IfViewportWidthDirective, selector: "[ecIfViewportWidth]", inputs: { width: ["ecIfViewportWidth", "width"] }, ngImport: i0 }); }
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: IfViewportWidthDirective, decorators: [{
103
+ type: Directive,
104
+ args: [{
105
+ selector: '[ecIfViewportWidth]'
106
+ }]
107
+ }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i1.WindowService }], propDecorators: { width: [{
108
+ type: Input,
109
+ args: ['ecIfViewportWidth']
110
+ }] } });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWYtdmlld3BvcnQtd2lkdGguZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC9kaXJlY3RpdmVzL2lmLXZpZXdwb3J0LXdpZHRoL2lmLXZpZXdwb3J0LXdpZHRoLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBeUMsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFHekQ7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFrQ25DLFlBQ1UsYUFBK0IsRUFDL0IsV0FBNkIsRUFDN0IsYUFBNEI7UUFGNUIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQWJ0Qzs7V0FFRztRQUNLLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVqRDs7V0FFRztRQUNLLGNBQVMsR0FBWSxLQUFLLENBQUM7SUFNL0IsQ0FBQztJQUVFLFFBQVE7UUFDYixpRkFBaUY7UUFDakYsMkRBQTJEO1FBQzNELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEQsT0FBTztRQUNULENBQUM7UUFFRCxpRkFBaUY7UUFDakYsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUcsQ0FBQztZQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLCtOQUErTixDQUFDLENBQUM7WUFDL08sT0FBTztRQUNULENBQUM7YUFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0IsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUUsR0FBRyxFQUFFO2dCQUM1RixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZ0JBQWdCO1FBQ3RCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVyxDQUFDO1FBRXJELElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvRCxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2QyxJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUVILENBQUM7SUFFRDs7T0FFRztJQUNLLElBQUk7UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxJQUFJO1FBQ1YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQzsrR0FqSFUsd0JBQXdCO21HQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBSHBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHFCQUFxQjtpQkFDaEM7MklBYW9DLEtBQUs7c0JBQXZDLEtBQUs7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0LCBWaWV3Q29udGFpbmVyUmVmLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS93aW5kb3cuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQ29uZGl0aW9uYWxseSBpbmNsdWRlIGNvbnRlbnQgaW4gdGhlIERPTSBiYXNlZCBvbiB0aGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0LiBVc2UgdG8gcHJvZ3JhbW1hdGljYWxseSBpbXBsZW1lbnQgcmVwb25zaXZlIGxheW91dHMgYW5kIHByZXZlbnQgZHVwbGljYXRlIG1hcmt1cCBhbmQgbGlzdGVuZXJzLlxyXG4gKiBJbiBtb3N0IHNjZW5hcmlvcyBDU1MgbWVkaWEgcXVlcmllcyBpcyBzdWZmaWNpZW50IHRvIGhpZGUvc2hvdyBlbGVtZW50cyByZXNwb25zaXZlbHkuIEhvd2V2ZXIsIGluIHNvbWUgY2FzZXMgbWVkaWEgcXVlcmllcyB3b3VsZCByZXN1bHQgaW4gZHVwbGljYXRlIG1hcmt1cCBhbmQgbGlzdGVuZXJzXHJcbiAqIHRoYXQgY291bGQgY2F1c2UgdW5kZXNpcmVkIHNpZGUgZWZmZWN0cyBhbmQgaXQgaXMgcHJlZmVycmVkIHRvIHVzIHByb2dyYW1tYXRpYyBlbGVtZW50cyB0byBhY2hpZXZlIHRoZSBsYXlvdXQuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tlY0lmVmlld3BvcnRXaWR0aF0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJZlZpZXdwb3J0V2lkdGhEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXR7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtaW4gYW5kLCBvcHRpb25hbGx5LCBtYXggd2lkdGggaW4gcGl4ZWxzIHRoYXQgdGhlIHZpZXdwb3J0IG11c3QgYmUgaW4gb3JkZXIgdG8gaW5jbHVkZSB0aGUgZGlyZWN0aXZlIGFuZCBpdHMgY29udGVudCBpbiB0aGUgRE9NLlxyXG4gICAqIEEgc2luZ2xlIG51bWJlciBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1pbiB3aWR0aCwgYnV0IGFuIG9iamVjdCB3aXRoIG1pbiBhbmQgbWF4IG11c3QgYmUgdXNlZCB0byBzZXQgYSBtaW4gYW5kIG1heCB3aWR0aCBvciBqdXN0IGEgbWF4IHdpZHRoLlxyXG4gICAqIFxyXG4gICAqIGBgYGh0bWxcclxuICAgKiA8ZGl2ICplY0lmVmlld3BvcnRXaWR0aD1cIjUwMFwiPkNvbnRlbnQgdG8gcmVuZGVyIGlmIHZpZXdwb3J0IHdpZHRoIGlzID49IDUwMHB4PC9kaXY+XHJcbiAgICogPGRpdiAqZWNJZlZpZXdwb3J0V2lkdGg9XCJ7bWF4OiA4MDB9XCI+Q29udGVudCB0byByZW5kZXIgaWYgdGhlIHZpZXdwb3J0IHdpZHRoIGlzIDw9IDgwMHB4PC9kaXY+XHJcbiAgICogPGRpdiAqZWNJZlZpZXdwb3J0V2lkdGg9XCJ7bWluOiA1MDAsIG1heDogODAwfVwiPkNvbnRlbnQgdG8gcmVuZGVyIGlmIHRoZSB2aWV3cG9ydCB3aWR0aCBpcyBiZXR3ZWVuIDUwMHB4IGFuZCA4MDBweDwvZGl2PlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnZWNJZlZpZXdwb3J0V2lkdGgnKSBwdWJsaWMgd2lkdGghOiBudW1iZXIgfCB7bWluPzogbnVtYmVyOyBtYXg/OiBudW1iZXJ9O1xyXG5cclxuICAvKiogXHJcbiAgICogSWYgZGVmaW5lZCwgdGhlIHdpZHRoIGluIHBpeGVscyB0aGF0IHRoZSB2aWV3cG9ydCBtdXN0IGJlIHRvIGluY2x1ZGUgdGhlIGRpcmVjdGl2ZSBhbmQgaXRzIGNvbnRlbnQgaW4gdGhlIERPTVxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWluV2lkdGg/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRlZmluZWQsIHRoZSB3aWR0aCBpbiBwaXhlbHMgdGhhdCB0aGUgdmlld3BvcnQgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiB0byBpbmNsdWRlIHRoZSBkaXJlY3RpdmUgYW5kIGl0cyBjb250ZW4gaW4gdGhlIERPTVxyXG4gICAqL1xyXG4gIHByaXZhdGUgbWF4V2lkdGg/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBcclxuICAgKiBVc2VkIHRvIHVuc3Vic2NyaWJlIHdoZW4gdGhlIGRpcmVjdGl2ZSBpcyByZW1vdmVkIGZyb20gdGhlIERPTVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWxseSB0cmFja3Mgd2hldGhlciB0aGUgZGlyZWN0aXZlIGFuZCBpdHMgY29udGVudCBpcyBpbmNsdWRlZCBpbiB0aGUgRE9NXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpc1Zpc2libGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIFxyXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiwgXHJcbiAgICBwcml2YXRlIHdpbmRvd1NlcnZpY2U6IFdpbmRvd1NlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBXaW5kb3cgbWF5IG5vdCBhdmFpbGFibGUgaWYgdGhpcyBjb2RlIGlzIG5vdCBiZWluZyBydW4gb24gYSBicm93c2VyIHBsYXRmb3JtLiBcclxuICAgIC8vIElmIHRoZXJlIGlzIG5vIHdpbmRvdyBvciBpbm5lcldpZHRoIGFib3J0IGluaXRpYWxpemF0aW9uXHJcbiAgICBpZiAodGhpcy53aW5kb3dTZXJ2aWNlLmlubmVyV2lkdGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIHJlcXVpcmVkIHZhbHVlcy4gSWYgbm9uZSBhcmUgc2V0LCBsb2cgZXJyb3IgYW5kIGFib3J0IGluaXRpYWxpemF0aW9uXHJcbiAgICBpZiAoIXRoaXMud2lkdGgpICB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEEgbWluIG9yIG1heCB3aWR0aCB3YXMgbm90IHByb3ZpZGVkLiBQcm92aWRlIGEgdmFsdWUgZm9yICdtaW4nIG9yICdtYXgnIGJ5IGFzc2lnbmluZyBhIHNpbmdsZSB2YWx1ZSBvciBvYmplY3QgdG8gdGhlIGRpcmVjdGl2ZS4gRS5nLiAqZWNJZlZpZXdwb3J0V2lkdGg9XCI4MDBcIiAoYXNzaWduZWQgdG8gbWluKSBvciAqZWNJZlZpZXdwb3J0V2lkdGg9XCJ7bWluOiA4MDAsIG1heDogMTI4MH1cImApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLndpZHRoID09PSAnbnVtYmVyJykge1xyXG4gICAgICB0aGlzLm1pbldpZHRoID0gdGhpcy53aWR0aDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy53aWR0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMubWluV2lkdGggPSB0aGlzLndpZHRoLm1pbjtcclxuICAgICAgdGhpcy5tYXhXaWR0aCA9IHRoaXMud2lkdGgubWF4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndpbmRvd1NlcnZpY2UucmVzaXplZCkge1xyXG4gICAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVzaXplZC5waXBlKGRlYm91bmNlVGltZSgxMDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoICgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpc2liaWxpdHkoKTtcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjdXJyZW50IHZpZXdwb3J0IHdpZHRoIGFuZCBkZXRlcm1pbiBpZiB0aGUgZGlyZWN0aXZlJ3MgY29udGVudCBzaG91bGQgYmVcclxuICAgKiBpbmNsdWRlZCBpbiB0aGUgRE9NIGJhc2VkIG9uIHRoZSBtaW4gYW5kIG1heCB3aWR0aCBzZXR0aW5nc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJpbGl0eSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZpZXdwb3J0V2lkdGggPSB0aGlzLndpbmRvd1NlcnZpY2UuaW5uZXJXaWR0aCE7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLm1pbldpZHRoICE9PSB1bmRlZmluZWQgJiYgdGhpcy5tYXhXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh2aWV3cG9ydFdpZHRoID49IHRoaXMubWluV2lkdGggJiYgdmlld3BvcnRXaWR0aCA8PSB0aGlzLm1heFdpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5taW5XaWR0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh2aWV3cG9ydFdpZHRoID49IHRoaXMubWluV2lkdGgpIHtcclxuICAgICAgICB0aGlzLnNob3coKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLm1heFdpZHRoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZpZXdwb3J0V2lkdGggPD0gdGhpcy5tYXhXaWR0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvdygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAgIFxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIHRoZSBkaXJlY3RpdmUncyBjb250ZW50IHRvIHRoZSBET01cclxuICAgKi9cclxuICBwcml2YXRlIHNob3coKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKSB7XHJcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgZGlyZWN0aXZlJ3MgY29udGVudCBmcm9tIHRoZSBET01cclxuICAgKi9cclxuICBwcml2YXRlIGhpZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1Zpc2libGUpIHtcclxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmNsZWFyKCk7XHJcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,166 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, EventEmitter, Inject, Input } from '@angular/core';
3
+ import Popper from 'popper.js';
4
+ import { fromEvent } from "rxjs";
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Primitive directive that popups a container using PopperJS
8
+ *
9
+ * @export
10
+ */
11
+ export class PopupContainerDirective {
12
+ /**
13
+ * Global reference to the currently displayed popup; only
14
+ * one popup directive can be in `show` state at a given time.
15
+ *
16
+ * @memberof PopupContainerDirective
17
+ */
18
+ static { this.GlobalPopupRef = undefined; }
19
+ /**
20
+ * Creates an instance of PopupContainerDirective.
21
+ * @param templateRef Reference to the popup template
22
+ * @param viewContainer Reference to the view container
23
+ * @param document Reference to Document
24
+ * @memberof PopupContainerDirective
25
+ */
26
+ constructor(templateRef, viewContainer, document, renderer) {
27
+ this.templateRef = templateRef;
28
+ this.viewContainer = viewContainer;
29
+ this.document = document;
30
+ this.renderer = renderer;
31
+ /**
32
+ * Emit the {@link PopupStatus} when it changes
33
+ */
34
+ this.popperStatusChange = new EventEmitter();
35
+ }
36
+ /**
37
+ * Angular onInit lifecycle hook
38
+ * @see https://angular.io/guide/lifecycle-hooks
39
+ */
40
+ ngOnInit() {
41
+ this.templateViewRef = this.viewContainer.createEmbeddedView(this.templateRef);
42
+ }
43
+ /**
44
+ * Angular onDestroy lifecycle hook. Close and delete references. Unsubscribe observables
45
+ * @see https://angular.io/guide/lifecycle-hooks
46
+ */
47
+ ngOnDestroy() {
48
+ this.hide();
49
+ }
50
+ /**
51
+ * Displays the templateRef as a popup
52
+ *
53
+ * @memberof PopupContainerDirective
54
+ */
55
+ show() {
56
+ if (PopupContainerDirective.GlobalPopupRef) {
57
+ if (PopupContainerDirective.GlobalPopupRef != this) {
58
+ PopupContainerDirective.GlobalPopupRef.hide();
59
+ PopupContainerDirective.GlobalPopupRef = undefined;
60
+ }
61
+ }
62
+ if (!this.globalCloseSubscription) {
63
+ this.globalCloseSubscription = fromEvent(this.document.body, "click").subscribe((event) => {
64
+ this.hide();
65
+ });
66
+ }
67
+ if (!this.popperRef) {
68
+ // Add the popper template as an embedded view since PopperJS
69
+ // manipulates DOM elements.
70
+ this.popupViewRef = this.viewContainer.createEmbeddedView(this.popup);
71
+ // Since popper needs real DOM elements, grab the first non-comment
72
+ // DOM element to use as our anchor.
73
+ let anchorElement = this.popupViewRef.rootNodes.find(elem => { return elem.nodeName !== "#text"; });
74
+ // Use the parents elements as our DOM elements to Popper
75
+ this.popperRef = new Popper(this.templateViewRef.rootNodes[0], anchorElement, this.popperOptions);
76
+ PopupContainerDirective.GlobalPopupRef = this;
77
+ this.popperStatusChange.emit('visible');
78
+ }
79
+ }
80
+ /**
81
+ * Hides the templateRef
82
+ *
83
+ * @memberof PopupContainerDirective
84
+ */
85
+ hide() {
86
+ if (this.globalCloseSubscription) {
87
+ this.globalCloseSubscription.unsubscribe();
88
+ this.globalCloseSubscription = undefined;
89
+ }
90
+ if (this.popperRef && this.popupViewRef) {
91
+ this.popupViewRef.destroy();
92
+ this.popperRef.destroy();
93
+ this.popperRef = undefined;
94
+ this.popperStatusChange.emit('hidden');
95
+ }
96
+ }
97
+ /**
98
+ * Updates the popup container position
99
+ */
100
+ update() {
101
+ if (this.popperRef) {
102
+ this.popperRef.update();
103
+ }
104
+ }
105
+ fixPosition(minWidthNone, appendToBody = false) {
106
+ // @ts-ignore
107
+ if (this.popperRef && this.popperRef['reference'] && this.popperRef['popper']) {
108
+ // @ts-ignore
109
+ let popupEl = this.popperRef['popper'];
110
+ // Reset width style previously assigned because the content may have
111
+ // changed and the auto width would be different
112
+ this.renderer.removeStyle(popupEl, 'width');
113
+ this.renderer.setStyle(popupEl, 'position', 'fixed');
114
+ if (appendToBody) {
115
+ const bodyEl = this.document.querySelector('body');
116
+ const popupParent = this.renderer.parentNode(popupEl);
117
+ if (popupParent !== bodyEl) {
118
+ this.renderer.appendChild(bodyEl, popupEl);
119
+ }
120
+ }
121
+ // @ts-ignore
122
+ let toggleEl = this.popperRef['reference'];
123
+ let width = popupEl.offsetWidth;
124
+ let boundaries = popupEl.getBoundingClientRect();
125
+ let left = boundaries.left;
126
+ let coords = toggleEl.getBoundingClientRect();
127
+ // Set the top of our menu to the bottom of the toggle element
128
+ let top = coords.bottom;
129
+ if (this.popperOptions && this.popperOptions.placement) {
130
+ if (this.popperOptions.placement === 'bottom-start' || this.popperOptions.placement === 'top-start') {
131
+ left = coords.left;
132
+ }
133
+ else {
134
+ left = coords.right - ((minWidthNone || width > coords.width) ? width : coords.width);
135
+ }
136
+ }
137
+ // if it won't fit (with 10px space before hitting the window edge), flip it
138
+ if (boundaries.height + top + 10 > window.innerHeight) {
139
+ top = coords.top - boundaries.height;
140
+ }
141
+ this.renderer.setStyle(popupEl, 'transform', 'none');
142
+ this.renderer.setStyle(popupEl, 'left', left + 'px');
143
+ this.renderer.setStyle(popupEl, 'top', top + 'px');
144
+ this.renderer.setStyle(popupEl, 'width', width + 'px');
145
+ if (!minWidthNone) {
146
+ this.renderer.setStyle(popupEl, 'min-width', coords.width + 'px');
147
+ }
148
+ }
149
+ }
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopupContainerDirective, deps: [{ token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: DOCUMENT }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
151
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: PopupContainerDirective, selector: "[ecPopup]", inputs: { popup: ["ecPopup", "popup"], popperOptions: ["options", "popperOptions"] }, ngImport: i0 }); }
152
+ }
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PopupContainerDirective, decorators: [{
154
+ type: Directive,
155
+ args: [{ selector: '[ecPopup]' }]
156
+ }], ctorParameters: () => [{ type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
157
+ type: Inject,
158
+ args: [DOCUMENT]
159
+ }] }, { type: i0.Renderer2 }], propDecorators: { popup: [{
160
+ type: Input,
161
+ args: ['ecPopup']
162
+ }], popperOptions: [{
163
+ type: Input,
164
+ args: ['options']
165
+ }] } });
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAtY29udGFpbmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvZGlyZWN0aXZlcy9wb3B1cC9wb3B1cC1jb250YWluZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFtQixZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBK0QsTUFBTSxlQUFlLENBQUM7QUFDckosT0FBTyxNQUFNLE1BQU0sV0FBVyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDOztBQUsvQzs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLHVCQUF1QjtJQUVoQzs7Ozs7T0FLRzthQUNXLG1CQUFjLEdBQTZCLFNBQVMsQUFBdEMsQ0FBdUM7SUE2Q25FOzs7Ozs7T0FNRztJQUNILFlBQ1ksV0FBNkIsRUFDN0IsYUFBK0IsRUFDYixRQUFhLEVBQy9CLFFBQW1CO1FBSG5CLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDYixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFxQi9COztXQUVHO1FBQ0ksdUJBQWtCLEdBQThCLElBQUksWUFBWSxFQUFlLENBQUM7SUF2QnBGLENBQUM7SUFFSjs7O09BR0c7SUFDSCxRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsV0FBVztRQUNQLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBU0Q7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QWpESyxLQUFLO3NCQUE3QixLQUFLO3VCQUFDLFNBQVM7Z0JBT1MsYUFBYTtzQkFBckMsS0FBSzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEVtYmVkZGVkVmlld1JlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgUG9wcGVyIGZyb20gJ3BvcHBlci5qcyc7XHJcbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFBvcHVwUGxhY2VtZW50ID0gJ3RvcCcgfCAncmlnaHQnIHwgJ2JvdHRvbScgfCAnbGVmdCcgfCAndG9wLXN0YXJ0JyB8ICd0b3AtZW5kJyB8ICdib3R0b20tc3RhcnQnIHwgJ2JvdHRvbS1lbmQnO1xyXG5leHBvcnQgdHlwZSBQb3B1cFN0YXR1cyA9ICd2aXNpYmxlJyB8ICdoaWRkZW4nO1xyXG5cclxuLyoqXHJcbiAqIFByaW1pdGl2ZSBkaXJlY3RpdmUgdGhhdCBwb3B1cHMgYSBjb250YWluZXIgdXNpbmcgUG9wcGVySlNcclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2VjUG9wdXBdJyB9KVxyXG5leHBvcnQgY2xhc3MgUG9wdXBDb250YWluZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqICBHbG9iYWwgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBvcHVwOyBvbmx5XHJcbiAgICAgKiAgb25lIHBvcHVwIGRpcmVjdGl2ZSBjYW4gYmUgaW4gYHNob3dgIHN0YXRlIGF0IGEgZ2l2ZW4gdGltZS5cclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBHbG9iYWxQb3B1cFJlZj86IFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlID0gdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcGxhdGVSZWYgb2YgY29udGFpbmVyIHRvIHBvcHVwXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoJ2VjUG9wdXAnKSBwdWJsaWMgcG9wdXAhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wcGVyIG9wdGlvbnNcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgQElucHV0KCdvcHRpb25zJykgcHVibGljIHBvcHBlck9wdGlvbnM/OiBQb3BwZXIuUG9wcGVyT3B0aW9ucztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIFZpZXcgUmVmZXJlbmNlXHJcbiAgICAgKlxyXG4gICAgICogQG1lbWJlcm9mIFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdGVtcGxhdGVWaWV3UmVmITogRW1iZWRkZWRWaWV3UmVmPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3B1cCBWaWV3IFJlZmVyZW5jZSAoY29udGFpbmVyKVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBvcHVwVmlld1JlZj86IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUG9wcGVyIFJlZmVyZW5jZVxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBvcHBlclJlZj86IFBvcHBlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlLXRvLWNsaWNrIFN1YnNjcmlwdGlvbi4gVGhpcyBhbGxvd3MgdXMgdG8gY2xvc2UgdGhlIG1lbnUgd2hlbiB5b3UgY2xpY2sgb24gdGhlIGJvZHkuXHJcbiAgICAgKiBXZSBhdHRhY2ggaXQgd2hlbiB0aGUgbWVudSBpcyBvcGVuIGFuZCBkZXRhY2ggaXQgb24gY2xvc2UsIHRvIGxpbWl0IHRoZSBsaWZldGltZSBvZiB0aGUgY2xpY2sgaGFuZGxlclxyXG4gICAgICogd2hpY2ggaGVscHMgd2l0aCBwZXJmb3JtYW5jZSBvbiBhIHBhZ2Ugd2l0aCBtYW55IHBvcHVwIGNvbnRhaW5lcnNcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnbG9iYWxDbG9zZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmUuXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGVSZWYgUmVmZXJlbmNlIHRvIHRoZSBwb3B1cCB0ZW1wbGF0ZVxyXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXIgUmVmZXJlbmNlIHRvIHRoZSB2aWV3IGNvbnRhaW5lclxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50IFJlZmVyZW5jZSB0byBEb2N1bWVudFxyXG4gICAgICogQG1lbWJlcm9mIFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcclxuICAgICkge31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgb25Jbml0IGxpZmVjeWNsZSBob29rXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9saWZlY3ljbGUtaG9va3NcclxuICAgICAqL1xyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFuZ3VsYXIgb25EZXN0cm95IGxpZmVjeWNsZSBob29rLiBDbG9zZSBhbmQgZGVsZXRlIHJlZmVyZW5jZXMuIFVuc3Vic2NyaWJlIG9ic2VydmFibGVzXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9saWZlY3ljbGUtaG9va3NcclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW1pdCB0aGUge0BsaW5rIFBvcHVwU3RhdHVzfSB3aGVuIGl0IGNoYW5nZXNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHBvcHBlclN0YXR1c0NoYW5nZTogRXZlbnRFbWl0dGVyPFBvcHVwU3RhdHVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8UG9wdXBTdGF0dXM+KCk7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheXMgdGhlIHRlbXBsYXRlUmVmIGFzIGEgcG9wdXBcclxuICAgICAqXHJcbiAgICAgKiBAbWVtYmVyb2YgUG9wdXBDb250YWluZXJEaXJlY3RpdmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNob3coKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlLkdsb2JhbFBvcHVwUmVmKSB7XHJcbiAgICAgICAgICAgIGlmIChQb3B1cENvbnRhaW5lckRpcmVjdGl2ZS5HbG9iYWxQb3B1cFJlZiAhPSB0aGlzKSB7XHJcbiAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZS5HbG9iYWxQb3B1cFJlZi5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZS5HbG9iYWxQb3B1cFJlZiA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIXRoaXMuZ2xvYmFsQ2xvc2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5nbG9iYWxDbG9zZVN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh0aGlzLmRvY3VtZW50LmJvZHksIFwiY2xpY2tcIikuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnBvcHBlclJlZikge1xyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIHBvcHBlciB0ZW1wbGF0ZSBhcyBhbiBlbWJlZGRlZCB2aWV3IHNpbmNlIFBvcHBlckpTXHJcbiAgICAgICAgICAgIC8vIG1hbmlwdWxhdGVzIERPTSBlbGVtZW50cy5cclxuICAgICAgICAgICAgdGhpcy5wb3B1cFZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucG9wdXApO1xyXG5cclxuICAgICAgICAgICAgLy8gU2luY2UgcG9wcGVyIG5lZWRzIHJlYWwgRE9NIGVsZW1lbnRzLCBncmFiIHRoZSBmaXJzdCBub24tY29tbWVudFxyXG4gICAgICAgICAgICAvLyBET00gZWxlbWVudCB0byB1c2UgYXMgb3VyIGFuY2hvci5cclxuICAgICAgICAgICAgbGV0IGFuY2hvckVsZW1lbnQgPSAodGhpcy5wb3B1cFZpZXdSZWYucm9vdE5vZGVzIGFzIGFueVtdKS5maW5kKGVsZW0gPT4geyByZXR1cm4gZWxlbS5ub2RlTmFtZSAhPT0gXCIjdGV4dFwiIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFyZW50cyBlbGVtZW50cyBhcyBvdXIgRE9NIGVsZW1lbnRzIHRvIFBvcHBlclxyXG4gICAgICAgICAgICB0aGlzLnBvcHBlclJlZiA9IG5ldyBQb3BwZXIoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlVmlld1JlZi5yb290Tm9kZXNbMF0sXHJcbiAgICAgICAgICAgICAgICBhbmNob3JFbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3BwZXJPcHRpb25zKTtcclxuXHJcblxyXG4gICAgICAgICAgICBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZS5HbG9iYWxQb3B1cFJlZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBvcHBlclN0YXR1c0NoYW5nZS5lbWl0KCd2aXNpYmxlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhpZGVzIHRoZSB0ZW1wbGF0ZVJlZlxyXG4gICAgICpcclxuICAgICAqIEBtZW1iZXJvZiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxDbG9zZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmdsb2JhbENsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsQ2xvc2VTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5wb3BwZXJSZWYgJiYgdGhpcy5wb3B1cFZpZXdSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3B1cFZpZXdSZWYuZGVzdHJveSgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvcHBlclJlZi5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9wcGVyUmVmID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB0aGlzLnBvcHBlclN0YXR1c0NoYW5nZS5lbWl0KCdoaWRkZW4nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBwb3B1cCBjb250YWluZXIgcG9zaXRpb25cclxuICAgICAqL1xyXG4gICAgcHVibGljIHVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5wb3BwZXJSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5wb3BwZXJSZWYudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaXhQb3NpdGlvbihtaW5XaWR0aE5vbmU/OmJvb2xlYW4sIGFwcGVuZFRvQm9keT1mYWxzZSApOnZvaWQge1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBpZih0aGlzLnBvcHBlclJlZiAmJiB0aGlzLnBvcHBlclJlZlsncmVmZXJlbmNlJ10gJiYgdGhpcy5wb3BwZXJSZWZbJ3BvcHBlciddKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgbGV0IHBvcHVwRWwgPSB0aGlzLnBvcHBlclJlZlsncG9wcGVyJ107XHJcblxyXG4gICAgICAgICAgICAvLyBSZXNldCB3aWR0aCBzdHlsZSBwcmV2aW91c2x5IGFzc2lnbmVkIGJlY2F1c2UgdGhlIGNvbnRlbnQgbWF5IGhhdmVcclxuICAgICAgICAgICAgLy8gY2hhbmdlZCBhbmQgdGhlIGF1dG8gd2lkdGggd291bGQgYmUgZGlmZmVyZW50XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUocG9wdXBFbCwgJ3dpZHRoJyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBvcHVwRWwsICdwb3NpdGlvbicsICdmaXhlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFwcGVuZFRvQm9keSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keUVsID0gdGhpcy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5Jyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3B1cFBhcmVudCA9IHRoaXMucmVuZGVyZXIucGFyZW50Tm9kZShwb3B1cEVsKTtcclxuICAgICAgICAgICAgICAgIGlmIChwb3B1cFBhcmVudCAhPT0gYm9keUVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChib2R5RWwsIHBvcHVwRWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGxldCB0b2dnbGVFbCA9IHRoaXMucG9wcGVyUmVmWydyZWZlcmVuY2UnXTtcclxuICAgICAgICAgICAgbGV0IHdpZHRoID0gcG9wdXBFbC5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgICAgbGV0IGJvdW5kYXJpZXMgPSBwb3B1cEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICBsZXQgbGVmdDpudW1iZXIgPSBib3VuZGFyaWVzLmxlZnQ7XHJcbiAgICAgICAgICAgIGxldCBjb29yZHMgPSB0b2dnbGVFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNldCB0aGUgdG9wIG9mIG91ciBtZW51IHRvIHRoZSBib3R0b20gb2YgdGhlIHRvZ2dsZSBlbGVtZW50XHJcbiAgICAgICAgICAgIGxldCB0b3A6bnVtYmVyID0gY29vcmRzLmJvdHRvbTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcHBlck9wdGlvbnMgJiYgdGhpcy5wb3BwZXJPcHRpb25zLnBsYWNlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucG9wcGVyT3B0aW9ucy5wbGFjZW1lbnQgPT09ICdib3R0b20tc3RhcnQnIHx8IHRoaXMucG9wcGVyT3B0aW9ucy5wbGFjZW1lbnQgPT09ICd0b3Atc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGNvb3Jkcy5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY29vcmRzLnJpZ2h0IC0gKChtaW5XaWR0aE5vbmUgfHwgd2lkdGggPiBjb29yZHMud2lkdGgpID8gd2lkdGggOiBjb29yZHMud2lkdGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBpdCB3b24ndCBmaXQgKHdpdGggMTBweCBzcGFjZSBiZWZvcmUgaGl0dGluZyB0aGUgd2luZG93IGVkZ2UpLCBmbGlwIGl0XHJcbiAgICAgICAgICAgIGlmIChib3VuZGFyaWVzLmhlaWdodCArIHRvcCArIDEwID4gd2luZG93LmlubmVySGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0b3AgPSBjb29yZHMudG9wIC0gYm91bmRhcmllcy5oZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocG9wdXBFbCwgJ3RyYW5zZm9ybScsICdub25lJyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocG9wdXBFbCwgJ2xlZnQnLCBsZWZ0ICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUocG9wdXBFbCwgJ3RvcCcsIHRvcCArICdweCcpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBvcHVwRWwsICd3aWR0aCcsIHdpZHRoICsgJ3B4Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIW1pbldpZHRoTm9uZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShwb3B1cEVsLCAnbWluLXdpZHRoJywgY29vcmRzLndpZHRoICsgJ3B4Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19