@energycap/components 0.41.1-ECAP-27592-angular-17.20241223-1643 → 0.41.1-ECAP-26841-date-input-features.20250106-0847

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/{esm2022 → esm2020}/energycap-components.mjs +4 -4
  2. package/esm2020/lib/components.module.mjs +423 -0
  3. package/esm2020/lib/controls/banner/banner.component.mjs +109 -0
  4. package/esm2020/lib/controls/button/button.component.mjs +106 -0
  5. package/esm2020/lib/controls/button/copy-button-base.directive.mjs +67 -0
  6. package/{esm2022 → esm2020}/lib/controls/button/copy-button.directive.mjs +28 -28
  7. package/esm2020/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2020/lib/controls/calendar/calendar-item.component.mjs +91 -0
  9. package/esm2020/lib/controls/calendar/calendar.component.mjs +248 -0
  10. package/esm2020/lib/controls/calendar/calendar.types.mjs +2 -0
  11. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/{esm2022 → esm2020}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
  13. package/esm2020/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2020/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +57 -0
  15. package/esm2020/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +62 -0
  16. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +100 -0
  17. package/esm2020/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +101 -0
  18. package/esm2020/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +76 -0
  19. package/esm2020/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +79 -0
  20. package/esm2020/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +210 -0
  21. package/esm2020/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +81 -0
  22. package/esm2020/lib/controls/date-input/date-input.component.mjs +462 -0
  23. package/esm2020/lib/controls/date-input/date-input.types.mjs +44 -0
  24. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +243 -0
  25. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +261 -0
  26. package/esm2020/lib/controls/form-control/form-control.component.mjs +98 -0
  27. package/esm2020/lib/controls/form-control-base.mjs +151 -0
  28. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  29. package/esm2020/lib/controls/form-group/form-group.component.mjs +261 -0
  30. package/{esm2022 → esm2020}/lib/controls/help-popover/help-popover.component.mjs +31 -31
  31. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +329 -0
  32. package/{esm2022 → esm2020}/lib/controls/link-button/link-button.component.mjs +11 -11
  33. package/esm2020/lib/controls/menu/menu.component.mjs +485 -0
  34. package/{esm2022 → esm2020}/lib/controls/navigation/link-item.mjs +1 -1
  35. package/esm2020/lib/controls/navigation/nav-group.mjs +39 -0
  36. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  37. package/{esm2022 → esm2020}/lib/controls/navigation/nav-item.mjs +1 -1
  38. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +372 -0
  39. package/esm2020/lib/controls/popover/popover.component.mjs +117 -0
  40. package/{esm2022 → esm2020}/lib/controls/radio-button/radio-button-option.mjs +2 -2
  41. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +82 -0
  42. package/esm2020/lib/controls/select/select.component.mjs +88 -0
  43. package/esm2020/lib/controls/tabs/tabs.component.mjs +47 -0
  44. package/esm2020/lib/controls/textbox/textbox.component.mjs +155 -0
  45. package/esm2020/lib/core/cache.service.mjs +105 -0
  46. package/esm2020/lib/core/custom-validators.mjs +29 -0
  47. package/esm2020/lib/core/date-time-helper.mjs +228 -0
  48. package/esm2020/lib/core/error.service.mjs +61 -0
  49. package/esm2020/lib/core/router-helper.service.mjs +111 -0
  50. package/esm2020/lib/core/scroll.service.mjs +89 -0
  51. package/{esm2022 → esm2020}/lib/core/telemetry-tracker.service.mjs +16 -16
  52. package/{esm2022 → esm2020}/lib/core/telemetry.service.mjs +38 -38
  53. package/esm2020/lib/core/validation-message.service.mjs +185 -0
  54. package/{esm2022 → esm2020}/lib/core/validation-patterns.mjs +30 -30
  55. package/esm2020/lib/core/window.service.mjs +186 -0
  56. package/esm2020/lib/display/app-bar/app-bar.component.mjs +46 -0
  57. package/esm2020/lib/display/avatar/avatar.component.mjs +67 -0
  58. package/esm2020/lib/display/avatar/avatar.service.mjs +64 -0
  59. package/esm2020/lib/display/confirm/confirm.component.mjs +168 -0
  60. package/{esm2022 → esm2020}/lib/display/dialog/dialog-content.mjs +1 -1
  61. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  62. package/{esm2022 → esm2020}/lib/display/dialog/dialog-types.mjs +76 -76
  63. package/esm2020/lib/display/dialog/dialog.component.mjs +281 -0
  64. package/{esm2022 → esm2020}/lib/display/dialog/dialog.service.mjs +71 -71
  65. package/{esm2022 → esm2020}/lib/display/help/help-types.mjs +1 -1
  66. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  67. package/{esm2022 → esm2020}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
  68. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  69. package/esm2020/lib/display/item-display/item-display.component.mjs +81 -0
  70. package/esm2020/lib/display/json-display/json-display.component.mjs +47 -0
  71. package/esm2020/lib/display/resizable/resizable-base.mjs +120 -0
  72. package/{esm2022 → esm2020}/lib/display/resizable/resizable.component.mjs +52 -52
  73. package/{esm2022 → esm2020}/lib/display/spinner/spinner.component.mjs +12 -12
  74. package/esm2020/lib/display/splash/splash.component.mjs +42 -0
  75. package/{esm2022 → esm2020}/lib/display/splash/splash.service.mjs +35 -35
  76. package/{esm2022 → esm2020}/lib/display/table/resizable-column.component.mjs +20 -20
  77. package/esm2020/lib/display/table/resizable-table.directive.mjs +227 -0
  78. package/esm2020/lib/display/table/searchable-table.component.mjs +342 -0
  79. package/{esm2022 → esm2020}/lib/display/table/table-detail-row.component.mjs +19 -19
  80. package/esm2020/lib/display/table/table-locked-column.component.mjs +58 -0
  81. package/{esm2022 → esm2020}/lib/display/table/table-master-header-row.component.mjs +14 -14
  82. package/esm2020/lib/display/table/table-master-row.component.mjs +163 -0
  83. package/esm2020/lib/display/table/table-pagination.component.mjs +155 -0
  84. package/esm2020/lib/display/table/table-selectable-row.component.mjs +235 -0
  85. package/esm2020/lib/display/table/table.component.mjs +249 -0
  86. package/esm2020/lib/display/tags/tag.mjs +18 -0
  87. package/esm2020/lib/display/tags/tags.component.mjs +77 -0
  88. package/esm2020/lib/display/toast/toast/toast.component.mjs +77 -0
  89. package/{esm2022 → esm2020}/lib/display/toast/toast-types.mjs +7 -7
  90. package/{esm2022 → esm2020}/lib/display/toast/toast.service.mjs +35 -35
  91. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +114 -0
  92. package/{esm2022 → esm2020}/lib/display/tooltip/tooltip.component.mjs +28 -28
  93. package/{esm2022 → esm2020}/lib/display/tooltip/tooltip.service.mjs +78 -78
  94. package/esm2020/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  95. package/{esm2022 → esm2020}/lib/display/tour/tour-types.mjs +33 -33
  96. package/esm2020/lib/display/tour/tour.component.mjs +398 -0
  97. package/esm2020/lib/display/tour/tour.service.mjs +75 -0
  98. package/esm2020/lib/display/tree/tree.component.mjs +135 -0
  99. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  100. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  101. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  102. package/esm2020/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -0
  103. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +163 -0
  104. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  105. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  106. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  107. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  108. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  109. package/esm2020/lib/shared/display.mjs +6 -0
  110. package/esm2020/lib/shared/form-group.helper.mjs +67 -0
  111. package/esm2020/lib/shared/json-helper.mjs +19 -0
  112. package/esm2020/lib/shared/lodash-helper.mjs +51 -0
  113. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +387 -0
  114. package/{esm2022 → esm2020}/lib/shared/page/page-statuses.mjs +22 -22
  115. package/{esm2022 → esm2020}/lib/shared/page/page-title/page-title.component.mjs +23 -23
  116. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +147 -0
  117. package/{esm2022 → esm2020}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
  118. package/{esm2022 → esm2020}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
  119. package/{esm2022 → esm2020}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
  120. package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  121. package/{esm2022 → esm2020}/lib/shared/testing/public-mocks.spec.mjs +148 -148
  122. package/{esm2022 → esm2020}/lib/shared/testing/spy-factory.spec.mjs +39 -39
  123. package/{esm2022 → esm2020}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
  124. package/{esm2022 → esm2020}/lib/shared/user-preference.service.mjs +17 -17
  125. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  126. package/{esm2022 → esm2020}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
  127. package/{esm2022 → esm2020}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
  128. package/esm2020/public-api.mjs +117 -0
  129. package/fesm2015/energycap-components.mjs +13370 -0
  130. package/fesm2015/energycap-components.mjs.map +1 -0
  131. package/{fesm2022 → fesm2020}/energycap-components.mjs +12971 -11819
  132. package/fesm2020/energycap-components.mjs.map +1 -0
  133. package/index.d.ts +5 -5
  134. package/lib/components.module.d.ts +92 -91
  135. package/lib/controls/banner/banner.component.d.ts +50 -50
  136. package/lib/controls/button/button.component.d.ts +78 -78
  137. package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
  138. package/lib/controls/button/copy-button.directive.d.ts +14 -14
  139. package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
  140. package/lib/controls/calendar/calendar-item.component.d.ts +22 -17
  141. package/lib/controls/calendar/calendar.component.d.ts +52 -54
  142. package/lib/controls/calendar/calendar.types.d.ts +11 -7
  143. package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
  144. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
  145. package/lib/controls/combobox/combobox.component.d.ts +418 -418
  146. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -0
  147. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -0
  148. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -0
  149. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -0
  150. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -0
  151. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -0
  152. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -0
  153. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -0
  154. package/lib/controls/date-input/date-input.component.d.ts +115 -80
  155. package/lib/controls/date-input/date-input.types.d.ts +62 -0
  156. package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
  157. package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
  158. package/lib/controls/form-control/form-control.component.d.ts +28 -30
  159. package/lib/controls/form-control-base.d.ts +110 -110
  160. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
  161. package/lib/controls/form-group/form-group.component.d.ts +105 -105
  162. package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
  163. package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
  164. package/lib/controls/link-button/link-button.component.d.ts +5 -5
  165. package/lib/controls/menu/menu.component.d.ts +255 -255
  166. package/lib/controls/navigation/link-item.d.ts +32 -32
  167. package/lib/controls/navigation/nav-group.d.ts +18 -18
  168. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
  169. package/lib/controls/navigation/nav-item.d.ts +31 -31
  170. package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
  171. package/lib/controls/popover/popover.component.d.ts +51 -51
  172. package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
  173. package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
  174. package/lib/controls/select/select.component.d.ts +44 -44
  175. package/lib/controls/tabs/tabs.component.d.ts +30 -30
  176. package/lib/controls/textbox/textbox.component.d.ts +107 -107
  177. package/lib/core/cache.service.d.ts +33 -33
  178. package/lib/core/custom-validators.d.ts +20 -20
  179. package/lib/core/date-time-helper.d.ts +101 -101
  180. package/lib/core/error.service.d.ts +20 -20
  181. package/lib/core/router-helper.service.d.ts +48 -48
  182. package/lib/core/scroll.service.d.ts +36 -36
  183. package/lib/core/telemetry-tracker.service.d.ts +13 -13
  184. package/lib/core/telemetry.service.d.ts +31 -31
  185. package/lib/core/validation-message.service.d.ts +26 -26
  186. package/lib/core/validation-patterns.d.ts +22 -22
  187. package/lib/core/window.service.d.ts +116 -116
  188. package/lib/display/app-bar/app-bar.component.d.ts +20 -20
  189. package/lib/display/avatar/avatar.component.d.ts +35 -35
  190. package/lib/display/avatar/avatar.service.d.ts +24 -24
  191. package/lib/display/confirm/confirm.component.d.ts +123 -123
  192. package/lib/display/dialog/dialog-content.d.ts +19 -19
  193. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
  194. package/lib/display/dialog/dialog-types.d.ts +130 -130
  195. package/lib/display/dialog/dialog.component.d.ts +120 -120
  196. package/lib/display/dialog/dialog.service.d.ts +48 -48
  197. package/lib/display/help/help-types.d.ts +33 -33
  198. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
  199. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
  200. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
  201. package/lib/display/item-display/item-display.component.d.ts +43 -43
  202. package/lib/display/json-display/json-display.component.d.ts +16 -16
  203. package/lib/display/resizable/resizable-base.d.ts +67 -67
  204. package/lib/display/resizable/resizable.component.d.ts +31 -31
  205. package/lib/display/spinner/spinner.component.d.ts +5 -5
  206. package/lib/display/splash/splash.component.d.ts +16 -16
  207. package/lib/display/splash/splash.service.d.ts +22 -22
  208. package/lib/display/table/resizable-column.component.d.ts +10 -10
  209. package/lib/display/table/resizable-table.directive.d.ts +93 -93
  210. package/lib/display/table/searchable-table.component.d.ts +206 -206
  211. package/lib/display/table/table-detail-row.component.d.ts +8 -8
  212. package/lib/display/table/table-locked-column.component.d.ts +20 -20
  213. package/lib/display/table/table-master-header-row.component.d.ts +9 -9
  214. package/lib/display/table/table-master-row.component.d.ts +113 -113
  215. package/lib/display/table/table-pagination.component.d.ts +91 -91
  216. package/lib/display/table/table-selectable-row.component.d.ts +102 -102
  217. package/lib/display/table/table.component.d.ts +121 -121
  218. package/lib/display/tags/tag.d.ts +18 -18
  219. package/lib/display/tags/tags.component.d.ts +48 -48
  220. package/lib/display/toast/toast/toast.component.d.ts +23 -23
  221. package/lib/display/toast/toast-types.d.ts +24 -24
  222. package/lib/display/toast/toast.service.d.ts +20 -20
  223. package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
  224. package/lib/display/tooltip/tooltip.component.d.ts +70 -70
  225. package/lib/display/tooltip/tooltip.service.d.ts +16 -16
  226. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
  227. package/lib/display/tour/tour-types.d.ts +70 -70
  228. package/lib/display/tour/tour.component.d.ts +147 -147
  229. package/lib/display/tour/tour.service.d.ts +38 -38
  230. package/lib/display/tree/tree.component.d.ts +75 -75
  231. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
  232. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
  233. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
  234. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -0
  235. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
  236. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
  237. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
  238. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
  239. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
  240. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
  241. package/lib/shared/display.d.ts +42 -42
  242. package/lib/shared/form-group.helper.d.ts +31 -31
  243. package/lib/shared/json-helper.d.ts +7 -7
  244. package/lib/shared/lodash-helper.d.ts +18 -18
  245. package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
  246. package/lib/shared/page/page-statuses.d.ts +13 -13
  247. package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
  248. package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
  249. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
  250. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
  251. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
  252. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
  253. package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
  254. package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
  255. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
  256. package/lib/shared/user-preference.service.d.ts +13 -13
  257. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
  258. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
  259. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
  260. package/package.json +18 -12
  261. package/public-api.d.ts +113 -111
  262. package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
  263. package/schematics/rxjs-7-upgrade/index.js +67 -67
  264. package/schematics/rxjs-7-upgrade/index.js.map +1 -1
  265. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
  266. package/schematics/rxjs-7-upgrade/schema.js +2 -2
  267. package/schematics/utilities/typescript.d.ts +7 -7
  268. package/schematics/utilities/typescript.js +41 -41
  269. package/schematics/utilities/workspace.d.ts +8 -8
  270. package/schematics/utilities/workspace.js +71 -71
  271. package/schematics/utilities/workspace.js.map +1 -1
  272. package/src/assets/locales/en_US.json +9 -1
  273. package/esm2022/lib/components.module.mjs +0 -418
  274. package/esm2022/lib/controls/banner/banner.component.mjs +0 -109
  275. package/esm2022/lib/controls/button/button.component.mjs +0 -106
  276. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
  277. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
  278. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -59
  279. package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -200
  280. package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -4
  281. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
  282. package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
  283. package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -256
  284. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
  285. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
  286. package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -104
  287. package/esm2022/lib/controls/form-control-base.mjs +0 -151
  288. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  289. package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
  290. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
  291. package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
  292. package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
  293. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  294. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
  295. package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
  296. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
  297. package/esm2022/lib/controls/select/select.component.mjs +0 -88
  298. package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
  299. package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
  300. package/esm2022/lib/core/cache.service.mjs +0 -105
  301. package/esm2022/lib/core/custom-validators.mjs +0 -29
  302. package/esm2022/lib/core/date-time-helper.mjs +0 -220
  303. package/esm2022/lib/core/error.service.mjs +0 -61
  304. package/esm2022/lib/core/router-helper.service.mjs +0 -111
  305. package/esm2022/lib/core/scroll.service.mjs +0 -89
  306. package/esm2022/lib/core/validation-message.service.mjs +0 -185
  307. package/esm2022/lib/core/window.service.mjs +0 -186
  308. package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -46
  309. package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
  310. package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
  311. package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
  312. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  313. package/esm2022/lib/display/dialog/dialog.component.mjs +0 -281
  314. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  315. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
  316. package/esm2022/lib/display/item-display/item-display.component.mjs +0 -81
  317. package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
  318. package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
  319. package/esm2022/lib/display/splash/splash.component.mjs +0 -42
  320. package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
  321. package/esm2022/lib/display/table/searchable-table.component.mjs +0 -342
  322. package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
  323. package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
  324. package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
  325. package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
  326. package/esm2022/lib/display/table/table.component.mjs +0 -249
  327. package/esm2022/lib/display/tags/tag.mjs +0 -18
  328. package/esm2022/lib/display/tags/tags.component.mjs +0 -77
  329. package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
  330. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
  331. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  332. package/esm2022/lib/display/tour/tour.component.mjs +0 -398
  333. package/esm2022/lib/display/tour/tour.service.mjs +0 -75
  334. package/esm2022/lib/display/tree/tree.component.mjs +0 -135
  335. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  336. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  337. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  338. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
  339. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
  340. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  341. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  342. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  343. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  344. package/esm2022/lib/shared/display.mjs +0 -6
  345. package/esm2022/lib/shared/form-group.helper.mjs +0 -67
  346. package/esm2022/lib/shared/json-helper.mjs +0 -19
  347. package/esm2022/lib/shared/lodash-helper.mjs +0 -52
  348. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
  349. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
  350. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  351. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  352. package/esm2022/public-api.mjs +0 -115
  353. package/fesm2022/energycap-components.mjs.map +0 -1
@@ -1,147 +0,0 @@
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==
@@ -1,98 +0,0 @@
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==
@@ -1,246 +0,0 @@
1
- import { Directive } from '@angular/core';
2
- import { upperFirst } from 'lodash';
3
- import { takeUntil } from 'rxjs/operators';
4
- import { TelemetryService } from '../../../core/telemetry.service';
5
- import { PageBaseComponent } from '../../page/page-base/page-base.component';
6
- import * as i0 from "@angular/core";
7
- export class WizardBaseComponent extends PageBaseComponent {
8
- get tabGroup() {
9
- return this._tabGroup;
10
- }
11
- set tabGroup(value) {
12
- this._tabGroup = value;
13
- }
14
- get currentTab() {
15
- return this._currentTab;
16
- }
17
- constructor(injector) {
18
- super(injector);
19
- this.isWizardMode = true;
20
- this.showWizardSaveSuccess = false;
21
- /** True when there are no custom fields or when in wizard mode on the custom fields tab */
22
- this.showSave = true;
23
- /** True when in wizard mode you do not want to show the next or save button*/
24
- this.hideNextSaveButton = false;
25
- /** True when in wizard mode and on the custom fields tab */
26
- this.showBack = false;
27
- this.cancelLabel = 'Cancel';
28
- this.dialogId = '';
29
- this.telemetryService = injector.get(TelemetryService);
30
- }
31
- onFirstInit() {
32
- this._tabGroup = this.configureTabs();
33
- this.setCurrentTab(this._tabGroup.selected);
34
- this.subscribeToTabChanges();
35
- }
36
- onWizardSaveSuccess() { }
37
- async onAfterViewInit() {
38
- this.updateButtons();
39
- }
40
- //
41
- // PageBase lifecycle hooks. Override in derived class if needed.
42
- //
43
- async applyModelUpdates() { }
44
- async saveToApi() { }
45
- onSaveComplete(entityId) { }
46
- async onSave(event) {
47
- // Mark the current tab as completed if the tab is valid before attempting to save.
48
- if (this._currentTab && this.isCurrentTabValid()) {
49
- this._currentTab.completed = true;
50
- }
51
- await super.onSave(event);
52
- if (this.showWizardSaveSuccess) {
53
- this.onWizardSaveSuccess();
54
- this.telemetryService.trackEvent(`${this.dialogId}_WizardSuccess`);
55
- }
56
- }
57
- /**
58
- * Navigates to the next tab in the tab group. Calls canGoToNextTab() to determine if navigating to the next tab
59
- * is allowed or not. If tab validation succeeds, enables the next tab (if it is disabled) and selects it.
60
- * @memberof WizardBaseComponent
61
- */
62
- nextTab() {
63
- const currentTabIndex = this._tabGroup.items.findIndex(t => t === this._currentTab);
64
- // If there is a current tab selected and the current tab is not the last tab,
65
- // update the selected tab in the tabGroup to the next tab
66
- if (currentTabIndex > -1 && currentTabIndex < this._tabGroup.items.length - 1) {
67
- const nextTab = this._tabGroup.items[currentTabIndex + 1];
68
- if (this.canGoToNextTab(nextTab)) {
69
- // Enable the next tab if it is disabled
70
- if (nextTab.disabled) {
71
- nextTab.disabled = false;
72
- }
73
- this._tabGroup.selected = nextTab;
74
- this.telemetryService.trackEvent(`${this.dialogId}_${upperFirst(nextTab.id?.toString())}`);
75
- }
76
- else {
77
- this.onTabChangeFailed();
78
- }
79
- }
80
- }
81
- /**
82
- * Navigates to the previous tab in the tab group. Calls canGoToPreviousTab() to determine if navigating to the previous tab
83
- * is allowed or not. Navigates to the tab if validation succeeds
84
- * @memberof WizardBaseComponent
85
- */
86
- previousTab() {
87
- const currentTabIndex = this._tabGroup.items.findIndex(t => t === this._currentTab);
88
- // If there is a current tab selected and the current tab is not the first tab,
89
- // update the selected tab in the tabGroup to the previous tab
90
- if (currentTabIndex > 0 && currentTabIndex < this._tabGroup.items.length) {
91
- const prevTab = this._tabGroup.items[currentTabIndex - 1];
92
- if (this.canGoToPreviousTab(prevTab)) {
93
- this._tabGroup.selected = prevTab;
94
- this.telemetryService.trackEvent(`${this.dialogId}_${upperFirst(prevTab.id?.toString())}`);
95
- }
96
- else {
97
- this.onTabChangeFailed();
98
- }
99
- }
100
- }
101
- updateButtons() {
102
- if (this.isWizardMode) {
103
- if (this.currentTab) {
104
- const tabIndex = this._tabGroup.items.findIndex(t => t === this.currentTab);
105
- if (tabIndex > 0) {
106
- // Show the back button and set the label to the previous tab when not on the first tab
107
- this.showBack = true;
108
- const prevTabKey = this._tabGroup.items[tabIndex - 1].label;
109
- this.backLabel = `${this.translateService.instant('Back_TC')}: ${this.translateService.instant(prevTabKey)}`;
110
- }
111
- else {
112
- // Hide the back button when on the first tab
113
- this.showBack = false;
114
- }
115
- if (tabIndex < this._tabGroup.items.length - 1) {
116
- // Show the next button and set the label to the next tab when not on the last tab
117
- this.showSave = false;
118
- const nextTabKey = this._tabGroup.items[tabIndex + 1].label;
119
- this.nextLabel = `${this.translateService.instant('Next_TC')}: ${this.translateService.instant(nextTabKey)}`;
120
- }
121
- else {
122
- this.nextLabel = undefined;
123
- // Show the save button instead of next when on the last tab
124
- this.showSave = true;
125
- }
126
- }
127
- }
128
- else {
129
- this.showBack = false;
130
- this.showSave = true;
131
- }
132
- }
133
- /**
134
- * Used to determine whether navigation to the next tab is prevented or not. Fired in nextTab(), but not when a tab is
135
- * clicked or selected programmatically. By default, this checks the validity of the current tab's form model and
136
- * prevents navigation if it is invalid. Can be overridden if different logic is needed.
137
- * @param nextTab - The tab being navigated to
138
- * @memberof WizardBaseComponent
139
- */
140
- canGoToNextTab(nextTab) {
141
- return this.isCurrentTabValid();
142
- }
143
- /**
144
- * Used to determine whether navigation to the previous tab is prevented or not. Fired in previousTab(), but not when a tab is
145
- * clicked or selected programmatically. By default, this checks the validity of the current tab's form model and
146
- * prevents navigation if it is invalid. Can be overridden if different logic is needed.
147
- * @param prevTab - The tab being navigated to
148
- * @memberof WizardBaseComponent
149
- */
150
- canGoToPreviousTab(prevTab) {
151
- return this.isCurrentTabValid();
152
- }
153
- /**
154
- * Used to determine whether navigating away from the current tab is prevented or not. Fired any time the selected tab
155
- * changes in the tabGroup. By default, this checks the validity of the current tab's form model and prevents navigation
156
- * if it is invalid. Can be overridden if different logic is needed.
157
- * @memberof WizardBaseComponent
158
- */
159
- canLeaveCurrentTab() {
160
- return this.isCurrentTabValid();
161
- }
162
- /**
163
- * Triggers validation on the current wizard tab's form control. Returns true if the form control is valid, false if not.
164
- * Returns true if the formModelPath for the tab is not defined or no form control is found. Can be overridden if different
165
- * logic is needed to validate the form control for the current tab.
166
- * @memberof WizardBaseComponent
167
- */
168
- isCurrentTabValid() {
169
- if (this._currentTab && this._currentTab.formModelPath) {
170
- let formModel = this.formGroup.get(this._currentTab.formModelPath);
171
- if (formModel) {
172
- formModel.markAllAsTouched();
173
- return formModel.valid || formModel.disabled;
174
- }
175
- }
176
- return true;
177
- }
178
- /**
179
- * Fired if navigation to a tab succeeds. Hides the error banner by default, but can be overridden if logic is needed.
180
- * @memberof WizardBaseComponent
181
- */
182
- onTabChangeSuccess() {
183
- this.updateButtons();
184
- this.hideErrorBanner();
185
- }
186
- /**
187
- * Fired if navigation to a tab fails. By default, shows the error banner with the default invalid form message, but
188
- * can be overridden if different logic is needed.
189
- * @memberof WizardBaseComponent
190
- */
191
- onTabChangeFailed() {
192
- this.showErrorBanner(this.defaultInvalidFormMessage);
193
- }
194
- /**
195
- * Listen for when the tabGroup's selected item is changed (I.E. when a tab is clicked or selected programmatically)
196
- * and navigate to that tab.
197
- */
198
- subscribeToTabChanges() {
199
- // Whenever the tabGroup's selected tab changes, go to the selected tab
200
- this._tabGroup.selectedChanges.pipe(takeUntil(this.destroyed)).subscribe(tab => {
201
- this.goToTab(tab);
202
- });
203
- }
204
- /**
205
- * Triggered when the tabGroup's selected item changes. If the current tab passes validation, updates
206
- * the current tab to the selected tab.
207
- * @param tab - the tab that was selected
208
- */
209
- goToTab(tab) {
210
- // Only continue if the current tab is not the tab that was selected. They are the same
211
- // when we are resetting the tab group's selected tab back to the current tab when validation fails.
212
- // Without this check, we could end up in an infinite loop.
213
- if (tab !== this._currentTab) {
214
- if (this.canLeaveCurrentTab()) {
215
- // Mark the current tab as complete before switching
216
- if (this._currentTab) {
217
- this._currentTab.completed = true;
218
- }
219
- this.setCurrentTab(tab);
220
- this.onTabChangeSuccess();
221
- }
222
- else {
223
- // Because the tabGroup's selected tab is updated when a tab is clicked before we can run any form validation,
224
- // we need to reset the selected tab back to the current tab if validation fails.
225
- // Without this we would have no way to prevent the user from leaving the current tab if the form is invalid.
226
- this._tabGroup.selected = this._currentTab;
227
- this.onTabChangeFailed();
228
- }
229
- }
230
- }
231
- /**
232
- * Updates the current tab, title, and help.
233
- * @param tab Tab to set
234
- */
235
- setCurrentTab(tab) {
236
- this._currentTab = tab;
237
- this.help = tab ? tab.help : undefined;
238
- this.title = tab ? tab.title : undefined;
239
- }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardBaseComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
241
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: WizardBaseComponent, usesInheritance: true, ngImport: i0 }); }
242
- }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WizardBaseComponent, decorators: [{
244
- type: Directive
245
- }], ctorParameters: () => [{ type: i0.Injector }] });
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l6YXJkLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL3NoYXJlZC93aXphcmQvd2l6YXJkLWJhc2Uvd2l6YXJkLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFrQixNQUFNLDBDQUEwQyxDQUFDOztBQWU3RixNQUFNLE9BQWdCLG1CQUFvQixTQUFRLGlCQUFpQjtJQTBCakUsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBVyxRQUFRLENBQUMsS0FBZTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBT0QsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBTUQsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUE3Q1gsaUJBQVksR0FBWSxJQUFJLENBQUM7UUFDN0IsMEJBQXFCLEdBQVksS0FBSyxDQUFDO1FBRTlDLDJGQUEyRjtRQUNwRixhQUFRLEdBQVksSUFBSSxDQUFDO1FBRWhDLDhFQUE4RTtRQUN2RSx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFFM0MsNERBQTREO1FBQ3JELGFBQVEsR0FBWSxLQUFLLENBQUM7UUFLMUIsZ0JBQVcsR0FBVyxRQUFRLENBQUM7UUFFL0IsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQThCM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRVMsV0FBVztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUlTLG1CQUFtQixLQUFXLENBQUM7SUFFL0IsS0FBSyxDQUFDLGVBQWU7UUFDN0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxFQUFFO0lBQ0YsaUVBQWlFO0lBQ2pFLEVBQUU7SUFDUSxLQUFLLENBQUMsaUJBQWlCLEtBQUksQ0FBQztJQUM1QixLQUFLLENBQUMsU0FBUyxLQUEwQixDQUFDO0lBQzFDLGNBQWMsQ0FBQyxRQUFnQixJQUFHLENBQUM7SUFFdEMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFZO1FBQzlCLG1GQUFtRjtRQUNuRixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDcEMsQ0FBQztRQUVELE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU87UUFDWixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BGLDhFQUE4RTtRQUM5RSwwREFBMEQ7UUFDMUQsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLHdDQUF3QztnQkFDeEMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3JCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixDQUFDO2dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0YsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXO1FBQ2hCLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEYsK0VBQStFO1FBQy9FLDhEQUE4RDtRQUM5RCxJQUFJLGVBQWUsR0FBRyxDQUFDLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFUyxhQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUM1RSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDakIsdUZBQXVGO29CQUN2RixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQU0sQ0FBQztvQkFDN0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUMvRyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sNkNBQTZDO29CQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsQ0FBQztnQkFFRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQy9DLGtGQUFrRjtvQkFDbEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFNLENBQUM7b0JBQzdELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDL0csQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO29CQUMzQiw0REFBNEQ7b0JBQzVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFRRDs7Ozs7O09BTUc7SUFDTyxjQUFjLENBQUMsT0FBa0I7UUFDekMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sa0JBQWtCLENBQUMsT0FBa0I7UUFDN0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxrQkFBa0I7UUFDMUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxpQkFBaUI7UUFDekIsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRSxJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNkLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUM3QixPQUFPLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUMvQyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGtCQUFrQjtRQUMxQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08saUJBQWlCO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHFCQUFxQjtRQUMzQix1RUFBdUU7UUFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDN0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssT0FBTyxDQUFDLEdBQWM7UUFDNUIsdUZBQXVGO1FBQ3ZGLG9HQUFvRztRQUNwRywyREFBMkQ7UUFDM0QsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztnQkFDOUIsb0RBQW9EO2dCQUNwRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUNwQyxDQUFDO2dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLENBQUM7aUJBQU0sQ0FBQztnQkFDTiw4R0FBOEc7Z0JBQzlHLGlGQUFpRjtnQkFDakYsNkdBQTZHO2dCQUM3RyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxhQUFhLENBQUMsR0FBZTtRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDM0MsQ0FBQzsrR0F6Um1CLG1CQUFtQjttR0FBbkIsbUJBQW1COzs0RkFBbkIsbUJBQW1CO2tCQUR4QyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB1cHBlckZpcnN0IH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOYXZHcm91cCB9IGZyb20gJy4uLy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWdyb3VwJztcclxuaW1wb3J0IHsgTmF2SXRlbSB9IGZyb20gJy4uLy4uLy4uL2NvbnRyb2xzL25hdmlnYXRpb24vbmF2LWl0ZW0nO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90ZWxlbWV0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IEhlbHAgfSBmcm9tICcuLi8uLi8uLi9kaXNwbGF5L2hlbHAvaGVscC10eXBlcyc7XHJcbmltcG9ydCB7IFBhZ2VCYXNlQ29tcG9uZW50LCBQYWdlSW5pdFJlc3VsdCB9IGZyb20gJy4uLy4uL3BhZ2UvcGFnZS1iYXNlL3BhZ2UtYmFzZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBXaXphcmRUYWIgZXh0ZW5kcyBOYXZJdGVtIHtcclxuICAvKipcclxuICAgKiBQYXRoIHRvIGEgZm9ybSBncm91cC9hcnJheS9jb250cm9sIGNvbnRhaW5lZCBpbiB0aGUgZm9ybSdzIG1haW4gZm9ybSBncm91cC5cclxuICAgKiBVc2VkIHRvIG1hcCBhIHRhYiB0byBpdCdzIGZvcm0gbW9kZWwgZm9yIGZvcm0gdmFsaWRhdGlvbiBpbiBXaXphcmRCYXNlQ29tcG9uZW50LlxyXG4gICAqIFNlZSBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2Zvcm1zL0Fic3RyYWN0Q29udHJvbCNnZXQtdXNhZ2Utbm90ZXMgZm9yIGRldGFpbHMgb24gcGF0aHMuXHJcbiAgICovXHJcbiAgZm9ybU1vZGVsUGF0aD86IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW107XHJcbiAgaGVscD86IEhlbHA7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgY29tcGxldGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXaXphcmRCYXNlQ29tcG9uZW50IGV4dGVuZHMgUGFnZUJhc2VDb21wb25lbnQge1xyXG5cclxuICBwdWJsaWMgaXNXaXphcmRNb2RlOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2hvd1dpemFyZFNhdmVTdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUcnVlIHdoZW4gdGhlcmUgYXJlIG5vIGN1c3RvbSBmaWVsZHMgb3Igd2hlbiBpbiB3aXphcmQgbW9kZSBvbiB0aGUgY3VzdG9tIGZpZWxkcyB0YWIgKi9cclxuICBwdWJsaWMgc2hvd1NhdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKiogVHJ1ZSB3aGVuIGluIHdpemFyZCBtb2RlIHlvdSBkbyBub3Qgd2FudCB0byBzaG93IHRoZSBuZXh0IG9yIHNhdmUgYnV0dG9uKi9cclxuICBwdWJsaWMgaGlkZU5leHRTYXZlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUcnVlIHdoZW4gaW4gd2l6YXJkIG1vZGUgYW5kIG9uIHRoZSBjdXN0b20gZmllbGRzIHRhYiAqL1xyXG4gIHB1YmxpYyBzaG93QmFjazogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogTGFiZWxzIGZvciB0aGUgY2FuY2VsLCBuZXh0IGFuZCBiYWNrIGJ1dHRvbnMgKi9cclxuICBwdWJsaWMgbmV4dExhYmVsPzogc3RyaW5nO1xyXG4gIHB1YmxpYyBiYWNrTGFiZWw/OiBzdHJpbmc7XHJcbiAgcHVibGljIGNhbmNlbExhYmVsOiBzdHJpbmcgPSAnQ2FuY2VsJztcclxuXHJcbiAgcHVibGljIGRpYWxvZ0lkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udGFpbnMgdGhlIGF2YWlsYWJsZSB3aXphcmQgdGFicy4gUGFzc2VkIHRvIFRhYnNDb21wb25lbnQuXHJcbiAgICogQG1lbWJlcm9mIFdpemFyZEJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF90YWJHcm91cCE6IE5hdkdyb3VwO1xyXG4gIHB1YmxpYyBnZXQgdGFiR3JvdXAoKTogTmF2R3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhYkdyb3VwO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHRhYkdyb3VwKHZhbHVlOiBOYXZHcm91cCkge1xyXG4gICAgdGhpcy5fdGFiR3JvdXAgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRhaW5zIHRoZSB0YWIgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuXHJcbiAgICogQG1lbWJlcm9mIFdpemFyZEJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcml2YXRlIF9jdXJyZW50VGFiPzogV2l6YXJkVGFiO1xyXG4gIHB1YmxpYyBnZXQgY3VycmVudFRhYigpOiBXaXphcmRUYWIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUYWI7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdFByb21pc2UhOiBQcm9taXNlPFdpemFyZEJhc2VDb21wb25lbnQ+O1xyXG5cclxuICBwcm90ZWN0ZWQgdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcclxuXHJcbiAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICBzdXBlcihpbmplY3Rvcik7XHJcblxyXG4gICAgdGhpcy50ZWxlbWV0cnlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFRlbGVtZXRyeVNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIG9uRmlyc3RJbml0KCkge1xyXG4gICAgdGhpcy5fdGFiR3JvdXAgPSB0aGlzLmNvbmZpZ3VyZVRhYnMoKTtcclxuICAgIHRoaXMuc2V0Q3VycmVudFRhYih0aGlzLl90YWJHcm91cC5zZWxlY3RlZCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvVGFiQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IG9uSW5pdCgpOiBQcm9taXNlPFBhZ2VJbml0UmVzdWx0PjtcclxuXHJcbiAgcHJvdGVjdGVkIG9uV2l6YXJkU2F2ZVN1Y2Nlc3MoKTogdm9pZCB7IH1cclxuXHJcbiAgcHJvdGVjdGVkIGFzeW5jIG9uQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudXBkYXRlQnV0dG9ucygpO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyBQYWdlQmFzZSBsaWZlY3ljbGUgaG9va3MuIE92ZXJyaWRlIGluIGRlcml2ZWQgY2xhc3MgaWYgbmVlZGVkLlxyXG4gIC8vXHJcbiAgcHJvdGVjdGVkIGFzeW5jIGFwcGx5TW9kZWxVcGRhdGVzKCkge31cclxuICBwcm90ZWN0ZWQgYXN5bmMgc2F2ZVRvQXBpKCk6IFByb21pc2U8bnVtYmVyfHZvaWQ+IHt9XHJcbiAgcHJvdGVjdGVkIG9uU2F2ZUNvbXBsZXRlKGVudGl0eUlkOiBudW1iZXIpIHt9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblNhdmUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAvLyBNYXJrIHRoZSBjdXJyZW50IHRhYiBhcyBjb21wbGV0ZWQgaWYgdGhlIHRhYiBpcyB2YWxpZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBzYXZlLlxyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRUYWIgJiYgdGhpcy5pc0N1cnJlbnRUYWJWYWxpZCgpKSB7XHJcbiAgICAgIHRoaXMuX2N1cnJlbnRUYWIuY29tcGxldGVkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhd2FpdCBzdXBlci5vblNhdmUoZXZlbnQpO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dXaXphcmRTYXZlU3VjY2Vzcykge1xyXG4gICAgICB0aGlzLm9uV2l6YXJkU2F2ZVN1Y2Nlc3MoKTtcclxuICAgICAgdGhpcy50ZWxlbWV0cnlTZXJ2aWNlLnRyYWNrRXZlbnQoYCR7dGhpcy5kaWFsb2dJZH1fV2l6YXJkU3VjY2Vzc2ApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmF2aWdhdGVzIHRvIHRoZSBuZXh0IHRhYiBpbiB0aGUgdGFiIGdyb3VwLiBDYWxscyBjYW5Hb1RvTmV4dFRhYigpIHRvIGRldGVybWluZSBpZiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHRhYlxyXG4gICAqIGlzIGFsbG93ZWQgb3Igbm90LiBJZiB0YWIgdmFsaWRhdGlvbiBzdWNjZWVkcywgZW5hYmxlcyB0aGUgbmV4dCB0YWIgKGlmIGl0IGlzIGRpc2FibGVkKSBhbmQgc2VsZWN0cyBpdC5cclxuICAgKiBAbWVtYmVyb2YgV2l6YXJkQmFzZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZXh0VGFiKCkge1xyXG4gICAgY29uc3QgY3VycmVudFRhYkluZGV4ID0gdGhpcy5fdGFiR3JvdXAuaXRlbXMuZmluZEluZGV4KHQgPT4gdCA9PT0gdGhpcy5fY3VycmVudFRhYik7XHJcbiAgICAvLyBJZiB0aGVyZSBpcyBhIGN1cnJlbnQgdGFiIHNlbGVjdGVkIGFuZCB0aGUgY3VycmVudCB0YWIgaXMgbm90IHRoZSBsYXN0IHRhYixcclxuICAgIC8vIHVwZGF0ZSB0aGUgc2VsZWN0ZWQgdGFiIGluIHRoZSB0YWJHcm91cCB0byB0aGUgbmV4dCB0YWJcclxuICAgIGlmIChjdXJyZW50VGFiSW5kZXggPiAtMSAmJiBjdXJyZW50VGFiSW5kZXggPCB0aGlzLl90YWJHcm91cC5pdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIGNvbnN0IG5leHRUYWIgPSB0aGlzLl90YWJHcm91cC5pdGVtc1tjdXJyZW50VGFiSW5kZXggKyAxXTtcclxuICAgICAgaWYgKHRoaXMuY2FuR29Ub05leHRUYWIobmV4dFRhYikpIHtcclxuICAgICAgICAvLyBFbmFibGUgdGhlIG5leHQgdGFiIGlmIGl0IGlzIGRpc2FibGVkXHJcbiAgICAgICAgaWYgKG5leHRUYWIuZGlzYWJsZWQpIHtcclxuICAgICAgICAgIG5leHRUYWIuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fdGFiR3JvdXAuc2VsZWN0ZWQgPSBuZXh0VGFiO1xyXG4gICAgICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS50cmFja0V2ZW50KGAke3RoaXMuZGlhbG9nSWR9XyR7dXBwZXJGaXJzdChuZXh0VGFiLmlkPy50b1N0cmluZygpKX1gKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uVGFiQ2hhbmdlRmFpbGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE5hdmlnYXRlcyB0byB0aGUgcHJldmlvdXMgdGFiIGluIHRoZSB0YWIgZ3JvdXAuIENhbGxzIGNhbkdvVG9QcmV2aW91c1RhYigpIHRvIGRldGVybWluZSBpZiBuYXZpZ2F0aW5nIHRvIHRoZSBwcmV2aW91cyB0YWJcclxuICAgKiBpcyBhbGxvd2VkIG9yIG5vdC4gTmF2aWdhdGVzIHRvIHRoZSB0YWIgaWYgdmFsaWRhdGlvbiBzdWNjZWVkc1xyXG4gICAqIEBtZW1iZXJvZiBXaXphcmRCYXNlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHVibGljIHByZXZpb3VzVGFiKCkge1xyXG4gICAgY29uc3QgY3VycmVudFRhYkluZGV4ID0gdGhpcy5fdGFiR3JvdXAuaXRlbXMuZmluZEluZGV4KHQgPT4gdCA9PT0gdGhpcy5fY3VycmVudFRhYik7XHJcbiAgICAvLyBJZiB0aGVyZSBpcyBhIGN1cnJlbnQgdGFiIHNlbGVjdGVkIGFuZCB0aGUgY3VycmVudCB0YWIgaXMgbm90IHRoZSBmaXJzdCB0YWIsXHJcbiAgICAvLyB1cGRhdGUgdGhlIHNlbGVjdGVkIHRhYiBpbiB0aGUgdGFiR3JvdXAgdG8gdGhlIHByZXZpb3VzIHRhYlxyXG4gICAgaWYgKGN1cnJlbnRUYWJJbmRleCA+IDAgJiYgY3VycmVudFRhYkluZGV4IDwgdGhpcy5fdGFiR3JvdXAuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHByZXZUYWIgPSB0aGlzLl90YWJHcm91cC5pdGVtc1tjdXJyZW50VGFiSW5kZXggLSAxXTtcclxuICAgICAgaWYgKHRoaXMuY2FuR29Ub1ByZXZpb3VzVGFiKHByZXZUYWIpKSB7XHJcbiAgICAgICAgdGhpcy5fdGFiR3JvdXAuc2VsZWN0ZWQgPSBwcmV2VGFiO1xyXG4gICAgICAgIHRoaXMudGVsZW1ldHJ5U2VydmljZS50cmFja0V2ZW50KGAke3RoaXMuZGlhbG9nSWR9XyR7dXBwZXJGaXJzdChwcmV2VGFiLmlkPy50b1N0cmluZygpKX1gKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uVGFiQ2hhbmdlRmFpbGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuaXNXaXphcmRNb2RlKSB7XHJcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRUYWIpIHtcclxuICAgICAgICBjb25zdCB0YWJJbmRleCA9IHRoaXMuX3RhYkdyb3VwLml0ZW1zLmZpbmRJbmRleCh0ID0+IHQgPT09IHRoaXMuY3VycmVudFRhYik7XHJcbiAgICAgICAgaWYgKHRhYkluZGV4ID4gMCkge1xyXG4gICAgICAgICAgLy8gU2hvdyB0aGUgYmFjayBidXR0b24gYW5kIHNldCB0aGUgbGFiZWwgdG8gdGhlIHByZXZpb3VzIHRhYiB3aGVuIG5vdCBvbiB0aGUgZmlyc3QgdGFiXHJcbiAgICAgICAgICB0aGlzLnNob3dCYWNrID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbnN0IHByZXZUYWJLZXkgPSB0aGlzLl90YWJHcm91cC5pdGVtc1t0YWJJbmRleCAtIDFdLmxhYmVsITtcclxuICAgICAgICAgIHRoaXMuYmFja0xhYmVsID0gYCR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ0JhY2tfVEMnKX06ICR7dGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocHJldlRhYktleSl9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gSGlkZSB0aGUgYmFjayBidXR0b24gd2hlbiBvbiB0aGUgZmlyc3QgdGFiXHJcbiAgICAgICAgICB0aGlzLnNob3dCYWNrID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGFiSW5kZXggPCB0aGlzLl90YWJHcm91cC5pdGVtcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAvLyBTaG93IHRoZSBuZXh0IGJ1dHRvbiBhbmQgc2V0IHRoZSBsYWJlbCB0byB0aGUgbmV4dCB0YWIgd2hlbiBub3Qgb24gdGhlIGxhc3QgdGFiXHJcbiAgICAgICAgICB0aGlzLnNob3dTYXZlID0gZmFsc2U7XHJcbiAgICAgICAgICBjb25zdCBuZXh0VGFiS2V5ID0gdGhpcy5fdGFiR3JvdXAuaXRlbXNbdGFiSW5kZXggKyAxXS5sYWJlbCE7XHJcbiAgICAgICAgICB0aGlzLm5leHRMYWJlbCA9IGAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdOZXh0X1RDJyl9OiAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG5leHRUYWJLZXkpfWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubmV4dExhYmVsID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgLy8gU2hvdyB0aGUgc2F2ZSBidXR0b24gaW5zdGVhZCBvZiBuZXh0IHdoZW4gb24gdGhlIGxhc3QgdGFiXHJcbiAgICAgICAgICB0aGlzLnNob3dTYXZlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd0JhY2sgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93U2F2ZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXF1aXJlZCB0byBjb25maWd1cmUgdGhlIHRhYnMgYW5kIGRlZmF1bHQgdGFiIGZvciB0aGUgd2l6YXJkLiBSdW5zIGluIG9uRmlyc3RJbml0LCBiZWZvcmUgb25Jbml0LlxyXG4gICAqIEBtZW1iZXJvZiBXaXphcmRCYXNlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNvbmZpZ3VyZVRhYnMoKTogTmF2R3JvdXA7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgbmF2aWdhdGlvbiB0byB0aGUgbmV4dCB0YWIgaXMgcHJldmVudGVkIG9yIG5vdC4gRmlyZWQgaW4gbmV4dFRhYigpLCBidXQgbm90IHdoZW4gYSB0YWIgaXNcclxuICAgKiBjbGlja2VkIG9yIHNlbGVjdGVkIHByb2dyYW1tYXRpY2FsbHkuIEJ5IGRlZmF1bHQsIHRoaXMgY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgY3VycmVudCB0YWIncyBmb3JtIG1vZGVsIGFuZFxyXG4gICAqIHByZXZlbnRzIG5hdmlnYXRpb24gaWYgaXQgaXMgaW52YWxpZC4gQ2FuIGJlIG92ZXJyaWRkZW4gaWYgZGlmZmVyZW50IGxvZ2ljIGlzIG5lZWRlZC5cclxuICAgKiBAcGFyYW0gbmV4dFRhYiAtIFRoZSB0YWIgYmVpbmcgbmF2aWdhdGVkIHRvXHJcbiAgICogQG1lbWJlcm9mIFdpemFyZEJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgY2FuR29Ub05leHRUYWIobmV4dFRhYjogV2l6YXJkVGFiKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0N1cnJlbnRUYWJWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBuYXZpZ2F0aW9uIHRvIHRoZSBwcmV2aW91cyB0YWIgaXMgcHJldmVudGVkIG9yIG5vdC4gRmlyZWQgaW4gcHJldmlvdXNUYWIoKSwgYnV0IG5vdCB3aGVuIGEgdGFiIGlzXHJcbiAgICogY2xpY2tlZCBvciBzZWxlY3RlZCBwcm9ncmFtbWF0aWNhbGx5LiBCeSBkZWZhdWx0LCB0aGlzIGNoZWNrcyB0aGUgdmFsaWRpdHkgb2YgdGhlIGN1cnJlbnQgdGFiJ3MgZm9ybSBtb2RlbCBhbmRcclxuICAgKiBwcmV2ZW50cyBuYXZpZ2F0aW9uIGlmIGl0IGlzIGludmFsaWQuIENhbiBiZSBvdmVycmlkZGVuIGlmIGRpZmZlcmVudCBsb2dpYyBpcyBuZWVkZWQuXHJcbiAgICogQHBhcmFtIHByZXZUYWIgLSBUaGUgdGFiIGJlaW5nIG5hdmlnYXRlZCB0b1xyXG4gICAqIEBtZW1iZXJvZiBXaXphcmRCYXNlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNhbkdvVG9QcmV2aW91c1RhYihwcmV2VGFiOiBXaXphcmRUYWIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmlzQ3VycmVudFRhYlZhbGlkKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG5hdmlnYXRpbmcgYXdheSBmcm9tIHRoZSBjdXJyZW50IHRhYiBpcyBwcmV2ZW50ZWQgb3Igbm90LiBGaXJlZCBhbnkgdGltZSB0aGUgc2VsZWN0ZWQgdGFiXHJcbiAgICogY2hhbmdlcyBpbiB0aGUgdGFiR3JvdXAuIEJ5IGRlZmF1bHQsIHRoaXMgY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgY3VycmVudCB0YWIncyBmb3JtIG1vZGVsIGFuZCBwcmV2ZW50cyBuYXZpZ2F0aW9uXHJcbiAgICogaWYgaXQgaXMgaW52YWxpZC4gQ2FuIGJlIG92ZXJyaWRkZW4gaWYgZGlmZmVyZW50IGxvZ2ljIGlzIG5lZWRlZC5cclxuICAgKiBAbWVtYmVyb2YgV2l6YXJkQmFzZUNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjYW5MZWF2ZUN1cnJlbnRUYWIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5pc0N1cnJlbnRUYWJWYWxpZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlcnMgdmFsaWRhdGlvbiBvbiB0aGUgY3VycmVudCB3aXphcmQgdGFiJ3MgZm9ybSBjb250cm9sLiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvcm0gY29udHJvbCBpcyB2YWxpZCwgZmFsc2UgaWYgbm90LlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9ybU1vZGVsUGF0aCBmb3IgdGhlIHRhYiBpcyBub3QgZGVmaW5lZCBvciBubyBmb3JtIGNvbnRyb2wgaXMgZm91bmQuIENhbiBiZSBvdmVycmlkZGVuIGlmIGRpZmZlcmVudFxyXG4gICAqIGxvZ2ljIGlzIG5lZWRlZCB0byB2YWxpZGF0ZSB0aGUgZm9ybSBjb250cm9sIGZvciB0aGUgY3VycmVudCB0YWIuXHJcbiAgICogQG1lbWJlcm9mIFdpemFyZEJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaXNDdXJyZW50VGFiVmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFRhYiAmJiB0aGlzLl9jdXJyZW50VGFiLmZvcm1Nb2RlbFBhdGgpIHtcclxuICAgICAgbGV0IGZvcm1Nb2RlbCA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLl9jdXJyZW50VGFiLmZvcm1Nb2RlbFBhdGgpO1xyXG4gICAgICBpZiAoZm9ybU1vZGVsKSB7XHJcbiAgICAgICAgZm9ybU1vZGVsLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgICByZXR1cm4gZm9ybU1vZGVsLnZhbGlkIHx8IGZvcm1Nb2RlbC5kaXNhYmxlZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGaXJlZCBpZiBuYXZpZ2F0aW9uIHRvIGEgdGFiIHN1Y2NlZWRzLiBIaWRlcyB0aGUgZXJyb3IgYmFubmVyIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBpZiBsb2dpYyBpcyBuZWVkZWQuXHJcbiAgICogQG1lbWJlcm9mIFdpemFyZEJhc2VDb21wb25lbnRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb25UYWJDaGFuZ2VTdWNjZXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVCdXR0b25zKCk7XHJcbiAgICB0aGlzLmhpZGVFcnJvckJhbm5lcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZWQgaWYgbmF2aWdhdGlvbiB0byBhIHRhYiBmYWlscy4gQnkgZGVmYXVsdCwgc2hvd3MgdGhlIGVycm9yIGJhbm5lciB3aXRoIHRoZSBkZWZhdWx0IGludmFsaWQgZm9ybSBtZXNzYWdlLCBidXRcclxuICAgKiBjYW4gYmUgb3ZlcnJpZGRlbiBpZiBkaWZmZXJlbnQgbG9naWMgaXMgbmVlZGVkLlxyXG4gICAqIEBtZW1iZXJvZiBXaXphcmRCYXNlQ29tcG9uZW50XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9uVGFiQ2hhbmdlRmFpbGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93RXJyb3JCYW5uZXIodGhpcy5kZWZhdWx0SW52YWxpZEZvcm1NZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiBmb3Igd2hlbiB0aGUgdGFiR3JvdXAncyBzZWxlY3RlZCBpdGVtIGlzIGNoYW5nZWQgKEkuRS4gd2hlbiBhIHRhYiBpcyBjbGlja2VkIG9yIHNlbGVjdGVkIHByb2dyYW1tYXRpY2FsbHkpXHJcbiAgICogYW5kIG5hdmlnYXRlIHRvIHRoYXQgdGFiLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9UYWJDaGFuZ2VzKCkge1xyXG4gICAgLy8gV2hlbmV2ZXIgdGhlIHRhYkdyb3VwJ3Mgc2VsZWN0ZWQgdGFiIGNoYW5nZXMsIGdvIHRvIHRoZSBzZWxlY3RlZCB0YWJcclxuICAgIHRoaXMuX3RhYkdyb3VwLnNlbGVjdGVkQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpLnN1YnNjcmliZSh0YWIgPT4ge1xyXG4gICAgICB0aGlzLmdvVG9UYWIodGFiKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlcmVkIHdoZW4gdGhlIHRhYkdyb3VwJ3Mgc2VsZWN0ZWQgaXRlbSBjaGFuZ2VzLiBJZiB0aGUgY3VycmVudCB0YWIgcGFzc2VzIHZhbGlkYXRpb24sIHVwZGF0ZXNcclxuICAgKiB0aGUgY3VycmVudCB0YWIgdG8gdGhlIHNlbGVjdGVkIHRhYi5cclxuICAgKiBAcGFyYW0gdGFiIC0gdGhlIHRhYiB0aGF0IHdhcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ29Ub1RhYih0YWI6IFdpemFyZFRhYikge1xyXG4gICAgLy8gT25seSBjb250aW51ZSBpZiB0aGUgY3VycmVudCB0YWIgaXMgbm90IHRoZSB0YWIgdGhhdCB3YXMgc2VsZWN0ZWQuIFRoZXkgYXJlIHRoZSBzYW1lXHJcbiAgICAvLyB3aGVuIHdlIGFyZSByZXNldHRpbmcgdGhlIHRhYiBncm91cCdzIHNlbGVjdGVkIHRhYiBiYWNrIHRvIHRoZSBjdXJyZW50IHRhYiB3aGVuIHZhbGlkYXRpb24gZmFpbHMuXHJcbiAgICAvLyBXaXRob3V0IHRoaXMgY2hlY2ssIHdlIGNvdWxkIGVuZCB1cCBpbiBhbiBpbmZpbml0ZSBsb29wLlxyXG4gICAgaWYgKHRhYiAhPT0gdGhpcy5fY3VycmVudFRhYikge1xyXG4gICAgICBpZiAodGhpcy5jYW5MZWF2ZUN1cnJlbnRUYWIoKSkge1xyXG4gICAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgdGFiIGFzIGNvbXBsZXRlIGJlZm9yZSBzd2l0Y2hpbmdcclxuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRhYikge1xyXG4gICAgICAgICAgdGhpcy5fY3VycmVudFRhYi5jb21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldEN1cnJlbnRUYWIodGFiKTtcclxuICAgICAgICB0aGlzLm9uVGFiQ2hhbmdlU3VjY2VzcygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEJlY2F1c2UgdGhlIHRhYkdyb3VwJ3Mgc2VsZWN0ZWQgdGFiIGlzIHVwZGF0ZWQgd2hlbiBhIHRhYiBpcyBjbGlja2VkIGJlZm9yZSB3ZSBjYW4gcnVuIGFueSBmb3JtIHZhbGlkYXRpb24sXHJcbiAgICAgICAgLy8gd2UgbmVlZCB0byByZXNldCB0aGUgc2VsZWN0ZWQgdGFiIGJhY2sgdG8gdGhlIGN1cnJlbnQgdGFiIGlmIHZhbGlkYXRpb24gZmFpbHMuXHJcbiAgICAgICAgLy8gV2l0aG91dCB0aGlzIHdlIHdvdWxkIGhhdmUgbm8gd2F5IHRvIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBsZWF2aW5nIHRoZSBjdXJyZW50IHRhYiBpZiB0aGUgZm9ybSBpcyBpbnZhbGlkLlxyXG4gICAgICAgIHRoaXMuX3RhYkdyb3VwLnNlbGVjdGVkID0gdGhpcy5fY3VycmVudFRhYjtcclxuICAgICAgICB0aGlzLm9uVGFiQ2hhbmdlRmFpbGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGN1cnJlbnQgdGFiLCB0aXRsZSwgYW5kIGhlbHAuXHJcbiAgICogQHBhcmFtIHRhYiBUYWIgdG8gc2V0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRDdXJyZW50VGFiKHRhYj86IFdpemFyZFRhYikge1xyXG4gICAgdGhpcy5fY3VycmVudFRhYiA9IHRhYjtcclxuICAgIHRoaXMuaGVscCA9IHRhYiA/IHRhYi5oZWxwIDogdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50aXRsZSA9IHRhYiA/IHRhYi50aXRsZSA6IHVuZGVmaW5lZDtcclxuICB9XHJcbn1cclxuIl19