@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,147 @@
1
+ import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
2
+ import { Overlay } from '../../../display/view-overlay/view-overlay.component';
3
+ import { DialogResult } from '../../../display/dialog/dialog-types';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../display/dialog/dialog.service";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/router";
8
+ import * as i4 from "@angular/cdk/scrolling";
9
+ import * as i5 from "../../../controls/button/button.component";
10
+ import * as i6 from "../../../display/view-overlay/view-overlay.component";
11
+ import * as i7 from "../../../controls/banner/banner.component";
12
+ import * as i8 from "../../../controls/dropdown/dropdown.component";
13
+ import * as i9 from "../page-title/page-title.component";
14
+ export class PageViewComponent {
15
+ constructor(dialogService) {
16
+ this.dialogService = dialogService;
17
+ /**
18
+ * Set to true when page-view is inside a dialog to adjust styles and hide breadcrumbs.
19
+ */
20
+ this.isDialog = false;
21
+ /**
22
+ * Set to true to enable read only mode. Only a single secondary action will be available
23
+ */
24
+ this.readonly = false;
25
+ /**
26
+ * Controls Overlay that masks the page view content. Only the header is not masked when the overlay is visible. Default is pending Overlay with no message
27
+ */
28
+ this.status = new Overlay('pending');
29
+ /**
30
+ * Set to false to hide the entire header, including breadcrumbs and error banner. Default is true.
31
+ */
32
+ this.showHeader = true;
33
+ /**
34
+ * Label for the actions dropdown in the header. Default is 'Actions'
35
+ */
36
+ this.moreActionsLabel = 'Actions';
37
+ /**
38
+ * Label for the secondary button in the header. Default is 'Cancel'
39
+ */
40
+ this.secondaryActionLabel = 'Cancel';
41
+ this.hideSecondaryAction = false;
42
+ /** Flag for hiding the tiny close button in the top-right corner of dialog while in pending state only */
43
+ this.hideCloseOnPending = false;
44
+ /**
45
+ * Label for the primary button in the header. Default is 'Save'
46
+ */
47
+ this.primaryActionLabel = 'Save';
48
+ this.hidePrimaryAction = false;
49
+ /**
50
+ * Pins the footer to the bottom of the view and overlays any overflowing content
51
+ */
52
+ this.stickyFooter = true;
53
+ /**
54
+ * Prevents content from overflowing the view. Content must manage overflow instead.
55
+ */
56
+ this.fitContent = false;
57
+ /**
58
+ * Disables the primary action button
59
+ */
60
+ this.disablePrimaryAction = false;
61
+ /** Changes the background color for the content and overlay to white */
62
+ this.bgContent = false;
63
+ this.onPrimaryAction = new EventEmitter();
64
+ this.onSecondaryAction = new EventEmitter();
65
+ }
66
+ primaryAction(event) {
67
+ if (this.onPrimaryAction) {
68
+ this.onPrimaryAction.emit(event);
69
+ }
70
+ }
71
+ secondaryAction(event) {
72
+ if (this.onSecondaryAction) {
73
+ this.onSecondaryAction.emit(event);
74
+ }
75
+ }
76
+ closeDialog() {
77
+ this.dialogService.closeLatestDialog(new DialogResult(false));
78
+ }
79
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageViewComponent, deps: [{ token: i1.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
80
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PageViewComponent, selector: "ec-page-view", inputs: { isDialog: "isDialog", readonly: "readonly", status: "status", showHeader: "showHeader", errors: "errors", breadcrumbs: "breadcrumbs", title: "title", titleIcon: "titleIcon", subTitle: "subTitle", subTitleUrl: "subTitleUrl", moreActionsLabel: "moreActionsLabel", moreActions: "moreActions", secondaryActionLabel: "secondaryActionLabel", hideSecondaryAction: "hideSecondaryAction", hideCloseOnPending: "hideCloseOnPending", primaryActionLabel: "primaryActionLabel", hidePrimaryAction: "hidePrimaryAction", customTitleTemplate: "customTitleTemplate", customActionsTemplate: "customActionsTemplate", customHeaderTemplate: "customHeaderTemplate", footerTemplate: "footerTemplate", customErrorBannerTemplate: "customErrorBannerTemplate", stickyFooter: "stickyFooter", fitContent: "fitContent", disablePrimaryAction: "disablePrimaryAction", bgContent: "bgContent" }, outputs: { onPrimaryAction: "onPrimaryAction", onSecondaryAction: "onSecondaryAction" }, host: { properties: { "class.bg-content": "this.bgContent" }, classAttribute: "flex-grow" }, ngImport: i0, template: "<div ecOverlay\r\n [status]=\"status?.status\"\r\n [message]=\"status?.message\"\r\n [displayAsMask]=\"true\"\r\n class=\"flex-grow d-flex\"\r\n [ngClass]=\"{'bg-body': !bgContent, 'bg-content': bgContent}\">\r\n <div id=\"PageViewScrollContainer\"\r\n class=\"d-flex flex-column flex-grow scroll-y\"\r\n [class.is-dialog]=\"isDialog\"\r\n [class.fit-content]=\"fitContent\"\r\n [class.sticky-footer]=\"stickyFooter && !!footerTemplate\"\r\n [class.overlay-visible]=\"status?.status !== 'hasData'\"\r\n [class.footer-visible]=\"!!footerTemplate\"\r\n cdkScrollable>\r\n <section>\r\n <ng-content></ng-content>\r\n </section>\r\n\r\n <footer *ngIf=\"footerTemplate\">\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n </footer>\r\n\r\n <header *ngIf=\"showHeader\">\r\n <ol id=\"breadcrumbs\"\r\n *ngIf=\"breadcrumbs?.length && !isDialog\">\r\n <li *ngFor=\"let crumb of breadcrumbs; last as isLast\">\r\n <a *ngIf=\"crumb.url; else label\"\r\n [routerLink]=\"crumb.url\">\r\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\r\n </a>\r\n <ng-template #label>{{crumb.label}}</ng-template>\r\n </li>\r\n </ol>\r\n\r\n <div class=\"titlebar\">\r\n <app-page-title *ngIf=\"!customTitleTemplate; else customTitle\"\r\n [title]=\"title\"\r\n [subTitle]=\"subTitle\"\r\n [subTitleUrl]=\"subTitleUrl\"\r\n [titleIcon]=\"titleIcon\"\r\n class=\"title text-truncate\">\r\n </app-page-title>\r\n\r\n <ng-template #customTitle>\r\n <div class=\"title\">\r\n <ng-container *ngTemplateOutlet=\"customTitleTemplate\"></ng-container>\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"actions\">\r\n <ec-button id=\"primaryAction\"\r\n class=\"ml-2\"\r\n *ngIf=\"!hidePrimaryAction && onPrimaryAction.observers?.length && !readonly\"\r\n [disabled]=\"status?.status === 'pending' || disablePrimaryAction\"\r\n type=\"primary\"\r\n [label]=\"primaryActionLabel\"\r\n (clicked)=\"primaryAction($event)\">\r\n </ec-button>\r\n <ec-button id=\"secondaryAction\"\r\n class=\"ml-2\"\r\n *ngIf=\"!hideSecondaryAction && onSecondaryAction.observers?.length\"\r\n type=\"secondary\"\r\n [label]=\"readonly ? 'Close' : secondaryActionLabel\"\r\n (clicked)=\"secondaryAction($event)\">\r\n </ec-button>\r\n <ec-dropdown id=\"moreActions\"\r\n *ngIf=\"moreActions?.length && !readonly\"\r\n [disabled]=\"status?.status === 'pending'\"\r\n class=\"ml-2\"\r\n buttonType=\"text\"\r\n [label]=\"moreActionsLabel\"\r\n [items]=\"moreActions\">\r\n </ec-dropdown>\r\n <ng-container *ngTemplateOutlet=\"customActionsTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"customHeaderTemplate\"\r\n class=\"page-header\">\r\n <ng-container *ngTemplateOutlet=\"customHeaderTemplate\"></ng-container>\r\n </div>\r\n\r\n <ec-banner *ngIf=\"!customErrorBannerTemplate && errors; else customErrorBannerOutlet\"\r\n id=\"pageViewErrors\"\r\n [class.border-bottom-0]=\"!isDialog\">\r\n <div [innerHtml]=\"errors\"></div>\r\n </ec-banner>\r\n\r\n <ng-template #customErrorBannerOutlet>\r\n <ec-banner *ngIf=\"errors\"\r\n id=\"pageViewErrors\"\r\n [class.border-bottom-0]=\"!isDialog\">\r\n <ng-container *ngTemplateOutlet=\"customErrorBannerTemplate\"></ng-container>\r\n </ec-banner>\r\n </ng-template>\r\n </header>\r\n </div>\r\n\r\n <ec-button *ngIf=\"isDialog && ( (status?.status === 'pending' && !hideCloseOnPending) || status?.status === 'error')\"\r\n id=\"pageViewDialogClose\"\r\n type=\"icon\"\r\n icon=\"icon-cancel\"\r\n (clicked)=\"closeDialog()\">\r\n </ec-button>\r\n</div>", styles: [":host{flex:1 1;min-height:0;display:flex}header{background-color:var(--ec-background-color-body);position:sticky;top:0;order:1;padding:1rem 1.5rem .5rem;flex:none;z-index:var(--ec-z-index-sticky-page-header)}ol{font-size:var(--ec-font-size-label);line-height:1rem;grid-column:1/3;grid-row:1/2;list-style:none;padding:0;margin:0 0 .25rem}ol li{display:inline}ol li:not(:last-child):after{content:\" / \";display:inline;color:var(--ec-color-secondary-dark)}div[ecOverlay]{position:relative}.titlebar{display:grid;grid-template-columns:auto max-content;grid-template-rows:max-content max-content;gap:0 1rem}.title{grid-column:1/2;grid-row:2/3;align-self:center}.actions{grid-column:2/3;grid-row:2/3;display:flex;flex-direction:row-reverse}ec-banner{margin-top:1rem}section{padding:var(--ec-page-view-padding-section, .5rem 1.5rem 2rem);order:2;flex:1 0 auto;min-height:0}:not(.is-dialog)>section{z-index:0}footer{background-color:var(--ec-background-color-body);order:3;padding:0 1.5rem;height:4.5rem;flex:none;display:flex;align-items:center}.is-dialog header{padding:0}.is-dialog .titlebar{background-color:var(--ec-background-color);padding:1rem}.is-dialog ec-banner{margin:0}.is-dialog section{padding:var(--ec-page-view-padding-section, 1rem 1rem 1.5rem)}.sticky-footer section{padding-bottom:4.5rem}.sticky-footer footer{position:sticky;bottom:0;z-index:var(--ec-z-index-sticky-page-header)}.fit-content>section{flex:1 1;display:flex}.footer-visible section{padding-bottom:0}.overlay-visible header{z-index:var(--ec-z-index-overlay)1}.overlay-visible ec-banner{display:none}:host(.bg-content) header{background-color:var(--ec-background-color)}:host(.bg-content) section{background-color:var(--ec-background-color)}:host(.bg-content) footer{background-color:var(--ec-background-color)}#pageViewDialogClose{position:absolute;top:1rem;right:1rem;z-index:calc(var(--ec-z-index-overlay) + 1)}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i4.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i5.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i6.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i7.BannerComponent, selector: "ec-banner", inputs: ["hidden", "id", "type", "bannerStyle", "title", "text", "list", "showCloseBtn", "autoHideOnClose", "customIcon", "rememberClosed"], outputs: ["closed"] }, { kind: "component", type: i8.DropdownComponent, selector: "ec-dropdown", inputs: ["id", "autofocus", "status", "disabled", "label", "icon", "buttonType", "buttonAlignment", "buttonTitle", "tabindex", "showArrow", "items", "menuTemplateType", "menuTitle", "menuHeight", "menuWidth", "menuMinWidth", "menuPosition", "menuFooter", "popupFixed", "buttonCustomTemplate", "pending"], outputs: ["itemSelected", "popupOpened"] }, { kind: "component", type: i9.PageTitleComponent, selector: "app-page-title", inputs: ["title", "titleIcon", "subTitle", "subTitleUrl"] }] }); }
81
+ }
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PageViewComponent, decorators: [{
83
+ type: Component,
84
+ args: [{ selector: 'ec-page-view', host: {
85
+ class: "flex-grow"
86
+ }, template: "<div ecOverlay\r\n [status]=\"status?.status\"\r\n [message]=\"status?.message\"\r\n [displayAsMask]=\"true\"\r\n class=\"flex-grow d-flex\"\r\n [ngClass]=\"{'bg-body': !bgContent, 'bg-content': bgContent}\">\r\n <div id=\"PageViewScrollContainer\"\r\n class=\"d-flex flex-column flex-grow scroll-y\"\r\n [class.is-dialog]=\"isDialog\"\r\n [class.fit-content]=\"fitContent\"\r\n [class.sticky-footer]=\"stickyFooter && !!footerTemplate\"\r\n [class.overlay-visible]=\"status?.status !== 'hasData'\"\r\n [class.footer-visible]=\"!!footerTemplate\"\r\n cdkScrollable>\r\n <section>\r\n <ng-content></ng-content>\r\n </section>\r\n\r\n <footer *ngIf=\"footerTemplate\">\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\r\n </footer>\r\n\r\n <header *ngIf=\"showHeader\">\r\n <ol id=\"breadcrumbs\"\r\n *ngIf=\"breadcrumbs?.length && !isDialog\">\r\n <li *ngFor=\"let crumb of breadcrumbs; last as isLast\">\r\n <a *ngIf=\"crumb.url; else label\"\r\n [routerLink]=\"crumb.url\">\r\n <ng-container *ngTemplateOutlet=\"label\"></ng-container>\r\n </a>\r\n <ng-template #label>{{crumb.label}}</ng-template>\r\n </li>\r\n </ol>\r\n\r\n <div class=\"titlebar\">\r\n <app-page-title *ngIf=\"!customTitleTemplate; else customTitle\"\r\n [title]=\"title\"\r\n [subTitle]=\"subTitle\"\r\n [subTitleUrl]=\"subTitleUrl\"\r\n [titleIcon]=\"titleIcon\"\r\n class=\"title text-truncate\">\r\n </app-page-title>\r\n\r\n <ng-template #customTitle>\r\n <div class=\"title\">\r\n <ng-container *ngTemplateOutlet=\"customTitleTemplate\"></ng-container>\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"actions\">\r\n <ec-button id=\"primaryAction\"\r\n class=\"ml-2\"\r\n *ngIf=\"!hidePrimaryAction && onPrimaryAction.observers?.length && !readonly\"\r\n [disabled]=\"status?.status === 'pending' || disablePrimaryAction\"\r\n type=\"primary\"\r\n [label]=\"primaryActionLabel\"\r\n (clicked)=\"primaryAction($event)\">\r\n </ec-button>\r\n <ec-button id=\"secondaryAction\"\r\n class=\"ml-2\"\r\n *ngIf=\"!hideSecondaryAction && onSecondaryAction.observers?.length\"\r\n type=\"secondary\"\r\n [label]=\"readonly ? 'Close' : secondaryActionLabel\"\r\n (clicked)=\"secondaryAction($event)\">\r\n </ec-button>\r\n <ec-dropdown id=\"moreActions\"\r\n *ngIf=\"moreActions?.length && !readonly\"\r\n [disabled]=\"status?.status === 'pending'\"\r\n class=\"ml-2\"\r\n buttonType=\"text\"\r\n [label]=\"moreActionsLabel\"\r\n [items]=\"moreActions\">\r\n </ec-dropdown>\r\n <ng-container *ngTemplateOutlet=\"customActionsTemplate\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"customHeaderTemplate\"\r\n class=\"page-header\">\r\n <ng-container *ngTemplateOutlet=\"customHeaderTemplate\"></ng-container>\r\n </div>\r\n\r\n <ec-banner *ngIf=\"!customErrorBannerTemplate && errors; else customErrorBannerOutlet\"\r\n id=\"pageViewErrors\"\r\n [class.border-bottom-0]=\"!isDialog\">\r\n <div [innerHtml]=\"errors\"></div>\r\n </ec-banner>\r\n\r\n <ng-template #customErrorBannerOutlet>\r\n <ec-banner *ngIf=\"errors\"\r\n id=\"pageViewErrors\"\r\n [class.border-bottom-0]=\"!isDialog\">\r\n <ng-container *ngTemplateOutlet=\"customErrorBannerTemplate\"></ng-container>\r\n </ec-banner>\r\n </ng-template>\r\n </header>\r\n </div>\r\n\r\n <ec-button *ngIf=\"isDialog && ( (status?.status === 'pending' && !hideCloseOnPending) || status?.status === 'error')\"\r\n id=\"pageViewDialogClose\"\r\n type=\"icon\"\r\n icon=\"icon-cancel\"\r\n (clicked)=\"closeDialog()\">\r\n </ec-button>\r\n</div>", styles: [":host{flex:1 1;min-height:0;display:flex}header{background-color:var(--ec-background-color-body);position:sticky;top:0;order:1;padding:1rem 1.5rem .5rem;flex:none;z-index:var(--ec-z-index-sticky-page-header)}ol{font-size:var(--ec-font-size-label);line-height:1rem;grid-column:1/3;grid-row:1/2;list-style:none;padding:0;margin:0 0 .25rem}ol li{display:inline}ol li:not(:last-child):after{content:\" / \";display:inline;color:var(--ec-color-secondary-dark)}div[ecOverlay]{position:relative}.titlebar{display:grid;grid-template-columns:auto max-content;grid-template-rows:max-content max-content;gap:0 1rem}.title{grid-column:1/2;grid-row:2/3;align-self:center}.actions{grid-column:2/3;grid-row:2/3;display:flex;flex-direction:row-reverse}ec-banner{margin-top:1rem}section{padding:var(--ec-page-view-padding-section, .5rem 1.5rem 2rem);order:2;flex:1 0 auto;min-height:0}:not(.is-dialog)>section{z-index:0}footer{background-color:var(--ec-background-color-body);order:3;padding:0 1.5rem;height:4.5rem;flex:none;display:flex;align-items:center}.is-dialog header{padding:0}.is-dialog .titlebar{background-color:var(--ec-background-color);padding:1rem}.is-dialog ec-banner{margin:0}.is-dialog section{padding:var(--ec-page-view-padding-section, 1rem 1rem 1.5rem)}.sticky-footer section{padding-bottom:4.5rem}.sticky-footer footer{position:sticky;bottom:0;z-index:var(--ec-z-index-sticky-page-header)}.fit-content>section{flex:1 1;display:flex}.footer-visible section{padding-bottom:0}.overlay-visible header{z-index:var(--ec-z-index-overlay)1}.overlay-visible ec-banner{display:none}:host(.bg-content) header{background-color:var(--ec-background-color)}:host(.bg-content) section{background-color:var(--ec-background-color)}:host(.bg-content) footer{background-color:var(--ec-background-color)}#pageViewDialogClose{position:absolute;top:1rem;right:1rem;z-index:calc(var(--ec-z-index-overlay) + 1)}\n"] }]
87
+ }], ctorParameters: () => [{ type: i1.DialogService }], propDecorators: { isDialog: [{
88
+ type: Input
89
+ }], readonly: [{
90
+ type: Input
91
+ }], status: [{
92
+ type: Input
93
+ }], showHeader: [{
94
+ type: Input
95
+ }], errors: [{
96
+ type: Input
97
+ }], breadcrumbs: [{
98
+ type: Input
99
+ }], title: [{
100
+ type: Input
101
+ }], titleIcon: [{
102
+ type: Input
103
+ }], subTitle: [{
104
+ type: Input
105
+ }], subTitleUrl: [{
106
+ type: Input
107
+ }], moreActionsLabel: [{
108
+ type: Input
109
+ }], moreActions: [{
110
+ type: Input
111
+ }], secondaryActionLabel: [{
112
+ type: Input
113
+ }], hideSecondaryAction: [{
114
+ type: Input
115
+ }], hideCloseOnPending: [{
116
+ type: Input
117
+ }], primaryActionLabel: [{
118
+ type: Input
119
+ }], hidePrimaryAction: [{
120
+ type: Input
121
+ }], customTitleTemplate: [{
122
+ type: Input
123
+ }], customActionsTemplate: [{
124
+ type: Input
125
+ }], customHeaderTemplate: [{
126
+ type: Input
127
+ }], footerTemplate: [{
128
+ type: Input
129
+ }], customErrorBannerTemplate: [{
130
+ type: Input
131
+ }], stickyFooter: [{
132
+ type: Input
133
+ }], fitContent: [{
134
+ type: Input
135
+ }], disablePrimaryAction: [{
136
+ type: Input
137
+ }], bgContent: [{
138
+ type: HostBinding,
139
+ args: ['class.bg-content']
140
+ }, {
141
+ type: Input
142
+ }], onPrimaryAction: [{
143
+ type: Output
144
+ }], onSecondaryAction: [{
145
+ type: Output
146
+ }] } });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLXZpZXcvcGFnZS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvcGFnZS9wYWdlLXZpZXcvcGFnZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBSWpHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7O0FBVXBFLE1BQU0sT0FBTyxpQkFBaUI7SUE4RzVCLFlBQ1UsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUE5R3RDOztXQUVHO1FBQ2EsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQzs7V0FFRztRQUNhLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUM7O1dBRUc7UUFDYSxXQUFNLEdBQWEsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFMUQ7O1dBRUc7UUFDYSxlQUFVLEdBQVksSUFBSSxDQUFDO1FBb0IzQzs7V0FFRztRQUNhLHFCQUFnQixHQUFZLFNBQVMsQ0FBQztRQU10RDs7V0FFRztRQUNhLHlCQUFvQixHQUFZLFFBQVEsQ0FBQztRQUN6Qyx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFNUMsMEdBQTBHO1FBQzFGLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUVwRDs7V0FFRztRQUNhLHVCQUFrQixHQUFZLE1BQU0sQ0FBQztRQUNyQyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUEyQjFDOztXQUVHO1FBQ2EsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFFcEM7O1dBRUc7UUFDYSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5DOztXQUVHO1FBQ2EseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRTdDLHdFQUF3RTtRQUV4RCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLG9CQUFlLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDeEQsc0JBQWlCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFJdkUsQ0FBQztJQUVFLGFBQWEsQ0FBQyxLQUFVO1FBQzdCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRU0sZUFBZSxDQUFDLEtBQVU7UUFDL0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQzsrR0FoSVUsaUJBQWlCO21HQUFqQixpQkFBaUIsZ2xDQ2Y5Qiw0L0pBd0dNOzs0RkR6Rk8saUJBQWlCO2tCQVI3QixTQUFTOytCQUNFLGNBQWMsUUFHbEI7d0JBQ0osS0FBSyxFQUFFLFdBQVc7cUJBQ25CO2tGQU1lLFFBQVE7c0JBQXZCLEtBQUs7Z0JBS1UsUUFBUTtzQkFBdkIsS0FBSztnQkFLVSxNQUFNO3NCQUFyQixLQUFLO2dCQUtVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1UsTUFBTTtzQkFBckIsS0FBSztnQkFLVSxXQUFXO3NCQUExQixLQUFLO2dCQUtVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUlVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBS1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUNVLG1CQUFtQjtzQkFBbEMsS0FBSztnQkFHVSxrQkFBa0I7c0JBQWpDLEtBQUs7Z0JBS1Usa0JBQWtCO3NCQUFqQyxLQUFLO2dCQUNVLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFLVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBS1UscUJBQXFCO3NCQUFwQyxLQUFLO2dCQUtVLG9CQUFvQjtzQkFBbkMsS0FBSztnQkFLVSxjQUFjO3NCQUE3QixLQUFLO2dCQUtVLHlCQUF5QjtzQkFBeEMsS0FBSztnQkFLVSxZQUFZO3NCQUEzQixLQUFLO2dCQUtVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUlVLFNBQVM7c0JBRHhCLFdBQVc7dUJBQUMsa0JBQWtCOztzQkFDOUIsS0FBSztnQkFFVyxlQUFlO3NCQUEvQixNQUFNO2dCQUNVLGlCQUFpQjtzQkFBakMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi8uLi8uLi9jb250cm9scy9tZW51L21lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vLi4vLi4vZGlzcGxheS92aWV3LW92ZXJsYXkvdmlldy1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERpYWxvZ1Jlc3VsdCB9IGZyb20gJy4uLy4uLy4uL2Rpc3BsYXkvZGlhbG9nL2RpYWxvZy10eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXBhZ2UtdmlldycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2Utdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGFnZS12aWV3LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgY2xhc3M6IFwiZmxleC1ncm93XCJcclxuICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdlVmlld0NvbXBvbmVudCB7XHJcbiAgLyoqXHJcbiAgICogU2V0IHRvIHRydWUgd2hlbiBwYWdlLXZpZXcgaXMgaW5zaWRlIGEgZGlhbG9nIHRvIGFkanVzdCBzdHlsZXMgYW5kIGhpZGUgYnJlYWRjcnVtYnMuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGlzRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIHRvIGVuYWJsZSByZWFkIG9ubHkgbW9kZS4gT25seSBhIHNpbmdsZSBzZWNvbmRhcnkgYWN0aW9uIHdpbGwgYmUgYXZhaWxhYmxlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIE92ZXJsYXkgdGhhdCBtYXNrcyB0aGUgcGFnZSB2aWV3IGNvbnRlbnQuIE9ubHkgdGhlIGhlYWRlciBpcyBub3QgbWFza2VkIHdoZW4gdGhlIG92ZXJsYXkgaXMgdmlzaWJsZS4gRGVmYXVsdCBpcyBwZW5kaW5nIE92ZXJsYXkgd2l0aCBubyBtZXNzYWdlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHN0YXR1cz86IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgncGVuZGluZycpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgZW50aXJlIGhlYWRlciwgaW5jbHVkaW5nIGJyZWFkY3J1bWJzIGFuZCBlcnJvciBiYW5uZXIuIERlZmF1bHQgaXMgdHJ1ZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXlzIGFuIGVycm9yIGJhbm5lciB1bmRlciB0aGUgdGl0bGViYXIgd2hlbiBwcm92aWRlZCBhIHZhbHVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlcnJvcnM/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJyZWFkY3J1bWJzIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgaGVhZGVyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBicmVhZGNydW1icz86IE5hdkl0ZW1bXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGl0bGUgc2V0dGluZ3MuIFBhc3NlZCB0byB0aGUgUGFnZVRpdGxlQ29tcG9uZW50LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0aXRsZT86IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgdGl0bGVJY29uPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdWJUaXRsZT86IHN0cmluZztcclxuICBASW5wdXQoKSBwdWJsaWMgc3ViVGl0bGVVcmw/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIExhYmVsIGZvciB0aGUgYWN0aW9ucyBkcm9wZG93biBpbiB0aGUgaGVhZGVyLiBEZWZhdWx0IGlzICdBY3Rpb25zJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtb3JlQWN0aW9uc0xhYmVsPzogc3RyaW5nID0gJ0FjdGlvbnMnO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBhY3Rpb25zIGRyb3Bkb3duIGluIHRoZSBoZWFkZXIuIFRoZSBkcm9wZG93biBpcyBoaWRkZW4gaWYgbm90IG9wdGlvbnMgYXJlIHByb3ZpZGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtb3JlQWN0aW9ucz86IE1lbnVJdGVtW107XHJcblxyXG4gIC8qKlxyXG4gICAqIExhYmVsIGZvciB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiBpbiB0aGUgaGVhZGVyLiBEZWZhdWx0IGlzICdDYW5jZWwnXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNlY29uZGFyeUFjdGlvbkxhYmVsPzogc3RyaW5nID0gJ0NhbmNlbCc7XHJcbiAgQElucHV0KCkgcHVibGljIGhpZGVTZWNvbmRhcnlBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgLyoqIEZsYWcgZm9yIGhpZGluZyB0aGUgdGlueSBjbG9zZSBidXR0b24gaW4gdGhlIHRvcC1yaWdodCBjb3JuZXIgb2YgZGlhbG9nIHdoaWxlIGluIHBlbmRpbmcgc3RhdGUgb25seSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlQ2xvc2VPblBlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTGFiZWwgZm9yIHRoZSBwcmltYXJ5IGJ1dHRvbiBpbiB0aGUgaGVhZGVyLiBEZWZhdWx0IGlzICdTYXZlJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwcmltYXJ5QWN0aW9uTGFiZWw/OiBzdHJpbmcgPSAnU2F2ZSc7XHJcbiAgQElucHV0KCkgcHVibGljIGhpZGVQcmltYXJ5QWN0aW9uID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlcGxhY2VzIHRoZSB0aXRsZSwgc3VidGl0bGUgYW5kIHRpdGxlIGljb25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tVGl0bGVUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VydGVkIHRvIHRoZSBsZWZ0IG9mIHRoZSBkZWZhdWx0IGFjdGlvbnNcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQWN0aW9uc1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZXMgdGhlIHRpdGxlYmFyIGFuZCBhY3Rpb25zIG9mIHRoZSBkZWZhdWx0IGhlYWRlci4gQnJlYWRjcnVtYnMgYW5kIGVycm9yIGJhbm5lciBhcmUgbm90IHJlcGxhY2VkLiBDYW5ub3QgY29udGFpbiBhIDxoZWFkZXI+IGVsZW1lbnQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udGVudCB0byBpbmNsdWRlIGluIHRoZSBmb290ZXJcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBSZXBsYWNlcyB0aGUgRXJyb3IgQmFubmVyIGRlZmF1bHQgdGVtcGxhdGUuIFVzZWZ1bCB3aGVuIHdlIG5lZWQgdG8gc2hvdyBtb3JlIHRoYW4gdGV4dCBpbiB0aGUgYmFubmVyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21FcnJvckJhbm5lclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogUGlucyB0aGUgZm9vdGVyIHRvIHRoZSBib3R0b20gb2YgdGhlIHZpZXcgYW5kIG92ZXJsYXlzIGFueSBvdmVyZmxvd2luZyBjb250ZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHN0aWNreUZvb3RlciA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFByZXZlbnRzIGNvbnRlbnQgZnJvbSBvdmVyZmxvd2luZyB0aGUgdmlldy4gQ29udGVudCBtdXN0IG1hbmFnZSBvdmVyZmxvdyBpbnN0ZWFkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmaXRDb250ZW50ID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc2FibGVzIHRoZSBwcmltYXJ5IGFjdGlvbiBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZVByaW1hcnlBY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgLyoqIENoYW5nZXMgdGhlIGJhY2tncm91bmQgY29sb3IgZm9yIHRoZSBjb250ZW50IGFuZCBvdmVybGF5IHRvIHdoaXRlICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5iZy1jb250ZW50JylcclxuICBASW5wdXQoKSBwdWJsaWMgYmdDb250ZW50ID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25QcmltYXJ5QWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcHVibGljIG9uU2Vjb25kYXJ5QWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBwdWJsaWMgcHJpbWFyeUFjdGlvbihldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5vblByaW1hcnlBY3Rpb24pIHtcclxuICAgICAgdGhpcy5vblByaW1hcnlBY3Rpb24uZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2Vjb25kYXJ5QWN0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm9uU2Vjb25kYXJ5QWN0aW9uKSB7XHJcbiAgICAgIHRoaXMub25TZWNvbmRhcnlBY3Rpb24uZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VEaWFsb2coKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xvc2VMYXRlc3REaWFsb2cobmV3IERpYWxvZ1Jlc3VsdChmYWxzZSkpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGVjT3ZlcmxheVxyXG4gICAgIFtzdGF0dXNdPVwic3RhdHVzPy5zdGF0dXNcIlxyXG4gICAgIFttZXNzYWdlXT1cInN0YXR1cz8ubWVzc2FnZVwiXHJcbiAgICAgW2Rpc3BsYXlBc01hc2tdPVwidHJ1ZVwiXHJcbiAgICAgY2xhc3M9XCJmbGV4LWdyb3cgZC1mbGV4XCJcclxuICAgICBbbmdDbGFzc109XCJ7J2JnLWJvZHknOiAhYmdDb250ZW50LCAnYmctY29udGVudCc6IGJnQ29udGVudH1cIj5cclxuICAgIDxkaXYgaWQ9XCJQYWdlVmlld1Njcm9sbENvbnRhaW5lclwiXHJcbiAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtZ3JvdyBzY3JvbGwteVwiXHJcbiAgICAgICAgIFtjbGFzcy5pcy1kaWFsb2ddPVwiaXNEaWFsb2dcIlxyXG4gICAgICAgICBbY2xhc3MuZml0LWNvbnRlbnRdPVwiZml0Q29udGVudFwiXHJcbiAgICAgICAgIFtjbGFzcy5zdGlja3ktZm9vdGVyXT1cInN0aWNreUZvb3RlciAmJiAhIWZvb3RlclRlbXBsYXRlXCJcclxuICAgICAgICAgW2NsYXNzLm92ZXJsYXktdmlzaWJsZV09XCJzdGF0dXM/LnN0YXR1cyAhPT0gJ2hhc0RhdGEnXCJcclxuICAgICAgICAgW2NsYXNzLmZvb3Rlci12aXNpYmxlXT1cIiEhZm9vdGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICBjZGtTY3JvbGxhYmxlPlxyXG4gICAgICAgIDxzZWN0aW9uPlxyXG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICA8Zm9vdGVyICpuZ0lmPVwiZm9vdGVyVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9mb290ZXI+XHJcblxyXG4gICAgICAgIDxoZWFkZXIgKm5nSWY9XCJzaG93SGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxvbCBpZD1cImJyZWFkY3J1bWJzXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYnJlYWRjcnVtYnM/Lmxlbmd0aCAmJiAhaXNEaWFsb2dcIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgY3J1bWIgb2YgYnJlYWRjcnVtYnM7IGxhc3QgYXMgaXNMYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJjcnVtYi51cmw7IGVsc2UgbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImNydW1iLnVybFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGFiZWxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsYWJlbD57e2NydW1iLmxhYmVsfX08L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC9vbD5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZWJhclwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1wYWdlLXRpdGxlICpuZ0lmPVwiIWN1c3RvbVRpdGxlVGVtcGxhdGU7IGVsc2UgY3VzdG9tVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRpdGxlXT1cInN1YlRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ViVGl0bGVVcmxdPVwic3ViVGl0bGVVcmxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZUljb25dPVwidGl0bGVJY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRpdGxlIHRleHQtdHJ1bmNhdGVcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXBhZ2UtdGl0bGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21UaXRsZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRpdGxlVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZWMtYnV0dG9uIGlkPVwicHJpbWFyeUFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGlkZVByaW1hcnlBY3Rpb24gJiYgb25QcmltYXJ5QWN0aW9uLm9ic2VydmVycz8ubGVuZ3RoICYmICFyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3RhdHVzPy5zdGF0dXMgPT09ICdwZW5kaW5nJyB8fCBkaXNhYmxlUHJpbWFyeUFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicHJpbWFyeUFjdGlvbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGlja2VkKT1cInByaW1hcnlBY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZWMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxlYy1idXR0b24gaWQ9XCJzZWNvbmRhcnlBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWNvbmRhcnlBY3Rpb24gJiYgb25TZWNvbmRhcnlBY3Rpb24ub2JzZXJ2ZXJzPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicmVhZG9ubHkgPyAnQ2xvc2UnIDogc2Vjb25kYXJ5QWN0aW9uTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwic2Vjb25kYXJ5QWN0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2VjLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZWMtZHJvcGRvd24gaWQ9XCJtb3JlQWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibW9yZUFjdGlvbnM/Lmxlbmd0aCAmJiAhcmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3RhdHVzPy5zdGF0dXMgPT09ICdwZW5kaW5nJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm1vcmVBY3Rpb25zTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwibW9yZUFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2VjLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21BY3Rpb25zVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXN0b21IZWFkZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUhlYWRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGVjLWJhbm5lciAqbmdJZj1cIiFjdXN0b21FcnJvckJhbm5lclRlbXBsYXRlICYmIGVycm9yczsgZWxzZSBjdXN0b21FcnJvckJhbm5lck91dGxldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwYWdlVmlld0Vycm9yc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1ib3R0b20tMF09XCIhaXNEaWFsb2dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJlcnJvcnNcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9lYy1iYW5uZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUVycm9yQmFubmVyT3V0bGV0PlxyXG4gICAgICAgICAgICAgICAgPGVjLWJhbm5lciAqbmdJZj1cImVycm9yc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicGFnZVZpZXdFcnJvcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLWJvdHRvbS0wXT1cIiFpc0RpYWxvZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21FcnJvckJhbm5lclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2VjLWJhbm5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2hlYWRlcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxlYy1idXR0b24gKm5nSWY9XCJpc0RpYWxvZyAmJiAoIChzdGF0dXM/LnN0YXR1cyA9PT0gJ3BlbmRpbmcnICYmICFoaWRlQ2xvc2VPblBlbmRpbmcpIHx8IHN0YXR1cz8uc3RhdHVzID09PSAnZXJyb3InKVwiXHJcbiAgICAgICAgICAgICAgIGlkPVwicGFnZVZpZXdEaWFsb2dDbG9zZVwiXHJcbiAgICAgICAgICAgICAgIHR5cGU9XCJpY29uXCJcclxuICAgICAgICAgICAgICAgaWNvbj1cImljb24tY2FuY2VsXCJcclxuICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiY2xvc2VEaWFsb2coKVwiPlxyXG4gICAgPC9lYy1idXR0b24+XHJcbjwvZGl2PiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { Injector } from '@angular/core';
2
+ import { ClipboardService } from 'ngx-clipboard';
3
+ import { SpyFactory } from './spy-factory.spec';
4
+ export class CopyButtonBaseTestInjectorFactory {
5
+ static getComponentInjector() {
6
+ return Injector.create({
7
+ providers: [
8
+ {
9
+ provide: ClipboardService,
10
+ useFactory: () => SpyFactory.createSpy(ClipboardService),
11
+ deps: []
12
+ }
13
+ ]
14
+ });
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS1idXR0b24tYmFzZS10ZXN0LWluamVjdG9yLWZhY3Rvcnkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdGVzdGluZy9jb3B5LWJ1dHRvbi1iYXNlLXRlc3QtaW5qZWN0b3ItZmFjdG9yeS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVoRCxNQUFNLE9BQU8saUNBQWlDO0lBRXJDLE1BQU0sQ0FBQyxvQkFBb0I7UUFDaEMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3JCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsZ0JBQWdCO29CQUN6QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDeEQsSUFBSSxFQUFFLEVBQUU7aUJBQ1Q7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENsaXBib2FyZFNlcnZpY2UgfSBmcm9tICduZ3gtY2xpcGJvYXJkJztcclxuaW1wb3J0IHsgU3B5RmFjdG9yeSB9IGZyb20gJy4vc3B5LWZhY3Rvcnkuc3BlYyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29weUJ1dHRvbkJhc2VUZXN0SW5qZWN0b3JGYWN0b3J5IHtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRDb21wb25lbnRJbmplY3RvcigpIHtcclxuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwcm92aWRlOiBDbGlwYm9hcmRTZXJ2aWNlLFxyXG4gICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gU3B5RmFjdG9yeS5jcmVhdGVTcHkoQ2xpcGJvYXJkU2VydmljZSksXHJcbiAgICAgICAgICBkZXBzOiBbXVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgfSk7XHJcbiAgfVxyXG59Il19
@@ -0,0 +1,17 @@
1
+ import { Injector } from '@angular/core';
2
+ import { TelemetryService } from '../../core/telemetry.service';
3
+ import { SpyFactory } from './spy-factory.spec';
4
+ export class HierarchyBaseTestInjectorFactory {
5
+ static getComponentInjector() {
6
+ return Injector.create({
7
+ providers: [
8
+ {
9
+ provide: TelemetryService,
10
+ useFactory: () => SpyFactory.createSpy(TelemetryService),
11
+ deps: []
12
+ }
13
+ ]
14
+ });
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWJhc2UtdGVzdC1pbmplY3Rvci1mYWN0b3J5LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3Rlc3RpbmcvaGllcmFyY2h5LWJhc2UtdGVzdC1pbmplY3Rvci1mYWN0b3J5LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGdDQUFnQztJQUVwQyxNQUFNLENBQUMsb0JBQW9CO1FBQ2hDLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNyQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLGdCQUFnQjtvQkFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3hELElBQUksRUFBRSxFQUFFO2lCQUNUO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNweUZhY3RvcnkgfSBmcm9tICcuL3NweS1mYWN0b3J5LnNwZWMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEhpZXJhcmNoeUJhc2VUZXN0SW5qZWN0b3JGYWN0b3J5IHtcclxuICBcclxuICBwdWJsaWMgc3RhdGljIGdldENvbXBvbmVudEluamVjdG9yKCkge1xyXG4gICAgcmV0dXJuIEluamVjdG9yLmNyZWF0ZSh7XHJcbiAgICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHByb3ZpZGU6IFRlbGVtZXRyeVNlcnZpY2UsXHJcbiAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiBTcHlGYWN0b3J5LmNyZWF0ZVNweShUZWxlbWV0cnlTZXJ2aWNlKSxcclxuICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgICBdXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,38 @@
1
+ import { clickEvent } from "./translation-mocks.spec";
2
+ export class PageBaseComponentTestHelper {
3
+ /**
4
+ * Shortcut to access the component's controls
5
+ */
6
+ get controls() {
7
+ return this._component.formGroup.controls;
8
+ }
9
+ constructor(component) {
10
+ this._component = component;
11
+ }
12
+ /**
13
+ * Call and await ngOnInit and ngAfterViewInit
14
+ *
15
+ * @returns {Promise<void>}
16
+ */
17
+ async initialize() {
18
+ await this._component.ngOnInit();
19
+ await this._component.ngAfterViewInit();
20
+ }
21
+ /**
22
+ * Simulate clicking of "Save" button
23
+ *
24
+ * @returns {Promise<void>}
25
+ */
26
+ async clickSave() {
27
+ await this._component.onSave(clickEvent);
28
+ }
29
+ /**
30
+ * Simulate saving without validate
31
+ *
32
+ * @returns {Promise<void>}
33
+ */
34
+ async clickSaveWithoutValidate() {
35
+ await this._component.onSaveWithoutValidate(clickEvent);
36
+ }
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLWNvbXBvbmVudC10ZXN0LWhlbHBlci5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC90ZXN0aW5nL3BhZ2UtYmFzZS1jb21wb25lbnQtdGVzdC1oZWxwZXIuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdEQsTUFBTSxPQUFPLDJCQUEyQjtJQUd0Qzs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUM1QyxDQUFDO0lBRUQsWUFBWSxTQUFZO1FBQ3RCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLFVBQVU7UUFDckIsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxTQUFTO1FBQ3BCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVDOzs7O0tBSUM7SUFDTyxLQUFLLENBQUMsd0JBQXdCO1FBQ3BDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgUGFnZUJhc2VDb21wb25lbnQgfSBmcm9tIFwiLi4vcGFnZS9wYWdlLWJhc2UvcGFnZS1iYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBjbGlja0V2ZW50IH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tbW9ja3Muc3BlY1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhZ2VCYXNlQ29tcG9uZW50VGVzdEhlbHBlcjxUIGV4dGVuZHMgUGFnZUJhc2VDb21wb25lbnQ+IHtcclxuICBwcml2YXRlIF9jb21wb25lbnQ6IFQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3J0Y3V0IHRvIGFjY2VzcyB0aGUgY29tcG9uZW50J3MgY29udHJvbHNcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGNvbnRyb2xzKCk6IHsgW2tleTogc3RyaW5nXTogQWJzdHJhY3RDb250cm9sIH0ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudC5mb3JtR3JvdXAuY29udHJvbHM7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQ6IFQpIHtcclxuICAgIHRoaXMuX2NvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGwgYW5kIGF3YWl0IG5nT25Jbml0IGFuZCBuZ0FmdGVyVmlld0luaXRcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5fY29tcG9uZW50Lm5nT25Jbml0KCk7XHJcbiAgICBhd2FpdCB0aGlzLl9jb21wb25lbnQubmdBZnRlclZpZXdJbml0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaW11bGF0ZSBjbGlja2luZyBvZiBcIlNhdmVcIiBidXR0b25cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBjbGlja1NhdmUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9jb21wb25lbnQub25TYXZlKGNsaWNrRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBTaW11bGF0ZSBzYXZpbmcgd2l0aG91dCB2YWxpZGF0ZVxyXG4gICAqXHJcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XHJcbiAgICovXHJcbiAgICAgcHVibGljIGFzeW5jIGNsaWNrU2F2ZVdpdGhvdXRWYWxpZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgYXdhaXQgdGhpcy5fY29tcG9uZW50Lm9uU2F2ZVdpdGhvdXRWYWxpZGF0ZShjbGlja0V2ZW50KTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,98 @@
1
+ import { Injector } from "@angular/core";
2
+ import { ActivatedRoute, Router } from "@angular/router";
3
+ import { TranslateService } from "@ngx-translate/core";
4
+ import { ErrorService } from "../../core/error.service";
5
+ import { RouterHelper } from "../../core/router-helper.service";
6
+ import { ScrollService } from "../../core/scroll.service";
7
+ import { TelemetryService } from '../../core/telemetry.service';
8
+ import { DialogService } from "../../display/dialog/dialog.service";
9
+ import { SplashService } from "../../display/splash/splash.service";
10
+ import { MockActivatedRoute, mockRouterFactory, mockRouterHelperFactory } from "./public-mocks.spec";
11
+ import { SpyFactory } from "./spy-factory.spec";
12
+ import { MockTranslateService } from "./translation-mocks.spec";
13
+ /**
14
+ * Contains static methods to create common injectors for unit testing
15
+ */
16
+ export class PageBaseComponentTestInjectorFactory {
17
+ /**
18
+ * Core services retrieved via the @see Injector in our base classes.
19
+ */
20
+ static { this.CoreProviders = [
21
+ {
22
+ provide: Router,
23
+ useFactory: mockRouterFactory,
24
+ deps: [],
25
+ },
26
+ {
27
+ provide: ScrollService,
28
+ useFactory: () => {
29
+ return SpyFactory.createSpy(ScrollService);
30
+ },
31
+ deps: []
32
+ },
33
+ {
34
+ provide: ActivatedRoute,
35
+ useFactory: () => {
36
+ return new MockActivatedRoute();
37
+ },
38
+ deps: [],
39
+ },
40
+ {
41
+ provide: SplashService,
42
+ useFactory: () => {
43
+ return SpyFactory.createSpy(SplashService);
44
+ },
45
+ deps: []
46
+ }
47
+ ]; }
48
+ /**
49
+ * Services and such retrieved by @see PageBaseComponent via the @see Injector
50
+ * in addition to our core services
51
+ */
52
+ static { this.ComponentProviders = [
53
+ {
54
+ provide: TranslateService,
55
+ useFactory: () => new MockTranslateService('-T'),
56
+ deps: []
57
+ },
58
+ { provide: ErrorService, deps: [] },
59
+ {
60
+ provide: DialogService,
61
+ useFactory: () => {
62
+ return SpyFactory.createSpy(DialogService);
63
+ },
64
+ deps: []
65
+ },
66
+ {
67
+ provide: RouterHelper,
68
+ useFactory: () => mockRouterHelperFactory(),
69
+ deps: []
70
+ }
71
+ ]; }
72
+ /**
73
+ * Services and such retrieved by @see WizardBaseComponent via the @see Injector
74
+ * in addition to our core and @see PageBaseComponent services
75
+ */
76
+ static { this.WizardProviders = [
77
+ {
78
+ provide: TelemetryService,
79
+ useFactory: () => {
80
+ return SpyFactory.createSpy(TelemetryService);
81
+ },
82
+ deps: []
83
+ }
84
+ ]; }
85
+ /**
86
+ * Get an injector which provides spy and mock objects needed by the @see PageBaseComponent
87
+ */
88
+ static getComponentInjector() {
89
+ return Injector.create({ providers: [...this.CoreProviders, ...this.ComponentProviders] });
90
+ }
91
+ /**
92
+ * Get an injector which provides spy and mock objects needed by the @see WizardBaseComponent
93
+ */
94
+ static getWizardBaseComponentInjector() {
95
+ return Injector.create({ providers: [...this.CoreProviders, ...this.ComponentProviders, ...this.WizardProviders] });
96
+ }
97
+ }
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1iYXNlLWNvbXBvbmVudC10ZXN0LWluamVjdG9yLWZhY3Rvcnkuc3BlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9zaGFyZWQvdGVzdGluZy9wYWdlLWJhc2UtY29tcG9uZW50LXRlc3QtaW5qZWN0b3ItZmFjdG9yeS5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFaEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0NBQW9DO0lBRTdDOztPQUVHO2FBQ1ksa0JBQWEsR0FBcUI7UUFDN0M7WUFDSSxPQUFPLEVBQUUsTUFBTTtZQUNmLFVBQVUsRUFBRSxpQkFBaUI7WUFDN0IsSUFBSSxFQUFFLEVBQUU7U0FDWDtRQUNEO1lBQ0ksT0FBTyxFQUFFLGFBQWE7WUFDdEIsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDYixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUE7WUFDOUMsQ0FBQztZQUNELElBQUksRUFBRSxFQUFFO1NBQ1g7UUFDRDtZQUNJLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDcEMsQ0FBQztZQUNELElBQUksRUFBRSxFQUFFO1NBQ1g7UUFDRDtZQUNJLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQzlDLENBQUM7WUFDRCxJQUFJLEVBQUUsRUFBRTtTQUNYO0tBQ0osQ0FBQztJQUVGOzs7T0FHRzthQUNZLHVCQUFrQixHQUFxQjtRQUNsRDtZQUNJLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDO1lBQ2hELElBQUksRUFBRSxFQUFFO1NBQ1g7UUFDRCxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtRQUNuQztZQUNJLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQzlDLENBQUM7WUFDRCxJQUFJLEVBQUUsRUFBRTtTQUNYO1FBQ0Q7WUFDSSxPQUFPLEVBQUUsWUFBWTtZQUNyQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQXVCLEVBQUU7WUFDM0MsSUFBSSxFQUFFLEVBQUU7U0FDWDtLQUNKLENBQUM7SUFFRjs7O09BR0c7YUFDWSxvQkFBZSxHQUFxQjtRQUMvQztZQUNJLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDYixPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0QsSUFBSSxFQUFFLEVBQUU7U0FDWDtLQUNKLENBQUM7SUFFRjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0I7UUFDOUIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyw4QkFBOEI7UUFDekMsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4SCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0b3IsIFN0YXRpY1Byb3ZpZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IEVycm9yU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL2Vycm9yLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUm91dGVySGVscGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvcm91dGVyLWhlbHBlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNjcm9sbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZGlzcGxheS9kaWFsb2cvZGlhbG9nLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3BsYXNoU2VydmljZSB9IGZyb20gXCIuLi8uLi9kaXNwbGF5L3NwbGFzaC9zcGxhc2guc2VydmljZVwiO1xyXG5pbXBvcnQgeyBNb2NrQWN0aXZhdGVkUm91dGUsIG1vY2tSb3V0ZXJGYWN0b3J5LCBtb2NrUm91dGVySGVscGVyRmFjdG9yeSB9IGZyb20gXCIuL3B1YmxpYy1tb2Nrcy5zcGVjXCI7XHJcbmltcG9ydCB7IFNweUZhY3RvcnkgfSBmcm9tIFwiLi9zcHktZmFjdG9yeS5zcGVjXCI7XHJcbmltcG9ydCB7IE1vY2tUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tbW9ja3Muc3BlY1wiO1xyXG5cclxuLyoqXHJcbiAqIENvbnRhaW5zIHN0YXRpYyBtZXRob2RzIHRvIGNyZWF0ZSBjb21tb24gaW5qZWN0b3JzIGZvciB1bml0IHRlc3RpbmdcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQYWdlQmFzZUNvbXBvbmVudFRlc3RJbmplY3RvckZhY3Rvcnkge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29yZSBzZXJ2aWNlcyByZXRyaWV2ZWQgdmlhIHRoZSBAc2VlIEluamVjdG9yIGluIG91ciBiYXNlIGNsYXNzZXMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIENvcmVQcm92aWRlcnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBSb3V0ZXIsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IG1vY2tSb3V0ZXJGYWN0b3J5LFxyXG4gICAgICAgICAgICBkZXBzOiBbXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogU2Nyb2xsU2VydmljZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNweUZhY3RvcnkuY3JlYXRlU3B5KFNjcm9sbFNlcnZpY2UpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1vY2tBY3RpdmF0ZWRSb3V0ZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBkZXBzOiBbXSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogU3BsYXNoU2VydmljZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNweUZhY3RvcnkuY3JlYXRlU3B5KFNwbGFzaFNlcnZpY2UpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlcnZpY2VzIGFuZCBzdWNoIHJldHJpZXZlZCBieSBAc2VlIFBhZ2VCYXNlQ29tcG9uZW50IHZpYSB0aGUgQHNlZSBJbmplY3RvclxyXG4gICAgICogaW4gYWRkaXRpb24gdG8gb3VyIGNvcmUgc2VydmljZXNcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzdGF0aWMgQ29tcG9uZW50UHJvdmlkZXJzOiBTdGF0aWNQcm92aWRlcltdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gbmV3IE1vY2tUcmFuc2xhdGVTZXJ2aWNlKCctVCcpLFxyXG4gICAgICAgICAgICBkZXBzOiBbXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBwcm92aWRlOiBFcnJvclNlcnZpY2UsIGRlcHM6IFtdIH0sXHJcbiAgICAgICAgeyBcclxuICAgICAgICAgICAgcHJvdmlkZTogRGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFNweUZhY3RvcnkuY3JlYXRlU3B5KERpYWxvZ1NlcnZpY2UpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRlcHM6IFtdXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFJvdXRlckhlbHBlcixcclxuICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gbW9ja1JvdXRlckhlbHBlckZhY3RvcnkoKSxcclxuICAgICAgICAgICAgZGVwczogW11cclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZXMgYW5kIHN1Y2ggcmV0cmlldmVkIGJ5IEBzZWUgV2l6YXJkQmFzZUNvbXBvbmVudCB2aWEgdGhlIEBzZWUgSW5qZWN0b3JcclxuICAgICAqIGluIGFkZGl0aW9uIHRvIG91ciBjb3JlIGFuZCBAc2VlIFBhZ2VCYXNlQ29tcG9uZW50IHNlcnZpY2VzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3RhdGljIFdpemFyZFByb3ZpZGVyczogU3RhdGljUHJvdmlkZXJbXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IFRlbGVtZXRyeVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTcHlGYWN0b3J5LmNyZWF0ZVNweShUZWxlbWV0cnlTZXJ2aWNlKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZGVwczogW11cclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IGFuIGluamVjdG9yIHdoaWNoIHByb3ZpZGVzIHNweSBhbmQgbW9jayBvYmplY3RzIG5lZWRlZCBieSB0aGUgQHNlZSBQYWdlQmFzZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldENvbXBvbmVudEluamVjdG9yKCk6IEluamVjdG9yIHtcclxuICAgICAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbLi4udGhpcy5Db3JlUHJvdmlkZXJzLCAuLi50aGlzLkNvbXBvbmVudFByb3ZpZGVyc10gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgYW4gaW5qZWN0b3Igd2hpY2ggcHJvdmlkZXMgc3B5IGFuZCBtb2NrIG9iamVjdHMgbmVlZGVkIGJ5IHRoZSBAc2VlIFdpemFyZEJhc2VDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgIHB1YmxpYyBzdGF0aWMgZ2V0V2l6YXJkQmFzZUNvbXBvbmVudEluamVjdG9yKCk6IEluamVjdG9yIHtcclxuICAgICAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbLi4udGhpcy5Db3JlUHJvdmlkZXJzLCAuLi50aGlzLkNvbXBvbmVudFByb3ZpZGVycywgLi4udGhpcy5XaXphcmRQcm92aWRlcnNdIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,148 @@
1
+ /**
2
+ * @fileoverview
3
+ * Test mocks that can be used by consumers of this library.
4
+ * If you do not want to export a mock, add it to `common-mocks.spec.ts` instead.
5
+ */
6
+ import { EventEmitter, Input, Output, Pipe, Directive, Injectable } from '@angular/core';
7
+ import { Subject } from 'rxjs';
8
+ import { Router } from '@angular/router';
9
+ import { SpyFactory } from './spy-factory.spec';
10
+ import { RouterHelper } from '../../core/router-helper.service';
11
+ import * as i0 from "@angular/core";
12
+ /**
13
+ * Mock dialog based on the content type, used to test open and close functionality
14
+ * @deprecated Most components that need a dialog should use `dialogService.openDialog()`, which is much easier to test
15
+ * and does not require the use of this class. It is included for legacy test support only.
16
+ */
17
+ export class MockDialog {
18
+ constructor() {
19
+ this.opened = new EventEmitter();
20
+ this.closed = new EventEmitter();
21
+ this.displayAsPanel = false;
22
+ }
23
+ async open(component, context, options) {
24
+ this.lastContext = context;
25
+ this.componentRef = {
26
+ instance: new MockDialogContent()
27
+ };
28
+ this.opened.emit();
29
+ }
30
+ close(result) {
31
+ this.closed.emit(result);
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MockDialog, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
34
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: MockDialog, inputs: { size: "size" }, outputs: { opened: "opened", closed: "closed" }, ngImport: i0 }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MockDialog, decorators: [{
37
+ type: Directive
38
+ }], propDecorators: { size: [{
39
+ type: Input
40
+ }], opened: [{
41
+ type: Output
42
+ }], closed: [{
43
+ type: Output
44
+ }] } });
45
+ ;
46
+ /**
47
+ * Mocked dialog content to test save and cancel
48
+ */
49
+ export class MockDialogContent {
50
+ constructor() {
51
+ this.dialogId = 'MockID';
52
+ this.onOpen = (openContext) => { this.openArg = openContext; };
53
+ this.onDialogSave = new EventEmitter();
54
+ this.onDialogCancel = new EventEmitter();
55
+ this.destroyed = new Subject();
56
+ }
57
+ }
58
+ ;
59
+ /**
60
+ * Mocked DateDisplayPipe
61
+ */
62
+ export class MockDateDisplayPipe {
63
+ transform(value) {
64
+ return '01/01/2017';
65
+ }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MockDateDisplayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
67
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: MockDateDisplayPipe, name: "dateDisplay" }); }
68
+ }
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MockDateDisplayPipe, decorators: [{
70
+ type: Pipe,
71
+ args: [{ name: 'dateDisplay' }]
72
+ }] });
73
+ /** Return a Router spy object that can be used as a mock in tests.*/
74
+ export function mockRouterFactory() {
75
+ const mockRouter = SpyFactory.createSpy(Router);
76
+ mockRouter.isActive.and.returnValue(false);
77
+ mockRouter.navigate.and.returnValue(Promise.resolve(true));
78
+ Object.defineProperty(mockRouter, 'events', { value: new Subject(), configurable: true });
79
+ Object.defineProperty(mockRouter, 'url', { value: '/current/route/url', writable: true });
80
+ return mockRouter;
81
+ }
82
+ /**
83
+ * Mock {@link ActivatedRoute} for spying on route and query parameters
84
+ *
85
+ * @example <caption>Declare!</caption>
86
+ * let mockActivatedRoute: MockActivatedRoute = new MockActivatedRoute();
87
+ * let paramMapSpy: jasmine.Spy;
88
+ * let queryParamMapSpy: jasmine.Spy;
89
+ * @example <caption>Provide!</caption>
90
+ * providers: [
91
+ * ...
92
+ * { provide: ActivatedRoute, useValue: mockActivatedRoute },
93
+ * ...
94
+ * ]
95
+ * @example <caption>Spy!</caption>
96
+ * paramMapSpy = spyOn(mockActivatedRoute.snapshot.paramMap, 'get');
97
+ * queryParamMapSpy = spyOn(mockActivatedRoute.snapshot.queryParamMap, 'get');
98
+ * @example <caption>Manipulate!</caption>
99
+ * paramMapSpy.and.returnValue("1234");
100
+ * queryParamMapSpy.and.returnValue("4321");
101
+ */
102
+ export class MockActivatedRoute {
103
+ constructor() {
104
+ this.snapshot = {
105
+ paramMap: {
106
+ get: function (name) {
107
+ return null;
108
+ }
109
+ },
110
+ queryParamMap: {
111
+ get: function (name) {
112
+ return null;
113
+ },
114
+ getAll: function (name) {
115
+ return [];
116
+ },
117
+ has: function (name) {
118
+ return false;
119
+ }
120
+ },
121
+ routeConfig: {},
122
+ };
123
+ this.paramMap = new Subject();
124
+ this.queryParamMap = new Subject();
125
+ this.routeConfig = {};
126
+ }
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MockActivatedRoute, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
128
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MockActivatedRoute }); }
129
+ }
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MockActivatedRoute, decorators: [{
131
+ type: Injectable
132
+ }] });
133
+ /** Return a @see RouterHelper spy object that can be used as a mock in tests */
134
+ export function mockRouterHelperFactory() {
135
+ const mockRouterHelper = SpyFactory.createSpy(RouterHelper);
136
+ mockRouterHelper.getFullRouteParamMap.and.callFake((route) => route.paramMap);
137
+ mockRouterHelper.getFullRouteParams.and.callFake((route) => route.params);
138
+ mockRouterHelper.serializeUrlFromRoot.and.returnValue('serialized/url/from/root');
139
+ mockRouterHelper.getLastRouteDescendant.and.callFake((route) => route);
140
+ mockRouterHelper.executeWithNavigationWatcher.and.callFake(async (asyncFunc, doFunc, router) => {
141
+ const result = await asyncFunc();
142
+ await doFunc(result);
143
+ return result;
144
+ });
145
+ mockRouterHelper.getViewUrlSegments.and.returnValue([]);
146
+ return mockRouterHelper;
147
+ }
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLW1vY2tzLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvc2hhcmVkL3Rlc3RpbmcvcHVibGljLW1vY2tzLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILE9BQU8sRUFBZ0IsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUF1QixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0IsT0FBTyxFQUEwQyxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUNoRTs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLFVBQVU7SUFEdkI7UUFHcUIsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3BELFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM5RCxtQkFBYyxHQUFZLEtBQUssQ0FBQztLQWdCMUM7SUFaVSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQWlDLEVBQUUsT0FBVyxFQUFFLE9BQXVCO1FBQ3JGLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQXNCO1lBQ25DLFFBQVEsRUFBRSxJQUFJLGlCQUFpQixFQUFLO1NBQ3ZDLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBd0I7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0IsQ0FBQzsrR0FuQlEsVUFBVTttR0FBVixVQUFVOzs0RkFBVixVQUFVO2tCQUR0QixTQUFTOzhCQUVVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1csTUFBTTtzQkFBdEIsTUFBTTtnQkFDVSxNQUFNO3NCQUF0QixNQUFNOztBQWlCVixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQTlCO1FBQ1csYUFBUSxHQUFXLFFBQVEsQ0FBQztRQUU1QixXQUFNLEdBQTBDLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNoRyxpQkFBWSxHQUFvQixJQUFJLFlBQVksRUFBSyxDQUFDO1FBQ3RELG1CQUFjLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFFOUQsY0FBUyxHQUFpQixJQUFJLE9BQU8sRUFBTyxDQUFDO0lBQ3hELENBQUM7Q0FBQTtBQUFBLENBQUM7QUFFRjs7R0FFRztBQUVILE1BQU0sT0FBTyxtQkFBbUI7SUFDNUIsU0FBUyxDQUFDLEtBQTRCO1FBQ2xDLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7K0dBSFEsbUJBQW1COzZHQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBRC9CLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFOztBQU83QixxRUFBcUU7QUFDckUsTUFBTSxVQUFVLGlCQUFpQjtJQUM3QixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNELE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLE9BQU8sRUFBUyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUUxRixPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRUksYUFBUSxHQUFHO1lBQ1AsUUFBUSxFQUFFO2dCQUNOLEdBQUcsRUFBRSxVQUFVLElBQVk7b0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO2dCQUNoQixDQUFDO2FBQ0o7WUFDRCxhQUFhLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFLFVBQVUsSUFBWTtvQkFDdkIsT0FBTyxJQUFJLENBQUM7Z0JBQ2hCLENBQUM7Z0JBRUQsTUFBTSxFQUFFLFVBQVUsSUFBWTtvQkFDMUIsT0FBTyxFQUFFLENBQUM7Z0JBQ2QsQ0FBQztnQkFFRCxHQUFHLEVBQUUsVUFBVSxJQUFZO29CQUN2QixPQUFPLEtBQUssQ0FBQztnQkFDakIsQ0FBQzthQUNKO1lBQ0QsV0FBVyxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUNGLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM5QixnQkFBVyxHQUFHLEVBQUUsQ0FBQTtLQUNuQjsrR0F6Qlksa0JBQWtCO21IQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVU7O0FBNEJYLGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsdUJBQXVCO0lBQ25DLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1RCxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBNkIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUE2QixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEcsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2xGLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RixnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUE2QixFQUFFLE1BQXNDLEVBQUUsTUFBVyxFQUFFLEVBQUU7UUFDdEosTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLEVBQUUsQ0FBQztRQUNqQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUMsQ0FBQztJQUNILGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEQsT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBmaWxlb3ZlcnZpZXdcclxuICogVGVzdCBtb2NrcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IGNvbnN1bWVycyBvZiB0aGlzIGxpYnJhcnkuXHJcbiAqIElmIHlvdSBkbyBub3Qgd2FudCB0byBleHBvcnQgYSBtb2NrLCBhZGQgaXQgdG8gYGNvbW1vbi1tb2Nrcy5zcGVjLnRzYCBpbnN0ZWFkLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBQaXBlLCBQaXBlVHJhbnNmb3JtLCBUeXBlLCBEaXJlY3RpdmUsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBEaWFsb2dSZXN1bHQsIERpYWxvZ09wdGlvbnMgfSBmcm9tICcuLi8uLi9kaXNwbGF5L2RpYWxvZy9kaWFsb2ctdHlwZXMnO1xyXG5pbXBvcnQgeyBEaWFsb2dDb250ZW50IH0gZnJvbSAnLi4vLi4vZGlzcGxheS9kaWFsb2cvZGlhbG9nLWNvbnRlbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3B5RmFjdG9yeSB9IGZyb20gJy4vc3B5LWZhY3Rvcnkuc3BlYyc7XHJcbmltcG9ydCB7fSBmcm9tICdqYXNtaW5lJztcclxuaW1wb3J0IHsgUm91dGVySGVscGVyIH0gZnJvbSAnLi4vLi4vY29yZS9yb3V0ZXItaGVscGVyLnNlcnZpY2UnO1xyXG4vKipcclxuICogTW9jayBkaWFsb2cgYmFzZWQgb24gdGhlIGNvbnRlbnQgdHlwZSwgdXNlZCB0byB0ZXN0IG9wZW4gYW5kIGNsb3NlIGZ1bmN0aW9uYWxpdHlcclxuICogQGRlcHJlY2F0ZWQgTW9zdCBjb21wb25lbnRzIHRoYXQgbmVlZCBhIGRpYWxvZyBzaG91bGQgdXNlIGBkaWFsb2dTZXJ2aWNlLm9wZW5EaWFsb2coKWAsIHdoaWNoIGlzIG11Y2ggZWFzaWVyIHRvIHRlc3RcclxuICogICAgICAgICAgICAgICBhbmQgZG9lcyBub3QgcmVxdWlyZSB0aGUgdXNlIG9mIHRoaXMgY2xhc3MuIEl0IGlzIGluY2x1ZGVkIGZvciBsZWdhY3kgdGVzdCBzdXBwb3J0IG9ubHkuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGNsYXNzIE1vY2tEaWFsb2c8VD4ge1xyXG4gICAgQElucHV0KCkgcHVibGljIHNpemU/OiBudW1iZXIgfCAneHNtYWxsJyB8ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9wZW5lZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgcHVibGljIGRpc3BsYXlBc1BhbmVsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGNvbXBvbmVudFJlZiE6IENvbXBvbmVudFJlZjxhbnk+O1xyXG4gICAgcHVibGljIGxhc3RDb250ZXh0PzogVDtcclxuICAgIHB1YmxpYyBhc3luYyBvcGVuKGNvbXBvbmVudDogVHlwZTxEaWFsb2dDb250ZW50PFQ+PiwgY29udGV4dD86IFQsIG9wdGlvbnM/OiBEaWFsb2dPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5sYXN0Q29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSA8Q29tcG9uZW50UmVmPGFueT4+e1xyXG4gICAgICAgICAgICBpbnN0YW5jZTogbmV3IE1vY2tEaWFsb2dDb250ZW50PFQ+KClcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNsb3NlKHJlc3VsdD86IERpYWxvZ1Jlc3VsdDxUPik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xvc2VkLmVtaXQocmVzdWx0KTtcclxuICAgIH1cclxufTtcclxuXHJcbi8qKlxyXG4gKiBNb2NrZWQgZGlhbG9nIGNvbnRlbnQgdG8gdGVzdCBzYXZlIGFuZCBjYW5jZWxcclxuICovXHJcbmV4cG9ydCBjbGFzcyBNb2NrRGlhbG9nQ29udGVudDxUPiBpbXBsZW1lbnRzIERpYWxvZ0NvbnRlbnQ8VD4ge1xyXG4gICAgcHVibGljIGRpYWxvZ0lkOiBzdHJpbmcgPSAnTW9ja0lEJztcclxuICAgIHB1YmxpYyBvcGVuQXJnOiBUIHwgdW5kZWZpbmVkO1xyXG4gICAgcHVibGljIG9uT3BlbjogKG9wZW5Db250ZXh0PzogVCB8IHVuZGVmaW5lZCkgPT4gdm9pZCA9IChvcGVuQ29udGV4dCkgPT4geyB0aGlzLm9wZW5BcmcgPSBvcGVuQ29udGV4dDsgfVxyXG4gICAgcHVibGljIG9uRGlhbG9nU2F2ZTogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xyXG4gICAgcHVibGljIG9uRGlhbG9nQ2FuY2VsOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHVibGljIGRlc3Ryb3llZDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE1vY2tlZCBEYXRlRGlzcGxheVBpcGVcclxuICovXHJcbkBQaXBlKHsgbmFtZTogJ2RhdGVEaXNwbGF5JyB9KVxyXG5leHBvcnQgY2xhc3MgTW9ja0RhdGVEaXNwbGF5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgdHJhbnNmb3JtKHZhbHVlPzogRGF0ZSB8IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnMDEvMDEvMjAxNyc7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiBSZXR1cm4gYSBSb3V0ZXIgc3B5IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgbW9jayBpbiB0ZXN0cy4qL1xyXG5leHBvcnQgZnVuY3Rpb24gbW9ja1JvdXRlckZhY3RvcnkoKTogamFzbWluZS5TcHlPYmo8Um91dGVyPiB7XHJcbiAgICBjb25zdCBtb2NrUm91dGVyID0gU3B5RmFjdG9yeS5jcmVhdGVTcHkoUm91dGVyKTtcclxuICAgIG1vY2tSb3V0ZXIuaXNBY3RpdmUuYW5kLnJldHVyblZhbHVlKGZhbHNlKTtcclxuICAgIG1vY2tSb3V0ZXIubmF2aWdhdGUuYW5kLnJldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZSh0cnVlKSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9ja1JvdXRlciwgJ2V2ZW50cycsIHsgdmFsdWU6IG5ldyBTdWJqZWN0PEV2ZW50PigpLCBjb25maWd1cmFibGU6IHRydWUgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9ja1JvdXRlciwgJ3VybCcsIHsgdmFsdWU6ICcvY3VycmVudC9yb3V0ZS91cmwnLCB3cml0YWJsZTogdHJ1ZSB9KTtcclxuXHJcbiAgICByZXR1cm4gbW9ja1JvdXRlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1vY2sge0BsaW5rIEFjdGl2YXRlZFJvdXRlfSBmb3Igc3B5aW5nIG9uIHJvdXRlIGFuZCBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAqXHJcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkRlY2xhcmUhPC9jYXB0aW9uPlxyXG4gKiBsZXQgbW9ja0FjdGl2YXRlZFJvdXRlOiBNb2NrQWN0aXZhdGVkUm91dGUgPSBuZXcgTW9ja0FjdGl2YXRlZFJvdXRlKCk7XHJcbiAqIGxldCBwYXJhbU1hcFNweTogamFzbWluZS5TcHk7XHJcbiAqIGxldCBxdWVyeVBhcmFtTWFwU3B5OiBqYXNtaW5lLlNweTtcclxuICogQGV4YW1wbGUgPGNhcHRpb24+UHJvdmlkZSE8L2NhcHRpb24+XHJcbiAqIHByb3ZpZGVyczogW1xyXG4gKiAgICAgIC4uLlxyXG4gKiAgICAgIHsgcHJvdmlkZTogQWN0aXZhdGVkUm91dGUsIHVzZVZhbHVlOiBtb2NrQWN0aXZhdGVkUm91dGUgfSxcclxuICogICAgICAuLi5cclxuICogICAgXVxyXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5TcHkhPC9jYXB0aW9uPlxyXG4gKiBwYXJhbU1hcFNweSA9IHNweU9uKG1vY2tBY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcCwgJ2dldCcpO1xyXG4gKiBxdWVyeVBhcmFtTWFwU3B5ID0gc3B5T24obW9ja0FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAsICdnZXQnKTtcclxuICogQGV4YW1wbGUgPGNhcHRpb24+TWFuaXB1bGF0ZSE8L2NhcHRpb24+XHJcbiAqIHBhcmFtTWFwU3B5LmFuZC5yZXR1cm5WYWx1ZShcIjEyMzRcIik7XHJcbiAqIHF1ZXJ5UGFyYW1NYXBTcHkuYW5kLnJldHVyblZhbHVlKFwiNDMyMVwiKTtcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE1vY2tBY3RpdmF0ZWRSb3V0ZSB7XHJcbiAgICBzbmFwc2hvdCA9IHtcclxuICAgICAgICBwYXJhbU1hcDoge1xyXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBxdWVyeVBhcmFtTWFwOiB7XHJcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBnZXRBbGw6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcm91dGVDb25maWc6IHt9LFxyXG4gICAgfTtcclxuICAgIHBhcmFtTWFwID0gbmV3IFN1YmplY3QoKTtcclxuICAgIHF1ZXJ5UGFyYW1NYXAgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgcm91dGVDb25maWcgPSB7fVxyXG59XHJcblxyXG4vKiogUmV0dXJuIGEgQHNlZSBSb3V0ZXJIZWxwZXIgc3B5IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgbW9jayBpbiB0ZXN0cyAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbW9ja1JvdXRlckhlbHBlckZhY3RvcnkoKTogamFzbWluZS5TcHlPYmo8Um91dGVySGVscGVyPiB7XHJcbiAgICBjb25zdCBtb2NrUm91dGVySGVscGVyID0gU3B5RmFjdG9yeS5jcmVhdGVTcHkoUm91dGVySGVscGVyKTtcclxuICAgIG1vY2tSb3V0ZXJIZWxwZXIuZ2V0RnVsbFJvdXRlUGFyYW1NYXAuYW5kLmNhbGxGYWtlKChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkgPT4gcm91dGUucGFyYW1NYXApO1xyXG4gICAgbW9ja1JvdXRlckhlbHBlci5nZXRGdWxsUm91dGVQYXJhbXMuYW5kLmNhbGxGYWtlKChyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkgPT4gcm91dGUucGFyYW1zKTtcclxuICAgIG1vY2tSb3V0ZXJIZWxwZXIuc2VyaWFsaXplVXJsRnJvbVJvb3QuYW5kLnJldHVyblZhbHVlKCdzZXJpYWxpemVkL3VybC9mcm9tL3Jvb3QnKTtcclxuICAgIG1vY2tSb3V0ZXJIZWxwZXIuZ2V0TGFzdFJvdXRlRGVzY2VuZGFudC5hbmQuY2FsbEZha2UoKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkgPT4gcm91dGUpO1xyXG4gICAgbW9ja1JvdXRlckhlbHBlci5leGVjdXRlV2l0aE5hdmlnYXRpb25XYXRjaGVyLmFuZC5jYWxsRmFrZShhc3luYyAoYXN5bmNGdW5jOiAoKSA9PiBQcm9taXNlPGFueT4sIGRvRnVuYzogKHJlc3VsdDogYW55KSA9PiBQcm9taXNlPHZvaWQ+LCByb3V0ZXI6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhc3luY0Z1bmMoKTtcclxuICAgICAgYXdhaXQgZG9GdW5jKHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICAgIG1vY2tSb3V0ZXJIZWxwZXIuZ2V0Vmlld1VybFNlZ21lbnRzLmFuZC5yZXR1cm5WYWx1ZShbXSk7XHJcbiAgICByZXR1cm4gbW9ja1JvdXRlckhlbHBlcjtcclxuICB9XHJcbiJdfQ==