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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/esm2022/energycap-components.mjs +5 -0
  2. package/esm2022/lib/components.module.mjs +423 -0
  3. package/esm2022/lib/controls/banner/banner.component.mjs +109 -0
  4. package/esm2022/lib/controls/button/button.component.mjs +106 -0
  5. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +67 -0
  6. package/esm2022/lib/controls/button/copy-button.directive.mjs +28 -0
  7. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +91 -0
  9. package/esm2022/lib/controls/calendar/calendar.component.mjs +248 -0
  10. package/esm2022/lib/controls/calendar/calendar.types.mjs +2 -0
  11. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -0
  13. package/esm2022/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +57 -0
  15. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +62 -0
  16. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +100 -0
  17. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +101 -0
  18. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +76 -0
  19. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +79 -0
  20. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +210 -0
  21. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +81 -0
  22. package/esm2022/lib/controls/date-input/date-input.component.mjs +464 -0
  23. package/esm2022/lib/controls/date-input/date-input.types.mjs +44 -0
  24. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +243 -0
  25. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +261 -0
  26. package/esm2022/lib/controls/form-control/form-control.component.mjs +98 -0
  27. package/esm2022/lib/controls/form-control-base.mjs +151 -0
  28. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  29. package/esm2022/lib/controls/form-group/form-group.component.mjs +261 -0
  30. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +31 -0
  31. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
  32. package/esm2022/lib/controls/link-button/link-button.component.mjs +11 -0
  33. package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
  34. package/esm2022/lib/controls/navigation/link-item.mjs +2 -0
  35. package/esm2022/lib/controls/navigation/nav-group.mjs +39 -0
  36. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  37. package/esm2022/lib/controls/navigation/nav-item.mjs +2 -0
  38. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
  39. package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
  40. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +3 -0
  41. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +82 -0
  42. package/esm2022/lib/controls/select/select.component.mjs +88 -0
  43. package/esm2022/lib/controls/tabs/tabs.component.mjs +47 -0
  44. package/esm2022/lib/controls/textbox/textbox.component.mjs +155 -0
  45. package/esm2022/lib/core/cache.service.mjs +105 -0
  46. package/esm2022/lib/core/custom-validators.mjs +29 -0
  47. package/esm2022/lib/core/date-time-helper.mjs +228 -0
  48. package/esm2022/lib/core/error.service.mjs +61 -0
  49. package/esm2022/lib/core/router-helper.service.mjs +111 -0
  50. package/esm2022/lib/core/scroll.service.mjs +89 -0
  51. package/esm2022/lib/core/telemetry-tracker.service.mjs +16 -0
  52. package/esm2022/lib/core/telemetry.service.mjs +38 -0
  53. package/esm2022/lib/core/validation-message.service.mjs +185 -0
  54. package/esm2022/lib/core/validation-patterns.mjs +31 -0
  55. package/esm2022/lib/core/window.service.mjs +186 -0
  56. package/esm2022/lib/display/app-bar/app-bar.component.mjs +46 -0
  57. package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
  58. package/esm2022/lib/display/avatar/avatar.service.mjs +64 -0
  59. package/esm2022/lib/display/confirm/confirm.component.mjs +168 -0
  60. package/esm2022/lib/display/dialog/dialog-content.mjs +2 -0
  61. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  62. package/esm2022/lib/display/dialog/dialog-types.mjs +77 -0
  63. package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
  64. package/esm2022/lib/display/dialog/dialog.service.mjs +71 -0
  65. package/esm2022/lib/display/help/help-types.mjs +2 -0
  66. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  67. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +54 -0
  68. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  69. package/esm2022/lib/display/item-display/item-display.component.mjs +81 -0
  70. package/esm2022/lib/display/json-display/json-display.component.mjs +47 -0
  71. package/esm2022/lib/display/resizable/resizable-base.mjs +120 -0
  72. package/esm2022/lib/display/resizable/resizable.component.mjs +57 -0
  73. package/esm2022/lib/display/spinner/spinner.component.mjs +12 -0
  74. package/esm2022/lib/display/splash/splash.component.mjs +42 -0
  75. package/esm2022/lib/display/splash/splash.service.mjs +35 -0
  76. package/esm2022/lib/display/table/resizable-column.component.mjs +20 -0
  77. package/esm2022/lib/display/table/resizable-table.directive.mjs +227 -0
  78. package/esm2022/lib/display/table/searchable-table.component.mjs +342 -0
  79. package/esm2022/lib/display/table/table-detail-row.component.mjs +28 -0
  80. package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
  81. package/esm2022/lib/display/table/table-master-header-row.component.mjs +14 -0
  82. package/esm2022/lib/display/table/table-master-row.component.mjs +163 -0
  83. package/esm2022/lib/display/table/table-pagination.component.mjs +155 -0
  84. package/esm2022/lib/display/table/table-selectable-row.component.mjs +235 -0
  85. package/esm2022/lib/display/table/table.component.mjs +249 -0
  86. package/esm2022/lib/display/tags/tag.mjs +18 -0
  87. package/esm2022/lib/display/tags/tags.component.mjs +77 -0
  88. package/esm2022/lib/display/toast/toast/toast.component.mjs +77 -0
  89. package/esm2022/lib/display/toast/toast-types.mjs +8 -0
  90. package/esm2022/lib/display/toast/toast.service.mjs +35 -0
  91. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
  92. package/esm2022/lib/display/tooltip/tooltip.component.mjs +28 -0
  93. package/esm2022/lib/display/tooltip/tooltip.service.mjs +78 -0
  94. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  95. package/esm2022/lib/display/tour/tour-types.mjs +34 -0
  96. package/esm2022/lib/display/tour/tour.component.mjs +398 -0
  97. package/esm2022/lib/display/tour/tour.service.mjs +75 -0
  98. package/esm2022/lib/display/tree/tree.component.mjs +135 -0
  99. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  100. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  101. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  102. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -0
  103. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
  104. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  105. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  106. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  107. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  108. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  109. package/esm2022/lib/shared/display.mjs +6 -0
  110. package/esm2022/lib/shared/form-group.helper.mjs +67 -0
  111. package/esm2022/lib/shared/json-helper.mjs +19 -0
  112. package/esm2022/lib/shared/lodash-helper.mjs +52 -0
  113. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +387 -0
  114. package/esm2022/lib/shared/page/page-statuses.mjs +23 -0
  115. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +23 -0
  116. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
  117. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +17 -0
  118. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +17 -0
  119. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +38 -0
  120. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  121. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +148 -0
  122. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +40 -0
  123. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +57 -0
  124. package/esm2022/lib/shared/user-preference.service.mjs +17 -0
  125. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  126. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -0
  127. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -0
  128. package/esm2022/public-api.mjs +117 -0
  129. package/fesm2022/energycap-components.mjs +13219 -0
  130. package/fesm2022/energycap-components.mjs.map +1 -0
  131. package/index.d.ts +5 -0
  132. package/lib/components.module.d.ts +92 -0
  133. package/lib/controls/banner/banner.component.d.ts +50 -0
  134. package/lib/controls/button/button.component.d.ts +78 -0
  135. package/lib/controls/button/copy-button-base.directive.d.ts +20 -0
  136. package/lib/controls/button/copy-button.directive.d.ts +14 -0
  137. package/lib/controls/button/copy-table-button.directive.d.ts +19 -0
  138. package/lib/controls/calendar/calendar-item.component.d.ts +22 -0
  139. package/lib/controls/calendar/calendar.component.d.ts +52 -0
  140. package/lib/controls/calendar/calendar.types.d.ts +11 -0
  141. package/lib/controls/checkbox/checkbox.component.d.ts +65 -0
  142. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -0
  143. package/lib/controls/combobox/combobox.component.d.ts +418 -0
  144. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -0
  145. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -0
  146. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -0
  147. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -0
  148. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -0
  149. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -0
  150. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -0
  151. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -0
  152. package/lib/controls/date-input/date-input.component.d.ts +115 -0
  153. package/lib/controls/date-input/date-input.types.d.ts +62 -0
  154. package/lib/controls/dropdown/dropdown.component.d.ts +161 -0
  155. package/lib/controls/file-upload/file-upload.component.d.ts +124 -0
  156. package/lib/controls/form-control/form-control.component.d.ts +28 -0
  157. package/lib/controls/form-control-base.d.ts +110 -0
  158. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -0
  159. package/lib/controls/form-group/form-group.component.d.ts +105 -0
  160. package/lib/controls/help-popover/help-popover.component.d.ts +11 -0
  161. package/lib/controls/item-picker/item-picker.component.d.ts +164 -0
  162. package/lib/controls/link-button/link-button.component.d.ts +5 -0
  163. package/lib/controls/menu/menu.component.d.ts +255 -0
  164. package/lib/controls/navigation/link-item.d.ts +32 -0
  165. package/lib/controls/navigation/nav-group.d.ts +18 -0
  166. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -0
  167. package/lib/controls/navigation/nav-item.d.ts +31 -0
  168. package/lib/controls/numericbox/numericbox.component.d.ts +148 -0
  169. package/lib/controls/popover/popover.component.d.ts +51 -0
  170. package/lib/controls/radio-button/radio-button-option.d.ts +19 -0
  171. package/lib/controls/radio-button/radio-button.component.d.ts +53 -0
  172. package/lib/controls/select/select.component.d.ts +44 -0
  173. package/lib/controls/tabs/tabs.component.d.ts +30 -0
  174. package/lib/controls/textbox/textbox.component.d.ts +107 -0
  175. package/lib/core/cache.service.d.ts +33 -0
  176. package/lib/core/custom-validators.d.ts +20 -0
  177. package/lib/core/date-time-helper.d.ts +101 -0
  178. package/lib/core/error.service.d.ts +20 -0
  179. package/lib/core/router-helper.service.d.ts +48 -0
  180. package/lib/core/scroll.service.d.ts +36 -0
  181. package/lib/core/telemetry-tracker.service.d.ts +13 -0
  182. package/lib/core/telemetry.service.d.ts +31 -0
  183. package/lib/core/validation-message.service.d.ts +26 -0
  184. package/lib/core/validation-patterns.d.ts +22 -0
  185. package/lib/core/window.service.d.ts +116 -0
  186. package/lib/display/app-bar/app-bar.component.d.ts +20 -0
  187. package/lib/display/avatar/avatar.component.d.ts +35 -0
  188. package/lib/display/avatar/avatar.service.d.ts +24 -0
  189. package/lib/display/confirm/confirm.component.d.ts +123 -0
  190. package/lib/display/dialog/dialog-content.d.ts +19 -0
  191. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -0
  192. package/lib/display/dialog/dialog-types.d.ts +130 -0
  193. package/lib/display/dialog/dialog.component.d.ts +120 -0
  194. package/lib/display/dialog/dialog.service.d.ts +48 -0
  195. package/lib/display/help/help-types.d.ts +33 -0
  196. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -0
  197. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -0
  198. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -0
  199. package/lib/display/item-display/item-display.component.d.ts +43 -0
  200. package/lib/display/json-display/json-display.component.d.ts +16 -0
  201. package/lib/display/resizable/resizable-base.d.ts +67 -0
  202. package/lib/display/resizable/resizable.component.d.ts +31 -0
  203. package/lib/display/spinner/spinner.component.d.ts +5 -0
  204. package/lib/display/splash/splash.component.d.ts +16 -0
  205. package/lib/display/splash/splash.service.d.ts +22 -0
  206. package/lib/display/table/resizable-column.component.d.ts +10 -0
  207. package/lib/display/table/resizable-table.directive.d.ts +93 -0
  208. package/lib/display/table/searchable-table.component.d.ts +206 -0
  209. package/lib/display/table/table-detail-row.component.d.ts +8 -0
  210. package/lib/display/table/table-locked-column.component.d.ts +20 -0
  211. package/lib/display/table/table-master-header-row.component.d.ts +9 -0
  212. package/lib/display/table/table-master-row.component.d.ts +113 -0
  213. package/lib/display/table/table-pagination.component.d.ts +91 -0
  214. package/lib/display/table/table-selectable-row.component.d.ts +102 -0
  215. package/lib/display/table/table.component.d.ts +121 -0
  216. package/lib/display/tags/tag.d.ts +18 -0
  217. package/lib/display/tags/tags.component.d.ts +48 -0
  218. package/lib/display/toast/toast/toast.component.d.ts +23 -0
  219. package/lib/display/toast/toast-types.d.ts +24 -0
  220. package/lib/display/toast/toast.service.d.ts +20 -0
  221. package/lib/display/toast/toaster/toaster.component.d.ts +35 -0
  222. package/lib/display/tooltip/tooltip.component.d.ts +70 -0
  223. package/lib/display/tooltip/tooltip.service.d.ts +16 -0
  224. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -0
  225. package/lib/display/tour/tour-types.d.ts +70 -0
  226. package/lib/display/tour/tour.component.d.ts +147 -0
  227. package/lib/display/tour/tour.service.d.ts +38 -0
  228. package/lib/display/tree/tree.component.d.ts +75 -0
  229. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -0
  230. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -0
  231. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -0
  232. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -0
  233. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -0
  234. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -0
  235. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -0
  236. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -0
  237. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -0
  238. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -0
  239. package/lib/shared/display.d.ts +42 -0
  240. package/lib/shared/form-group.helper.d.ts +31 -0
  241. package/lib/shared/json-helper.d.ts +7 -0
  242. package/lib/shared/lodash-helper.d.ts +18 -0
  243. package/lib/shared/page/page-base/page-base.component.d.ts +259 -0
  244. package/lib/shared/page/page-statuses.d.ts +13 -0
  245. package/lib/shared/page/page-title/page-title.component.d.ts +9 -0
  246. package/lib/shared/page/page-view/page-view.component.d.ts +102 -0
  247. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -0
  248. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -0
  249. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -0
  250. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -0
  251. package/lib/shared/testing/public-mocks.spec.d.ts +90 -0
  252. package/lib/shared/testing/spy-factory.spec.d.ts +27 -0
  253. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -0
  254. package/lib/shared/user-preference.service.d.ts +13 -0
  255. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -0
  256. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -0
  257. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -0
  258. package/package.json +2 -6
  259. package/public-api.d.ts +113 -0
  260. package/schematics/collection.json +10 -0
  261. package/schematics/rxjs-7-upgrade/index.d.ts +3 -0
  262. package/schematics/rxjs-7-upgrade/index.js +71 -0
  263. package/schematics/rxjs-7-upgrade/index.js.map +1 -0
  264. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -0
  265. package/schematics/rxjs-7-upgrade/schema.js +3 -0
  266. package/schematics/rxjs-7-upgrade/schema.js.map +1 -0
  267. package/schematics/rxjs-7-upgrade/schema.json +14 -0
  268. package/schematics/utilities/typescript.d.ts +7 -0
  269. package/schematics/utilities/typescript.js +45 -0
  270. package/schematics/utilities/typescript.js.map +1 -0
  271. package/schematics/utilities/workspace.d.ts +8 -0
  272. package/schematics/utilities/workspace.js +72 -0
  273. package/schematics/utilities/workspace.js.map +1 -0
  274. package/src/assets/images/email-icon.png +0 -0
  275. package/src/assets/images/email-logo.png +0 -0
  276. package/src/assets/images/favicon-ech.svg +7 -0
  277. package/src/assets/images/favicon-esa.svg +6 -0
  278. package/src/assets/images/favicon-eum.svg +6 -0
  279. package/src/assets/images/favicon.svg +5 -0
  280. package/src/assets/images/icon-carbonhub.svg +10 -0
  281. package/src/assets/images/icon-eum.svg +5 -0
  282. package/src/assets/images/icon-ucp.svg +5 -0
  283. package/src/assets/images/icon-wattics.svg +5 -0
  284. package/src/assets/images/icon.svg +4 -0
  285. package/src/assets/images/logo.svg +3 -0
  286. package/src/assets/images/splash.gif +0 -0
  287. package/src/assets/locales/en_US.json +59 -0
  288. package/src/assets/scripts/unsupported-browser.js +17 -0
  289. package/src/styles/_base.scss +38 -0
  290. package/src/styles/_colors.scss +96 -0
  291. package/src/styles/_core.scss +4 -0
  292. package/src/styles/_functions.scss +114 -0
  293. package/src/styles/_global-variables.scss +232 -0
  294. package/src/styles/_icons.scss +24 -0
  295. package/src/styles/bootstrap/_grid.scss +34 -0
  296. package/src/styles/bootstrap/_reboot.scss +323 -0
  297. package/src/styles/components/_card.scss +21 -0
  298. package/src/styles/components/_link-icons.scss +38 -0
  299. package/src/styles/components/_splash.scss +57 -0
  300. package/src/styles/components/_unsupported-browsers.scss +24 -0
  301. package/src/styles/email/_email-base.scss +228 -0
  302. package/src/styles/email/email.scss +43 -0
  303. package/src/styles/index.scss +27 -0
  304. package/src/styles/mixins/_animations.scss +18 -0
  305. package/src/styles/mixins/_button-base.scss +185 -0
  306. package/src/styles/mixins/_card-base.scss +40 -0
  307. package/src/styles/mixins/_common.scss +52 -0
  308. package/src/styles/mixins/_dialog-base.scss +96 -0
  309. package/src/styles/mixins/_form-control-base.scss +641 -0
  310. package/src/styles/mixins/_login.scss +74 -0
  311. package/src/styles/mixins/_menu-base.scss +153 -0
  312. package/src/styles/mixins/_overlay-base.scss +33 -0
  313. package/src/styles/mixins/_resizable-base.scss +57 -0
  314. package/src/styles/mixins/_spinner-base.scss +34 -0
  315. package/src/styles/mixins/_table-base.scss +298 -0
  316. package/src/styles/mixins/_tabs-base.scss +110 -0
  317. package/src/styles/mixins/_tags-base.scss +116 -0
  318. package/src/styles/mixins/_text.scss +89 -0
  319. package/src/styles/mixins.scss +15 -0
  320. package/src/styles/utilities/_borders.scss +30 -0
  321. package/src/styles/utilities/_common.scss +49 -0
  322. package/src/styles/utilities/_layout.scss +116 -0
  323. package/src/styles/utilities/_spacing.scss +65 -0
  324. package/src/styles/utilities/_text.scss +139 -0
@@ -0,0 +1,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,100 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Directive, EventEmitter, Inject, Input, Output } from '@angular/core';
3
+ import { fromEvent, Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/cdk/a11y";
7
+ /**
8
+ * A basic helper directive to determine when focus leaves the host element.
9
+ *
10
+ * NOTE: This directive utilizes hidden anchor elements. These will disrupt tab order for elements
11
+ * within a form. It is recommended to only use this directive when you need to redirect focus when
12
+ * focus leaves a container. Also make sure this directive is disabled when the focus out events
13
+ * are not needed to avoid keyboard nav problems.
14
+ */
15
+ export class KeyboardNavContainerDirective {
16
+ constructor(hostEl, _document, interactivityChecker) {
17
+ this.hostEl = hostEl;
18
+ this._document = _document;
19
+ this.interactivityChecker = interactivityChecker;
20
+ this.enabled = true;
21
+ this.focusOutStart = new EventEmitter();
22
+ this.focusOutEnd = new EventEmitter();
23
+ this.destroyed = new Subject();
24
+ // Create the start and end anchors.
25
+ this.startAnchor = this._document.createElement('div');
26
+ this.endAnchor = this._document.createElement('div');
27
+ // Hide the anchors from screen readers.
28
+ this.startAnchor.setAttribute('aria-hidden', 'true');
29
+ this.endAnchor.setAttribute('aria-hidden', 'true');
30
+ }
31
+ ngOnChanges() {
32
+ this.toggleAnchors(this.enabled);
33
+ }
34
+ ngAfterViewInit() {
35
+ // Insert the anchors into the DOM before and after the host element.
36
+ this.hostEl.nativeElement.parentNode?.insertBefore(this.startAnchor, this.hostEl.nativeElement);
37
+ this.hostEl.nativeElement.parentNode?.insertBefore(this.endAnchor, this.hostEl.nativeElement.nextSibling);
38
+ // Listen for focus events on the anchors.
39
+ fromEvent(this.startAnchor, 'focus').pipe(takeUntil(this.destroyed)).subscribe(() => this.focusOutStart.emit());
40
+ fromEvent(this.endAnchor, 'focus').pipe(takeUntil(this.destroyed)).subscribe(() => this.focusOutEnd.emit());
41
+ this.toggleAnchors(this.enabled);
42
+ }
43
+ ngOnDestroy() {
44
+ this.destroyed.next();
45
+ this.destroyed.complete();
46
+ // Cleanup the anchors
47
+ this.startAnchor.remove();
48
+ this.endAnchor.remove();
49
+ }
50
+ focus() {
51
+ const firstFocusableElement = this.getFirstFocusableElement(this.hostEl.nativeElement);
52
+ firstFocusableElement?.focus();
53
+ }
54
+ getFirstFocusableElement(element) {
55
+ // These are only possibly focusable. Some may be disabled or not visible.
56
+ const elements = element.querySelectorAll('input, textarea, select, button, a, [tabindex], [contenteditable]');
57
+ // Use the Angular CDK interactivity checker to determine if an element is actually focusable and tabbable.
58
+ // This checks for disabledness among other things.
59
+ const first = Array.from(elements).find(el => {
60
+ return this.interactivityChecker.isFocusable(el) && this.interactivityChecker.isTabbable(el);
61
+ });
62
+ return first || null;
63
+ }
64
+ toggleAnchors(enabled) {
65
+ // Make the anchors focusable if the container is enabled and we have subscribers for the events.
66
+ // Otherwise, remove the tabindexes so they cannot receive focus and disrupt the tab order.
67
+ if (enabled && this.focusOutStart.observers.length > 0) {
68
+ this.startAnchor.setAttribute('tabindex', '0');
69
+ }
70
+ else {
71
+ this.startAnchor.removeAttribute('tabindex');
72
+ }
73
+ if (enabled && this.focusOutEnd.observers.length > 0) {
74
+ this.endAnchor.setAttribute('tabindex', '0');
75
+ }
76
+ else {
77
+ this.endAnchor.removeAttribute('tabindex');
78
+ }
79
+ }
80
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KeyboardNavContainerDirective, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }, { token: i1.InteractivityChecker }], target: i0.ɵɵFactoryTarget.Directive }); }
81
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: KeyboardNavContainerDirective, selector: "[ecKeyboardNavContainer]", inputs: { enabled: ["ecKeyboardNavContainer", "enabled"] }, outputs: { focusOutStart: "focusOutStart", focusOutEnd: "focusOutEnd" }, exportAs: ["ecKeyboardNavContainer"], usesOnChanges: true, ngImport: i0 }); }
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: KeyboardNavContainerDirective, decorators: [{
84
+ type: Directive,
85
+ args: [{
86
+ selector: '[ecKeyboardNavContainer]',
87
+ exportAs: 'ecKeyboardNavContainer'
88
+ }]
89
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: Document, decorators: [{
90
+ type: Inject,
91
+ args: [DOCUMENT]
92
+ }] }, { type: i1.InteractivityChecker }], propDecorators: { enabled: [{
93
+ type: Input,
94
+ args: ['ecKeyboardNavContainer']
95
+ }], focusOutStart: [{
96
+ type: Output
97
+ }], focusOutEnd: [{
98
+ type: Output
99
+ }] } });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQtbmF2LWNvbnRhaW5lci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL2RpcmVjdGl2ZXMva2V5Ym9hcmQtbmF2LWNvbnRhaW5lci9rZXlib2FyZC1uYXYtY29udGFpbmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXdCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQU0zQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLDZCQUE2QjtJQVl4QyxZQUNVLE1BQStCLEVBQ2IsU0FBbUIsRUFDckMsb0JBQTBDO1FBRjFDLFdBQU0sR0FBTixNQUFNLENBQXlCO1FBQ2IsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNyQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBYm5CLFlBQU8sR0FBWSxJQUFJLENBQUM7UUFFL0Msa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ25DLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtuQyxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQU90QyxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGVBQWU7UUFDYixxRUFBcUU7UUFDckUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTFHLDBDQUEwQztRQUMxQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUU3QyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUzQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQixzQkFBc0I7UUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxLQUFLO1FBQ1YsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2RixxQkFBcUIsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU8sd0JBQXdCLENBQUMsT0FBb0I7UUFDbkQsMEVBQTBFO1FBQzFFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBYyxtRUFBbUUsQ0FBQyxDQUFDO1FBRTVILDJHQUEyRztRQUMzRyxtREFBbUQ7UUFDbkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDdkIsQ0FBQztJQUVPLGFBQWEsQ0FBQyxPQUFnQjtRQUNwQyxpR0FBaUc7UUFDakcsMkZBQTJGO1FBQzNGLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDOytHQXRGVSw2QkFBNkIsNENBYzlCLFFBQVE7bUdBZFAsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQVp6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DOzswQkF1QkksTUFBTTsyQkFBQyxRQUFROzRFQVplLE9BQU87c0JBQXZDLEtBQUs7dUJBQUMsd0JBQXdCO2dCQUVyQixhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbnRlcmFjdGl2aXR5Q2hlY2tlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcclxuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbZWNLZXlib2FyZE5hdkNvbnRhaW5lcl0nLFxyXG4gIGV4cG9ydEFzOiAnZWNLZXlib2FyZE5hdkNvbnRhaW5lcidcclxufSlcclxuLyoqXHJcbiAqIEEgYmFzaWMgaGVscGVyIGRpcmVjdGl2ZSB0byBkZXRlcm1pbmUgd2hlbiBmb2N1cyBsZWF2ZXMgdGhlIGhvc3QgZWxlbWVudC5cclxuICogXHJcbiAqIE5PVEU6IFRoaXMgZGlyZWN0aXZlIHV0aWxpemVzIGhpZGRlbiBhbmNob3IgZWxlbWVudHMuIFRoZXNlIHdpbGwgZGlzcnVwdCB0YWIgb3JkZXIgZm9yIGVsZW1lbnRzXHJcbiAqIHdpdGhpbiBhIGZvcm0uIEl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgdXNlIHRoaXMgZGlyZWN0aXZlIHdoZW4geW91IG5lZWQgdG8gcmVkaXJlY3QgZm9jdXMgd2hlblxyXG4gKiBmb2N1cyBsZWF2ZXMgYSBjb250YWluZXIuIEFsc28gbWFrZSBzdXJlIHRoaXMgZGlyZWN0aXZlIGlzIGRpc2FibGVkIHdoZW4gdGhlIGZvY3VzIG91dCBldmVudHNcclxuICogYXJlIG5vdCBuZWVkZWQgdG8gYXZvaWQga2V5Ym9hcmQgbmF2IHByb2JsZW1zLiBcclxuICovXHJcbmV4cG9ydCBjbGFzcyBLZXlib2FyZE5hdkNvbnRhaW5lckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCdlY0tleWJvYXJkTmF2Q29udGFpbmVyJykgZW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBmb2N1c091dFN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBmb2N1c091dEVuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHJpdmF0ZSBzdGFydEFuY2hvcjogSFRNTEVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBlbmRBbmNob3I6IEhUTUxFbGVtZW50O1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBob3N0RWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxyXG4gICAgcHJpdmF0ZSBpbnRlcmFjdGl2aXR5Q2hlY2tlcjogSW50ZXJhY3Rpdml0eUNoZWNrZXIsXHJcbiAgKSB7XHJcbiAgICAvLyBDcmVhdGUgdGhlIHN0YXJ0IGFuZCBlbmQgYW5jaG9ycy5cclxuICAgIHRoaXMuc3RhcnRBbmNob3IgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIHRoaXMuZW5kQW5jaG9yID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAvLyBIaWRlIHRoZSBhbmNob3JzIGZyb20gc2NyZWVuIHJlYWRlcnMuXHJcbiAgICB0aGlzLnN0YXJ0QW5jaG9yLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgdGhpcy5lbmRBbmNob3Iuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudG9nZ2xlQW5jaG9ycyh0aGlzLmVuYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLy8gSW5zZXJ0IHRoZSBhbmNob3JzIGludG8gdGhlIERPTSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBob3N0IGVsZW1lbnQuXHJcbiAgICB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZSh0aGlzLnN0YXJ0QW5jaG9yLCB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKHRoaXMuZW5kQW5jaG9yLCB0aGlzLmhvc3RFbC5uYXRpdmVFbGVtZW50Lm5leHRTaWJsaW5nKTtcclxuXHJcbiAgICAvLyBMaXN0ZW4gZm9yIGZvY3VzIGV2ZW50cyBvbiB0aGUgYW5jaG9ycy5cclxuICAgIGZyb21FdmVudCh0aGlzLnN0YXJ0QW5jaG9yLCAnZm9jdXMnKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZvY3VzT3V0U3RhcnQuZW1pdCgpKTtcclxuXHJcbiAgICBmcm9tRXZlbnQodGhpcy5lbmRBbmNob3IsICdmb2N1cycpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMuZm9jdXNPdXRFbmQuZW1pdCgpKTtcclxuXHJcbiAgICB0aGlzLnRvZ2dsZUFuY2hvcnModGhpcy5lbmFibGVkKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQuY29tcGxldGUoKTtcclxuICAgIC8vIENsZWFudXAgdGhlIGFuY2hvcnNcclxuICAgIHRoaXMuc3RhcnRBbmNob3IucmVtb3ZlKCk7XHJcbiAgICB0aGlzLmVuZEFuY2hvci5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlRWxlbWVudCA9IHRoaXMuZ2V0Rmlyc3RGb2N1c2FibGVFbGVtZW50KHRoaXMuaG9zdEVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgZmlyc3RGb2N1c2FibGVFbGVtZW50Py5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaXJzdEZvY3VzYWJsZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xyXG4gICAgLy8gVGhlc2UgYXJlIG9ubHkgcG9zc2libHkgZm9jdXNhYmxlLiBTb21lIG1heSBiZSBkaXNhYmxlZCBvciBub3QgdmlzaWJsZS5cclxuICAgIGNvbnN0IGVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIGJ1dHRvbiwgYSwgW3RhYmluZGV4XSwgW2NvbnRlbnRlZGl0YWJsZV0nKTtcclxuXHJcbiAgICAvLyBVc2UgdGhlIEFuZ3VsYXIgQ0RLIGludGVyYWN0aXZpdHkgY2hlY2tlciB0byBkZXRlcm1pbmUgaWYgYW4gZWxlbWVudCBpcyBhY3R1YWxseSBmb2N1c2FibGUgYW5kIHRhYmJhYmxlLlxyXG4gICAgLy8gVGhpcyBjaGVja3MgZm9yIGRpc2FibGVkbmVzcyBhbW9uZyBvdGhlciB0aGluZ3MuXHJcbiAgICBjb25zdCBmaXJzdCA9IEFycmF5LmZyb20oZWxlbWVudHMpLmZpbmQoZWwgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbnRlcmFjdGl2aXR5Q2hlY2tlci5pc0ZvY3VzYWJsZShlbCkgJiYgdGhpcy5pbnRlcmFjdGl2aXR5Q2hlY2tlci5pc1RhYmJhYmxlKGVsKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaXJzdCB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVBbmNob3JzKGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIC8vIE1ha2UgdGhlIGFuY2hvcnMgZm9jdXNhYmxlIGlmIHRoZSBjb250YWluZXIgaXMgZW5hYmxlZCBhbmQgd2UgaGF2ZSBzdWJzY3JpYmVycyBmb3IgdGhlIGV2ZW50cy5cclxuICAgIC8vIE90aGVyd2lzZSwgcmVtb3ZlIHRoZSB0YWJpbmRleGVzIHNvIHRoZXkgY2Fubm90IHJlY2VpdmUgZm9jdXMgYW5kIGRpc3J1cHQgdGhlIHRhYiBvcmRlci5cclxuICAgIGlmIChlbmFibGVkICYmIHRoaXMuZm9jdXNPdXRTdGFydC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN0YXJ0QW5jaG9yLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdGFydEFuY2hvci5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVuYWJsZWQgJiYgdGhpcy5mb2N1c091dEVuZC5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmVuZEFuY2hvci5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5kQW5jaG9yLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19