@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,281 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild, ViewContainerRef, TemplateRef, Inject } from '@angular/core';
3
+ import { timer, lastValueFrom } from 'rxjs';
4
+ import { take, takeUntil, tap } from 'rxjs/operators';
5
+ import { DialogOpenEndEvent, DialogCloseEvent, DialogResult } from './dialog-types';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../core/window.service";
8
+ import * as i2 from "./dialog.service";
9
+ import * as i3 from "@angular/cdk/a11y";
10
+ /** These values need to be kept in sync with dialog-base.scss */
11
+ export const DialogOpenDuration = 125;
12
+ export const DialogCloseDuration = 100;
13
+ export const PanelOpenDuration = 250;
14
+ export const PanelCloseDuration = 225;
15
+ export class DialogComponent {
16
+ onOverlayClick(event) {
17
+ if (event.target.tagName === 'EC-DIALOG' && this.displayAsPanel) {
18
+ this.close(new DialogResult(false));
19
+ }
20
+ }
21
+ /**
22
+ * Defines the width of the dialog (height is auto). Can be a number that will be converted to pixels, or xsmall(320px), small(480px), medium(640px), or large(1024px)
23
+ */
24
+ set size(value) {
25
+ this._size = value;
26
+ // If the size is a string, set the dialog class. Otherwise, clear it.
27
+ if (typeof value == 'string') {
28
+ this.dialogSizeClass = `dialog-${value}`;
29
+ }
30
+ else {
31
+ this.dialogSizeClass = undefined;
32
+ }
33
+ }
34
+ ;
35
+ get size() {
36
+ return this._size;
37
+ }
38
+ constructor(componentFactoryResolver, windowService, dialogService, documentRef) {
39
+ this.componentFactoryResolver = componentFactoryResolver;
40
+ this.windowService = windowService;
41
+ this.dialogService = dialogService;
42
+ this.documentRef = documentRef;
43
+ /**
44
+ * Add/remove the is-open css class to the host element when the dialog is opened/closed.
45
+ * Styles use the is-open class to show/hide the dialog.
46
+ */
47
+ this.isOpen = false;
48
+ /**
49
+ * Add the fade-in css class to the host element when the dialog is opening. Remove when transition is complete.
50
+ * Styles use the fade-in class to apply a fade-in transition while the dialog is opening.
51
+ */
52
+ this.fadeIn = false;
53
+ /**
54
+ * Add the fade-out css class to the host element when the dialog is closing. Remove when transition is complete.
55
+ * Styles use the fade-out class to apply a fade-out transition while the dialog is closing.
56
+ */
57
+ this.fadeOut = false;
58
+ this.displayAsPanel = false;
59
+ this.alignToTop = false;
60
+ this.transparentMask = false;
61
+ this.noMask = false;
62
+ /**
63
+ * Defines the width of the dialog (height is auto). Can be a number that will be converted to pixels, or xsmall(320px), small(480px), medium(640px), or large(1024px)
64
+ */
65
+ this._size = 'small';
66
+ /**
67
+ * Bound to the host. The classes set the --ec-dialog-width variable to our default 'small', 'medium', etc. sizes.
68
+ * Undefined when the size is a number, which is used for custom sizes.
69
+ */
70
+ this.dialogSizeClass = `dialog-${this._size}`;
71
+ /**
72
+ * Emits an event when the dialog is opened
73
+ */
74
+ this.opened = new EventEmitter();
75
+ /**
76
+ * Emits an event when the dialog is closed
77
+ */
78
+ this.closed = new EventEmitter();
79
+ this.previouslyFocusedElement = null;
80
+ }
81
+ ngOnInit() {
82
+ if (this.content) {
83
+ this.open(this.content, this.context, this.options);
84
+ }
85
+ }
86
+ ngOnDestroy() {
87
+ // Restore focus to the previously focused element when the dialog is destroyed.
88
+ // Need to do this here and not in close() because cdkTrapFocusAutoCapture's re-focus happens in ngOnDestroy.
89
+ // This doesn't work for dialog implementations outside of the dialog service because ngOnDestroy isn't called when
90
+ // the dialog is closed in those cases.
91
+ if (this.previouslyFocusedElement) {
92
+ this.previouslyFocusedElement.focus();
93
+ }
94
+ }
95
+ /**
96
+ * Clear and previously loaded content
97
+ * Load the component
98
+ * Save a reference of the loaded component
99
+ * Show the dialog and fade in
100
+ */
101
+ async open(component, context, options) {
102
+ if (!this.isOpen) {
103
+ // Capture the currently focused element, also looking in the shadow dom. Focus is restored to this element once the dialog is
104
+ // destroyed. See ngOnDestroy(). We need to do this here in addition to the cdkTrapFocusAutoCapture because sometimes the dialog's
105
+ // content is drawn and grabs focus before the cdkTrapFocusAutoCapture is able to read the previously focused element.
106
+ const activeElement = this.documentRef?.activeElement;
107
+ this.previouslyFocusedElement = activeElement?.shadowRoot?.activeElement || activeElement;
108
+ if (options) {
109
+ if (options.alignToTop) {
110
+ this.alignToTop = true;
111
+ }
112
+ if (options.alignToTopMargin) {
113
+ this.alignToTopMargin = options.alignToTopMargin;
114
+ }
115
+ ;
116
+ if (options.displayAsPanel) {
117
+ this.displayAsPanel = true;
118
+ this.transparentMask = true;
119
+ }
120
+ if (options.transparentMask !== undefined) {
121
+ this.transparentMask = options.transparentMask;
122
+ }
123
+ if (options.noMask !== undefined) {
124
+ this.noMask = options.noMask;
125
+ }
126
+ if (options.canOpenDialog !== undefined) {
127
+ const canOpen = await options.canOpenDialog();
128
+ if (!canOpen) {
129
+ this.close(new DialogResult(false));
130
+ return;
131
+ }
132
+ }
133
+ }
134
+ // set the size before opening
135
+ if (typeof this.size === 'number') {
136
+ this.width = this.size;
137
+ }
138
+ else {
139
+ // Reset the width if the size is not a number. This is to prevent the width property conflicting with the size.
140
+ this.width = undefined;
141
+ }
142
+ this.minWidth = options?.minWidth;
143
+ this.fadeIn = true;
144
+ if (component instanceof TemplateRef) {
145
+ this.contentContainer.createEmbeddedView(component);
146
+ }
147
+ else {
148
+ let componentFactory = this.componentFactoryResolver.resolveComponentFactory(component);
149
+ this.componentRef = this.contentContainer.createComponent(componentFactory);
150
+ }
151
+ this.isOpen = true;
152
+ this.openDialogComponent(context);
153
+ // Once the animation is complete we can remove the animation class and
154
+ // emit the opened event, both to the hosting component and via DialogService
155
+ await lastValueFrom(timer(this.displayAsPanel ? PanelOpenDuration : DialogOpenDuration).pipe(take(1), tap(() => {
156
+ const dialogId = this.getDialogId();
157
+ this.fadeIn = false;
158
+ this.opened.emit(dialogId);
159
+ this.dialogService.triggerEvent(new DialogOpenEndEvent(this.dialogOpenStartEventId, dialogId));
160
+ })));
161
+ this.handleCloseOnResize();
162
+ }
163
+ }
164
+ /**
165
+ * Fade the dialog out and hide
166
+ */
167
+ close(result) {
168
+ this.fadeOut = true;
169
+ const dialogId = this.getDialogId(); //call before wiping out the content
170
+ // When the fade out animation is complete we will hide the dialog
171
+ // and remove the animation class as well as let the world know that
172
+ // we're closed so they can complete any other cleanup
173
+ setTimeout(() => {
174
+ this.isOpen = false;
175
+ this.fadeOut = false;
176
+ this.contentContainer?.clear();
177
+ this.componentRef = undefined;
178
+ this.closed.emit(result);
179
+ this.dialogService.triggerEvent(new DialogCloseEvent(this.dialogOpenStartEventId, dialogId, result?.save, result?.context));
180
+ this.resetOptions();
181
+ }, this.displayAsPanel ? PanelCloseDuration : DialogCloseDuration);
182
+ }
183
+ /**Open the dialog and attach handlers to the cancel and save events to close it and notify the hosting page */
184
+ openDialogComponent(context) {
185
+ if (this.componentRef && this.componentRef.instance) {
186
+ const dialogContent = this.componentRef.instance;
187
+ // OnOpen is optional - create dialogs don't necessarily define it
188
+ if (dialogContent.onOpen) {
189
+ dialogContent.onOpen(context);
190
+ }
191
+ dialogContent.onDialogCancel.pipe(takeUntil(this.closed)).subscribe(() => {
192
+ this.close(new DialogResult(false));
193
+ });
194
+ dialogContent.onDialogSave.pipe(takeUntil(this.closed)).subscribe(val => {
195
+ this.close(new DialogResult(true, val));
196
+ });
197
+ }
198
+ }
199
+ /**
200
+ * Reset options so they don't persist next time the
201
+ * root dialog is opened
202
+ * @deprecated
203
+ */
204
+ resetOptions() {
205
+ this.alignToTop = false;
206
+ this.displayAsPanel = false;
207
+ }
208
+ /** If they turned on closeOnResize, automatically close the dialog any time somebody resizes the window.
209
+ * This is useful for responsive layouts to prevent having the dialogContent on the screen twice */
210
+ handleCloseOnResize() {
211
+ if (this.options && this.options.closeOnResize) {
212
+ this.windowService.resized.pipe(takeUntil(this.closed), take(1)).subscribe(() => {
213
+ this.close(new DialogResult(false));
214
+ });
215
+ }
216
+ }
217
+ /**Extract the dialogId from the dialog content, if it has one. Template-based dialogs generally don't.
218
+ * We fall back to empty string to allow anybody listening for dialogEvents to still record the open/close even if
219
+ * the dialog itself does not say what the name is.
220
+ */
221
+ getDialogId() {
222
+ return this.componentRef?.instance.dialogId || '';
223
+ }
224
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogComponent, deps: [{ token: i0.ComponentFactoryResolver }, { token: i1.WindowService }, { token: i2.DialogService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component }); }
225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DialogComponent, selector: "ec-dialog", inputs: { size: "size", content: "content", context: "context", options: "options", dialogOpenStartEventId: "dialogOpenStartEventId" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "onOverlayClick($event)" }, properties: { "class": "dialogSizeClass", "style.--ec-dialog-width.px": "width", "class.is-open": "this.isOpen", "class.fade-in": "this.fadeIn", "class.fade-out": "this.fadeOut", "class.is-panel": "this.displayAsPanel", "class.is-top-aligned": "this.alignToTop", "style.--ec-dialog-margin-align-to-top": "this.alignToTopMargin", "class.is-transparent": "this.transparentMask", "class.no-mask": "this.noMask" } }, viewQueries: [{ propertyName: "contentContainer", first: true, predicate: ["content"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<article [style.min-width]="minWidth" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', isInline: true, styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-panel.no-mask{left:auto;width:var(--ec-dialog-width)}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:var(--ec-dialog-margin-align-to-top, 20vh);max-height:calc(100vh - var(--ec-dialog-margin-align-to-top, 20vh) - 5vh)}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw;width:var(--ec-dialog-width)}:host.dialog-xsmall{--ec-dialog-width: 20rem}:host.dialog-small{--ec-dialog-width: 30rem}:host.dialog-medium{--ec-dialog-width: 40rem}:host.dialog-large{--ec-dialog-width: 50rem}:host.dialog-xlarge{--ec-dialog-width: 60rem}:host.dialog-full{--ec-dialog-width: 90vw}\n"], dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }] }); }
226
+ }
227
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogComponent, decorators: [{
228
+ type: Component,
229
+ args: [{ selector: 'ec-dialog', template: '<article [style.min-width]="minWidth" cdkTrapFocus cdkTrapFocusAutoCapture><ng-template #content></ng-template></article>', host: {
230
+ '[class]': 'dialogSizeClass',
231
+ '[style.--ec-dialog-width.px]': 'width'
232
+ }, styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes panelMaskFadeIn{0%{background-color:transparent}to{background-color:var(--ec-dialog-background-color)}}:host{--ec-dialog-background-color: var(--ec-background-color-dialog);align-items:center;background-color:var(--ec-dialog-background-color);justify-content:center;position:fixed;z-index:var(--ec-z-index-dialog);inset:0;display:none}:host.is-open{display:flex}:host.fade-in{animation-name:fadeIn;animation-duration:125ms;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.fade-out{animation-name:fadeIn;animation-duration:.1s;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in-out}:host.is-panel article{position:absolute;top:0;bottom:0;right:0;max-height:none;border-right:0;border-top:0;border-bottom:0;border-radius:0;box-shadow:0 0 .5rem var(--ec-color-shadow)}:host.is-panel.fade-in{animation-name:panelMaskFadeIn;animation-duration:.25s;animation-fill-mode:forwards}:host.is-panel.fade-in article{animation-name:slideIn;animation-duration:.25s;animation-fill-mode:forwards;animation-timing-function:ease-out}:host.is-panel.fade-out{animation-name:panelMaskFadeIn;animation-direction:reverse;animation-fill-mode:forwards}:host.is-panel.fade-out article{animation-name:slideIn;animation-duration:225ms;animation-direction:reverse;animation-fill-mode:forwards;animation-timing-function:ease-in}:host.is-panel.no-mask{left:auto;width:var(--ec-dialog-width)}:host.is-top-aligned{align-items:flex-start}:host.is-top-aligned article{min-height:auto;margin-top:var(--ec-dialog-margin-align-to-top, 20vh);max-height:calc(100vh - var(--ec-dialog-margin-align-to-top, 20vh) - 5vh)}:host.is-transparent{--ec-dialog-background-color: transparent}article{background-color:var(--ec-background-color-body);background-clip:padding-box;box-shadow:0 0 .625rem #1a1a2333;border-radius:var(--ec-border-radius-dialog);overflow:hidden;display:flex;flex:none;min-height:9rem;max-height:90vh;max-width:90vw;width:var(--ec-dialog-width)}:host.dialog-xsmall{--ec-dialog-width: 20rem}:host.dialog-small{--ec-dialog-width: 30rem}:host.dialog-medium{--ec-dialog-width: 40rem}:host.dialog-large{--ec-dialog-width: 50rem}:host.dialog-xlarge{--ec-dialog-width: 60rem}:host.dialog-full{--ec-dialog-width: 90vw}\n"] }]
233
+ }], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i1.WindowService }, { type: i2.DialogService }, { type: Document, decorators: [{
234
+ type: Inject,
235
+ args: [DOCUMENT]
236
+ }] }], propDecorators: { isOpen: [{
237
+ type: HostBinding,
238
+ args: ['class.is-open']
239
+ }], fadeIn: [{
240
+ type: HostBinding,
241
+ args: ['class.fade-in']
242
+ }], fadeOut: [{
243
+ type: HostBinding,
244
+ args: ['class.fade-out']
245
+ }], displayAsPanel: [{
246
+ type: HostBinding,
247
+ args: ['class.is-panel']
248
+ }], alignToTop: [{
249
+ type: HostBinding,
250
+ args: ['class.is-top-aligned']
251
+ }], alignToTopMargin: [{
252
+ type: HostBinding,
253
+ args: ['style.--ec-dialog-margin-align-to-top']
254
+ }], transparentMask: [{
255
+ type: HostBinding,
256
+ args: ['class.is-transparent']
257
+ }], noMask: [{
258
+ type: HostBinding,
259
+ args: ['class.no-mask']
260
+ }], onOverlayClick: [{
261
+ type: HostListener,
262
+ args: ['click', ['$event']]
263
+ }], size: [{
264
+ type: Input
265
+ }], content: [{
266
+ type: Input
267
+ }], context: [{
268
+ type: Input
269
+ }], options: [{
270
+ type: Input
271
+ }], dialogOpenStartEventId: [{
272
+ type: Input
273
+ }], opened: [{
274
+ type: Output
275
+ }], closed: [{
276
+ type: Output
277
+ }], contentContainer: [{
278
+ type: ViewChild,
279
+ args: ['content', { read: ViewContainerRef, static: true }]
280
+ }] } });
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L2RpYWxvZy9kaWFsb2cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUEwQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFRLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xNLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBNkIsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRy9HLGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBVyxHQUFHLENBQUM7QUFDOUMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQVcsR0FBRyxDQUFDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFXLEdBQUcsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBVyxHQUFHLENBQUM7QUFXOUMsTUFBTSxPQUFPLGVBQWU7SUE2QmdCLGNBQWMsQ0FBQyxLQUFpQjtRQUN4RSxJQUFrQixLQUFLLENBQUMsTUFBTyxDQUFDLE9BQU8sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQy9FLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMs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QUEySCxRQUUvSDt3QkFDSixTQUFTLEVBQUUsaUJBQWlCO3dCQUM1Qiw4QkFBOEIsRUFBRSxPQUFPO3FCQUN4Qzs7MEJBZ0hFLE1BQU07MkJBQUMsUUFBUTt5Q0F6R21CLE1BQU07c0JBQTFDLFdBQVc7dUJBQUMsZUFBZTtnQkFNUyxNQUFNO3NCQUExQyxXQUFXO3VCQUFDLGVBQWU7Z0JBTVUsT0FBTztzQkFBNUMsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBRVMsY0FBYztzQkFBbkQsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBRWUsVUFBVTtzQkFBckQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBRTBCLGdCQUFnQjtzQkFBNUUsV0FBVzt1QkFBQyx1Q0FBdUM7Z0JBRVIsZUFBZTtzQkFBMUQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBRUUsTUFBTTtzQkFBMUMsV0FBVzt1QkFBQyxlQUFlO2dCQUVjLGNBQWM7c0JBQXZELFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVNiLElBQUk7c0JBQXZCLEtBQUs7Z0JBdUJHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQU9HLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFLVyxNQUFNO3NCQUF0QixNQUFNO2dCQUtVLE1BQU07c0JBQXRCLE1BQU07Z0JBS2dFLGdCQUFnQjtzQkFBdEYsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBUeXBlLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFRlbXBsYXRlUmVmLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGltZXIsIGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFdpbmRvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3dpbmRvdy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nQ29udGVudCB9IGZyb20gJy4vZGlhbG9nLWNvbnRlbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dPcGVuRW5kRXZlbnQsIERpYWxvZ0Nsb3NlRXZlbnQsIERpYWxvZ1NpemUsIERpYWxvZ09wdGlvbnMsIERpYWxvZ1Jlc3VsdCB9IGZyb20gJy4vZGlhbG9nLXR5cGVzJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4vZGlhbG9nLnNlcnZpY2UnO1xyXG5cclxuLyoqIFRoZXNlIHZhbHVlcyBuZWVkIHRvIGJlIGtlcHQgaW4gc3luYyB3aXRoIGRpYWxvZy1iYXNlLnNjc3MgKi9cclxuZXhwb3J0IGNvbnN0IERpYWxvZ09wZW5EdXJhdGlvbjogbnVtYmVyID0gMTI1O1xyXG5leHBvcnQgY29uc3QgRGlhbG9nQ2xvc2VEdXJhdGlvbjogbnVtYmVyID0gMTAwO1xyXG5leHBvcnQgY29uc3QgUGFuZWxPcGVuRHVyYXRpb246IG51bWJlciA9IDI1MDtcclxuZXhwb3J0IGNvbnN0IFBhbmVsQ2xvc2VEdXJhdGlvbjogbnVtYmVyID0gMjI1O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlOiAnPGFydGljbGUgW3N0eWxlLm1pbi13aWR0aF09XCJtaW5XaWR0aFwiIGNka1RyYXBGb2N1cyBjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZT48bmctdGVtcGxhdGUgI2NvbnRlbnQ+PC9uZy10ZW1wbGF0ZT48L2FydGljbGU+JyxcclxuICBzdHlsZVVybHM6IFsnLi9kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBob3N0OiB7XHJcbiAgICAnW2NsYXNzXSc6ICdkaWFsb2dTaXplQ2xhc3MnLFxyXG4gICAgJ1tzdHlsZS4tLWVjLWRpYWxvZy13aWR0aC5weF0nOiAnd2lkdGgnXHJcbiAgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nQ29tcG9uZW50IHtcclxuICAvKipcclxuICAgKiBBZGQvcmVtb3ZlIHRoZSBpcy1vcGVuIGNzcyBjbGFzcyB0byB0aGUgaG9zdCBlbGVtZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWQvY2xvc2VkLlxyXG4gICAqIFN0eWxlcyB1c2UgdGhlIGlzLW9wZW4gY2xhc3MgdG8gc2hvdy9oaWRlIHRoZSBkaWFsb2cuXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1vcGVuJykgcHVibGljIGlzT3BlbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIGZhZGUtaW4gY3NzIGNsYXNzIHRvIHRoZSBob3N0IGVsZW1lbnQgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW5pbmcuIFJlbW92ZSB3aGVuIHRyYW5zaXRpb24gaXMgY29tcGxldGUuXHJcbiAgICogU3R5bGVzIHVzZSB0aGUgZmFkZS1pbiBjbGFzcyB0byBhcHBseSBhIGZhZGUtaW4gdHJhbnNpdGlvbiB3aGlsZSB0aGUgZGlhbG9nIGlzIG9wZW5pbmcuXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mYWRlLWluJykgcHVibGljIGZhZGVJbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBBZGQgdGhlIGZhZGUtb3V0IGNzcyBjbGFzcyB0byB0aGUgaG9zdCBlbGVtZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zaW5nLiBSZW1vdmUgd2hlbiB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxyXG4gICAqIFN0eWxlcyB1c2UgdGhlIGZhZGUtb3V0IGNsYXNzIHRvIGFwcGx5IGEgZmFkZS1vdXQgdHJhbnNpdGlvbiB3aGlsZSB0aGUgZGlhbG9nIGlzIGNsb3NpbmcuXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mYWRlLW91dCcpIHB1YmxpYyBmYWRlT3V0ID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtcGFuZWwnKSBwdWJsaWMgZGlzcGxheUFzUGFuZWwgPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy10b3AtYWxpZ25lZCcpIHB1YmxpYyBhbGlnblRvVG9wID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUuLS1lYy1kaWFsb2ctbWFyZ2luLWFsaWduLXRvLXRvcCcpIHB1YmxpYyBhbGlnblRvVG9wTWFyZ2luPzogc3RyaW5nO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLXRyYW5zcGFyZW50JykgcHVibGljIHRyYW5zcGFyZW50TWFzayA9IGZhbHNlO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLm5vLW1hc2snKSBwdWJsaWMgbm9NYXNrID0gZmFsc2U7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgcHVibGljIG9uT3ZlcmxheUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLnRhZ05hbWUgPT09ICdFQy1ESUFMT0cnICYmIHRoaXMuZGlzcGxheUFzUGFuZWwpIHtcclxuICAgICAgdGhpcy5jbG9zZShuZXcgRGlhbG9nUmVzdWx0KGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgZGlhbG9nIChoZWlnaHQgaXMgYXV0bykuIENhbiBiZSBhIG51bWJlciB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIHBpeGVscywgb3IgeHNtYWxsKDMyMHB4KSwgc21hbGwoNDgwcHgpLCBtZWRpdW0oNjQwcHgpLCBvciBsYXJnZSgxMDI0cHgpXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNldCBzaXplKHZhbHVlOiBEaWFsb2dTaXplKSB7XHJcbiAgICB0aGlzLl9zaXplID0gdmFsdWU7XHJcbiAgICAvLyBJZiB0aGUgc2l6ZSBpcyBhIHN0cmluZywgc2V0IHRoZSBkaWFsb2cgY2xhc3MuIE90aGVyd2lzZSwgY2xlYXIgaXQuXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nU2l6ZUNsYXNzID0gYGRpYWxvZy0ke3ZhbHVlfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRpYWxvZ1NpemVDbGFzcyA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9O1xyXG4gIHB1YmxpYyBnZXQgc2l6ZSgpOiBEaWFsb2dTaXplIHtcclxuICAgIHJldHVybiB0aGlzLl9zaXplO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgZGlhbG9nIChoZWlnaHQgaXMgYXV0bykuIENhbiBiZSBhIG51bWJlciB0aGF0IHdpbGwgYmUgY29udmVydGVkIHRvIHBpeGVscywgb3IgeHNtYWxsKDMyMHB4KSwgc21hbGwoNDgwcHgpLCBtZWRpdW0oNjQwcHgpLCBvciBsYXJnZSgxMDI0cHgpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2l6ZTogRGlhbG9nU2l6ZSA9ICdzbWFsbCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJvdW5kIHRvIHRoZSBob3N0LiBUaGUgY2xhc3NlcyBzZXQgdGhlIC0tZWMtZGlhbG9nLXdpZHRoIHZhcmlhYmxlIHRvIG91ciBkZWZhdWx0ICdzbWFsbCcsICdtZWRpdW0nLCBldGMuIHNpemVzLlxyXG4gICAqIFVuZGVmaW5lZCB3aGVuIHRoZSBzaXplIGlzIGEgbnVtYmVyLCB3aGljaCBpcyB1c2VkIGZvciBjdXN0b20gc2l6ZXMuXHJcbiAgICovXHJcbiAgZGlhbG9nU2l6ZUNsYXNzPzogc3RyaW5nID0gYGRpYWxvZy0ke3RoaXMuX3NpemV9YDtcclxuXHJcbiAgQElucHV0KCkgY29udGVudD86IFR5cGU8RGlhbG9nQ29udGVudDxhbnk+PiB8IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgY29udGV4dD86IGFueTtcclxuICBASW5wdXQoKSBvcHRpb25zPzogRGlhbG9nT3B0aW9ucztcclxuXHJcbiAgLyoqT25seSBzZXQgaWYgdGhpcyBwYXJ0aWN1bGFyIGluc3RhbmNlIG9mIGEgZGlhbG9nIHNob3VsZCBiZSBpZGVudGlmaWVkIHNlcGFyYXRlbHkgZnJvbSBvdGhlcnMuXHJcbiAgICogSWYgcHJvdmlkZWQsIHRoaXMgaXMgZW1pdHRlZCB0byB0aGUgZGlhbG9nIHNlcnZpY2Ugd2l0aCBPcGVuRW5kIGFuZCBDbG9zZSBldmVudHMuIERpcmVjdCB1c2FnZVxyXG4gICAqIG9mIHRoZSBEaWFsb2dDb21wb25lbnQgZnJvbSBvdXRzaWRlIGEgRGlhbG9nR3JvdXAgZG9lcyBub3QgdXN1YWxseSByZXF1aXJlIHVzaW5nIHRoaXMgcGFyYW1ldGVyIGFzXHJcbiAgICogdGhlIGRpYWxvZyByZWZlcmVuY2UgaXRzZWxmIGZ1bmN0aW9ucyBhcyB0aGUgaWRlbnRpZmllclxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRpYWxvZ09wZW5TdGFydEV2ZW50SWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBvcGVuZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHVibGljIG9wZW5lZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgcHVibGljIGNsb3NlZDogRXZlbnRFbWl0dGVyPERpYWxvZ1Jlc3VsdDxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGNvbnRhaW5lciB3aGVyZSB0aGUgY29tcG9uZW50IHdpbGwgYmUgbG9hZGVkXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnY29udGVudCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBjb250ZW50Q29udGFpbmVyITogVmlld0NvbnRhaW5lclJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ3VzdG9tIHdpZHRoIG9mIHRoZSBkaWFsb2cgaW4gcGl4ZWxzLiBTZXQgYnkgZGVmaW5pbmcgdGhlIHNpemUgcHJvcGVydHlcclxuICAgKiBhcyBhIG51bWJlciB2YWx1ZS5cclxuICAgKi9cclxuICBwdWJsaWMgd2lkdGg/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEN1c3RvbSBtaW4td2lkdGggb2YgdGhlIGRpYWxvZy4gT25seSB0YWtlcyBlZmZlY3QgaWYgc2l6ZSBpcyBzZXQgdG8gZHluYW1pYy5cclxuICAgKiBNdXN0IGluY2x1ZGUgdW5pdHMsIGkuZS4gXCIzMnJlbVwiIG9yIFwiNjQwcHhcIlxyXG4gICAqL1xyXG4gIHB1YmxpYyBtaW5XaWR0aD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQSByZWZlcmVuY2Ugb2YgdGhlIGNvbXBvbmVudCBvbmNlIGl0IGhhcyBiZWVuIGxvYWRlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBjb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgd2luZG93U2VydmljZTogV2luZG93U2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnRSZWY6IERvY3VtZW50XHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50KSB7XHJcbiAgICAgIHRoaXMub3Blbih0aGlzLmNvbnRlbnQsIHRoaXMuY29udGV4dCwgdGhpcy5vcHRpb25zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy8gUmVzdG9yZSBmb2N1cyB0byB0aGUgcHJldmlvdXNseSBmb2N1c2VkIGVsZW1lbnQgd2hlbiB0aGUgZGlhbG9nIGlzIGRlc3Ryb3llZC5cclxuICAgIC8vIE5lZWQgdG8gZG8gdGhpcyBoZXJlIGFuZCBub3QgaW4gY2xvc2UoKSBiZWNhdXNlIGNka1RyYXBGb2N1c0F1dG9DYXB0dXJlJ3MgcmUtZm9jdXMgaGFwcGVucyBpbiBuZ09uRGVzdHJveS5cclxuICAgIC8vIFRoaXMgZG9lc24ndCB3b3JrIGZvciBkaWFsb2cgaW1wbGVtZW50YXRpb25zIG91dHNpZGUgb2YgdGhlIGRpYWxvZyBzZXJ2aWNlIGJlY2F1c2UgbmdPbkRlc3Ryb3kgaXNuJ3QgY2FsbGVkIHdoZW5cclxuICAgIC8vIHRoZSBkaWFsb2cgaXMgY2xvc2VkIGluIHRob3NlIGNhc2VzLlxyXG4gICAgaWYgKHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNseUZvY3VzZWRFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBhbmQgcHJldmlvdXNseSBsb2FkZWQgY29udGVudFxyXG4gICAqIExvYWQgdGhlIGNvbXBvbmVudFxyXG4gICAqIFNhdmUgYSByZWZlcmVuY2Ugb2YgdGhlIGxvYWRlZCBjb21wb25lbnRcclxuICAgKiBTaG93IHRoZSBkaWFsb2cgYW5kIGZhZGUgaW5cclxuICAgKi9cclxuICBwdWJsaWMgYXN5bmMgb3BlbjxUPihjb21wb25lbnQ6IFR5cGU8RGlhbG9nQ29udGVudDxUPj4gfCBUZW1wbGF0ZVJlZjxhbnk+LCBjb250ZXh0PzogVCwgb3B0aW9ucz86IERpYWxvZ09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5pc09wZW4pIHtcclxuICAgICAgXHJcbiAgICAgIC8vIENhcHR1cmUgdGhlIGN1cnJlbnRseSBmb2N1c2VkIGVsZW1lbnQsIGFsc28gbG9va2luZyBpbiB0aGUgc2hhZG93IGRvbS4gRm9jdXMgaXMgcmVzdG9yZWQgdG8gdGhpcyBlbGVtZW50IG9uY2UgdGhlIGRpYWxvZyBpc1xyXG4gICAgICAvLyBkZXN0cm95ZWQuIFNlZSBuZ09uRGVzdHJveSgpLiBXZSBuZWVkIHRvIGRvIHRoaXMgaGVyZSBpbiBhZGRpdGlvbiB0byB0aGUgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUgYmVjYXVzZSBzb21ldGltZXMgdGhlIGRpYWxvZydzXHJcbiAgICAgIC8vIGNvbnRlbnQgaXMgZHJhd24gYW5kIGdyYWJzIGZvY3VzIGJlZm9yZSB0aGUgY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUgaXMgYWJsZSB0byByZWFkIHRoZSBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudC5cclxuICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IDxIVE1MRWxlbWVudCB8IG51bGw+dGhpcy5kb2N1bWVudFJlZj8uYWN0aXZlRWxlbWVudDtcclxuICAgICAgdGhpcy5wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+YWN0aXZlRWxlbWVudD8uc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCB8fCBhY3RpdmVFbGVtZW50O1xyXG5cclxuICAgICAgaWYgKG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAob3B0aW9ucy5hbGlnblRvVG9wKSB7XHJcbiAgICAgICAgICB0aGlzLmFsaWduVG9Ub3AgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxpZ25Ub1RvcE1hcmdpbikge1xyXG4gICAgICAgICAgdGhpcy5hbGlnblRvVG9wTWFyZ2luID0gb3B0aW9ucy5hbGlnblRvVG9wTWFyZ2luO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLmRpc3BsYXlBc1BhbmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlBc1BhbmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRNYXNrID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChvcHRpb25zLnRyYW5zcGFyZW50TWFzayAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50TWFzayA9IG9wdGlvbnMudHJhbnNwYXJlbnRNYXNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG9wdGlvbnMubm9NYXNrICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMubm9NYXNrID0gb3B0aW9ucy5ub01hc2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAob3B0aW9ucy5jYW5PcGVuRGlhbG9nICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGNhbk9wZW4gPSBhd2FpdCBvcHRpb25zLmNhbk9wZW5EaWFsb2coKTtcclxuICAgICAgICAgIGlmICghY2FuT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlKG5ldyBEaWFsb2dSZXN1bHQoZmFsc2UpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gc2V0IHRoZSBzaXplIGJlZm9yZSBvcGVuaW5nXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5zaXplID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIHRoaXMud2lkdGggPSB0aGlzLnNpemU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gUmVzZXQgdGhlIHdpZHRoIGlmIHRoZSBzaXplIGlzIG5vdCBhIG51bWJlci4gVGhpcyBpcyB0byBwcmV2ZW50IHRoZSB3aWR0aCBwcm9wZXJ0eSBjb25mbGljdGluZyB3aXRoIHRoZSBzaXplLlxyXG4gICAgICAgIHRoaXMud2lkdGggPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubWluV2lkdGggPSBvcHRpb25zPy5taW5XaWR0aDtcclxuXHJcbiAgICAgIHRoaXMuZmFkZUluID0gdHJ1ZTtcclxuICAgICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XHJcbiAgICAgICAgdGhpcy5jb250ZW50Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhjb21wb25lbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50KTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMuY29udGVudENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMub3BlbkRpYWxvZ0NvbXBvbmVudDxUPihjb250ZXh0KTtcclxuXHJcbiAgICAgIC8vIE9uY2UgdGhlIGFuaW1hdGlvbiBpcyBjb21wbGV0ZSB3ZSBjYW4gcmVtb3ZlIHRoZSBhbmltYXRpb24gY2xhc3MgYW5kXHJcbiAgICAgIC8vIGVtaXQgdGhlIG9wZW5lZCBldmVudCwgYm90aCB0byB0aGUgaG9zdGluZyBjb21wb25lbnQgYW5kIHZpYSBEaWFsb2dTZXJ2aWNlXHJcbiAgICAgIGF3YWl0IGxhc3RWYWx1ZUZyb20odGltZXIodGhpcy5kaXNwbGF5QXNQYW5lbCA/IFBhbmVsT3BlbkR1cmF0aW9uIDogRGlhbG9nT3BlbkR1cmF0aW9uKS5waXBlKHRha2UoMSksIHRhcCgoKSA9PiB7XHJcbiAgICBjb25zdCBkaWFsb2dJZCA9IHRoaXMuZ2V0RGlhbG9nSWQoKTtcclxuICAgIHRoaXMuZmFkZUluID0gZmFsc2U7XHJcbiAgICB0aGlzLm9wZW5lZC5lbWl0KGRpYWxvZ0lkKTtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS50cmlnZ2VyRXZlbnQobmV3IERpYWxvZ09wZW5FbmRFdmVudCh0aGlzLmRpYWxvZ09wZW5TdGFydEV2ZW50SWQsIGRpYWxvZ0lkKSk7XHJcbn0pKSk7XHJcblxyXG4gICAgICB0aGlzLmhhbmRsZUNsb3NlT25SZXNpemUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZhZGUgdGhlIGRpYWxvZyBvdXQgYW5kIGhpZGVcclxuICAgKi9cclxuICBwdWJsaWMgY2xvc2U8VD4ocmVzdWx0PzogRGlhbG9nUmVzdWx0PFQ+KTogdm9pZCB7XHJcbiAgICB0aGlzLmZhZGVPdXQgPSB0cnVlO1xyXG4gICAgY29uc3QgZGlhbG9nSWQgPSB0aGlzLmdldERpYWxvZ0lkKCk7ICAvL2NhbGwgYmVmb3JlIHdpcGluZyBvdXQgdGhlIGNvbnRlbnRcclxuXHJcbiAgICAvLyBXaGVuIHRoZSBmYWRlIG91dCBhbmltYXRpb24gaXMgY29tcGxldGUgd2Ugd2lsbCBoaWRlIHRoZSBkaWFsb2dcclxuICAgIC8vIGFuZCByZW1vdmUgdGhlIGFuaW1hdGlvbiBjbGFzcyBhcyB3ZWxsIGFzIGxldCB0aGUgd29ybGQga25vdyB0aGF0XHJcbiAgICAvLyB3ZSdyZSBjbG9zZWQgc28gdGhleSBjYW4gY29tcGxldGUgYW55IG90aGVyIGNsZWFudXBcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZhZGVPdXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jb250ZW50Q29udGFpbmVyPy5jbGVhcigpO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5jbG9zZWQuZW1pdChyZXN1bHQpO1xyXG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudHJpZ2dlckV2ZW50KG5ldyBEaWFsb2dDbG9zZUV2ZW50KHRoaXMuZGlhbG9nT3BlblN0YXJ0RXZlbnRJZCwgZGlhbG9nSWQsIHJlc3VsdD8uc2F2ZSwgcmVzdWx0Py5jb250ZXh0KSk7XHJcbiAgICAgIHRoaXMucmVzZXRPcHRpb25zKCk7XHJcbiAgICB9LCB0aGlzLmRpc3BsYXlBc1BhbmVsID8gUGFuZWxDbG9zZUR1cmF0aW9uIDogRGlhbG9nQ2xvc2VEdXJhdGlvbilcclxuICB9XHJcblxyXG4gIC8qKk9wZW4gdGhlIGRpYWxvZyBhbmQgYXR0YWNoIGhhbmRsZXJzIHRvIHRoZSBjYW5jZWwgYW5kIHNhdmUgZXZlbnRzIHRvIGNsb3NlIGl0IGFuZCBub3RpZnkgdGhlIGhvc3RpbmcgcGFnZSAqL1xyXG4gIHByaXZhdGUgb3BlbkRpYWxvZ0NvbXBvbmVudDxUPihjb250ZXh0PzogVCkge1xyXG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICYmIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlKSB7XHJcbiAgICAgIGNvbnN0IGRpYWxvZ0NvbnRlbnQgPSB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBEaWFsb2dDb250ZW50PFQ+O1xyXG5cclxuICAgICAgLy8gT25PcGVuIGlzIG9wdGlvbmFsIC0gY3JlYXRlIGRpYWxvZ3MgZG9uJ3QgbmVjZXNzYXJpbHkgZGVmaW5lIGl0XHJcbiAgICAgIGlmIChkaWFsb2dDb250ZW50Lm9uT3Blbikge1xyXG4gICAgICAgIGRpYWxvZ0NvbnRlbnQub25PcGVuKGNvbnRleHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBkaWFsb2dDb250ZW50Lm9uRGlhbG9nQ2FuY2VsLnBpcGUodGFrZVVudGlsKHRoaXMuY2xvc2VkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNsb3NlPFQ+KG5ldyBEaWFsb2dSZXN1bHQ8VD4oZmFsc2UpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBkaWFsb2dDb250ZW50Lm9uRGlhbG9nU2F2ZS5waXBlKHRha2VVbnRpbCh0aGlzLmNsb3NlZCkpLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2U8VD4obmV3IERpYWxvZ1Jlc3VsdDxUPih0cnVlLCB2YWwpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCBvcHRpb25zIHNvIHRoZXkgZG9uJ3QgcGVyc2lzdCBuZXh0IHRpbWUgdGhlXHJcbiAgICogcm9vdCBkaWFsb2cgaXMgb3BlbmVkXHJcbiAgICogQGRlcHJlY2F0ZWRcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2V0T3B0aW9ucygpIHtcclxuICAgIHRoaXMuYWxpZ25Ub1RvcCA9IGZhbHNlO1xyXG4gICAgdGhpcy5kaXNwbGF5QXNQYW5lbCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIElmIHRoZXkgdHVybmVkIG9uIGNsb3NlT25SZXNpemUsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIGRpYWxvZyBhbnkgdGltZSBzb21lYm9keSByZXNpemVzIHRoZSB3aW5kb3cuXHJcbiAgICAqIFRoaXMgaXMgdXNlZnVsIGZvciByZXNwb25zaXZlIGxheW91dHMgdG8gcHJldmVudCBoYXZpbmcgdGhlIGRpYWxvZ0NvbnRlbnQgb24gdGhlIHNjcmVlbiB0d2ljZSAqL1xyXG4gIHByaXZhdGUgaGFuZGxlQ2xvc2VPblJlc2l6ZSgpIHtcclxuICAgIGlmKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuY2xvc2VPblJlc2l6ZSl7XHJcbiAgICAgIHRoaXMud2luZG93U2VydmljZS5yZXNpemVkIS5waXBlKHRha2VVbnRpbCh0aGlzLmNsb3NlZCksIHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbG9zZShuZXcgRGlhbG9nUmVzdWx0KGZhbHNlKSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqRXh0cmFjdCB0aGUgZGlhbG9nSWQgZnJvbSB0aGUgZGlhbG9nIGNvbnRlbnQsIGlmIGl0IGhhcyBvbmUuIFRlbXBsYXRlLWJhc2VkIGRpYWxvZ3MgZ2VuZXJhbGx5IGRvbid0LlxyXG4gICAqIFdlIGZhbGwgYmFjayB0byBlbXB0eSBzdHJpbmcgdG8gYWxsb3cgYW55Ym9keSBsaXN0ZW5pbmcgZm9yIGRpYWxvZ0V2ZW50cyB0byBzdGlsbCByZWNvcmQgdGhlIG9wZW4vY2xvc2UgZXZlbiBpZlxyXG4gICAqIHRoZSBkaWFsb2cgaXRzZWxmIGRvZXMgbm90IHNheSB3aGF0IHRoZSBuYW1lIGlzLiBcclxuICAgKi9cclxuICBwcml2YXRlIGdldERpYWxvZ0lkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmPy5pbnN0YW5jZS5kaWFsb2dJZCB8fCAnJztcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,71 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { map, skipWhile, take } from 'rxjs/operators';
4
+ import { ConfirmComponent } from '../confirm/confirm.component';
5
+ import { DialogCloseEvent, DialogCloseLatestEvent, DialogOpenStartEvent } from './dialog-types';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Service used to communcate with ng5 dialogs from an ng1 view. Any dialogs that
9
+ * have been added to ng1 views must be added to the DialogCatalog in order
10
+ * to know which component to load inside the dialog. You can also optionally subscribe
11
+ * to an onClose event to do some work after the dialog closes
12
+ */
13
+ export class DialogService {
14
+ constructor() {
15
+ /**
16
+ * Emits DialogEvents when the dialog opens or closes.
17
+ */
18
+ this.events = new Subject();
19
+ }
20
+ /**
21
+ * Open the root dialog.
22
+ * @param content - The component class to load into the dialog
23
+ * @param size - The size of the dialog
24
+ * @param context - optional context to pass to the dialog content during initialization.
25
+ * @param options - extra options to configure the dialog
26
+ * @returns Observable of a typed DialogResult which specifies if the dialog was saved and an optional context.
27
+ * @example
28
+ // From typescript
29
+ try {
30
+ const result = await lastValueFrom(this.dialogService.openDialog(MyComponent, 'small', myContext, options));
31
+ // do something with result
32
+ } catch(error) {
33
+ // do something with error
34
+ }
35
+ */
36
+ openDialog(content, size, context, options) {
37
+ options = options || {};
38
+ options.size = size;
39
+ const event = new DialogOpenStartEvent(content, context, options);
40
+ const complete = this.events.pipe(skipWhile(e => !(e instanceof DialogCloseEvent) || e.eventId !== event.eventId), map(e => e.dialogResult), take(1) //mark the observable as complete as soon as any closeEvent happens for this particular dialogOpen event, allowing lastValueFrom to work
41
+ );
42
+ this.triggerEvent(event);
43
+ return complete;
44
+ }
45
+ /**Close whatever dialog was most recently opened, with the provided result.
46
+ * The result must be in a form the caller can expect (must match the dialog) so use this carefully
47
+ * if you are returning any result other than cancel. It is most useful if you are opening
48
+ * a dialog with a template reference instead of a true dialog child component
49
+ */
50
+ closeLatestDialog(result) {
51
+ this.triggerEvent(new DialogCloseLatestEvent(result));
52
+ }
53
+ /**
54
+ * Open a Confirmation Dialog with the given context
55
+ */
56
+ confirm(context) {
57
+ return this.openDialog(ConfirmComponent, 'small', context);
58
+ }
59
+ triggerEvent(event) {
60
+ this.events.next(event);
61
+ }
62
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
63
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogService, providedIn: 'root' }); }
64
+ }
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DialogService, decorators: [{
66
+ type: Injectable,
67
+ args: [{
68
+ providedIn: 'root'
69
+ }]
70
+ }] });
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9kaWFsb2cvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQXdCLE1BQU0sOEJBQThCLENBQUM7QUFFdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFlLG9CQUFvQixFQUEyQyxNQUFNLGdCQUFnQixDQUFDOztBQUV0Sjs7Ozs7R0FLRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBSDFCO1FBSUU7O1dBRUc7UUFDSSxXQUFNLEdBQTRCLElBQUksT0FBTyxFQUFFLENBQUM7S0FxRHhEO0lBbkRDOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNJLFVBQVUsQ0FBSSxPQUFrRCxFQUFFLElBQWdCLEVBQUUsT0FBVyxFQUFFLE9BQXVCO1FBQzdILE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRXBCLE1BQU0sS0FBSyxHQUFHLElBQUksb0JBQW9CLENBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDL0IsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUMvRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxDQUF5QixDQUFDLFlBQWEsQ0FBQyxFQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsd0lBQXdJO1NBQ2pKLENBQUE7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUksTUFBdUI7UUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTyxDQUFDLE9BQTZCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUFrQjtRQUNuQyxJQUFJLENBQUMsTUFBK0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQzsrR0F4RFUsYUFBYTttSEFBYixhQUFhLGNBRlosTUFBTTs7NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUZW1wbGF0ZVJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgc2tpcFdoaWxlLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25maXJtQ29tcG9uZW50LCBDb25maXJtRGlhbG9nQ29udGV4dCB9IGZyb20gJy4uL2NvbmZpcm0vY29uZmlybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dDb250ZW50IH0gZnJvbSAnLi9kaWFsb2ctY29udGVudCc7XHJcbmltcG9ydCB7IERpYWxvZ0Nsb3NlRXZlbnQsIERpYWxvZ0Nsb3NlTGF0ZXN0RXZlbnQsIERpYWxvZ0V2ZW50LCBEaWFsb2dPcGVuU3RhcnRFdmVudCwgRGlhbG9nT3B0aW9ucywgRGlhbG9nUmVzdWx0LCBEaWFsb2dTaXplIH0gZnJvbSAnLi9kaWFsb2ctdHlwZXMnO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgdXNlZCB0byBjb21tdW5jYXRlIHdpdGggbmc1IGRpYWxvZ3MgZnJvbSBhbiBuZzEgdmlldy4gQW55IGRpYWxvZ3MgdGhhdFxyXG4gKiBoYXZlIGJlZW4gYWRkZWQgdG8gbmcxIHZpZXdzIG11c3QgYmUgYWRkZWQgdG8gdGhlIERpYWxvZ0NhdGFsb2cgaW4gb3JkZXJcclxuICogdG8ga25vdyB3aGljaCBjb21wb25lbnQgdG8gbG9hZCBpbnNpZGUgdGhlIGRpYWxvZy4gWW91IGNhbiBhbHNvIG9wdGlvbmFsbHkgc3Vic2NyaWJlXHJcbiAqIHRvIGFuIG9uQ2xvc2UgZXZlbnQgdG8gZG8gc29tZSB3b3JrIGFmdGVyIHRoZSBkaWFsb2cgY2xvc2VzXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiBFbWl0cyBEaWFsb2dFdmVudHMgd2hlbiB0aGUgZGlhbG9nIG9wZW5zIG9yIGNsb3Nlcy5cclxuICAgKi9cclxuICBwdWJsaWMgZXZlbnRzOiBPYnNlcnZhYmxlPERpYWxvZ0V2ZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gdGhlIHJvb3QgZGlhbG9nLlxyXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbXBvbmVudCBjbGFzcyB0byBsb2FkIGludG8gdGhlIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBzaXplIC0gVGhlIHNpemUgb2YgdGhlIGRpYWxvZ1xyXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gb3B0aW9uYWwgY29udGV4dCB0byBwYXNzIHRvIHRoZSBkaWFsb2cgY29udGVudCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXHJcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBleHRyYSBvcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgZGlhbG9nXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiBhIHR5cGVkIERpYWxvZ1Jlc3VsdCB3aGljaCBzcGVjaWZpZXMgaWYgdGhlIGRpYWxvZyB3YXMgc2F2ZWQgYW5kIGFuIG9wdGlvbmFsIGNvbnRleHQuXHJcbiAgICogQGV4YW1wbGVcclxuICAgICAgLy8gRnJvbSB0eXBlc2NyaXB0XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbGFzdFZhbHVlRnJvbSh0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkRpYWxvZyhNeUNvbXBvbmVudCwgJ3NtYWxsJywgbXlDb250ZXh0LCBvcHRpb25zKSk7XHJcbiAgICAgICAgLy8gZG8gc29tZXRoaW5nIHdpdGggcmVzdWx0XHJcbiAgICAgIH0gY2F0Y2goZXJyb3IpIHtcclxuICAgICAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCBlcnJvclxyXG4gICAgICB9XHJcbiAgICovXHJcbiAgcHVibGljIG9wZW5EaWFsb2c8VD4oY29udGVudDogVHlwZTxEaWFsb2dDb250ZW50PFQ+PiB8IFRlbXBsYXRlUmVmPGFueT4sIHNpemU6IERpYWxvZ1NpemUsIGNvbnRleHQ/OiBULCBvcHRpb25zPzogRGlhbG9nT3B0aW9ucyk6IE9ic2VydmFibGU8RGlhbG9nUmVzdWx0PFQ+PiB7XHJcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIG9wdGlvbnMuc2l6ZSA9IHNpemU7XHJcblxyXG4gICAgY29uc3QgZXZlbnQgPSBuZXcgRGlhbG9nT3BlblN0YXJ0RXZlbnQ8VD4oY29udGVudCwgY29udGV4dCwgb3B0aW9ucyk7XHJcbiAgICBcclxuICAgIGNvbnN0IGNvbXBsZXRlID0gdGhpcy5ldmVudHMucGlwZShcclxuICAgICAgc2tpcFdoaWxlKGUgPT4gIShlIGluc3RhbmNlb2YgRGlhbG9nQ2xvc2VFdmVudCkgfHwgZS5ldmVudElkICE9PSBldmVudC5ldmVudElkKSxcclxuICAgICAgbWFwKGUgPT4gKGUgYXMgRGlhbG9nQ2xvc2VFdmVudDxUPikuZGlhbG9nUmVzdWx0ISksXHJcbiAgICAgIHRha2UoMSkgLy9tYXJrIHRoZSBvYnNlcnZhYmxlIGFzIGNvbXBsZXRlIGFzIHNvb24gYXMgYW55IGNsb3NlRXZlbnQgaGFwcGVucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGRpYWxvZ09wZW4gZXZlbnQsIGFsbG93aW5nIGxhc3RWYWx1ZUZyb20gdG8gd29ya1xyXG4gICAgKVxyXG4gICAgICBcclxuICAgIHRoaXMudHJpZ2dlckV2ZW50KGV2ZW50KTtcclxuICAgIHJldHVybiBjb21wbGV0ZTtcclxuICB9XHJcblxyXG4gIC8qKkNsb3NlIHdoYXRldmVyIGRpYWxvZyB3YXMgbW9zdCByZWNlbnRseSBvcGVuZWQsIHdpdGggdGhlIHByb3ZpZGVkIHJlc3VsdC5cclxuICAgKiBUaGUgcmVzdWx0IG11c3QgYmUgaW4gYSBmb3JtIHRoZSBjYWxsZXIgY2FuIGV4cGVjdCAobXVzdCBtYXRjaCB0aGUgZGlhbG9nKSBzbyB1c2UgdGhpcyBjYXJlZnVsbHlcclxuICAgKiBpZiB5b3UgYXJlIHJldHVybmluZyBhbnkgcmVzdWx0IG90aGVyIHRoYW4gY2FuY2VsLiBJdCBpcyBtb3N0IHVzZWZ1bCBpZiB5b3UgYXJlIG9wZW5pbmdcclxuICAgKiBhIGRpYWxvZyB3aXRoIGEgdGVtcGxhdGUgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSB0cnVlIGRpYWxvZyBjaGlsZCBjb21wb25lbnRcclxuICAgKi9cclxuICBwdWJsaWMgY2xvc2VMYXRlc3REaWFsb2c8VD4ocmVzdWx0OiBEaWFsb2dSZXN1bHQ8VD4pe1xyXG4gICAgdGhpcy50cmlnZ2VyRXZlbnQobmV3IERpYWxvZ0Nsb3NlTGF0ZXN0RXZlbnQocmVzdWx0KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGEgQ29uZmlybWF0aW9uIERpYWxvZyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0XHJcbiAgICovXHJcbiAgcHVibGljIGNvbmZpcm0oY29udGV4dDogQ29uZmlybURpYWxvZ0NvbnRleHQpOiBPYnNlcnZhYmxlPERpYWxvZ1Jlc3VsdDxDb25maXJtRGlhbG9nQ29udGV4dD4+IHtcclxuICAgIHJldHVybiB0aGlzLm9wZW5EaWFsb2coQ29uZmlybUNvbXBvbmVudCwgJ3NtYWxsJywgY29udGV4dCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJpZ2dlckV2ZW50KGV2ZW50OiBEaWFsb2dFdmVudCkge1xyXG4gICAgKHRoaXMuZXZlbnRzIGFzIFN1YmplY3Q8RGlhbG9nRXZlbnQ+KS5uZXh0KGV2ZW50KTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L2hlbHAvaGVscC10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgSGVscCA9IHtcclxuICBjb250cm9sczogSGVscENvbnRyb2xbXSxcclxuICBvdmVydmlldz86IHN0cmluZyxcclxuICBhbHdheXNWaXNpYmxlPzogYm9vbGVhbixcclxuICBpZ25vcmVVc2VyU2V0dGluZz86IGJvb2xlYW5cclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIGZvcm0gY29udHJvbCBpbiB0aGUgY3VycmVudCB2aWV3IHRvIGRlZmluZSBpbiB0aGUgaGVscCBwYW5lbFxyXG4gKi9cclxuIGV4cG9ydCB0eXBlIEhlbHBDb250cm9sID0ge1xyXG4gIC8qKlxyXG4gICAqIFRoZSBjb250cm9scyBpZFxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgaWQ6IHN0cmluZyxcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGZvcm0gY29udHJvbCBpZHMgdG8gbWF0Y2ggdGhpcyBoZWxwIGNvbnRyb2xcclxuICAgKiBJZiB0aGlzIGFycmF5IGlzIGRlZmluZWQgdGhlIGlkJ3Mgd2l0aGluIHRoaXMgd2lsbCB0YWtlIHByZWNpZGVuY2Ugb3ZlciB0aGVcclxuICAgKiBpZCBvZiB0aGUgaGVscCBjb250cm9sIHdoZW4gdHJ5aW5nIHRvIG1hdGNoIHVwIGEgY29udHJvbFxyXG4gICAqIEB0eXBlIHtzdHJpbmdbXX1cclxuICAgKi9cclxuICBpZEdyb3VwPzogQXJyYXk8c3RyaW5nPixcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRyb2xcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGxhYmVsOiBzdHJpbmcsXHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBkZWZpbml0aW9uIGZvciB0aGUgY29udHJvbFxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZGVmaW5pdGlvbjogc3RyaW5nXHJcbn07XHJcbiJdfQ==
@@ -0,0 +1,111 @@
1
+ import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { TelemetryService } from '../../core/telemetry.service';
4
+ import * as i0 from "@angular/core";
5
+ export class HierarchyItem {
6
+ constructor() {
7
+ this.id = '';
8
+ /** Label to display for the item */
9
+ this.label = '';
10
+ /** Indicates how many levels deep the item is in the parent structure */
11
+ this.level = 0;
12
+ /** Display item as a link, a heading, or with a divider line below it */
13
+ this.display = 'default';
14
+ /** Set to hide toggle, even if item has children */
15
+ this.hideToggle = false;
16
+ /** Flag to indicate whether the item has children or not, mostly drives
17
+ * whether you get the expand/collapse button
18
+ */
19
+ this.hasChildren = false;
20
+ /** Array of children if any for the item */
21
+ this.children = [];
22
+ /** Flag to indicate if the item has been expanded */
23
+ this.expanded = false;
24
+ /** Flag to indicate if the item is selected */
25
+ this.selected = false;
26
+ /** Flag to indicate if the item can be selected */
27
+ this.selectable = false;
28
+ this.readonly = false;
29
+ /** Status of each item to indicate whether children lookup is pending or
30
+ * if an error occurred retrieving data
31
+ */
32
+ this.status = "hasData";
33
+ /** Indicates if the item is a top level entity, e.g. Organization or Cost Center */
34
+ this.topLevel = false;
35
+ /**
36
+ * When checking the url for activeness, the url must match exactly or partially
37
+ * @see https://angular.io/guide/router#active-router-links
38
+ */
39
+ this.isActiveExactMatch = true;
40
+ }
41
+ }
42
+ export class HierarchyBase {
43
+ get destroyed() {
44
+ return this._destroyed;
45
+ }
46
+ constructor(injector) {
47
+ /** Event emitter to request children for a given item */
48
+ this.getItemChildren = new EventEmitter();
49
+ /** Event emitted when an item is toggled. */
50
+ this.itemToggled = new EventEmitter();
51
+ /**
52
+ * Used to unsubscribe from observables
53
+ */
54
+ this._destroyed = new Subject();
55
+ this.telemetryService = injector.get(TelemetryService);
56
+ }
57
+ ngOnChanges(changes) {
58
+ if (changes && changes.rootNode && changes.rootNode.currentValue) {
59
+ /** If the rootNode has children and we don't know about them yet we must be loading
60
+ * the view without the new hierarchy api
61
+ */
62
+ if (this.rootNode.hasChildren && this.rootNode.children.length === 0) {
63
+ this.getItemChildren.emit(this.rootNode);
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Function called when the component is destroyed
69
+ */
70
+ ngOnDestroy() {
71
+ this.destroyed.next();
72
+ this.destroyed.unsubscribe();
73
+ }
74
+ /** Handler for the toggle button */
75
+ toggleItemClicked(item, expanded) {
76
+ item.expanded = expanded;
77
+ this.telemetryService.trackEvent('toggle-tree-node', {
78
+ newExpandState: item.expanded ? 'expanded' : 'collapsed',
79
+ itemDepth: `${item.level}`,
80
+ });
81
+ this.itemToggled.emit({ item, expanded });
82
+ if (item.expanded && item.hasChildren && item.children.length === 0) {
83
+ item.status = "pending";
84
+ this.getItemChildren.emit(item);
85
+ }
86
+ }
87
+ /** Method exposed to the parent component to set the items children once they are available
88
+ */
89
+ setItemChildren(parentItem, items) {
90
+ parentItem.children = items;
91
+ parentItem.status = "hasData";
92
+ }
93
+ /** Method exposed to the parent component to indicate that something happened on the
94
+ * item that caused an error, could be retrieving children
95
+ */
96
+ setItemError(parentItem) {
97
+ parentItem.status = "error";
98
+ }
99
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HierarchyBase, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
100
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: HierarchyBase, inputs: { rootNode: "rootNode" }, outputs: { getItemChildren: "getItemChildren", itemToggled: "itemToggled" }, usesOnChanges: true, ngImport: i0 }); }
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HierarchyBase, decorators: [{
103
+ type: Directive
104
+ }], ctorParameters: () => [{ type: i0.Injector }], propDecorators: { rootNode: [{
105
+ type: Input
106
+ }], getItemChildren: [{
107
+ type: Output
108
+ }], itemToggled: [{
109
+ type: Output
110
+ }] } });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9oaWVyYXJjaHkvaGllcmFyY2h5LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVksS0FBSyxFQUF3QixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRXRILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBR2hFLE1BQU0sT0FBTyxhQUFhO0lBQTFCO1FBQ0UsT0FBRSxHQUFXLEVBQUUsQ0FBQztRQUVoQixvQ0FBb0M7UUFDcEMsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQVFuQix5RUFBeUU7UUFDekUsVUFBSyxHQUFXLENBQUMsQ0FBQztRQVVsQix5RUFBeUU7UUFDekUsWUFBTyxHQUF1QyxTQUFTLENBQUM7UUFFeEQsb0RBQW9EO1FBQ3BELGVBQVUsR0FBYSxLQUFLLENBQUM7UUFFN0I7O1dBRUc7UUFDSCxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUU3Qiw0Q0FBNEM7UUFDNUMsYUFBUSxHQUF5QixFQUFFLENBQUM7UUFFcEMscURBQXFEO1FBQ3JELGFBQVEsR0FBYSxLQUFLLENBQUM7UUFFM0IsK0NBQStDO1FBQy9DLGFBQVEsR0FBYSxLQUFLLENBQUM7UUFFM0IsbURBQW1EO1FBQ25ELGVBQVUsR0FBYSxLQUFLLENBQUM7UUFFN0IsYUFBUSxHQUFhLEtBQUssQ0FBQztRQUUzQjs7V0FFRztRQUNILFdBQU0sR0FBZ0IsU0FBUyxDQUFDO1FBRWhDLG9GQUFvRjtRQUNwRixhQUFRLEdBQWEsS0FBSyxDQUFDO1FBRTNCOzs7V0FHRztRQUNILHVCQUFrQixHQUFhLElBQUksQ0FBQztJQVl0QyxDQUFDO0NBQUE7QUFXRCxNQUFNLE9BQWdCLGFBQWE7SUFlakMsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBSUQsWUFBWSxRQUFrQjtRQWhCOUIseURBQXlEO1FBQ3hDLG9CQUFlLEdBQWdDLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRWxHLDZDQUE2QztRQUM1QixnQkFBVyxHQUF1QyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUU1Rzs7VUFFRTtRQUNNLGVBQVUsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVF0RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2pFOztjQUVFO1lBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7TUFFRTtJQUNLLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxvQ0FBb0M7SUFDN0IsaUJBQWlCLENBQUMsSUFBbUIsRUFBRSxRQUFpQjtRQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLGtCQUFrQixFQUFFO1lBQ25ELGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDeEQsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtTQUMzQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTFDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BFLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQ7T0FDRztJQUNJLGVBQWUsQ0FBQyxVQUF5QixFQUFFLEtBQTJCO1FBQzNFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQzVCLFVBQVUsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7TUFFRTtJQUNLLFlBQVksQ0FBQyxVQUF5QjtRQUMzQyxVQUFVLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUM5QixDQUFDOytHQXhFbUIsYUFBYTttR0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQURsQyxTQUFTOzZFQUlRLFFBQVE7c0JBQXZCLEtBQUs7Z0JBR1csZUFBZTtzQkFBL0IsTUFBTTtnQkFHVSxXQUFXO3NCQUEzQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXJhbXMsIFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExpbmtJdGVtIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbmF2aWdhdGlvbi9saW5rLWl0ZW0nO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFZpZXdTdGF0dXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGlzcGxheSc7XHJcblxyXG5leHBvcnQgY2xhc3MgSGllcmFyY2h5SXRlbSBpbXBsZW1lbnRzIExpbmtJdGVtIHtcclxuICBpZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBMYWJlbCB0byBkaXNwbGF5IGZvciB0aGUgaXRlbSAqL1xyXG4gIGxhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRleHQgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBpdGVtJ3MgdG9vbHRpcC4gV2hlbiBub3QgcHJvdmlkZWQsIHRoZSBsYWJlbCB3aWxsIGJlIGRpc3BsYXllZC4gKi9cclxuICB0b29sdGlwPzogc3RyaW5nO1xyXG5cclxuICAvKiogVGV4dCB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGl0ZW0ncyBpY29uIHRvb2x0aXAuICovXHJcbiAgaWNvblRvb2x0aXA/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBJbmRpY2F0ZXMgaG93IG1hbnkgbGV2ZWxzIGRlZXAgdGhlIGl0ZW0gaXMgaW4gdGhlIHBhcmVudCBzdHJ1Y3R1cmUgKi9cclxuICBsZXZlbDogbnVtYmVyID0gMDtcclxuXHJcbiAgdXJsPzogc3RyaW5nO1xyXG5cclxuICBxdWVyeVBhcmFtcz86IFBhcmFtcyB8IG51bGw7XHJcblxyXG4gIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xyXG5cclxuICBpY29uPzogc3RyaW5nO1xyXG5cclxuICAvKiogRGlzcGxheSBpdGVtIGFzIGEgbGluaywgYSBoZWFkaW5nLCBvciB3aXRoIGEgZGl2aWRlciBsaW5lIGJlbG93IGl0ICovXHJcbiAgZGlzcGxheT86ICdkZWZhdWx0JyB8ICdoZWFkaW5nJyB8ICdkaXZpZGVyJyA9ICdkZWZhdWx0JztcclxuXHJcbiAgLyoqIFNldCB0byBoaWRlIHRvZ2dsZSwgZXZlbiBpZiBpdGVtIGhhcyBjaGlsZHJlbiAqL1xyXG4gIGhpZGVUb2dnbGU/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBGbGFnIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGl0ZW0gaGFzIGNoaWxkcmVuIG9yIG5vdCwgbW9zdGx5IGRyaXZlc1xyXG4gICAqICB3aGV0aGVyIHlvdSBnZXQgdGhlIGV4cGFuZC9jb2xsYXBzZSBidXR0b25cclxuICAgKi9cclxuICBoYXNDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogQXJyYXkgb2YgY2hpbGRyZW4gaWYgYW55IGZvciB0aGUgaXRlbSAqL1xyXG4gIGNoaWxkcmVuOiBBcnJheTxIaWVyYXJjaHlJdGVtPiA9IFtdO1xyXG5cclxuICAvKiogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgaXRlbSBoYXMgYmVlbiBleHBhbmRlZCAqL1xyXG4gIGV4cGFuZGVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgaXRlbSBpcyBzZWxlY3RlZCAqL1xyXG4gIHNlbGVjdGVkPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgaXRlbSBjYW4gYmUgc2VsZWN0ZWQgKi9cclxuICBzZWxlY3RhYmxlPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICByZWFkb25seT86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFN0YXR1cyBvZiBlYWNoIGl0ZW0gdG8gaW5kaWNhdGUgd2hldGhlciBjaGlsZHJlbiBsb29rdXAgaXMgcGVuZGluZyBvclxyXG4gICAqICBpZiBhbiBlcnJvciBvY2N1cnJlZCByZXRyaWV2aW5nIGRhdGFcclxuICAgKi9cclxuICBzdGF0dXM/OiBWaWV3U3RhdHVzID0gXCJoYXNEYXRhXCI7XHJcblxyXG4gIC8qKiBJbmRpY2F0ZXMgaWYgdGhlIGl0ZW0gaXMgYSB0b3AgbGV2ZWwgZW50aXR5LCBlLmcuIE9yZ2FuaXphdGlvbiBvciBDb3N0IENlbnRlciAqL1xyXG4gIHRvcExldmVsPzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGNoZWNraW5nIHRoZSB1cmwgZm9yIGFjdGl2ZW5lc3MsIHRoZSB1cmwgbXVzdCBtYXRjaCBleGFjdGx5IG9yIHBhcnRpYWxseVxyXG4gICAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL3JvdXRlciNhY3RpdmUtcm91dGVyLWxpbmtzXHJcbiAgICovXHJcbiAgaXNBY3RpdmVFeGFjdE1hdGNoPzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGl0ZW0uIFVzZWZ1bCBpZiB5b3UgbmVlZCB0byB3YWxrIHRoZSB0cmVlIGluIHJldmVyc2UuIEFuIGV4YW1wbGUgdXNhZ2VcclxuICAgKiB3b3VsZCBiZSB0byBleHBhbmQgYWxsIHBhcmVudCBpdGVtcyBhYm92ZSBhIG5vZGUgdGhhdCBpcyB0aGUgY3VycmVudCBzZWxlY3Rpb24uXHJcbiAgICovXHJcbiAgcGFyZW50SXRlbT86IEhpZXJhcmNoeUl0ZW07XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0byBoYXZlIG5vIGxldmVsIGluZGVudGF0aW9uIGZvciB0aGUgaXRlbS4gVXNlZnVsIGZvciB0b3AgbGV2ZWwgaXRlbXMgaW4gYSB0cmVlIHRoYXQgaXMgbm90IGhpZXJhcmNoaWNhbFxyXG4gICAqL1xyXG4gIG5vSW5kZW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBIaWVyYXJjaHlJdGVtIHRoYXQgaGFzIGJlZW4gY2xpY2tlZCB0byB0b2dnbGUgaXRzIGV4cGFuc2lvbiBzdGF0ZS5cclxuICovXHJcbmV4cG9ydCB0eXBlIFRvZ2dsZWRIaWVyYXJjaHlJdGVtID0ge1xyXG4gIGl0ZW06IEhpZXJhcmNoeUl0ZW07XHJcbiAgZXhwYW5kZWQ6IGJvb2xlYW47XHJcbn07XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEhpZXJhcmNoeUJhc2UgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qKiBGaXJzdCBpdGVtIHRvIHN0YXJ0IHRoZSBoaWVyYXJjaHkgc3RydWN0dXJlICovXHJcbiAgQElucHV0KCkgcHVibGljIHJvb3ROb2RlITogSGllcmFyY2h5SXRlbTtcclxuXHJcbiAgLyoqIEV2ZW50IGVtaXR0ZXIgdG8gcmVxdWVzdCBjaGlsZHJlbiBmb3IgYSBnaXZlbiBpdGVtICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBnZXRJdGVtQ2hpbGRyZW46IEV2ZW50RW1pdHRlcjxIaWVyYXJjaHlJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8SGllcmFyY2h5SXRlbT4oKTtcclxuXHJcbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBpdGVtIGlzIHRvZ2dsZWQuICovXHJcbiAgQE91dHB1dCgpIHB1YmxpYyBpdGVtVG9nZ2xlZDogRXZlbnRFbWl0dGVyPFRvZ2dsZWRIaWVyYXJjaHlJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8VG9nZ2xlZEhpZXJhcmNoeUl0ZW0+KCk7XHJcblxyXG4gIC8qKlxyXG4gICogVXNlZCB0byB1bnN1YnNjcmliZSBmcm9tIG9ic2VydmFibGVzXHJcbiAgKi9cclxuICBwcml2YXRlIF9kZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHB1YmxpYyBnZXQgZGVzdHJveWVkKCk6IFN1YmplY3Q8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3llZDtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB0ZWxlbWV0cnlTZXJ2aWNlOiBUZWxlbWV0cnlTZXJ2aWNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZSA9IGluamVjdG9yLmdldChUZWxlbWV0cnlTZXJ2aWNlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlcyAmJiBjaGFuZ2VzLnJvb3ROb2RlICYmIGNoYW5nZXMucm9vdE5vZGUuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIC8qKiBJZiB0aGUgcm9vdE5vZGUgaGFzIGNoaWxkcmVuIGFuZCB3ZSBkb24ndCBrbm93IGFib3V0IHRoZW0geWV0IHdlIG11c3QgYmUgbG9hZGluZ1xyXG4gICAgICAqICB0aGUgdmlldyB3aXRob3V0IHRoZSBuZXcgaGllcmFyY2h5IGFwaVxyXG4gICAgICAqL1xyXG4gICAgICBpZiAodGhpcy5yb290Tm9kZS5oYXNDaGlsZHJlbiAmJiB0aGlzLnJvb3ROb2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZ2V0SXRlbUNoaWxkcmVuLmVtaXQodGhpcy5yb290Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogRnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcclxuICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKiogSGFuZGxlciBmb3IgdGhlIHRvZ2dsZSBidXR0b24gKi9cclxuICBwdWJsaWMgdG9nZ2xlSXRlbUNsaWNrZWQoaXRlbTogSGllcmFyY2h5SXRlbSwgZXhwYW5kZWQ6IGJvb2xlYW4pIHtcclxuICAgIGl0ZW0uZXhwYW5kZWQgPSBleHBhbmRlZDtcclxuICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS50cmFja0V2ZW50KCd0b2dnbGUtdHJlZS1ub2RlJywge1xyXG4gICAgICBuZXdFeHBhbmRTdGF0ZTogaXRlbS5leHBhbmRlZCA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJyxcclxuICAgICAgaXRlbURlcHRoOiBgJHtpdGVtLmxldmVsfWAsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLml0ZW1Ub2dnbGVkLmVtaXQoeyBpdGVtLCBleHBhbmRlZCB9KTtcclxuXHJcbiAgICBpZiAoaXRlbS5leHBhbmRlZCAmJiBpdGVtLmhhc0NoaWxkcmVuICYmIGl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGl0ZW0uc3RhdHVzID0gXCJwZW5kaW5nXCI7XHJcbiAgICAgIHRoaXMuZ2V0SXRlbUNoaWxkcmVuLmVtaXQoaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGV4cG9zZWQgdG8gdGhlIHBhcmVudCBjb21wb25lbnQgdG8gc2V0IHRoZSBpdGVtcyBjaGlsZHJlbiBvbmNlIHRoZXkgYXJlIGF2YWlsYWJsZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRJdGVtQ2hpbGRyZW4ocGFyZW50SXRlbTogSGllcmFyY2h5SXRlbSwgaXRlbXM6IEFycmF5PEhpZXJhcmNoeUl0ZW0+KTogdm9pZCB7XHJcbiAgICBwYXJlbnRJdGVtLmNoaWxkcmVuID0gaXRlbXM7XHJcbiAgICBwYXJlbnRJdGVtLnN0YXR1cyA9IFwiaGFzRGF0YVwiO1xyXG4gIH1cclxuXHJcbiAgLyoqIE1ldGhvZCBleHBvc2VkIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50IHRvIGluZGljYXRlIHRoYXQgc29tZXRoaW5nIGhhcHBlbmVkIG9uIHRoZVxyXG4gICAqICBpdGVtIHRoYXQgY2F1c2VkIGFuIGVycm9yLCBjb3VsZCBiZSByZXRyaWV2aW5nIGNoaWxkcmVuXHJcbiAgKi9cclxuICBwdWJsaWMgc2V0SXRlbUVycm9yKHBhcmVudEl0ZW06IEhpZXJhcmNoeUl0ZW0pOiB2b2lkIHtcclxuICAgIHBhcmVudEl0ZW0uc3RhdHVzID0gXCJlcnJvclwiO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,54 @@
1
+ export var HierarchyMocks;
2
+ (function (HierarchyMocks) {
3
+ HierarchyMocks.mockRoot = () => ({
4
+ id: "1",
5
+ level: 0,
6
+ hasChildren: true,
7
+ children: [],
8
+ label: ''
9
+ });
10
+ HierarchyMocks.bldgWithChildren = () => {
11
+ return {
12
+ placeId: 3, parentId: 0, placeTypeId: 2, placeCode: 'HASCHILDREN_BLDG', placeInfo: 'A Cool Bldg Has Children',
13
+ hasChildren: true, placeChildren: [], meterChildren: [], hasActiveChildren: true
14
+ };
15
+ };
16
+ HierarchyMocks.bldgWithChildrenHierarchyItem = () => ({
17
+ id: HierarchyMocks.bldgWithChildren().placeId.toString(), icon: 'icon-building', label: `${HierarchyMocks.bldgWithChildren().placeInfo} [${HierarchyMocks.bldgWithChildren().placeCode}]`,
18
+ children: [], hasChildren: true, level: 1, selectable: true, topLevel: false
19
+ });
20
+ HierarchyMocks.orgWithChildren = () => {
21
+ return {
22
+ placeId: 1, parentId: 0, placeTypeId: 1, placeCode: 'HASCHILDREN_ORG', placeInfo: 'A Org Has Children',
23
+ hasChildren: true, placeChildren: [], meterChildren: [], hasActiveChildren: true
24
+ };
25
+ };
26
+ HierarchyMocks.orgWithChildrenHierarchyItem = () => ({
27
+ id: HierarchyMocks.orgWithChildren().placeId.toString(), icon: 'icon-organization', label: `${HierarchyMocks.orgWithChildren().placeInfo} [${HierarchyMocks.orgWithChildren().placeCode}]`,
28
+ children: [], hasChildren: true, level: 1, selectable: true, topLevel: true
29
+ });
30
+ HierarchyMocks.orgWithoutChildren = () => {
31
+ return {
32
+ placeId: 2, parentId: 0, placeTypeId: 1, placeCode: 'NOCHILDREN_ORG', placeInfo: 'No Children Org',
33
+ hasChildren: false, placeChildren: [], meterChildren: [], hasActiveChildren: false
34
+ };
35
+ };
36
+ HierarchyMocks.orgWithoutChildrenHierarchyItem = () => ({
37
+ id: HierarchyMocks.orgWithoutChildren().placeId.toString(), icon: 'icon-organization', label: `${HierarchyMocks.orgWithoutChildren().placeInfo} [${HierarchyMocks.orgWithoutChildren().placeCode}]`,
38
+ children: [], hasChildren: false, level: 1, selectable: true, topLevel: true
39
+ });
40
+ HierarchyMocks.bldgWithoutChildren = () => {
41
+ return {
42
+ placeId: 4, parentId: 0, placeTypeId: 2, placeCode: 'NOCHILDREN_BLDG', placeInfo: 'Zzz No Children Bldg',
43
+ hasChildren: false, placeChildren: [], meterChildren: [], hasActiveChildren: false
44
+ };
45
+ };
46
+ HierarchyMocks.bldgWithoutChildrenHierarchyItem = () => ({
47
+ id: HierarchyMocks.bldgWithoutChildren().placeId.toString(), icon: 'icon-building', label: `${HierarchyMocks.bldgWithoutChildren().placeInfo} [${HierarchyMocks.bldgWithoutChildren().placeCode}]`,
48
+ children: [], hasChildren: false, level: 1, selectable: true, topLevel: false
49
+ });
50
+ HierarchyMocks.sortedHierarchyPlaces = () => [
51
+ HierarchyMocks.bldgWithChildrenHierarchyItem(), HierarchyMocks.orgWithChildrenHierarchyItem(), HierarchyMocks.orgWithoutChildrenHierarchyItem(), HierarchyMocks.bldgWithoutChildrenHierarchyItem()
52
+ ];
53
+ })(HierarchyMocks || (HierarchyMocks = {}));
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LW1vY2tzLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS9oaWVyYXJjaHkvaGllcmFyY2h5LW1vY2tzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxLQUFXLGNBQWMsQ0FvRDlCO0FBcERELFdBQWlCLGNBQWM7SUFDaEIsdUJBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFlO1FBQzNDLEVBQUUsRUFBRSxHQUFHO1FBQ1AsS0FBSyxFQUFFLENBQUM7UUFDUixXQUFXLEVBQUUsSUFBSTtRQUNqQixRQUFRLEVBQUUsRUFBRTtRQUNaLEtBQUssRUFBRSxFQUFFO0tBQ1YsQ0FBQSxDQUFDO0lBRVcsK0JBQWdCLEdBQUcsR0FBRyxFQUFFO1FBQUcsT0FBTztZQUM3QyxPQUFPLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLDBCQUEwQjtZQUM3RyxXQUFXLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJO1NBQ2pGLENBQUE7SUFBQSxDQUFDLENBQUM7SUFFVSw0Q0FBNkIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFlO1FBQ2hFLEVBQUUsRUFBRSxlQUFBLGdCQUFnQixFQUFFLENBQUMsT0FBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLEdBQUcsZUFBQSxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsS0FBSyxlQUFBLGdCQUFnQixFQUFFLENBQUMsU0FBUyxHQUFHO1FBQzdJLFFBQVEsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFF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LEVBQUUsRUFBRSxlQUFBLDRCQUE0QixFQUFFLEVBQUUsZUFBQSwrQkFBK0IsRUFBRSxFQUFFLGVBQUEsZ0NBQWdDLEVBQUU7S0FDdkksQ0FBQztBQUNKLENBQUMsRUFwRGdCLGNBQWMsS0FBZCxjQUFjLFFBb0Q5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhpZXJhcmNoeUl0ZW0gfSBmcm9tICcuL2hpZXJhcmNoeS1iYXNlJztcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgSGllcmFyY2h5TW9ja3Mge1xyXG4gIGV4cG9ydCBjb25zdCBtb2NrUm9vdCA9ICgpID0+IDxIaWVyYXJjaHlJdGVtPntcclxuICAgIGlkOiBcIjFcIixcclxuICAgIGxldmVsOiAwLFxyXG4gICAgaGFzQ2hpbGRyZW46IHRydWUsXHJcbiAgICBjaGlsZHJlbjogW10sXHJcbiAgICBsYWJlbDogJydcclxuICB9O1xyXG5cclxuICBleHBvcnQgY29uc3QgYmxkZ1dpdGhDaGlsZHJlbiA9ICgpID0+IHsgcmV0dXJuIHtcclxuICAgIHBsYWNlSWQ6IDMsIHBhcmVudElkOiAwLCBwbGFjZVR5cGVJZDogMiwgcGxhY2VDb2RlOiAnSEFTQ0hJTERSRU5fQkxERycsIHBsYWNlSW5mbzogJ0EgQ29vbCBCbGRnIEhhcyBDaGlsZHJlbicsXHJcbiAgICBoYXNDaGlsZHJlbjogdHJ1ZSwgcGxhY2VDaGlsZHJlbjogW10sIG1ldGVyQ2hpbGRyZW46IFtdLCBoYXNBY3RpdmVDaGlsZHJlbjogdHJ1ZVxyXG4gIH19O1xyXG5cclxuICBleHBvcnQgY29uc3QgYmxkZ1dpdGhDaGlsZHJlbkhpZXJhcmNoeUl0ZW0gPSAoKSA9PiA8SGllcmFyY2h5SXRlbT57XHJcbiAgICBpZDogYmxkZ1dpdGhDaGlsZHJlbigpLnBsYWNlSWQhLnRvU3RyaW5nKCksIGljb246ICdpY29uLWJ1aWxkaW5nJywgbGFiZWw6IGAke2JsZGdXaXRoQ2hpbGRyZW4oKS5wbGFjZUluZm99IFske2JsZGdXaXRoQ2hpbGRyZW4oKS5wbGFjZUNvZGV9XWAsXHJcbiAgICBjaGlsZHJlbjogW10sIGhhc0NoaWxkcmVuOiB0cnVlLCBsZXZlbDogMSwgc2VsZWN0YWJsZTogdHJ1ZSwgdG9wTGV2ZWw6IGZhbHNlXHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0IGNvbnN0IG9yZ1dpdGhDaGlsZHJlbiA9ICgpID0+IHsgcmV0dXJuIHtcclxuICAgIHBsYWNlSWQ6IDEsIHBhcmVudElkOiAwLCBwbGFjZVR5cGVJZDogMSwgcGxhY2VDb2RlOiAnSEFTQ0hJTERSRU5fT1JHJywgcGxhY2VJbmZvOiAnQSBPcmcgSGFzIENoaWxkcmVuJyxcclxuICAgIGhhc0NoaWxkcmVuOiB0cnVlLCBwbGFjZUNoaWxkcmVuOiBbXSwgbWV0ZXJDaGlsZHJlbjogW10sIGhhc0FjdGl2ZUNoaWxkcmVuOiB0cnVlXHJcbiAgfX07XHJcblxyXG4gIGV4cG9ydCBjb25zdCBvcmdXaXRoQ2hpbGRyZW5IaWVyYXJjaHlJdGVtID0gKCkgPT4gPEhpZXJhcmNoeUl0ZW0+e1xyXG4gICAgaWQ6IG9yZ1dpdGhDaGlsZHJlbigpLnBsYWNlSWQhLnRvU3RyaW5nKCksIGljb246ICdpY29uLW9yZ2FuaXphdGlvbicsIGxhYmVsOiBgJHtvcmdXaXRoQ2hpbGRyZW4oKS5wbGFjZUluZm99IFske29yZ1dpdGhDaGlsZHJlbigpLnBsYWNlQ29kZX1dYCxcclxuICAgIGNoaWxkcmVuOiBbXSwgaGFzQ2hpbGRyZW46IHRydWUsIGxldmVsOiAxLCBzZWxlY3RhYmxlOiB0cnVlLCB0b3BMZXZlbDogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGV4cG9ydCBjb25zdCBvcmdXaXRob3V0Q2hpbGRyZW4gPSAoKSA9PiB7IHJldHVybiB7XHJcbiAgICBwbGFjZUlkOiAyLCBwYXJlbnRJZDogMCwgcGxhY2VUeXBlSWQ6IDEsIHBsYWNlQ29kZTogJ05PQ0hJTERSRU5fT1JHJywgcGxhY2VJbmZvOiAnTm8gQ2hpbGRyZW4gT3JnJyxcclxuICAgIGhhc0NoaWxkcmVuOiBmYWxzZSwgcGxhY2VDaGlsZHJlbjogW10sIG1ldGVyQ2hpbGRyZW46IFtdLCBoYXNBY3RpdmVDaGlsZHJlbjogZmFsc2VcclxuICB9fTtcclxuXHJcbiAgZXhwb3J0IGNvbnN0IG9yZ1dpdGhvdXRDaGlsZHJlbkhpZXJhcmNoeUl0ZW0gPSAoKSA9PiA8SGllcmFyY2h5SXRlbT57XHJcbiAgICBpZDogb3JnV2l0aG91dENoaWxkcmVuKCkucGxhY2VJZCEudG9TdHJpbmcoKSwgaWNvbjogJ2ljb24tb3JnYW5pemF0aW9uJywgbGFiZWw6IGAke29yZ1dpdGhvdXRDaGlsZHJlbigpLnBsYWNlSW5mb30gWyR7b3JnV2l0aG91dENoaWxkcmVuKCkucGxhY2VDb2RlfV1gLFxyXG4gICAgY2hpbGRyZW46IFtdLCBoYXNDaGlsZHJlbjogZmFsc2UsIGxldmVsOiAxLCBzZWxlY3RhYmxlOiB0cnVlLCB0b3BMZXZlbDogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGV4cG9ydCBjb25zdCBibGRnV2l0aG91dENoaWxkcmVuID0gKCkgPT4geyByZXR1cm4ge1xyXG4gICAgcGxhY2VJZDogNCwgcGFyZW50SWQ6IDAsIHBsYWNlVHlwZUlkOiAyLCBwbGFjZUNvZGU6ICdOT0NISUxEUkVOX0JMREcnLCBwbGFjZUluZm86ICdaenogTm8gQ2hpbGRyZW4gQmxkZycsXHJcbiAgICBoYXNDaGlsZHJlbjogZmFsc2UsIHBsYWNlQ2hpbGRyZW46IFtdLCBtZXRlckNoaWxkcmVuOiBbXSwgaGFzQWN0aXZlQ2hpbGRyZW46IGZhbHNlXHJcbiAgfX07XHJcblxyXG4gIGV4cG9ydCBjb25zdCBibGRnV2l0aG91dENoaWxkcmVuSGllcmFyY2h5SXRlbSA9ICgpID0+IDxIaWVyYXJjaHlJdGVtPntcclxuICAgIGlkOiBibGRnV2l0aG91dENoaWxkcmVuKCkucGxhY2VJZCEudG9TdHJpbmcoKSwgaWNvbjogJ2ljb24tYnVpbGRpbmcnLCBsYWJlbDogYCR7YmxkZ1dpdGhvdXRDaGlsZHJlbigpLnBsYWNlSW5mb30gWyR7YmxkZ1dpdGhvdXRDaGlsZHJlbigpLnBsYWNlQ29kZX1dYCxcclxuICAgIGNoaWxkcmVuOiBbXSwgaGFzQ2hpbGRyZW46IGZhbHNlLCBsZXZlbDogMSwgc2VsZWN0YWJsZTogdHJ1ZSwgdG9wTGV2ZWw6IGZhbHNlXHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0IGNvbnN0IHNvcnRlZEhpZXJhcmNoeVBsYWNlcyA9ICgpID0+IDxBcnJheTxIaWVyYXJjaHlJdGVtPj5bXHJcbiAgICBibGRnV2l0aENoaWxkcmVuSGllcmFyY2h5SXRlbSgpLCBvcmdXaXRoQ2hpbGRyZW5IaWVyYXJjaHlJdGVtKCksIG9yZ1dpdGhvdXRDaGlsZHJlbkhpZXJhcmNoeUl0ZW0oKSwgYmxkZ1dpdGhvdXRDaGlsZHJlbkhpZXJhcmNoeUl0ZW0oKVxyXG4gIF07XHJcbn1cclxuIl19