@energycap/components 0.31.0 → 0.31.1-ECAP-12439-angular-14.20220901-1019

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 (284) hide show
  1. package/energycap-components.d.ts +1 -3
  2. package/energycap-components.min.css +2 -2
  3. package/esm2020/energycap-components.mjs +5 -0
  4. package/esm2020/lib/components.module.mjs +383 -0
  5. package/esm2020/lib/controls/banner/banner.component.mjs +106 -0
  6. package/esm2020/lib/controls/button/button.component.mjs +106 -0
  7. package/esm2020/lib/controls/button/copy-button.directive.mjs +65 -0
  8. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +139 -0
  9. package/esm2020/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -0
  10. package/esm2020/lib/controls/combobox/combobox.component.mjs +840 -0
  11. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +237 -0
  12. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +169 -0
  13. package/esm2020/lib/controls/form-control/form-control.component.mjs +86 -0
  14. package/esm2020/lib/controls/form-control-base.mjs +143 -0
  15. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  16. package/esm2020/lib/controls/form-group/form-group.component.mjs +252 -0
  17. package/esm2020/lib/controls/help-popover/help-popover.component.mjs +28 -0
  18. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +233 -0
  19. package/esm2020/lib/controls/link-button/link-button.component.mjs +11 -0
  20. package/esm2020/lib/controls/menu/menu.component.mjs +443 -0
  21. package/{esm2015/lib/controls/navigation/link-item.js → esm2020/lib/controls/navigation/link-item.mjs} +0 -0
  22. package/{esm2015/lib/controls/navigation/nav-group.js → esm2020/lib/controls/navigation/nav-group.mjs} +0 -0
  23. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  24. package/{esm2015/lib/controls/navigation/nav-item.js → esm2020/lib/controls/navigation/nav-item.mjs} +0 -0
  25. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +371 -0
  26. package/esm2020/lib/controls/popover/popover.component.mjs +84 -0
  27. package/{esm2015/lib/controls/radio-button/radio-button-option.js → esm2020/lib/controls/radio-button/radio-button-option.mjs} +0 -0
  28. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +81 -0
  29. package/esm2020/lib/controls/select/select.component.mjs +87 -0
  30. package/esm2020/lib/controls/tabs/tabs.component.mjs +47 -0
  31. package/esm2020/lib/controls/textbox/textbox.component.mjs +154 -0
  32. package/{esm2015/lib/core/cache.service.js → esm2020/lib/core/cache.service.mjs} +9 -8
  33. package/{esm2015/lib/core/custom-validators.js → esm2020/lib/core/custom-validators.mjs} +0 -0
  34. package/{esm2015/lib/core/date-time-helper.js → esm2020/lib/core/date-time-helper.mjs} +0 -0
  35. package/esm2020/lib/core/error.service.mjs +57 -0
  36. package/esm2020/lib/core/scroll.service.mjs +89 -0
  37. package/esm2020/lib/core/telemetry-tracker.service.mjs +16 -0
  38. package/esm2020/lib/core/telemetry.service.mjs +38 -0
  39. package/esm2020/lib/core/validation-message.service.mjs +181 -0
  40. package/{esm2015/lib/core/validation-patterns.js → esm2020/lib/core/validation-patterns.mjs} +0 -0
  41. package/esm2020/lib/core/window.service.mjs +182 -0
  42. package/esm2020/lib/display/app-bar/app-bar.component.mjs +46 -0
  43. package/esm2020/lib/display/avatar/avatar.component.mjs +67 -0
  44. package/{esm2015/lib/display/avatar/avatar.service.js → esm2020/lib/display/avatar/avatar.service.mjs} +9 -7
  45. package/esm2020/lib/display/confirm/confirm.component.mjs +131 -0
  46. package/{esm2015/lib/display/dialog/dialog-content.js → esm2020/lib/display/dialog/dialog-content.mjs} +0 -0
  47. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  48. package/{esm2015/lib/display/dialog/dialog-types.js → esm2020/lib/display/dialog/dialog-types.mjs} +0 -0
  49. package/esm2020/lib/display/dialog/dialog.component.mjs +242 -0
  50. package/esm2020/lib/display/dialog/dialog.service.mjs +71 -0
  51. package/{esm2015/lib/display/help/help-types.js → esm2020/lib/display/help/help-types.mjs} +0 -0
  52. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +106 -0
  53. package/{esm2015/lib/display/hierarchy/hierarchy-mocks.spec.js → esm2020/lib/display/hierarchy/hierarchy-mocks.spec.mjs} +5 -9
  54. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +59 -0
  55. package/esm2020/lib/display/item-display/item-display.component.mjs +67 -0
  56. package/esm2020/lib/display/json-display/json-display.component.mjs +47 -0
  57. package/esm2020/lib/display/resizable/resizable-base.mjs +120 -0
  58. package/esm2020/lib/display/resizable/resizable.component.mjs +57 -0
  59. package/esm2020/lib/display/spinner/spinner.component.mjs +12 -0
  60. package/esm2020/lib/display/splash/splash.component.mjs +42 -0
  61. package/esm2020/lib/display/splash/splash.service.mjs +35 -0
  62. package/esm2020/lib/display/table/resizable-column.component.mjs +20 -0
  63. package/esm2020/lib/display/table/resizable-table.directive.mjs +227 -0
  64. package/esm2020/lib/display/table/searchable-table.component.mjs +338 -0
  65. package/esm2020/lib/display/table/table-detail-row.component.mjs +27 -0
  66. package/esm2020/lib/display/table/table-locked-column.component.mjs +58 -0
  67. package/esm2020/lib/display/table/table-master-header-row.component.mjs +11 -0
  68. package/esm2020/lib/display/table/table-master-row.component.mjs +150 -0
  69. package/esm2020/lib/display/table/table-pagination.component.mjs +150 -0
  70. package/esm2020/lib/display/table/table-selectable-row.component.mjs +235 -0
  71. package/esm2020/lib/display/table/table.component.mjs +244 -0
  72. package/esm2020/lib/display/tags/tag.mjs +15 -0
  73. package/esm2020/lib/display/tags/tags.component.mjs +77 -0
  74. package/esm2020/lib/display/toast/toast/toast.component.mjs +77 -0
  75. package/{esm2015/lib/display/toast/toast-types.js → esm2020/lib/display/toast/toast-types.mjs} +0 -0
  76. package/esm2020/lib/display/toast/toast.service.mjs +35 -0
  77. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +114 -0
  78. package/esm2020/lib/display/tree/tree.component.mjs +125 -0
  79. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  80. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  81. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  82. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +163 -0
  83. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  84. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  85. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +48 -0
  86. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  87. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  88. package/{esm2015/lib/shared/display.js → esm2020/lib/shared/display.mjs} +0 -0
  89. package/esm2020/lib/shared/form-group.helper.mjs +67 -0
  90. package/{esm2015/lib/shared/json-helper.js → esm2020/lib/shared/json-helper.mjs} +0 -0
  91. package/{esm2015/lib/shared/lodash-helper.js → esm2020/lib/shared/lodash-helper.mjs} +0 -0
  92. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +339 -0
  93. package/{esm2015/lib/shared/page/page-statuses.js → esm2020/lib/shared/page/page-statuses.mjs} +0 -0
  94. package/esm2020/lib/shared/page/page-title/page-title.component.mjs +23 -0
  95. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +115 -0
  96. package/{esm2015/lib/shared/testing/hierarchy-base-test-injector-factory.spec.js → esm2020/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs} +0 -0
  97. package/esm2020/lib/shared/testing/page-base-component-test-helper.spec.mjs +30 -0
  98. package/{esm2015/lib/shared/testing/page-base-component-test-injector-factory.spec.js → esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs} +0 -0
  99. package/esm2020/lib/shared/testing/public-mocks.spec.mjs +132 -0
  100. package/{esm2015/lib/shared/testing/spy-factory.spec.js → esm2020/lib/shared/testing/spy-factory.spec.mjs} +0 -0
  101. package/{esm2015/lib/shared/testing/translation-mocks.spec.js → esm2020/lib/shared/testing/translation-mocks.spec.mjs} +0 -0
  102. package/esm2020/lib/shared/user-preference.service.mjs +17 -0
  103. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  104. package/esm2020/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -0
  105. package/esm2020/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -0
  106. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  107. package/fesm2015/energycap-components.mjs +10002 -0
  108. package/fesm2015/energycap-components.mjs.map +1 -0
  109. package/fesm2020/energycap-components.mjs +9912 -0
  110. package/fesm2020/energycap-components.mjs.map +1 -0
  111. package/lib/components.module.d.ts +71 -0
  112. package/lib/controls/banner/banner.component.d.ts +3 -0
  113. package/lib/controls/button/button.component.d.ts +3 -0
  114. package/lib/controls/button/copy-button.directive.d.ts +3 -0
  115. package/lib/controls/checkbox/checkbox.component.d.ts +3 -0
  116. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +3 -0
  117. package/lib/controls/combobox/combobox.component.d.ts +3 -0
  118. package/lib/controls/dropdown/dropdown.component.d.ts +3 -0
  119. package/lib/controls/file-upload/file-upload.component.d.ts +3 -0
  120. package/lib/controls/form-control/form-control.component.d.ts +3 -0
  121. package/lib/controls/form-control-base.d.ts +3 -0
  122. package/lib/controls/form-control-label/form-control-label.component.d.ts +3 -0
  123. package/lib/controls/form-group/form-group.component.d.ts +3 -0
  124. package/lib/controls/help-popover/help-popover.component.d.ts +3 -0
  125. package/lib/controls/item-picker/item-picker.component.d.ts +3 -0
  126. package/lib/controls/link-button/link-button.component.d.ts +3 -0
  127. package/lib/controls/menu/menu.component.d.ts +3 -0
  128. package/lib/controls/navigation/nav-item-active.directive.d.ts +3 -0
  129. package/lib/controls/numericbox/numericbox.component.d.ts +3 -0
  130. package/lib/controls/popover/popover.component.d.ts +3 -0
  131. package/lib/controls/radio-button/radio-button.component.d.ts +3 -0
  132. package/lib/controls/select/select.component.d.ts +3 -0
  133. package/lib/controls/tabs/tabs.component.d.ts +3 -0
  134. package/lib/controls/textbox/textbox.component.d.ts +3 -0
  135. package/lib/core/cache.service.d.ts +3 -0
  136. package/lib/core/error.service.d.ts +3 -0
  137. package/lib/core/scroll.service.d.ts +3 -0
  138. package/lib/core/telemetry-tracker.service.d.ts +3 -0
  139. package/lib/core/telemetry.service.d.ts +3 -0
  140. package/lib/core/validation-message.service.d.ts +3 -0
  141. package/lib/core/window.service.d.ts +3 -0
  142. package/lib/display/app-bar/app-bar.component.d.ts +3 -0
  143. package/lib/display/avatar/avatar.component.d.ts +3 -0
  144. package/lib/display/avatar/avatar.service.d.ts +3 -0
  145. package/lib/display/confirm/confirm.component.d.ts +3 -0
  146. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +3 -0
  147. package/lib/display/dialog/dialog.component.d.ts +3 -0
  148. package/lib/display/dialog/dialog.service.d.ts +3 -0
  149. package/lib/display/hierarchy/hierarchy-base.d.ts +3 -0
  150. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +3 -0
  151. package/lib/display/item-display/item-display.component.d.ts +3 -0
  152. package/lib/display/json-display/json-display.component.d.ts +3 -0
  153. package/lib/display/resizable/resizable-base.d.ts +3 -0
  154. package/lib/display/resizable/resizable.component.d.ts +3 -0
  155. package/lib/display/spinner/spinner.component.d.ts +3 -0
  156. package/lib/display/splash/splash.component.d.ts +3 -0
  157. package/lib/display/splash/splash.service.d.ts +3 -0
  158. package/lib/display/table/resizable-column.component.d.ts +3 -0
  159. package/lib/display/table/resizable-table.directive.d.ts +3 -0
  160. package/lib/display/table/searchable-table.component.d.ts +3 -0
  161. package/lib/display/table/table-detail-row.component.d.ts +3 -0
  162. package/lib/display/table/table-locked-column.component.d.ts +3 -0
  163. package/lib/display/table/table-master-header-row.component.d.ts +3 -0
  164. package/lib/display/table/table-master-row.component.d.ts +3 -0
  165. package/lib/display/table/table-pagination.component.d.ts +3 -0
  166. package/lib/display/table/table-selectable-row.component.d.ts +3 -0
  167. package/lib/display/table/table.component.d.ts +3 -0
  168. package/lib/display/tags/tags.component.d.ts +3 -0
  169. package/lib/display/toast/toast/toast.component.d.ts +3 -0
  170. package/lib/display/toast/toast.service.d.ts +3 -0
  171. package/lib/display/toast/toaster/toaster.component.d.ts +3 -0
  172. package/lib/display/tree/tree.component.d.ts +3 -0
  173. package/lib/display/view-overlay/view-overlay.component.d.ts +3 -0
  174. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +3 -0
  175. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +3 -0
  176. package/lib/shared/directives/popup/popup-container.directive.d.ts +3 -0
  177. package/lib/shared/display/pipes/date-display.pipe.d.ts +3 -0
  178. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +3 -0
  179. package/lib/shared/display/pipes/relative-date.pipe.d.ts +3 -0
  180. package/lib/shared/display/pipes/row-count.pipe.d.ts +3 -0
  181. package/lib/shared/display/pipes/time-display.pipe.d.ts +3 -0
  182. package/lib/shared/form-group.helper.d.ts +3 -0
  183. package/lib/shared/page/page-base/page-base.component.d.ts +3 -0
  184. package/lib/shared/page/page-title/page-title.component.d.ts +3 -0
  185. package/lib/shared/page/page-view/page-view.component.d.ts +3 -0
  186. package/lib/shared/testing/public-mocks.spec.d.ts +7 -0
  187. package/lib/shared/user-preference.service.d.ts +3 -0
  188. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +3 -0
  189. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +3 -0
  190. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +3 -0
  191. package/package.json +25 -13
  192. package/src/styles/_functions.scss +6 -4
  193. package/src/styles/_global-variables.scss +1 -0
  194. package/src/styles/mixins/_control-base.scss +2 -2
  195. package/src/styles/mixins/_form-control-base.scss +3 -1
  196. package/src/styles/mixins/_spinner-base.scss +3 -1
  197. package/bundles/energycap-components.umd.js +0 -10552
  198. package/bundles/energycap-components.umd.js.map +0 -1
  199. package/bundles/energycap-components.umd.min.js +0 -17
  200. package/bundles/energycap-components.umd.min.js.map +0 -1
  201. package/energycap-components.metadata.json +0 -1
  202. package/esm2015/energycap-components.js +0 -8
  203. package/esm2015/lib/components.module.js +0 -235
  204. package/esm2015/lib/controls/banner/banner.component.js +0 -94
  205. package/esm2015/lib/controls/button/button.component.js +0 -89
  206. package/esm2015/lib/controls/button/copy-button.directive.js +0 -63
  207. package/esm2015/lib/controls/checkbox/checkbox.component.js +0 -137
  208. package/esm2015/lib/controls/collapsible-toggle/collapsible-toggle.component.js +0 -35
  209. package/esm2015/lib/controls/combobox/combobox.component.js +0 -818
  210. package/esm2015/lib/controls/dropdown/dropdown.component.js +0 -207
  211. package/esm2015/lib/controls/file-upload/file-upload.component.js +0 -172
  212. package/esm2015/lib/controls/form-control/form-control.component.js +0 -65
  213. package/esm2015/lib/controls/form-control-base.js +0 -140
  214. package/esm2015/lib/controls/form-control-label/form-control-label.component.js +0 -139
  215. package/esm2015/lib/controls/form-group/form-group.component.js +0 -254
  216. package/esm2015/lib/controls/help-popover/help-popover.component.js +0 -22
  217. package/esm2015/lib/controls/item-picker/item-picker.component.js +0 -216
  218. package/esm2015/lib/controls/link-button/link-button.component.js +0 -12
  219. package/esm2015/lib/controls/menu/menu.component.js +0 -424
  220. package/esm2015/lib/controls/navigation/nav-item-active.directive.js +0 -86
  221. package/esm2015/lib/controls/numericbox/numericbox.component.js +0 -362
  222. package/esm2015/lib/controls/popover/popover.component.js +0 -85
  223. package/esm2015/lib/controls/radio-button/radio-button.component.js +0 -78
  224. package/esm2015/lib/controls/select/select.component.js +0 -89
  225. package/esm2015/lib/controls/tabs/tabs.component.js +0 -42
  226. package/esm2015/lib/controls/textbox/textbox.component.js +0 -149
  227. package/esm2015/lib/core/error.service.js +0 -56
  228. package/esm2015/lib/core/scroll.service.js +0 -88
  229. package/esm2015/lib/core/telemetry-tracker.service.js +0 -14
  230. package/esm2015/lib/core/telemetry.service.js +0 -40
  231. package/esm2015/lib/core/validation-message.service.js +0 -185
  232. package/esm2015/lib/core/window.service.js +0 -191
  233. package/esm2015/lib/display/app-bar/app-bar.component.js +0 -42
  234. package/esm2015/lib/display/avatar/avatar.component.js +0 -73
  235. package/esm2015/lib/display/confirm/confirm.component.js +0 -127
  236. package/esm2015/lib/display/dialog/dialog-group/dialog-group.component.js +0 -65
  237. package/esm2015/lib/display/dialog/dialog.component.js +0 -229
  238. package/esm2015/lib/display/dialog/dialog.service.js +0 -69
  239. package/esm2015/lib/display/hierarchy/hierarchy-base.js +0 -106
  240. package/esm2015/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.js +0 -58
  241. package/esm2015/lib/display/item-display/item-display.component.js +0 -57
  242. package/esm2015/lib/display/json-display/json-display.component.js +0 -44
  243. package/esm2015/lib/display/resizable/resizable-base.js +0 -119
  244. package/esm2015/lib/display/resizable/resizable.component.js +0 -57
  245. package/esm2015/lib/display/spinner/spinner.component.js +0 -12
  246. package/esm2015/lib/display/splash/splash.component.js +0 -45
  247. package/esm2015/lib/display/splash/splash.service.js +0 -34
  248. package/esm2015/lib/display/table/resizable-column.component.js +0 -23
  249. package/esm2015/lib/display/table/resizable-table.directive.js +0 -223
  250. package/esm2015/lib/display/table/searchable-table.component.js +0 -303
  251. package/esm2015/lib/display/table/table-detail-row.component.js +0 -21
  252. package/esm2015/lib/display/table/table-locked-column.component.js +0 -53
  253. package/esm2015/lib/display/table/table-master-header-row.component.js +0 -11
  254. package/esm2015/lib/display/table/table-master-row.component.js +0 -141
  255. package/esm2015/lib/display/table/table-pagination.component.js +0 -146
  256. package/esm2015/lib/display/table/table-selectable-row.component.js +0 -216
  257. package/esm2015/lib/display/table/table.component.js +0 -210
  258. package/esm2015/lib/display/tags/tag.js +0 -15
  259. package/esm2015/lib/display/tags/tags.component.js +0 -73
  260. package/esm2015/lib/display/toast/toast/toast.component.js +0 -70
  261. package/esm2015/lib/display/toast/toast.service.js +0 -34
  262. package/esm2015/lib/display/toast/toaster/toaster.component.js +0 -117
  263. package/esm2015/lib/display/tree/tree.component.js +0 -100
  264. package/esm2015/lib/display/view-overlay/view-overlay.component.js +0 -50
  265. package/esm2015/lib/shared/directives/click-area-for/click-area-for.directive.js +0 -25
  266. package/esm2015/lib/shared/directives/if-viewport-width/if-viewport-width.directive.js +0 -112
  267. package/esm2015/lib/shared/directives/popup/popup-container.directive.js +0 -160
  268. package/esm2015/lib/shared/display/pipes/date-display.pipe.js +0 -49
  269. package/esm2015/lib/shared/display/pipes/highlight-text.pipe.js +0 -26
  270. package/esm2015/lib/shared/display/pipes/relative-date.pipe.js +0 -49
  271. package/esm2015/lib/shared/display/pipes/row-count.pipe.js +0 -47
  272. package/esm2015/lib/shared/display/pipes/time-display.pipe.js +0 -40
  273. package/esm2015/lib/shared/form-group.helper.js +0 -65
  274. package/esm2015/lib/shared/page/page-base/page-base.component.js +0 -356
  275. package/esm2015/lib/shared/page/page-title/page-title.component.js +0 -19
  276. package/esm2015/lib/shared/page/page-view/page-view.component.js +0 -89
  277. package/esm2015/lib/shared/testing/page-base-component-test-helper.spec.js +0 -35
  278. package/esm2015/lib/shared/testing/public-mocks.spec.js +0 -126
  279. package/esm2015/lib/shared/user-preference.service.js +0 -15
  280. package/esm2015/lib/shared/wizard/wizard-base/wizard-base.component.js +0 -260
  281. package/esm2015/lib/shared/wizard/wizard-buttons/wizard-buttons.component.js +0 -54
  282. package/esm2015/lib/shared/wizard/wizard-progress/wizard-progress.component.js +0 -18
  283. package/fesm2015/energycap-components.js +0 -9549
  284. package/fesm2015/energycap-components.js.map +0 -1
@@ -0,0 +1,28 @@
1
+ import { Component, HostBinding, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../popover/popover.component";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@ngx-translate/core";
6
+ export class HelpPopoverComponent {
7
+ constructor() {
8
+ this.id = '';
9
+ this.text = '';
10
+ this.contentPosition = 'top-left';
11
+ }
12
+ }
13
+ HelpPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: HelpPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14
+ HelpPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: HelpPopoverComponent, selector: "ec-help-popover", inputs: { id: "id", text: "text", contentPosition: "contentPosition" }, host: { properties: { "attr.id": "this.id" } }, ngImport: i0, template: "<ec-popover id=\"{{id}}_popover\"\r\n icon=\"icon-help-circle\"\r\n [contentPosition]=\"contentPosition\"\r\n iconHoverClass=\"font-color-primary-light\">\r\n <div id=\"{{id}}_popoverContent\"\r\n class=\"help-popover-content text-body-1\"\r\n [class.is-right]=\"contentPosition == 'top-right' || contentPosition == 'bottom-right'\">\r\n <div *ngIf=\"text\"\r\n [innerHTML]=\"text | translate\"></div>\r\n <ng-content></ng-content>\r\n </div>\r\n</ec-popover>", styles: [".help-popover-content{background-color:#162f3b;color:var(--ec-color-primary-light);padding:.375rem .5rem .375rem 1.75rem;max-width:15rem}.help-popover-content.is-right{padding:.375rem 1.75rem .375rem .5rem}\n"], components: [{ type: i1.PopoverComponent, selector: "ec-popover", inputs: ["icon", "contentPosition", "iconHoverClass"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i3.TranslatePipe } });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: HelpPopoverComponent, decorators: [{
16
+ type: Component,
17
+ args: [{ selector: 'ec-help-popover', template: "<ec-popover id=\"{{id}}_popover\"\r\n icon=\"icon-help-circle\"\r\n [contentPosition]=\"contentPosition\"\r\n iconHoverClass=\"font-color-primary-light\">\r\n <div id=\"{{id}}_popoverContent\"\r\n class=\"help-popover-content text-body-1\"\r\n [class.is-right]=\"contentPosition == 'top-right' || contentPosition == 'bottom-right'\">\r\n <div *ngIf=\"text\"\r\n [innerHTML]=\"text | translate\"></div>\r\n <ng-content></ng-content>\r\n </div>\r\n</ec-popover>", styles: [".help-popover-content{background-color:#162f3b;color:var(--ec-color-primary-light);padding:.375rem .5rem .375rem 1.75rem;max-width:15rem}.help-popover-content.is-right{padding:.375rem 1.75rem .375rem .5rem}\n"] }]
18
+ }], ctorParameters: function () { return []; }, propDecorators: { id: [{
19
+ type: Input
20
+ }, {
21
+ type: HostBinding,
22
+ args: ['attr.id']
23
+ }], text: [{
24
+ type: Input
25
+ }], contentPosition: [{
26
+ type: Input
27
+ }] } });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC1wb3BvdmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9oZWxwLXBvcG92ZXIvaGVscC1wb3BvdmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9oZWxwLXBvcG92ZXIvaGVscC1wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFROUQsTUFBTSxPQUFPLG9CQUFvQjtJQU0vQjtRQUppQyxPQUFFLEdBQVcsRUFBRSxDQUFDO1FBQ3hDLFNBQUksR0FBVyxFQUFFLENBQUM7UUFDbEIsb0JBQWUsR0FBMkIsVUFBVSxDQUFDO0lBRTlDLENBQUM7O2tIQU5OLG9CQUFvQjtzR0FBcEIsb0JBQW9CLCtLQ1JqQywwZ0JBV2E7NEZESEEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGlCQUFpQjswRUFNTSxFQUFFO3NCQUFsQyxLQUFLOztzQkFBSSxXQUFXO3VCQUFDLFNBQVM7Z0JBQ3RCLElBQUk7c0JBQVosS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUG9wb3ZlckNvbnRlbnRQb3NpdGlvbiB9IGZyb20gJy4uL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy1oZWxwLXBvcG92ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWxwLXBvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2hlbHAtcG9wb3Zlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIZWxwUG9wb3ZlckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnYXR0ci5pZCcpIGlkOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSB0ZXh0OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBjb250ZW50UG9zaXRpb246IFBvcG92ZXJDb250ZW50UG9zaXRpb24gPSAndG9wLWxlZnQnO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxufVxyXG4iLCI8ZWMtcG9wb3ZlciBpZD1cInt7aWR9fV9wb3BvdmVyXCJcclxuICAgICAgICAgICAgaWNvbj1cImljb24taGVscC1jaXJjbGVcIlxyXG4gICAgICAgICAgICBbY29udGVudFBvc2l0aW9uXT1cImNvbnRlbnRQb3NpdGlvblwiXHJcbiAgICAgICAgICAgIGljb25Ib3ZlckNsYXNzPVwiZm9udC1jb2xvci1wcmltYXJ5LWxpZ2h0XCI+XHJcbiAgPGRpdiBpZD1cInt7aWR9fV9wb3BvdmVyQ29udGVudFwiXHJcbiAgICAgICBjbGFzcz1cImhlbHAtcG9wb3Zlci1jb250ZW50IHRleHQtYm9keS0xXCJcclxuICAgICAgIFtjbGFzcy5pcy1yaWdodF09XCJjb250ZW50UG9zaXRpb24gPT0gJ3RvcC1yaWdodCcgfHwgY29udGVudFBvc2l0aW9uID09ICdib3R0b20tcmlnaHQnXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidGV4dFwiXHJcbiAgICAgICAgIFtpbm5lckhUTUxdPVwidGV4dCB8IHRyYW5zbGF0ZVwiPjwvZGl2PlxyXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2VjLXBvcG92ZXI+Il19
@@ -0,0 +1,233 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import { debounceTime, takeUntil } from 'rxjs/operators';
4
+ import { TableSelectableRowContext } from '../../display/table/table-selectable-row.component';
5
+ import { Overlay } from '../../display/view-overlay/view-overlay.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../display/view-overlay/view-overlay.component";
8
+ import * as i2 from "../../display/table/searchable-table.component";
9
+ import * as i3 from "../../display/table/table-selectable-row.component";
10
+ import * as i4 from "../../display/table/table.component";
11
+ import * as i5 from "../button/button.component";
12
+ import * as i6 from "@angular/common";
13
+ import * as i7 from "@ngx-translate/core";
14
+ ;
15
+ export class ItemPickerSelectableContext extends TableSelectableRowContext {
16
+ constructor() {
17
+ super(...arguments);
18
+ /** id/value map of the selected items. Used for keeping track of what is selected */
19
+ this.selectedItemsMap = new Map();
20
+ /**
21
+ * Gives a way to tell the picker component that the map was modified externally and to update
22
+ * the available/selected lists
23
+ */
24
+ this.selectedItemsMapChanged = new Subject();
25
+ /**
26
+ * AdvancedRowClickBehavior is disabled for ItemPicker.
27
+ */
28
+ this.disableAdvancedRowClickBehavior = true;
29
+ }
30
+ }
31
+ export class ItemPickerComponent {
32
+ constructor() {
33
+ /** Identifier for the component. This will be added to the beginning of all internal action elements */
34
+ this.id = '';
35
+ /** Title displayed above the available items table */
36
+ this.availableTitle = '';
37
+ /** Title displayed above the selected items list */
38
+ this.selectedTitle = '';
39
+ /** The type of item being selected. Ex. Meters, Addresses */
40
+ this.itemName = '';
41
+ /** Used by the internal Searchable Table when there is no available items to choose from based on the getItems results. Do not supply
42
+ * to inherit the default message.
43
+ */
44
+ this.noDataMessage = '';
45
+ /** List of available items to pick from */
46
+ this.availableItems = [];
47
+ /**
48
+ * Selected items array. Created from the selected items map. Binding to the
49
+ * map iterate values caused angular "expression changed" errors so after a map
50
+ * update this gets set to the values
51
+ */
52
+ this.selectedItems = [];
53
+ /** True if there are selected items and at least one can be removed */
54
+ this.selectedItemsClearable = false;
55
+ /** Track by used for the searchable table rows */
56
+ this.trackByIndex = (index) => index;
57
+ this.tableStatus = new Overlay('pending');
58
+ /** Used to shut down our subscriptions when the component is destroyed */
59
+ this.destroyed = new Subject();
60
+ }
61
+ ngOnInit() {
62
+ this.setupRowCheckboxesWatcher();
63
+ this.setupSelectedItemsChangedWatcher();
64
+ }
65
+ /**
66
+ * Watch for changes and react if the custom item template value changes
67
+ */
68
+ ngOnChanges() {
69
+ this.setInternalizedTemplates();
70
+ }
71
+ ngOnDestroy() {
72
+ this.destroyed.next();
73
+ this.destroyed.unsubscribe();
74
+ }
75
+ /**
76
+ * Called by the searchable table when a new set of items are returned from the getItems call.
77
+ * If any of the items have `preventRemove` set, their indices are added to the context.
78
+ */
79
+ onItemsChange(results) {
80
+ let newNonDependentCheckboxes = [];
81
+ results.items.forEach((item, index) => {
82
+ // Check to see if any of the items are marked to be selected by default and if so
83
+ // add them to the map.
84
+ if (item.defaultSelected && !this.selectionContext?.selectedItemsMap.has(item.id)) {
85
+ this.selectionContext?.selectedItemsMap.set(item.id, item);
86
+ }
87
+ // Check to see if any of the items are marked to prevent Removal, and if so
88
+ // add them to the non-dependent checkboxes array. This will prevent the master
89
+ // checkbox from toggling them.
90
+ if (item.preventRemove) {
91
+ newNonDependentCheckboxes.push(index);
92
+ }
93
+ });
94
+ this.selectionContext.nonDependentCheckboxes = newNonDependentCheckboxes;
95
+ this.availableItems = results.items;
96
+ }
97
+ /**
98
+ * Called when the clear selection link button is clicked
99
+ */
100
+ onClearSelectionClick() {
101
+ // Remove removable items from map
102
+ // This is safe. See https://stackoverflow.com/questions/35940216/es6-is-it-dangerous-to-delete-elements-from-set-map-during-set-map-iteration
103
+ for (const [key, val] of this.selectionContext.selectedItemsMap) {
104
+ if (!val.preventRemove) {
105
+ this.selectionContext.selectedItemsMap.delete(key);
106
+ }
107
+ }
108
+ this.selectionContext.rowCheckboxes.controls.forEach((control, index) => {
109
+ if (!this.availableItems[index].preventRemove) {
110
+ control.setValue(false);
111
+ }
112
+ });
113
+ this.selectedItems = Array.from(this.selectionContext.selectedItemsMap.values());
114
+ }
115
+ /**
116
+ * Called when the remove item button is clicked for a selected item
117
+ * @param removeItem
118
+ */
119
+ removeSelectedItem(removeItem) {
120
+ let foundIndex = this.availableItems.findIndex(item => item.id === removeItem.id);
121
+ if (foundIndex > -1) {
122
+ // Update the row checkbox since the item exists in the page being viewed
123
+ // The value change handler for row checkboxes will update the map/selected items
124
+ this.selectionContext.rowCheckboxes.at(foundIndex).setValue(false);
125
+ }
126
+ else {
127
+ // The item being removed is not on the current page so just update the
128
+ // map/selected items
129
+ this.selectionContext.selectedItemsMap.delete(removeItem.id);
130
+ this.selectedItems = Array.from(this.selectionContext.selectedItemsMap.values());
131
+ }
132
+ }
133
+ /**
134
+ * Watch for changes to the row checkboxes form array and update the selected items
135
+ * list
136
+ */
137
+ setupRowCheckboxesWatcher() {
138
+ this.selectionContext?.rowCheckboxes.valueChanges.pipe(
139
+ // Debounce 10 is simply to not spam the change handler on load/page change
140
+ // Otherwise this will get called every time a new row is added to the table
141
+ debounceTime(10), takeUntil(this.destroyed)).subscribe((rowValues) => {
142
+ rowValues.forEach((selected, index) => {
143
+ let availableItem = this.availableItems[index];
144
+ if (!selected && this.selectionContext?.selectedItemsMap.has(availableItem.id)) {
145
+ this.selectionContext?.selectedItemsMap.delete(availableItem.id);
146
+ }
147
+ else if (selected && !this.selectionContext?.selectedItemsMap.has(availableItem.id)) {
148
+ this.selectionContext?.selectedItemsMap.set(availableItem.id, availableItem);
149
+ }
150
+ });
151
+ this.selectedItems = Array.from(this.selectionContext?.selectedItemsMap.values());
152
+ this.selectedItemsClearable = this.selectedItems.length > 0 && this.selectedItems.some(i => !i.preventRemove);
153
+ });
154
+ }
155
+ /**
156
+ * Watch to be told if changes to the map were made outside of the component and if so update
157
+ * the array displayed in the selected list and select checkboxes for visible available items
158
+ */
159
+ setupSelectedItemsChangedWatcher() {
160
+ this.selectionContext.selectedItemsMapChanged.pipe(takeUntil(this.destroyed)).subscribe(() => {
161
+ if (this.selectionContext) {
162
+ this.selectedItems = Array.from(this.selectionContext?.selectedItemsMap.values());
163
+ this.availableItems.forEach((item, index) => {
164
+ if (this.selectionContext.selectedItemsMap.has(item.id)) {
165
+ this.selectionContext.rowCheckboxes.at(index).setValue(true);
166
+ }
167
+ });
168
+ }
169
+ });
170
+ }
171
+ setInternalizedTemplates() {
172
+ if (this.customAvailableHeaderTemplate) {
173
+ this.internalizedAvailableHeaderTemplate = this.customAvailableHeaderTemplate;
174
+ }
175
+ else {
176
+ this.internalizedAvailableHeaderTemplate = this.defaultAvailableHeaderTemplate;
177
+ }
178
+ if (this.customAvailableItemTemplate) {
179
+ this.internalizedAvailableItemTemplate = this.customAvailableItemTemplate;
180
+ }
181
+ else {
182
+ this.internalizedAvailableItemTemplate = this.defaultAvailableItemTemplate;
183
+ }
184
+ if (this.customSelectedItemTemplate) {
185
+ this.internalizedSelectedItemTemplate = this.customSelectedItemTemplate;
186
+ }
187
+ else {
188
+ this.internalizedSelectedItemTemplate = this.defaultSelectedItemTemplate;
189
+ }
190
+ }
191
+ }
192
+ ItemPickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ItemPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
193
+ ItemPickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ItemPickerComponent, selector: "ec-item-picker", inputs: { id: "id", availableTitle: "availableTitle", selectedTitle: "selectedTitle", itemName: "itemName", formModel: "formModel", customAvailableHeaderTemplate: "customAvailableHeaderTemplate", customAvailableItemTemplate: "customAvailableItemTemplate", customSelectedItemTemplate: "customSelectedItemTemplate", ready: "ready", getItems: "getItems", selectionContext: "selectionContext", noDataMessage: "noDataMessage", noSelectedItemsMessage: "noSelectedItemsMessage" }, viewQueries: [{ propertyName: "defaultAvailableHeaderTemplate", first: true, predicate: ["defaultAvailableHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableItemTemplate", first: true, predicate: ["defaultAvailableItemTemplate"], descendants: true, static: true }, { propertyName: "defaultSelectedItemTemplate", first: true, predicate: ["defaultSelectedItemTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectedItems.length\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>", styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"], components: [{ type: i1.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { type: i2.SearchableTableComponent, selector: "ec-searchable-table", inputs: ["id", "resizable", "sortable", "sort", "autofocus", "tableClasses", "searchboxPlaceholder", "formModel", "noDataMessage", "noSearchResultsMessage", "ready", "getItems", "refresh", "status", "tableLayoutFixed", "searchboxTabIndex", "maxItemCount", "hideSearchControl", "hideHeader", "objectType", "hideFooter", "pageable", "pageSize", "maxTabs", "searchboxReadonly", "selectionContext", "selectionToolbarTemplate", "additionalCountText", "selectable", "customContentTemplate", "removeCard", "overlayClasses", "fillParentHeight"], outputs: ["sortChange", "pageChange", "itemsChange"] }, { type: i3.TableSelectableRowComponent, selector: "[ecTableSelectableRow]", inputs: ["id", "ecTableSelectableRow", "selectionContext", "rowIndex", "lockedColOptions", "isSelected", "isCheckboxDisabled"] }, { type: i4.TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { type: i5.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "translate": i7.TranslatePipe } });
194
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ItemPickerComponent, decorators: [{
195
+ type: Component,
196
+ args: [{ selector: 'ec-item-picker', template: "<div ecOverlay\r\n class=\"d-flex flex-grow card\"\r\n [status]=\"tableStatus?.status\"\r\n [message]=\"tableStatus?.message\"\r\n [displayAsMask]=\"true\">\r\n <ec-searchable-table id=\"{{id}}_searchableTable\"\r\n class=\"flex-grow\"\r\n [fillParentHeight]=\"true\"\r\n [hideHeader]=\"true\"\r\n [hideSearchControl]=\"true\"\r\n [removeCard]=\"true\"\r\n [pageable]=\"true\"\r\n [pageSize]=\"50\"\r\n [objectType]=\"itemName\"\r\n [formModel]=\"formModel\"\r\n [ready]=\"ready\"\r\n [getItems]=\"getItems\"\r\n [selectable]=\"true\"\r\n [noDataMessage]=\"noDataMessage\"\r\n [selectionContext]=\"selectionContext\"\r\n [status]=\"tableStatus\"\r\n (itemsChange)=\"onItemsChange($event)\"\r\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\r\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\r\n [tableLayoutFixed]=\"true\">\r\n <header *ngIf=\"customAvailableHeaderTemplate\"\r\n class=\"card-header flex-shrink\"\r\n style=\"height: 3rem;\">\r\n <h3 class=\"card-title\">{{availableTitle | translate}}</h3>\r\n </header>\r\n <thead>\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n class=\"border-bottom-0\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\r\n <tr ecTableSelectableRow\r\n [selectionContext]=\"selectionContext\"\r\n [rowIndex]=\"rowIndex\"\r\n [isCheckboxDisabled]=\"item.preventRemove\"\r\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id)\"\r\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\r\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </ec-searchable-table>\r\n\r\n <section id=\"{{id}}_selectedItems\" class=\"selected-items flex-grow d-flex flex-column\">\r\n <ec-table [scrollable]=\"true\"\r\n class=\"flex-grow is-fixed\">\r\n <colgroup>\r\n <col>\r\n <col style=\"width: 2rem;\">\r\n </colgroup>\r\n <thead>\r\n <tr style=\"height: 3rem;\">\r\n <th colspan=\"2\"\r\n class=\"p-2 border-bottom-0\">\r\n <div class=\"d-flex align-items-center\">\r\n <span class=\"text-heading-2 font-color-primary flex-grow text-truncate\">{{selectedTitle | translate}}</span>\r\n <a *ngIf=\"selectedItemsClearable\"\r\n id=\"{{id}}_clearSelection\"\r\n class=\"pl-2 ml-auto font-size-base\"\r\n href=\"javascript:void(0)\"\r\n (click)=\"onClearSelectionClick()\"\r\n translate>ClearSelection_TC</a>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <ng-container *ngIf=\"selectedItems.length\">\r\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\r\n id=\"selected_row_{{item.id}}\"\r\n [class.border-bottom]=\"!isLast\">\r\n <td class=\"p-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\r\n </ng-container>\r\n </td>\r\n\r\n <td class=\"actions-col text-right\"\r\n style=\"vertical-align: middle;\">\r\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\r\n *ngIf=\"!item.preventRemove\"\r\n type=\"icon\"\r\n icon=\"ec-icon icon-cancel\"\r\n (clicked)=\"removeSelectedItem(item)\">\r\n </ec-button>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr *ngIf=\"!selectedItems.length\">\r\n <td *ngIf=\"!noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate\r\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\r\n <td *ngIf=\"noSelectedItemsMessage\"\r\n colspan=\"2\"\r\n class=\"p-2 no-data-message\"\r\n translate>{{noSelectedItemsMessage}}</td>\r\n </tr>\r\n </tbody>\r\n </ec-table>\r\n\r\n <footer id=\"selectedItemsFooter\"\r\n *ngIf=\"selectedItems.length\"\r\n class=\"d-flex flex-shrink px-2 border-top align-items-center\"\r\n style=\"height: calc(2.5rem + 1px);\">\r\n <span class=\"ml-auto text-caption-1 font-color-hint\">\r\n {{selectedItems.length}} {{itemName | translate}}\r\n </span>\r\n </footer>\r\n </section>\r\n</div>\r\n\r\n<ng-template #defaultAvailableHeaderTemplate>\r\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">{{availableTitle | translate}}</th>\r\n</ng-template>\r\n\r\n<ng-template #defaultAvailableItemTemplate\r\n let-item>\r\n <td>{{item.label}}</td>\r\n</ng-template>\r\n\r\n<ng-template #defaultSelectedItemTemplate\r\n let-item>\r\n {{item.label}}\r\n</ng-template>", styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"] }]
197
+ }], ctorParameters: function () { return []; }, propDecorators: { id: [{
198
+ type: Input
199
+ }], availableTitle: [{
200
+ type: Input
201
+ }], selectedTitle: [{
202
+ type: Input
203
+ }], itemName: [{
204
+ type: Input
205
+ }], formModel: [{
206
+ type: Input
207
+ }], customAvailableHeaderTemplate: [{
208
+ type: Input
209
+ }], customAvailableItemTemplate: [{
210
+ type: Input
211
+ }], customSelectedItemTemplate: [{
212
+ type: Input
213
+ }], ready: [{
214
+ type: Input
215
+ }], getItems: [{
216
+ type: Input
217
+ }], selectionContext: [{
218
+ type: Input
219
+ }], noDataMessage: [{
220
+ type: Input
221
+ }], noSelectedItemsMessage: [{
222
+ type: Input
223
+ }], defaultAvailableHeaderTemplate: [{
224
+ type: ViewChild,
225
+ args: ['defaultAvailableHeaderTemplate', { static: true }]
226
+ }], defaultAvailableItemTemplate: [{
227
+ type: ViewChild,
228
+ args: ['defaultAvailableItemTemplate', { static: true }]
229
+ }], defaultSelectedItemTemplate: [{
230
+ type: ViewChild,
231
+ args: ['defaultSelectedItemTemplate', { static: true }]
232
+ }] } });
233
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2l0ZW0tcGlja2VyL2l0ZW0tcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9pdGVtLXBpY2tlci9pdGVtLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNkMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7OztBQWMzRSxDQUFDO0FBRUYsTUFBTSxPQUFPLDJCQUErQixTQUFRLHlCQUF5QjtJQUE3RTs7UUFDRSxxRkFBcUY7UUFDOUUscUJBQWdCLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFaEU7OztXQUdHO1FBQ0ksNEJBQXVCLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFOUQ7O1dBRUc7UUFDYSxvQ0FBK0IsR0FBWSxJQUFJLENBQUM7SUFDbEUsQ0FBQztDQUFBO0FBT0QsTUFBTSxPQUFPLG1CQUFtQjtJQStFOUI7UUE3RUEsd0dBQXdHO1FBQ3hGLE9BQUUsR0FBWSxFQUFFLENBQUM7UUFFakMsc0RBQXNEO1FBQ3RDLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBRTVDLG9EQUFvRDtRQUNwQyxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUUz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QUdVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBR1UsU0FBUztzQkFBeEIsS0FBSztnQkFHVSw2QkFBNkI7c0JBQTVDLEtBQUs7Z0JBR1UsMkJBQTJCO3NCQUExQyxLQUFLO2dCQUdVLDBCQUEwQjtzQkFBekMsS0FBSztnQkFHVSxLQUFLO3NCQUFwQixLQUFLO2dCQUdVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBR1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBTVUsc0JBQXNCO3NCQUFyQyxLQUFLO2dCQTRCaUUsOEJBQThCO3NCQUFwRyxTQUFTO3VCQUFDLGdDQUFnQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDUSw0QkFBNEI7c0JBQWhHLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNTLDJCQUEyQjtzQkFBOUYsU0FBUzt1QkFBQyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFRhYmxlU2VhcmNoUmVzdWx0cyB9IGZyb20gJy4uLy4uL2Rpc3BsYXkvdGFibGUvc2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdpbmdJbmZvIH0gZnJvbSAnLi4vLi4vZGlzcGxheS90YWJsZS90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQgfSBmcm9tICcuLi8uLi9kaXNwbGF5L3RhYmxlL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi8uLi9kaXNwbGF5L3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICcuLi9tZW51L21lbnUuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGlja2VySXRlbTxUVmFsdWUgPSBhbnksIFNJdGVtcyA9IGFueT4gZXh0ZW5kcyBNZW51SXRlbSB7XHJcbiAgaWQ6IHN0cmluZztcclxuXHJcbiAgLyoqIFdoZW4gc2V0IHRvIHRydWUgdGhlIGF2YWlsYWJsZSBpdGVtIHdpbGwgYmUgYXV0b21hdGljYWxseSBhZGRlZCB0byB0aGUgc2VsZWN0ZWQgbGlzdCAqL1xyXG4gIGRlZmF1bHRTZWxlY3RlZD86IGJvb2xlYW47XHJcblxyXG4gIC8qKiBXaGVuIHNldCB0byB0cnVlLCB0aGUgaXRlbSB3aWxsIG5vdCBiZSBhbGxvd2VkIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgbGlzdCAqL1xyXG4gIHByZXZlbnRSZW1vdmU/OiBib29sZWFuO1xyXG5cclxuICAvKiogUmVkZWZpbmluZyB0byBnZXQgdGhlIHR5cGluZyAqL1xyXG4gIHZhbHVlOiBUVmFsdWU7XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgSXRlbVBpY2tlclNlbGVjdGFibGVDb250ZXh0PFQ+IGV4dGVuZHMgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB7XHJcbiAgLyoqIGlkL3ZhbHVlIG1hcCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXMuIFVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2Ygd2hhdCBpcyBzZWxlY3RlZCAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zTWFwOiBNYXA8c3RyaW5nLCBQaWNrZXJJdGVtPFQ+PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZXMgYSB3YXkgdG8gdGVsbCB0aGUgcGlja2VyIGNvbXBvbmVudCB0aGF0IHRoZSBtYXAgd2FzIG1vZGlmaWVkIGV4dGVybmFsbHkgYW5kIHRvIHVwZGF0ZVxyXG4gICAqIHRoZSBhdmFpbGFibGUvc2VsZWN0ZWQgbGlzdHNcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRJdGVtc01hcENoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKipcclxuICAgKiBBZHZhbmNlZFJvd0NsaWNrQmVoYXZpb3IgaXMgZGlzYWJsZWQgZm9yIEl0ZW1QaWNrZXIuXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IGRpc2FibGVBZHZhbmNlZFJvd0NsaWNrQmVoYXZpb3I6IGJvb2xlYW4gPSB0cnVlO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLWl0ZW0tcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2l0ZW0tcGlja2VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEl0ZW1QaWNrZXJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgLyoqIElkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQuIFRoaXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIGFsbCBpbnRlcm5hbCBhY3Rpb24gZWxlbWVudHMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBhYm92ZSB0aGUgYXZhaWxhYmxlIGl0ZW1zIHRhYmxlICovXHJcbiAgQElucHV0KCkgcHVibGljIGF2YWlsYWJsZVRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRpdGxlIGRpc3BsYXllZCBhYm92ZSB0aGUgc2VsZWN0ZWQgaXRlbXMgbGlzdCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZFRpdGxlOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFRoZSB0eXBlIG9mIGl0ZW0gYmVpbmcgc2VsZWN0ZWQuIEV4LiBNZXRlcnMsIEFkZHJlc3NlcyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpdGVtTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBGb3JtIGdyb3VwIHRoYXQgaXMgZ2l2ZW4gdG8gdGhlIGludGVybmFsIFNlYXJjaGFibGUgVGFibGUgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZm9ybU1vZGVsPzogRm9ybUdyb3VwO1xyXG5cclxuICAvKiogVGVtcGxhdGUgZm9yIHdoZW4gYSBjdXN0b20gaGVhZGVyIGlzIG5lZWRlZCBmb3IgdGhlIGF2YWlsYWJsZSBpdGVtcyB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21BdmFpbGFibGVIZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBhdmFpbGFibGUgaXRlbSBpcyBuZWVkZWQuIERlZmF1bHQgdGVtcGxhdGUgaXMgYSBsYWJlbCBvbmx5ICovXHJcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUF2YWlsYWJsZUl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBzZWxlY3RlZCBpdGVtIGlzIG5lZWRlZC4gRGVmYXVsdCB0ZW1wbGF0ZSBpcyBhIGxhYmVsIG9ubHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tU2VsZWN0ZWRJdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB0byBrbm93IHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHkgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcmVhZHk/OiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG5cclxuICAvKiogVXNlZCBieSBTZWFyY2hhYmxlIFRhYmxlIHRvIHJldHJpZXZlIHRoZSBhdmFpbGFibGUgaXRlbXMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZ2V0SXRlbXM/OiAoc2VhcmNoPzogc3RyaW5nLCBwYWdlQ2hhbmdlSW5mbz86IFBhZ2luZ0luZm8pID0+IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPjtcclxuXHJcbiAgLyoqIFVzZWQgdG8gbWFpbnRhaW4gdGhlIGF2YWlsYWJsZSBpdGVtcyBjaGVja2JveCBzZWxlY3Rpb24gYXMgd2VsbCBhcyB0aGUgc2VsZWN0ZWQgaXRlbXMgbGlzdCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3Rpb25Db250ZXh0ITogSXRlbVBpY2tlclNlbGVjdGFibGVDb250ZXh0PFQ+O1xyXG5cclxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB3aGVuIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBpdGVtcyB0byBjaG9vc2UgZnJvbSBiYXNlZCBvbiB0aGUgZ2V0SXRlbXMgcmVzdWx0cy4gRG8gbm90IHN1cHBseVxyXG4gICAqICB0byBpbmhlcml0IHRoZSBkZWZhdWx0IG1lc3NhZ2UuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5vIHNlbGVjdGVkIGl0ZW1zIG1lc3NhZ2UuIElmIHByb3ZpZGVkIHRoaXMgd2lsbCBiZSB1c2VkLCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgbWVzc2FnZSB3aXRoIHRoZSBpdGVtIG5hbWVcclxuICAgKiBpbnRlcnBvbGF0aW9uIHdpbGwgYmUgdXNlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbm9TZWxlY3RlZEl0ZW1zTWVzc2FnZT86IHN0cmluZztcclxuXHJcbiAgLyoqIExpc3Qgb2YgYXZhaWxhYmxlIGl0ZW1zIHRvIHBpY2sgZnJvbSAqL1xyXG4gIHB1YmxpYyBhdmFpbGFibGVJdGVtczogUGlja2VySXRlbVtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdGVkIGl0ZW1zIGFycmF5LiBDcmVhdGVkIGZyb20gdGhlIHNlbGVjdGVkIGl0ZW1zIG1hcC4gQmluZGluZyB0byB0aGVcclxuICAgKiBtYXAgaXRlcmF0ZSB2YWx1ZXMgY2F1c2VkIGFuZ3VsYXIgXCJleHByZXNzaW9uIGNoYW5nZWRcIiBlcnJvcnMgc28gYWZ0ZXIgYSBtYXBcclxuICAgKiB1cGRhdGUgdGhpcyBnZXRzIHNldCB0byB0aGUgdmFsdWVzXHJcbiAgICovXHJcbiAgcHVibGljIHNlbGVjdGVkSXRlbXM6IFBpY2tlckl0ZW1bXSA9IFtdO1xyXG5cclxuICAvKiogVHJ1ZSBpZiB0aGVyZSBhcmUgc2VsZWN0ZWQgaXRlbXMgYW5kIGF0IGxlYXN0IG9uZSBjYW4gYmUgcmVtb3ZlZCAqL1xyXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUcmFjayBieSB1c2VkIGZvciB0aGUgc2VhcmNoYWJsZSB0YWJsZSByb3dzICovXHJcbiAgcHVibGljIHRyYWNrQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiBpbmRleDtcclxuXHJcbiAgcHVibGljIHRhYmxlU3RhdHVzOiBPdmVybGF5ID0gbmV3IE92ZXJsYXkoJ3BlbmRpbmcnKTtcclxuICAvKipcclxuICAgKiBUZW1wbGF0ZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGF2YWlsYWJsZSBhbmQgc2VsZWN0ZWQgaXRlbXMgYXMgd2VsbCBhcyB0aGUgYXZhaWxhYmxlIGl0ZW0gaGVhZGVyLlxyXG4gICAqIFRoaXMgd2lsbCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdGVtcGxhdGUgaWYgYSBjdXN0b20gaXMgbm90IHByb3ZpZGVkXHJcbiAgICovXHJcbiAgcHVibGljIGludGVybmFsaXplZEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBwdWJsaWMgaW50ZXJuYWxpemVkU2VsZWN0ZWRJdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogRGVmYXVsdCB0ZW1wbGF0ZXMgdXNlZCBpZiBhIGN1c3RvbSB0ZW1wbGF0ZSBpcyBub3QgcHJvdmlkZWQgKi9cclxuICBAVmlld0NoaWxkKCdkZWZhdWx0QXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIGRlZmF1bHRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKiogVXNlZCB0byBzaHV0IGRvd24gb3VyIHN1YnNjcmlwdGlvbnMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZCAqL1xyXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXR1cFJvd0NoZWNrYm94ZXNXYXRjaGVyKCk7XHJcbiAgICB0aGlzLnNldHVwU2VsZWN0ZWRJdGVtc0NoYW5nZWRXYXRjaGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBmb3IgY2hhbmdlcyBhbmQgcmVhY3QgaWYgdGhlIGN1c3RvbSBpdGVtIHRlbXBsYXRlIHZhbHVlIGNoYW5nZXNcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEludGVybmFsaXplZFRlbXBsYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCBieSB0aGUgc2VhcmNoYWJsZSB0YWJsZSB3aGVuIGEgbmV3IHNldCBvZiBpdGVtcyBhcmUgcmV0dXJuZWQgZnJvbSB0aGUgZ2V0SXRlbXMgY2FsbC5cclxuICAgKiBJZiBhbnkgb2YgdGhlIGl0ZW1zIGhhdmUgYHByZXZlbnRSZW1vdmVgIHNldCwgdGhlaXIgaW5kaWNlcyBhcmUgYWRkZWQgdG8gdGhlIGNvbnRleHQuXHJcbiAgICovXHJcbiAgcHVibGljIG9uSXRlbXNDaGFuZ2UocmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzKSB7XHJcbiAgICBsZXQgbmV3Tm9uRGVwZW5kZW50Q2hlY2tib3hlczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICAoPFBpY2tlckl0ZW1bXT5yZXN1bHRzLml0ZW1zKS5mb3JFYWNoKChpdGVtLCBpbmRleCkgID0+IHtcclxuICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aGUgaXRlbXMgYXJlIG1hcmtlZCB0byBiZSBzZWxlY3RlZCBieSBkZWZhdWx0IGFuZCBpZiBzb1xyXG4gICAgICAvLyBhZGQgdGhlbSB0byB0aGUgbWFwLlxyXG4gICAgICBpZiAoaXRlbS5kZWZhdWx0U2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5oYXMoaXRlbS5pZCkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuc2V0KGl0ZW0uaWQsIGl0ZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayB0byBzZWUgaWYgYW55IG9mIHRoZSBpdGVtcyBhcmUgbWFya2VkIHRvIHByZXZlbnQgUmVtb3ZhbCwgYW5kIGlmIHNvXHJcbiAgICAgIC8vIGFkZCB0aGVtIHRvIHRoZSBub24tZGVwZW5kZW50IGNoZWNrYm94ZXMgYXJyYXkuICBUaGlzIHdpbGwgcHJldmVudCB0aGUgbWFzdGVyXHJcbiAgICAgIC8vIGNoZWNrYm94IGZyb20gdG9nZ2xpbmcgdGhlbS5cclxuICAgICAgaWYgKGl0ZW0ucHJldmVudFJlbW92ZSkge1xyXG4gICAgICAgIG5ld05vbkRlcGVuZGVudENoZWNrYm94ZXMucHVzaChpbmRleCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5ub25EZXBlbmRlbnRDaGVja2JveGVzID0gbmV3Tm9uRGVwZW5kZW50Q2hlY2tib3hlcztcclxuXHJcbiAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gKDxQaWNrZXJJdGVtW10+cmVzdWx0cy5pdGVtcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY2xlYXIgc2VsZWN0aW9uIGxpbmsgYnV0dG9uIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBwdWJsaWMgb25DbGVhclNlbGVjdGlvbkNsaWNrKCkge1xyXG4gICAgLy8gUmVtb3ZlIHJlbW92YWJsZSBpdGVtcyBmcm9tIG1hcFxyXG4gICAgLy8gVGhpcyBpcyBzYWZlLiAgU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1OTQwMjE2L2VzNi1pcy1pdC1kYW5nZXJvdXMtdG8tZGVsZXRlLWVsZW1lbnRzLWZyb20tc2V0LW1hcC1kdXJpbmctc2V0LW1hcC1pdGVyYXRpb25cclxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcCkge1xyXG4gICAgICBpZiAoIXZhbC5wcmV2ZW50UmVtb3ZlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKGtleSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGlmKCF0aGlzLmF2YWlsYWJsZUl0ZW1zW2luZGV4XS5wcmV2ZW50UmVtb3ZlKXtcclxuICAgICAgICBjb250cm9sLnNldFZhbHVlKGZhbHNlKVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSByZW1vdmUgaXRlbSBidXR0b24gaXMgY2xpY2tlZCBmb3IgYSBzZWxlY3RlZCBpdGVtXHJcbiAgICogQHBhcmFtIHJlbW92ZUl0ZW1cclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtKHJlbW92ZUl0ZW06IFBpY2tlckl0ZW0pOiB2b2lkIHtcclxuICAgIGxldCBmb3VuZEluZGV4ID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSByZW1vdmVJdGVtLmlkKTtcclxuICAgIGlmIChmb3VuZEluZGV4ID4gLTEpIHtcclxuICAgICAgLy8gVXBkYXRlIHRoZSByb3cgY2hlY2tib3ggc2luY2UgdGhlIGl0ZW0gZXhpc3RzIGluIHRoZSBwYWdlIGJlaW5nIHZpZXdlZFxyXG4gICAgICAvLyBUaGUgdmFsdWUgY2hhbmdlIGhhbmRsZXIgZm9yIHJvdyBjaGVja2JveGVzIHdpbGwgdXBkYXRlIHRoZSBtYXAvc2VsZWN0ZWQgaXRlbXNcclxuICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoZm91bmRJbmRleCkuc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gVGhlIGl0ZW0gYmVpbmcgcmVtb3ZlZCBpcyBub3Qgb24gdGhlIGN1cnJlbnQgcGFnZSBzbyBqdXN0IHVwZGF0ZSB0aGVcclxuICAgICAgLy8gbWFwL3NlbGVjdGVkIGl0ZW1zXHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLmRlbGV0ZShyZW1vdmVJdGVtLmlkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcC52YWx1ZXMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXYXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgcm93IGNoZWNrYm94ZXMgZm9ybSBhcnJheSBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZCBpdGVtc1xyXG4gICAqIGxpc3RcclxuICAgKi9cclxuICBwcml2YXRlIHNldHVwUm93Q2hlY2tib3hlc1dhdGNoZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnJvd0NoZWNrYm94ZXMudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIC8vIERlYm91bmNlIDEwIGlzIHNpbXBseSB0byBub3Qgc3BhbSB0aGUgY2hhbmdlIGhhbmRsZXIgb24gbG9hZC9wYWdlIGNoYW5nZVxyXG4gICAgICAvLyBPdGhlcndpc2UgdGhpcyB3aWxsIGdldCBjYWxsZWQgZXZlcnkgdGltZSBhIG5ldyByb3cgaXMgYWRkZWQgdG8gdGhlIHRhYmxlXHJcbiAgICAgIGRlYm91bmNlVGltZSgxMCksXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKChyb3dWYWx1ZXM6IGJvb2xlYW5bXSkgPT4ge1xyXG4gICAgICByb3dWYWx1ZXMuZm9yRWFjaCgoc2VsZWN0ZWQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGF2YWlsYWJsZUl0ZW0gPSB0aGlzLmF2YWlsYWJsZUl0ZW1zW2luZGV4XTtcclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGF2YWlsYWJsZUl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKGF2YWlsYWJsZUl0ZW0uaWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5oYXMoYXZhaWxhYmxlSXRlbS5pZCkpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoYXZhaWxhYmxlSXRlbS5pZCwgYXZhaWxhYmxlSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLnNvbWUoaSA9PiAhaS5wcmV2ZW50UmVtb3ZlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2F0Y2ggdG8gYmUgdG9sZCBpZiBjaGFuZ2VzIHRvIHRoZSBtYXAgd2VyZSBtYWRlIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCBhbmQgaWYgc28gdXBkYXRlXHJcbiAgICogdGhlIGFycmF5IGRpc3BsYXllZCBpbiB0aGUgc2VsZWN0ZWQgbGlzdCBhbmQgc2VsZWN0IGNoZWNrYm94ZXMgZm9yIHZpc2libGUgYXZhaWxhYmxlIGl0ZW1zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXR1cFNlbGVjdGVkSXRlbXNDaGFuZ2VkV2F0Y2hlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwQ2hhbmdlZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkNvbnRleHQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC52YWx1ZXMoKSk7XHJcblxyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcC5oYXMoaXRlbS5pZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoaW5kZXgpLnNldFZhbHVlKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0SW50ZXJuYWxpemVkVGVtcGxhdGVzKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUpIHtcclxuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSA9IHRoaXMuY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlID0gdGhpcy5kZWZhdWx0QXZhaWxhYmxlSGVhZGVyVGVtcGxhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY3VzdG9tQXZhaWxhYmxlSXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlID0gdGhpcy5jdXN0b21BdmFpbGFibGVJdGVtVGVtcGxhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jdXN0b21TZWxlY3RlZEl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLmludGVybmFsaXplZFNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGhpcy5jdXN0b21TZWxlY3RlZEl0ZW1UZW1wbGF0ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkU2VsZWN0ZWRJdGVtVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZEl0ZW1UZW1wbGF0ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBlY092ZXJsYXlcclxuICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWdyb3cgY2FyZFwiXHJcbiAgICAgW3N0YXR1c109XCJ0YWJsZVN0YXR1cz8uc3RhdHVzXCJcclxuICAgICBbbWVzc2FnZV09XCJ0YWJsZVN0YXR1cz8ubWVzc2FnZVwiXHJcbiAgICAgW2Rpc3BsYXlBc01hc2tdPVwidHJ1ZVwiPlxyXG4gICAgPGVjLXNlYXJjaGFibGUtdGFibGUgaWQ9XCJ7e2lkfX1fc2VhcmNoYWJsZVRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxsUGFyZW50SGVpZ2h0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGVIZWFkZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVNlYXJjaENvbnRyb2xdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVtb3ZlQ2FyZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCI1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbb2JqZWN0VHlwZV09XCJpdGVtTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybU1vZGVsXT1cImZvcm1Nb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZHldPVwicmVhZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2dldEl0ZW1zXT1cImdldEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25vRGF0YU1lc3NhZ2VdPVwibm9EYXRhTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29udGV4dF09XCJzZWxlY3Rpb25Db250ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGF0dXNdPVwidGFibGVTdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1zQ2hhbmdlKT1cIm9uSXRlbXNDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1lYy1zZWFyY2hhYmxlLXRhYmxlLWZsZXgtcHJvcGVydGllc109XCIoYXZhaWxhYmxlSXRlbXMubGVuZ3RoIHx8IHRhYmxlU3RhdHVzLnN0YXR1cyA9PT0gJ3BlbmRpbmcnIHx8IHRhYmxlU3RhdHVzLnN0YXR1cyA9PT0gJ2Vycm9yJyApID8gJzEgMSBhdXRvJyA6ICcwIDEgYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tZWMtc2VhcmNoYWJsZS10YWJsZS1oZWlnaHQtY2FwdGlvbi1mb290ZXJdPVwiJ2NhbGMoMi41cmVtICsgMXB4KSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlTGF5b3V0Rml4ZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxoZWFkZXIgKm5nSWY9XCJjdXN0b21BdmFpbGFibGVIZWFkZXJUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNhcmQtaGVhZGVyIGZsZXgtc2hyaW5rXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzcmVtO1wiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlXCI+e3thdmFpbGFibGVUaXRsZSB8IHRyYW5zbGF0ZX19PC9oMz5cclxuICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0ciBlY1RhYmxlU2VsZWN0YWJsZVJvd1xyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbnRleHRdPVwic2VsZWN0aW9uQ29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1ib3R0b20tMFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImludGVybmFsaXplZEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlO1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGF2YWlsYWJsZUl0ZW1zOyBpbmRleCBhcyByb3dJbmRleDsgdHJhY2tCeTogdHJhY2tCeUluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8dHIgZWNUYWJsZVNlbGVjdGFibGVSb3dcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29udGV4dF09XCJzZWxlY3Rpb25Db250ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0NoZWNrYm94RGlzYWJsZWRdPVwiaXRlbS5wcmV2ZW50UmVtb3ZlXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXNTZWxlY3RlZF09XCJzZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhpdGVtLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tZWMtdGFibGUtc2VsZWN0YWJsZS1yb3ctdmVydGljYWwtYWxpZ24tY2hlY2tib3gtdGRdPVwiJ21pZGRsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgIDwvZWMtc2VhcmNoYWJsZS10YWJsZT5cclxuXHJcbiAgICA8c2VjdGlvbiBpZD1cInt7aWR9fV9zZWxlY3RlZEl0ZW1zXCIgY2xhc3M9XCJzZWxlY3RlZC1pdGVtcyBmbGV4LWdyb3cgZC1mbGV4IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgPGVjLXRhYmxlIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXgtZ3JvdyBpcy1maXhlZFwiPlxyXG4gICAgICAgICAgICA8Y29sZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICA8Y29sPlxyXG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT1cIndpZHRoOiAycmVtO1wiPlxyXG4gICAgICAgICAgICA8L2NvbGdyb3VwPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJoZWlnaHQ6IDNyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgYm9yZGVyLWJvdHRvbS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaGVhZGluZy0yIGZvbnQtY29sb3ItcHJpbWFyeSBmbGV4LWdyb3cgdGV4dC10cnVuY2F0ZVwiPnt7c2VsZWN0ZWRUaXRsZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwie3tpZH19X2NsZWFyU2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGwtMiBtbC1hdXRvIGZvbnQtc2l6ZS1iYXNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJTZWxlY3Rpb25DbGljaygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5DbGVhclNlbGVjdGlvbl9UQzwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtczsgbGFzdCBhcyBpc0xhc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdGVkX3Jvd197e2l0ZW0uaWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYm90dG9tXT1cIiFpc0xhc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW50ZXJuYWxpemVkU2VsZWN0ZWRJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFjdGlvbnMtY29sIHRleHQtcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVjLWJ1dHRvbiBpZD1cInt7aWR9fV9yZW1vdmVTZWxlY3RlZF97e2l0ZW0uaWR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWl0ZW0ucHJldmVudFJlbW92ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJpY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImVjLWljb24gaWNvbi1jYW5jZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmVTZWxlY3RlZEl0ZW0oaXRlbSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZWMtYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIiFzZWxlY3RlZEl0ZW1zLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFub1NlbGVjdGVkSXRlbXNNZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sc3Bhbj1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMiBuby1kYXRhLW1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7aXRlbU5hbWU6IGl0ZW1OYW1lIHwgdHJhbnNsYXRlfVwiPkl0ZW1QaWNrZXJOb0l0ZW1zU2VsZWN0ZWRfU0M8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm5vU2VsZWN0ZWRJdGVtc01lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC0yIG5vLWRhdGEtbWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT57e25vU2VsZWN0ZWRJdGVtc01lc3NhZ2V9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvZWMtdGFibGU+XHJcblxyXG4gICAgICAgIDxmb290ZXIgaWQ9XCJzZWxlY3RlZEl0ZW1zRm9vdGVyXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1zaHJpbmsgcHgtMiBib3JkZXItdG9wIGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogY2FsYygyLjVyZW0gKyAxcHgpO1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLWF1dG8gdGV4dC1jYXB0aW9uLTEgZm9udC1jb2xvci1oaW50XCI+XHJcbiAgICAgICAgICAgICAgICB7e3NlbGVjdGVkSXRlbXMubGVuZ3RofX0ge3tpdGVtTmFtZSB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Zvb3Rlcj5cclxuICAgIDwvc2VjdGlvbj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZT5cclxuICAgIDx0aCBjbGFzcz1cInRleHQtaGVhZGluZy0yIGZvbnQtY29sb3ItcHJpbWFyeSBib3JkZXItYm90dG9tLTBcIj57e2F2YWlsYWJsZVRpdGxlIHwgdHJhbnNsYXRlfX08L3RoPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0QXZhaWxhYmxlSXRlbVRlbXBsYXRlXHJcbiAgICAgICAgICAgICBsZXQtaXRlbT5cclxuICAgIDx0ZD57e2l0ZW0ubGFiZWx9fTwvdGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RlZEl0ZW1UZW1wbGF0ZVxyXG4gICAgICAgICAgICAgbGV0LWl0ZW0+XHJcbiAgICB7e2l0ZW0ubGFiZWx9fVxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class LinkButtonComponent {
4
+ }
5
+ LinkButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LinkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ LinkButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: LinkButtonComponent, selector: "button[ecLinkButton]", host: { classAttribute: "text-link" }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:inline;border:none;padding:0;background-color:transparent;font-size:inherit;text-align:start}\n"] });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LinkButtonComponent, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: 'button[ecLinkButton]', template: `<ng-content></ng-content>`, host: { class: 'text-link' }, styles: [":host{display:inline;border:none;padding:0;background-color:transparent;font-size:inherit;text-align:start}\n"] }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2xpbmstYnV0dG9uL2xpbmstYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVExQyxNQUFNLE9BQU8sbUJBQW1COztpSEFBbkIsbUJBQW1CO3FHQUFuQixtQkFBbUIsbUdBSnBCLDJCQUEyQjs0RkFJMUIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLHNCQUFzQixZQUN0QiwyQkFBMkIsUUFFL0IsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2J1dHRvbltlY0xpbmtCdXR0b25dJyxcclxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxyXG4gIHN0eWxlVXJsczogWycuL2xpbmstYnV0dG9uLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDogeyBjbGFzczogJ3RleHQtbGluaycgfVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlua0J1dHRvbkNvbXBvbmVudCB7IH1cclxuIl19