@energycap/components 0.31.5 → 0.32.0

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 (292) hide show
  1. package/energycap-components.min.css +2 -2
  2. package/energycap-email.min.css +1 -1
  3. package/esm2020/energycap-components.mjs +5 -0
  4. package/esm2020/lib/components.module.mjs +386 -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 +841 -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/tooltip/tooltip.component.mjs +25 -0
  79. package/esm2020/lib/display/tooltip/tooltip.service.mjs +63 -0
  80. package/esm2020/lib/display/tree/tree.component.mjs +125 -0
  81. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  82. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  83. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  84. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +163 -0
  85. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  86. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  87. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +48 -0
  88. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  89. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  90. package/{esm2015/lib/shared/display.js → esm2020/lib/shared/display.mjs} +0 -0
  91. package/esm2020/lib/shared/form-group.helper.mjs +67 -0
  92. package/{esm2015/lib/shared/json-helper.js → esm2020/lib/shared/json-helper.mjs} +0 -0
  93. package/{esm2015/lib/shared/lodash-helper.js → esm2020/lib/shared/lodash-helper.mjs} +0 -0
  94. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +339 -0
  95. package/{esm2015/lib/shared/page/page-statuses.js → esm2020/lib/shared/page/page-statuses.mjs} +0 -0
  96. package/esm2020/lib/shared/page/page-title/page-title.component.mjs +23 -0
  97. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +121 -0
  98. 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
  99. package/esm2020/lib/shared/testing/page-base-component-test-helper.spec.mjs +30 -0
  100. 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
  101. package/esm2020/lib/shared/testing/public-mocks.spec.mjs +132 -0
  102. package/{esm2015/lib/shared/testing/spy-factory.spec.js → esm2020/lib/shared/testing/spy-factory.spec.mjs} +0 -0
  103. package/{esm2015/lib/shared/testing/translation-mocks.spec.js → esm2020/lib/shared/testing/translation-mocks.spec.mjs} +0 -0
  104. package/esm2020/lib/shared/user-preference.service.mjs +17 -0
  105. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  106. package/esm2020/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -0
  107. package/esm2020/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -0
  108. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  109. package/fesm2015/energycap-components.mjs +10090 -0
  110. package/fesm2015/energycap-components.mjs.map +1 -0
  111. package/fesm2020/energycap-components.mjs +9999 -0
  112. package/fesm2020/energycap-components.mjs.map +1 -0
  113. package/index.d.ts +5 -0
  114. package/lib/components.module.d.ts +72 -0
  115. package/lib/controls/banner/banner.component.d.ts +3 -0
  116. package/lib/controls/button/button.component.d.ts +3 -0
  117. package/lib/controls/button/copy-button.directive.d.ts +3 -0
  118. package/lib/controls/checkbox/checkbox.component.d.ts +3 -0
  119. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +3 -0
  120. package/lib/controls/combobox/combobox.component.d.ts +5 -2
  121. package/lib/controls/dropdown/dropdown.component.d.ts +3 -0
  122. package/lib/controls/file-upload/file-upload.component.d.ts +5 -2
  123. package/lib/controls/form-control/form-control.component.d.ts +3 -0
  124. package/lib/controls/form-control-base.d.ts +3 -0
  125. package/lib/controls/form-control-label/form-control-label.component.d.ts +3 -0
  126. package/lib/controls/form-group/form-group.component.d.ts +6 -3
  127. package/lib/controls/help-popover/help-popover.component.d.ts +3 -0
  128. package/lib/controls/item-picker/item-picker.component.d.ts +5 -2
  129. package/lib/controls/link-button/link-button.component.d.ts +3 -0
  130. package/lib/controls/menu/menu.component.d.ts +3 -0
  131. package/lib/controls/navigation/nav-item-active.directive.d.ts +3 -0
  132. package/lib/controls/numericbox/numericbox.component.d.ts +5 -2
  133. package/lib/controls/popover/popover.component.d.ts +3 -0
  134. package/lib/controls/radio-button/radio-button.component.d.ts +3 -0
  135. package/lib/controls/select/select.component.d.ts +3 -0
  136. package/lib/controls/tabs/tabs.component.d.ts +3 -0
  137. package/lib/controls/textbox/textbox.component.d.ts +3 -0
  138. package/lib/core/cache.service.d.ts +3 -0
  139. package/lib/core/error.service.d.ts +3 -0
  140. package/lib/core/scroll.service.d.ts +3 -0
  141. package/lib/core/telemetry-tracker.service.d.ts +3 -0
  142. package/lib/core/telemetry.service.d.ts +3 -0
  143. package/lib/core/validation-message.service.d.ts +3 -0
  144. package/lib/core/window.service.d.ts +3 -0
  145. package/lib/display/app-bar/app-bar.component.d.ts +3 -0
  146. package/lib/display/avatar/avatar.component.d.ts +3 -0
  147. package/lib/display/avatar/avatar.service.d.ts +3 -0
  148. package/lib/display/confirm/confirm.component.d.ts +5 -2
  149. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +3 -0
  150. package/lib/display/dialog/dialog.component.d.ts +3 -0
  151. package/lib/display/dialog/dialog.service.d.ts +3 -0
  152. package/lib/display/hierarchy/hierarchy-base.d.ts +3 -0
  153. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +3 -0
  154. package/lib/display/item-display/item-display.component.d.ts +3 -0
  155. package/lib/display/json-display/json-display.component.d.ts +5 -2
  156. package/lib/display/resizable/resizable-base.d.ts +3 -0
  157. package/lib/display/resizable/resizable.component.d.ts +3 -0
  158. package/lib/display/spinner/spinner.component.d.ts +3 -0
  159. package/lib/display/splash/splash.component.d.ts +3 -0
  160. package/lib/display/splash/splash.service.d.ts +3 -0
  161. package/lib/display/table/resizable-column.component.d.ts +3 -0
  162. package/lib/display/table/resizable-table.directive.d.ts +3 -0
  163. package/lib/display/table/searchable-table.component.d.ts +6 -3
  164. package/lib/display/table/table-detail-row.component.d.ts +3 -0
  165. package/lib/display/table/table-locked-column.component.d.ts +3 -0
  166. package/lib/display/table/table-master-header-row.component.d.ts +3 -0
  167. package/lib/display/table/table-master-row.component.d.ts +3 -0
  168. package/lib/display/table/table-pagination.component.d.ts +3 -0
  169. package/lib/display/table/table-selectable-row.component.d.ts +5 -2
  170. package/lib/display/table/table.component.d.ts +3 -0
  171. package/lib/display/tags/tags.component.d.ts +3 -0
  172. package/lib/display/toast/toast/toast.component.d.ts +3 -0
  173. package/lib/display/toast/toast.service.d.ts +3 -0
  174. package/lib/display/toast/toaster/toaster.component.d.ts +3 -0
  175. package/lib/display/tooltip/tooltip.component.d.ts +3 -0
  176. package/lib/display/tooltip/tooltip.service.d.ts +3 -0
  177. package/lib/display/tree/tree.component.d.ts +3 -0
  178. package/lib/display/view-overlay/view-overlay.component.d.ts +3 -0
  179. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +3 -0
  180. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +3 -0
  181. package/lib/shared/directives/popup/popup-container.directive.d.ts +3 -0
  182. package/lib/shared/display/pipes/date-display.pipe.d.ts +3 -0
  183. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +3 -0
  184. package/lib/shared/display/pipes/relative-date.pipe.d.ts +3 -0
  185. package/lib/shared/display/pipes/row-count.pipe.d.ts +3 -0
  186. package/lib/shared/display/pipes/time-display.pipe.d.ts +3 -0
  187. package/lib/shared/form-group.helper.d.ts +5 -2
  188. package/lib/shared/page/page-base/page-base.component.d.ts +5 -2
  189. package/lib/shared/page/page-title/page-title.component.d.ts +3 -0
  190. package/lib/shared/page/page-view/page-view.component.d.ts +3 -0
  191. package/lib/shared/testing/public-mocks.spec.d.ts +7 -0
  192. package/lib/shared/user-preference.service.d.ts +3 -0
  193. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +3 -0
  194. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +3 -0
  195. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +3 -0
  196. package/package.json +27 -15
  197. package/src/styles/_functions.scss +6 -4
  198. package/src/styles/_icons.scss +1 -1
  199. package/src/styles/mixins/_control-base.scss +2 -2
  200. package/src/styles/mixins/_form-control-base.scss +3 -1
  201. package/src/styles/mixins/_spinner-base.scss +3 -1
  202. package/bundles/energycap-components.umd.js +0 -10646
  203. package/bundles/energycap-components.umd.js.map +0 -1
  204. package/bundles/energycap-components.umd.min.js +0 -17
  205. package/bundles/energycap-components.umd.min.js.map +0 -1
  206. package/energycap-components.d.ts +0 -7
  207. package/energycap-components.metadata.json +0 -1
  208. package/esm2015/energycap-components.js +0 -8
  209. package/esm2015/lib/components.module.js +0 -238
  210. package/esm2015/lib/controls/banner/banner.component.js +0 -94
  211. package/esm2015/lib/controls/button/button.component.js +0 -89
  212. package/esm2015/lib/controls/button/copy-button.directive.js +0 -63
  213. package/esm2015/lib/controls/checkbox/checkbox.component.js +0 -137
  214. package/esm2015/lib/controls/collapsible-toggle/collapsible-toggle.component.js +0 -35
  215. package/esm2015/lib/controls/combobox/combobox.component.js +0 -819
  216. package/esm2015/lib/controls/dropdown/dropdown.component.js +0 -207
  217. package/esm2015/lib/controls/file-upload/file-upload.component.js +0 -172
  218. package/esm2015/lib/controls/form-control/form-control.component.js +0 -65
  219. package/esm2015/lib/controls/form-control-base.js +0 -140
  220. package/esm2015/lib/controls/form-control-label/form-control-label.component.js +0 -139
  221. package/esm2015/lib/controls/form-group/form-group.component.js +0 -254
  222. package/esm2015/lib/controls/help-popover/help-popover.component.js +0 -22
  223. package/esm2015/lib/controls/item-picker/item-picker.component.js +0 -216
  224. package/esm2015/lib/controls/link-button/link-button.component.js +0 -12
  225. package/esm2015/lib/controls/menu/menu.component.js +0 -424
  226. package/esm2015/lib/controls/navigation/nav-item-active.directive.js +0 -86
  227. package/esm2015/lib/controls/numericbox/numericbox.component.js +0 -362
  228. package/esm2015/lib/controls/popover/popover.component.js +0 -85
  229. package/esm2015/lib/controls/radio-button/radio-button.component.js +0 -78
  230. package/esm2015/lib/controls/select/select.component.js +0 -89
  231. package/esm2015/lib/controls/tabs/tabs.component.js +0 -42
  232. package/esm2015/lib/controls/textbox/textbox.component.js +0 -149
  233. package/esm2015/lib/core/error.service.js +0 -56
  234. package/esm2015/lib/core/scroll.service.js +0 -88
  235. package/esm2015/lib/core/telemetry-tracker.service.js +0 -14
  236. package/esm2015/lib/core/telemetry.service.js +0 -40
  237. package/esm2015/lib/core/validation-message.service.js +0 -185
  238. package/esm2015/lib/core/window.service.js +0 -191
  239. package/esm2015/lib/display/app-bar/app-bar.component.js +0 -42
  240. package/esm2015/lib/display/avatar/avatar.component.js +0 -73
  241. package/esm2015/lib/display/confirm/confirm.component.js +0 -127
  242. package/esm2015/lib/display/dialog/dialog-group/dialog-group.component.js +0 -65
  243. package/esm2015/lib/display/dialog/dialog.component.js +0 -229
  244. package/esm2015/lib/display/dialog/dialog.service.js +0 -69
  245. package/esm2015/lib/display/hierarchy/hierarchy-base.js +0 -106
  246. package/esm2015/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.js +0 -58
  247. package/esm2015/lib/display/item-display/item-display.component.js +0 -57
  248. package/esm2015/lib/display/json-display/json-display.component.js +0 -44
  249. package/esm2015/lib/display/resizable/resizable-base.js +0 -119
  250. package/esm2015/lib/display/resizable/resizable.component.js +0 -57
  251. package/esm2015/lib/display/spinner/spinner.component.js +0 -12
  252. package/esm2015/lib/display/splash/splash.component.js +0 -45
  253. package/esm2015/lib/display/splash/splash.service.js +0 -34
  254. package/esm2015/lib/display/table/resizable-column.component.js +0 -23
  255. package/esm2015/lib/display/table/resizable-table.directive.js +0 -223
  256. package/esm2015/lib/display/table/searchable-table.component.js +0 -303
  257. package/esm2015/lib/display/table/table-detail-row.component.js +0 -21
  258. package/esm2015/lib/display/table/table-locked-column.component.js +0 -53
  259. package/esm2015/lib/display/table/table-master-header-row.component.js +0 -11
  260. package/esm2015/lib/display/table/table-master-row.component.js +0 -141
  261. package/esm2015/lib/display/table/table-pagination.component.js +0 -146
  262. package/esm2015/lib/display/table/table-selectable-row.component.js +0 -216
  263. package/esm2015/lib/display/table/table.component.js +0 -210
  264. package/esm2015/lib/display/tags/tag.js +0 -15
  265. package/esm2015/lib/display/tags/tags.component.js +0 -73
  266. package/esm2015/lib/display/toast/toast/toast.component.js +0 -70
  267. package/esm2015/lib/display/toast/toast.service.js +0 -34
  268. package/esm2015/lib/display/toast/toaster/toaster.component.js +0 -117
  269. package/esm2015/lib/display/tooltip/tooltip.component.js +0 -24
  270. package/esm2015/lib/display/tooltip/tooltip.service.js +0 -64
  271. package/esm2015/lib/display/tree/tree.component.js +0 -100
  272. package/esm2015/lib/display/view-overlay/view-overlay.component.js +0 -50
  273. package/esm2015/lib/shared/directives/click-area-for/click-area-for.directive.js +0 -25
  274. package/esm2015/lib/shared/directives/if-viewport-width/if-viewport-width.directive.js +0 -112
  275. package/esm2015/lib/shared/directives/popup/popup-container.directive.js +0 -160
  276. package/esm2015/lib/shared/display/pipes/date-display.pipe.js +0 -49
  277. package/esm2015/lib/shared/display/pipes/highlight-text.pipe.js +0 -26
  278. package/esm2015/lib/shared/display/pipes/relative-date.pipe.js +0 -49
  279. package/esm2015/lib/shared/display/pipes/row-count.pipe.js +0 -47
  280. package/esm2015/lib/shared/display/pipes/time-display.pipe.js +0 -40
  281. package/esm2015/lib/shared/form-group.helper.js +0 -65
  282. package/esm2015/lib/shared/page/page-base/page-base.component.js +0 -356
  283. package/esm2015/lib/shared/page/page-title/page-title.component.js +0 -19
  284. package/esm2015/lib/shared/page/page-view/page-view.component.js +0 -94
  285. package/esm2015/lib/shared/testing/page-base-component-test-helper.spec.js +0 -35
  286. package/esm2015/lib/shared/testing/public-mocks.spec.js +0 -126
  287. package/esm2015/lib/shared/user-preference.service.js +0 -15
  288. package/esm2015/lib/shared/wizard/wizard-base/wizard-base.component.js +0 -260
  289. package/esm2015/lib/shared/wizard/wizard-buttons/wizard-buttons.component.js +0 -54
  290. package/esm2015/lib/shared/wizard/wizard-progress/wizard-progress.component.js +0 -18
  291. package/fesm2015/energycap-components.js +0 -9638
  292. package/fesm2015/energycap-components.js.map +0 -1
@@ -0,0 +1,237 @@
1
+ import { Component, Input, ElementRef, ViewChild, Output, EventEmitter } from '@angular/core';
2
+ import { MenuComponent } from '../menu/menu.component';
3
+ import { Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
5
+ import { PopupContainerDirective } from '../../shared/directives/popup/popup-container.directive';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "../button/button.component";
9
+ import * as i3 from "../../display/view-overlay/view-overlay.component";
10
+ import * as i4 from "../menu/menu.component";
11
+ import * as i5 from "../../shared/directives/popup/popup-container.directive";
12
+ export class DropdownComponent {
13
+ constructor() {
14
+ /**
15
+ * Automatically focus the dropdown toggle button
16
+ */
17
+ this.autofocus = false;
18
+ /**
19
+ * Controls the display status overlay for the menu
20
+ */
21
+ this.status = { status: 'hasData', message: '' };
22
+ /**
23
+ * Disable the button to prevent the menu from being opened
24
+ */
25
+ this.disabled = false;
26
+ /**
27
+ * The button type, defaults to icon
28
+ */
29
+ this.buttonType = 'icon';
30
+ /**
31
+ * Adds a tooltip to the dropdown toggle button. Should only be used when
32
+ * the toggle buttonType is 'icon'
33
+ */
34
+ this.buttonTitle = '';
35
+ /**
36
+ * Display a caret with the button label or icon
37
+ */
38
+ this.showArrow = true;
39
+ /**
40
+ * Items to display in the menu
41
+ */
42
+ this.items = [];
43
+ /**
44
+ * The menu item template
45
+ */
46
+ this.menuTemplateType = 'label';
47
+ /**
48
+ * Fix position the menu instead of absolute. Useful when the dropdown is in a
49
+ * dialog
50
+ */
51
+ this.popupFixed = false;
52
+ /**
53
+ * Used to set the menu buttons state to pending
54
+ */
55
+ this.pending = false;
56
+ /**
57
+ * Emits an event when a menu item is selected
58
+ */
59
+ this.itemSelected = new EventEmitter();
60
+ /**
61
+ * Emits an event when the popup menu opens
62
+ */
63
+ this.popupOpened = new EventEmitter();
64
+ /**
65
+ * The status of the menu
66
+ */
67
+ this.menuStatus = 'hidden';
68
+ /** Item to highlight when the menu is opened, used when the user
69
+ * opens the menu via the keyboard
70
+ */
71
+ this.highlightedItem = null;
72
+ /** Used to know if the menu was toggled via the keyboard */
73
+ this.isKeyboardEvent = false;
74
+ /**
75
+ * Unsubscribe any active subscriptions when the component is destroyed
76
+ */
77
+ this.componentDestroyed = new Subject();
78
+ }
79
+ /**
80
+ * Subscribe to changes to the menu status
81
+ */
82
+ ngOnInit() {
83
+ this.popup.popperStatusChange
84
+ .pipe(takeUntil(this.componentDestroyed))
85
+ .subscribe((event) => {
86
+ this.menuStatus = event;
87
+ if (this.menuStatus === 'visible') {
88
+ this.popupOpened.emit();
89
+ }
90
+ });
91
+ }
92
+ /**
93
+ * Set up the popup
94
+ */
95
+ ngAfterViewInit() {
96
+ let popperOptions = {
97
+ modifiers: {
98
+ preventOverflow: {
99
+ boundariesElement: 'viewport'
100
+ }
101
+ },
102
+ placement: 'bottom-end'
103
+ };
104
+ if (this.menuPosition === 'left') {
105
+ popperOptions.placement = 'bottom-start';
106
+ }
107
+ if (this.popupFixed) {
108
+ popperOptions.onCreate = () => {
109
+ this.popup.fixPosition();
110
+ };
111
+ popperOptions.onUpdate = () => {
112
+ // Hide the popup when the dropdown changes position due to window resize
113
+ // or container scrolling
114
+ this.popup.hide();
115
+ };
116
+ }
117
+ this.popup.popperOptions = popperOptions;
118
+ }
119
+ /**
120
+ * Unsubscribe to any active subscriptions
121
+ */
122
+ ngOnDestroy() {
123
+ this.componentDestroyed.next();
124
+ this.componentDestroyed.unsubscribe();
125
+ }
126
+ /**
127
+ * Open and close the menu
128
+ */
129
+ toggleMenu(event) {
130
+ if (event) {
131
+ event.stopPropagation();
132
+ }
133
+ if (!this.disabled) {
134
+ if (this.menuStatus === 'hidden') {
135
+ if (this.isKeyboardEvent && this.items.length) {
136
+ // Setup the first item in the list to highlight when opening the
137
+ // menu via the keyboard, ignoring headings
138
+ this.highlightedItem = this.items.find(item => item.display !== 'heading') || null;
139
+ }
140
+ this.popup.show();
141
+ }
142
+ else {
143
+ this.popup.hide();
144
+ // Reset the highlighted item and our keyboard flag
145
+ // when we close the popup
146
+ this.highlightedItem = null;
147
+ this.isKeyboardEvent = false;
148
+ }
149
+ }
150
+ }
151
+ /**
152
+ * Emit the selected item when it changes and close the menu
153
+ */
154
+ selectedChanged(item) {
155
+ this.itemSelected.emit(item);
156
+ this.toggleMenu();
157
+ }
158
+ /**
159
+ * Closes the menu if the tab key is pressed
160
+ */
161
+ keyNavigate(event) {
162
+ switch (event.key) {
163
+ case 'Enter':
164
+ this.isKeyboardEvent = true;
165
+ break;
166
+ case 'Escape':
167
+ case 'Tab':
168
+ if (this.menuStatus === 'visible') {
169
+ this.toggleMenu(event);
170
+ }
171
+ break;
172
+ default:
173
+ return;
174
+ }
175
+ }
176
+ }
177
+ DropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: DropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
178
+ DropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: DropdownComponent, selector: "ec-dropdown", inputs: { id: "id", autofocus: "autofocus", status: "status", disabled: "disabled", label: "label", icon: "icon", buttonType: "buttonType", buttonAlignment: "buttonAlignment", buttonTitle: "buttonTitle", tabindex: "tabindex", showArrow: "showArrow", items: "items", menuTemplateType: "menuTemplateType", menuTitle: "menuTitle", menuHeight: "menuHeight", menuWidth: "menuWidth", menuMinWidth: "menuMinWidth", menuPosition: "menuPosition", menuFooter: "menuFooter", popupFixed: "popupFixed", buttonCustomTemplate: "buttonCustomTemplate", pending: "pending" }, outputs: { itemSelected: "itemSelected", popupOpened: "popupOpened" }, viewQueries: [{ propertyName: "menuEl", first: true, predicate: MenuComponent, descendants: true, read: ElementRef }, { propertyName: "popup", first: true, predicate: PopupContainerDirective, descendants: true, static: true }], ngImport: i0, template: "<div class=\"control\">\r\n <ec-button [disabled]=\"disabled\"\r\n id=\"{{id}}_toggle\"\r\n [ngClass]=\"{'has-arrow':showArrow, 'active': menuStatus === 'visible', 'text-left': buttonAlignment === 'left', 'text-right': buttonAlignment === 'right'}\"\r\n *ecPopup=\"dropdownMenu\"\r\n [label]=\"label\"\r\n [icon]=\"icon\"\r\n [tabindex]=\"tabindex\"\r\n [type]=\"buttonType\"\r\n [customTemplate]=\"buttonCustomTemplate\"\r\n [pending]=\"pending\"\r\n title=\"{{buttonTitle}}\"\r\n (click)=\"toggleMenu($event)\"\r\n (keydown)=\"keyNavigate($event)\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n <span class=\"arrow is-{{buttonType}}\"\r\n *ngIf=\"showArrow\"\r\n [class.is-disabled]=\"disabled\">\r\n <i class=\"ec-icon icon-caret-down\" [class.flip-y]=\"menuStatus === 'visible'\"></i>\r\n </span>\r\n</div>\r\n\r\n<ng-template #dropdownMenu>\r\n <div id=\"{{id}}_popup\"\r\n class=\"popup\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [message]=\"status?.message\"\r\n [displayAsMask]=\"true\">\r\n <!-- Dropdown Menu Title -->\r\n <header id=\"{{id}}_title\"\r\n class=\"text-heading-2 px-2 my-2\"\r\n *ngIf=\"menuTitle\">{{menuTitle}}\r\n </header>\r\n <!-- Dropdown Menu -->\r\n <ec-menu id=\"{{id}}_menu\"\r\n [class.wrap-items]=\"menuWidth\"\r\n [templateType]=\"menuTemplateType\"\r\n [style.width]=\"menuWidth ? menuWidth + 'px' : 'auto'\"\r\n [style.min-width]=\"menuMinWidth ? menuMinWidth + 'px' : 'auto'\"\r\n [style.height]=\"menuHeight ? menuHeight + 'px' : 'auto'\"\r\n [items]=\"items\"\r\n [showNoItems]=\"true\"\r\n [enableKeyNav]=\"true\"\r\n [highlightedItem]=\"highlightedItem\"\r\n (selectedChanged)=\"selectedChanged($event)\">\r\n </ec-menu>\r\n <footer *ngIf=\"menuFooter\">{{menuFooter}}</footer>\r\n </div>\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:inline-block;box-sizing:border-box;vertical-align:top}:host(.font-size-inherit) ec-button{font-size:inherit}:host(.font-size-inherit) ec-button ::ng-deep button{font-size:inherit}:host(.fill){display:block;height:100%;width:100%}:host(.fill) .control{display:block;height:100%;width:100%}:host(.fill) .control ec-button{display:block;height:100%;width:100%}:host(.fill) .control ec-button ::ng-deep button{display:block;height:100%;width:100%;display:flex}:host(.fill) ec-menu{min-width:100%}:host(.td-fill){position:absolute;left:0;top:0}:host(.td-fill) ec-button ::ng-deep button{padding-left:.375rem;padding-right:.375rem;font-size:.75rem}:host(.is-action) ec-button,:host(.is-action) .arrow{color:var(--ec-color-interactive)}:host(.is-condensed) ec-button ::ng-deep button{height:1.5rem}:host(.is-condensed) ec-button.has-arrow ::ng-deep button{padding:0 1.125rem 0 .25rem}:host(.is-condensed) ec-button.has-arrow~.arrow{right:.375rem}:host(.d-block) ec-button{display:block}:host(.d-block) ec-button ::ng-deep button{width:100%}:host-context(th){color:var(--ec-color-primary-dark)}.control{position:relative}ec-button{display:block}ec-button.has-arrow~.arrow{position:absolute;top:0;right:.5rem;height:100%;display:flex;align-items:center;pointer-events:none;width:.625rem;z-index:1}ec-button.has-arrow~.arrow .ec-icon{color:var(--ec-color-icon);width:auto;transition:color .3s ease}ec-button.has-arrow~.arrow.is-common .ec-icon{color:var(--ec-color-primary-light)}ec-button.has-arrow~.arrow.is-link .ec-icon{color:var(--ec-color-interactive)}ec-button.has-arrow~.arrow.is-disabled .ec-icon{color:var(--ec-color-icon);opacity:.5}ec-button.has-arrow ::ng-deep button{width:auto;padding-right:1.25rem}ec-button.has-arrow ::ng-deep button:not(.ec-button-custom){padding-left:.5rem}.popup{background-color:var(--ec-background-color);border-radius:var(--ec-border-radius-card);box-shadow:var(--ec-box-shadow-overlay);margin-top:.25rem;overflow:hidden;z-index:var(--ec-z-index-popup);text-align:start}.popup>header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popup footer{color:var(--ec-color-secondary-dark);font-size:var(--ec-font-size-label);border-top:.0625rem solid var(--ec-border-color-legacy);padding:.1875rem .5rem;line-height:1.2}ec-menu ::ng-deep ul{max-height:50vh}ec-menu ::ng-deep li{white-space:nowrap}ec-menu.wrap-items ::ng-deep li{white-space:normal}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i3.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i4.MenuComponent, selector: "ec-menu", inputs: ["id", "items", "selected", "parent", "templateType", "customMenuTemplate", "title", "showNoItems", "noDataText", "enableKeyNav", "highlightedItem", "maintainSelectedItem", "truncateItems", "preserveIconSpace"], outputs: ["selectedChanged", "menuClosed"] }, { kind: "directive", type: i5.PopupContainerDirective, selector: "[ecPopup]", inputs: ["ecPopup", "options"] }] });
179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: DropdownComponent, decorators: [{
180
+ type: Component,
181
+ args: [{ selector: 'ec-dropdown', template: "<div class=\"control\">\r\n <ec-button [disabled]=\"disabled\"\r\n id=\"{{id}}_toggle\"\r\n [ngClass]=\"{'has-arrow':showArrow, 'active': menuStatus === 'visible', 'text-left': buttonAlignment === 'left', 'text-right': buttonAlignment === 'right'}\"\r\n *ecPopup=\"dropdownMenu\"\r\n [label]=\"label\"\r\n [icon]=\"icon\"\r\n [tabindex]=\"tabindex\"\r\n [type]=\"buttonType\"\r\n [customTemplate]=\"buttonCustomTemplate\"\r\n [pending]=\"pending\"\r\n title=\"{{buttonTitle}}\"\r\n (click)=\"toggleMenu($event)\"\r\n (keydown)=\"keyNavigate($event)\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n <span class=\"arrow is-{{buttonType}}\"\r\n *ngIf=\"showArrow\"\r\n [class.is-disabled]=\"disabled\">\r\n <i class=\"ec-icon icon-caret-down\" [class.flip-y]=\"menuStatus === 'visible'\"></i>\r\n </span>\r\n</div>\r\n\r\n<ng-template #dropdownMenu>\r\n <div id=\"{{id}}_popup\"\r\n class=\"popup\"\r\n ecOverlay\r\n [status]=\"status?.status\"\r\n [message]=\"status?.message\"\r\n [displayAsMask]=\"true\">\r\n <!-- Dropdown Menu Title -->\r\n <header id=\"{{id}}_title\"\r\n class=\"text-heading-2 px-2 my-2\"\r\n *ngIf=\"menuTitle\">{{menuTitle}}\r\n </header>\r\n <!-- Dropdown Menu -->\r\n <ec-menu id=\"{{id}}_menu\"\r\n [class.wrap-items]=\"menuWidth\"\r\n [templateType]=\"menuTemplateType\"\r\n [style.width]=\"menuWidth ? menuWidth + 'px' : 'auto'\"\r\n [style.min-width]=\"menuMinWidth ? menuMinWidth + 'px' : 'auto'\"\r\n [style.height]=\"menuHeight ? menuHeight + 'px' : 'auto'\"\r\n [items]=\"items\"\r\n [showNoItems]=\"true\"\r\n [enableKeyNav]=\"true\"\r\n [highlightedItem]=\"highlightedItem\"\r\n (selectedChanged)=\"selectedChanged($event)\">\r\n </ec-menu>\r\n <footer *ngIf=\"menuFooter\">{{menuFooter}}</footer>\r\n </div>\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:inline-block;box-sizing:border-box;vertical-align:top}:host(.font-size-inherit) ec-button{font-size:inherit}:host(.font-size-inherit) ec-button ::ng-deep button{font-size:inherit}:host(.fill){display:block;height:100%;width:100%}:host(.fill) .control{display:block;height:100%;width:100%}:host(.fill) .control ec-button{display:block;height:100%;width:100%}:host(.fill) .control ec-button ::ng-deep button{display:block;height:100%;width:100%;display:flex}:host(.fill) ec-menu{min-width:100%}:host(.td-fill){position:absolute;left:0;top:0}:host(.td-fill) ec-button ::ng-deep button{padding-left:.375rem;padding-right:.375rem;font-size:.75rem}:host(.is-action) ec-button,:host(.is-action) .arrow{color:var(--ec-color-interactive)}:host(.is-condensed) ec-button ::ng-deep button{height:1.5rem}:host(.is-condensed) ec-button.has-arrow ::ng-deep button{padding:0 1.125rem 0 .25rem}:host(.is-condensed) ec-button.has-arrow~.arrow{right:.375rem}:host(.d-block) ec-button{display:block}:host(.d-block) ec-button ::ng-deep button{width:100%}:host-context(th){color:var(--ec-color-primary-dark)}.control{position:relative}ec-button{display:block}ec-button.has-arrow~.arrow{position:absolute;top:0;right:.5rem;height:100%;display:flex;align-items:center;pointer-events:none;width:.625rem;z-index:1}ec-button.has-arrow~.arrow .ec-icon{color:var(--ec-color-icon);width:auto;transition:color .3s ease}ec-button.has-arrow~.arrow.is-common .ec-icon{color:var(--ec-color-primary-light)}ec-button.has-arrow~.arrow.is-link .ec-icon{color:var(--ec-color-interactive)}ec-button.has-arrow~.arrow.is-disabled .ec-icon{color:var(--ec-color-icon);opacity:.5}ec-button.has-arrow ::ng-deep button{width:auto;padding-right:1.25rem}ec-button.has-arrow ::ng-deep button:not(.ec-button-custom){padding-left:.5rem}.popup{background-color:var(--ec-background-color);border-radius:var(--ec-border-radius-card);box-shadow:var(--ec-box-shadow-overlay);margin-top:.25rem;overflow:hidden;z-index:var(--ec-z-index-popup);text-align:start}.popup>header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popup footer{color:var(--ec-color-secondary-dark);font-size:var(--ec-font-size-label);border-top:.0625rem solid var(--ec-border-color-legacy);padding:.1875rem .5rem;line-height:1.2}ec-menu ::ng-deep ul{max-height:50vh}ec-menu ::ng-deep li{white-space:nowrap}ec-menu.wrap-items ::ng-deep li{white-space:normal}\n"] }]
182
+ }], ctorParameters: function () { return []; }, propDecorators: { id: [{
183
+ type: Input
184
+ }], autofocus: [{
185
+ type: Input
186
+ }], status: [{
187
+ type: Input
188
+ }], disabled: [{
189
+ type: Input
190
+ }], label: [{
191
+ type: Input
192
+ }], icon: [{
193
+ type: Input
194
+ }], buttonType: [{
195
+ type: Input
196
+ }], buttonAlignment: [{
197
+ type: Input
198
+ }], buttonTitle: [{
199
+ type: Input
200
+ }], tabindex: [{
201
+ type: Input
202
+ }], showArrow: [{
203
+ type: Input
204
+ }], items: [{
205
+ type: Input
206
+ }], menuTemplateType: [{
207
+ type: Input
208
+ }], menuTitle: [{
209
+ type: Input
210
+ }], menuHeight: [{
211
+ type: Input
212
+ }], menuWidth: [{
213
+ type: Input
214
+ }], menuMinWidth: [{
215
+ type: Input
216
+ }], menuPosition: [{
217
+ type: Input
218
+ }], menuFooter: [{
219
+ type: Input
220
+ }], popupFixed: [{
221
+ type: Input
222
+ }], buttonCustomTemplate: [{
223
+ type: Input
224
+ }], pending: [{
225
+ type: Input
226
+ }], itemSelected: [{
227
+ type: Output
228
+ }], popupOpened: [{
229
+ type: Output
230
+ }], menuEl: [{
231
+ type: ViewChild,
232
+ args: [MenuComponent, { read: ElementRef }]
233
+ }], popup: [{
234
+ type: ViewChild,
235
+ args: [PopupContainerDirective, { static: true }]
236
+ }] } });
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXlDLE1BQU0sZUFBZSxDQUFDO0FBQzdJLE9BQU8sRUFBOEIsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFlLHVCQUF1QixFQUFFLE1BQU0seURBQXlELENBQUM7Ozs7Ozs7QUFPL0csTUFBTSxPQUFPLGlCQUFpQjtJQTBKNUI7UUFuSkE7O1dBRUc7UUFDYSxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsV0FBTSxHQUFrQixFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBRXpFOztXQUVHO1FBQ2EsYUFBUSxHQUFXLEtBQUssQ0FBQztRQVl6Qzs7V0FFRztRQUNhLGVBQVUsR0FBZ0IsTUFBTSxDQUFDO1FBUWpEOzs7V0FHRztRQUNhLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBT3pDOztXQUVHO1FBQ2EsY0FBUyxHQUFZLElBQUksQ0FBQztRQUUxQzs7V0FFRztRQUNhLFVBQUssR0FBZSxFQUFFLENBQUM7UUFFdkM7O1dBRUc7UUFDYSxxQkFBZ0Is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QixLQUFLO2dCQUtVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBS1UsVUFBVTtzQkFBekIsS0FBSztnQkFLVSxTQUFTO3NCQUF4QixLQUFLO2dCQUtVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBS1UsWUFBWTtzQkFBM0IsS0FBSztnQkFLVSxVQUFVO3NCQUF6QixLQUFLO2dCQU1VLFVBQVU7c0JBQXpCLEtBQUs7Z0JBS1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUtVLE9BQU87c0JBQXRCLEtBQUs7Z0JBS1csWUFBWTtzQkFBNUIsTUFBTTtnQkFLVSxXQUFXO3NCQUEzQixNQUFNO2dCQWtCaUQsTUFBTTtzQkFBN0QsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtnQixLQUFLO3NCQUFsRSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51VGVtcGxhdGVUeXBlLCBNZW51SXRlbSwgTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25UeXBlIH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IFBvcHBlciBmcm9tICdwb3BwZXIuanMnO1xyXG5pbXBvcnQgeyBEaXNwbGF5U3RhdHVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Rpc3BsYXknO1xyXG5pbXBvcnQgeyBQb3B1cFN0YXR1cywgUG9wdXBDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGlyZWN0aXZlcy9wb3B1cC9wb3B1cC1jb250YWluZXIuZGlyZWN0aXZlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZHJvcGRvd24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcblxyXG4gIC8qKlxyXG4gICAqIEJhc2UgaWQgZm9yIHRoZSBjb21wb25lbnQncyBzdWItZWxlbWVudHNcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEF1dG9tYXRpY2FsbHkgZm9jdXMgdGhlIGRyb3Bkb3duIHRvZ2dsZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYXV0b2ZvY3VzID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHRoZSBkaXNwbGF5IHN0YXR1cyBvdmVybGF5IGZvciB0aGUgbWVudVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0dXM/OkRpc3BsYXlTdGF0dXMgPSB7c3RhdHVzOiAnaGFzRGF0YScsIG1lc3NhZ2U6ICcnfTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzYWJsZSB0aGUgYnV0dG9uIHRvIHByZXZlbnQgdGhlIG1lbnUgZnJvbSBiZWluZyBvcGVuZWRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6Ym9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBsYWJlbCBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgaWNvbiBmb3IgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpY29uPzogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgYnV0dG9uIHR5cGUsIGRlZmF1bHRzIHRvIGljb25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uVHlwZT86IEJ1dHRvblR5cGUgPSAnaWNvbic7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsbHkgYWxpZ24gdGhlIGxhYmVsIG9mIHRoZSBidXR0b24gdG8gdGhlIGxlZnQgb3IgcmlnaHQuIElmIG5vdCBzZXQsXHJcbiAgICogd2lsbCBiZSBjZW50ZXJlZC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uQWxpZ25tZW50PzogJ2xlZnQnIHwgJ3JpZ2h0JztcclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBhIHRvb2x0aXAgdG8gdGhlIGRyb3Bkb3duIHRvZ2dsZSBidXR0b24uIFNob3VsZCBvbmx5IGJlIHVzZWQgd2hlblxyXG4gICAqIHRoZSB0b2dnbGUgYnV0dG9uVHlwZSBpcyAnaWNvbidcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uVGl0bGU6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGFiaW5kZXggb2YgdGhlIGJ1dHRvblxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0YWJpbmRleD86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGNhcmV0IHdpdGggdGhlIGJ1dHRvbiBsYWJlbCBvciBpY29uXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHNob3dBcnJvdzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0ZW1zIHRvIGRpc3BsYXkgaW4gdGhlIG1lbnVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1lbnUgaXRlbSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGVtcGxhdGVUeXBlOiBNZW51VGVtcGxhdGVUeXBlID0gJ2xhYmVsJztcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIGhlYWRlciBvbiB0aGUgbWVudVxyXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmaXJzdCBtZW51IGl0ZW0gd2l0aCBkaXNwbGF5IHNldCB0byAnaGVhZGluZycgaW5zdGVhZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51VGl0bGU/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBhIGZpeGVkIGhlaWdodCBmb3IgdGhlIG1lbnUsIGF1dG8gYnkgZGVmYXVsdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51SGVpZ2h0PzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgYSBmaXhlZCB3aWR0aCBpbiBwaXhlbHMgZm9yIHRoZSBtZW51LCBhdXRvIGJ5IGRlZmF1bHRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbWVudVdpZHRoPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgYSBtaW4td2lkdGggaW4gcGl4ZWxzIG9uIHRoZSBtZW51LiBJdCB3aWxsIGV4cGFuZCBpZiB0aGUgY29udGVudCBpcyBncmVhdGVyIHRoYW4gdGhlIG1pbi13aWR0aFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBtZW51TWluV2lkdGg/OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBpbiB0aGUgbWVudSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGUgYnV0dG9uLiBSaWdodCBieSBkZWZhdWx0XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVQb3NpdGlvbj86ICdsZWZ0JyB8ICdyaWdodCc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0aWNreSBmb290ZXIgdG8gZGlzcGxheSBhdCB0aGUgYm90dG9tIG9mIHRoZSBwb3B1cCBtZW51XHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG1lbnVGb290ZXI/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpeCBwb3NpdGlvbiB0aGUgbWVudSBpbnN0ZWFkIG9mIGFic29sdXRlLiBVc2VmdWwgd2hlbiB0aGUgZHJvcGRvd24gaXMgaW4gYVxyXG4gICAqIGRpYWxvZ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwb3B1cEZpeGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhc3MgYSBjdXN0b20gdGVtcGxhdGUgdG8gdGhlIHRvZ2dsZSBidXR0b25cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgYnV0dG9uQ3VzdG9tVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKipcclxuICAqIFVzZWQgdG8gc2V0IHRoZSBtZW51IGJ1dHRvbnMgc3RhdGUgdG8gcGVuZGluZ1xyXG4gICovXHJcbiAgQElucHV0KCkgcHVibGljIHBlbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgaXRlbVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8TWVudUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51SXRlbT4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgYW4gZXZlbnQgd2hlbiB0aGUgcG9wdXAgbWVudSBvcGVuc1xyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBwdWJsaWMgcG9wdXBPcGVuZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHN0YXR1cyBvZiB0aGUgbWVudVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZW51U3RhdHVzOiBQb3B1cFN0YXR1cyA9ICdoaWRkZW4nO1xyXG5cclxuICAvKiogSXRlbSB0byBoaWdobGlnaHQgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWQsIHVzZWQgd2hlbiB0aGUgdXNlclxyXG4gICAqICBvcGVucyB0aGUgbWVudSB2aWEgdGhlIGtleWJvYXJkXHJcbiAgICovXHJcbiAgcHVibGljIGhpZ2hsaWdodGVkSXRlbTogTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIFVzZWQgdG8ga25vdyBpZiB0aGUgbWVudSB3YXMgdG9nZ2xlZCB2aWEgdGhlIGtleWJvYXJkICovXHJcbiAgcHJpdmF0ZSBpc0tleWJvYXJkRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBtZW51IGVsZW1lbnRcclxuICAgKi9cclxuICBAVmlld0NoaWxkKE1lbnVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIG1lbnVFbCE6RWxlbWVudFJlZjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW50ZXJuYWwgcmVmZXJlbmNlIHRvIHRoZSBwb3B1cCBkaXJlY3RpdmVcclxuICAgKi9cclxuICBAVmlld0NoaWxkKFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIHBvcHVwITogUG9wdXBDb250YWluZXJEaXJlY3RpdmU7XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIGFueSBhY3RpdmUgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb21wb25lbnREZXN0cm95ZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBTdWJzY3JpYmUgdG8gY2hhbmdlcyB0byB0aGUgbWVudSBzdGF0dXNcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnBvcHVwLnBvcHBlclN0YXR1c0NoYW5nZVxyXG4gICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKSlcclxuICAgIC5zdWJzY3JpYmUoKGV2ZW50OiAndmlzaWJsZScgfCAnaGlkZGVuJykgPT4ge1xyXG4gICAgICB0aGlzLm1lbnVTdGF0dXMgPSBldmVudDtcclxuICAgICAgaWYodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICB0aGlzLnBvcHVwT3BlbmVkLmVtaXQoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdXAgdGhlIHBvcHVwXHJcbiAgICovXHJcbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGxldCBwb3BwZXJPcHRpb25zOiBQb3BwZXIuUG9wcGVyT3B0aW9ucyA9IHtcclxuXHRcdFx0bW9kaWZpZXJzOiB7XHJcblx0XHRcdFx0cHJldmVudE92ZXJmbG93OiB7XHJcblx0XHRcdFx0XHRib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0J1xyXG5cdFx0XHRcdH1cclxuICAgICAgfSxcclxuICAgICAgcGxhY2VtZW50OiAnYm90dG9tLWVuZCdcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMubWVudVBvc2l0aW9uID09PSAnbGVmdCcpIHtcclxuICAgICAgcG9wcGVyT3B0aW9ucy5wbGFjZW1lbnQgPSAnYm90dG9tLXN0YXJ0JztcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMucG9wdXBGaXhlZCkge1xyXG4gICAgICBwb3BwZXJPcHRpb25zLm9uQ3JlYXRlID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucG9wdXAuZml4UG9zaXRpb24oKTtcclxuICAgICAgfVxyXG5cclxuXHRcdFx0cG9wcGVyT3B0aW9ucy5vblVwZGF0ZSA9ICgpID0+IHtcclxuICAgICAgICAvLyBIaWRlIHRoZSBwb3B1cCB3aGVuIHRoZSBkcm9wZG93biBjaGFuZ2VzIHBvc2l0aW9uIGR1ZSB0byB3aW5kb3cgcmVzaXplXHJcbiAgICAgICAgLy8gb3IgY29udGFpbmVyIHNjcm9sbGluZ1xyXG4gICAgICAgIHRoaXMucG9wdXAuaGlkZSgpO1xyXG5cdFx0XHR9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wb3B1cC5wb3BwZXJPcHRpb25zID0gcG9wcGVyT3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuc3Vic2NyaWJlIHRvIGFueSBhY3RpdmUgc3Vic2NyaXB0aW9uc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50RGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuY29tcG9uZW50RGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGFuZCBjbG9zZSB0aGUgbWVudVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0b2dnbGVNZW51KGV2ZW50PzpFdmVudCk6dm9pZCB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLm1lbnVTdGF0dXMgPT09ICdoaWRkZW4nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNLZXlib2FyZEV2ZW50ICYmIHRoaXMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyBTZXR1cCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCB0byBoaWdobGlnaHQgd2hlbiBvcGVuaW5nIHRoZVxyXG4gICAgICAgICAgLy8gbWVudSB2aWEgdGhlIGtleWJvYXJkLCBpZ25vcmluZyBoZWFkaW5nc1xyXG5cclxuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5kaXNwbGF5ICE9PSAnaGVhZGluZycpIHx8IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9wdXAuc2hvdygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9wdXAuaGlkZSgpO1xyXG5cclxuICAgICAgICAvLyBSZXNldCB0aGUgaGlnaGxpZ2h0ZWQgaXRlbSBhbmQgb3VyIGtleWJvYXJkIGZsYWdcclxuICAgICAgICAvLyB3aGVuIHdlIGNsb3NlIHRoZSBwb3B1cFxyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJdGVtID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzS2V5Ym9hcmRFdmVudCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbWl0IHRoZSBzZWxlY3RlZCBpdGVtIHdoZW4gaXQgY2hhbmdlcyBhbmQgY2xvc2UgdGhlIG1lbnVcclxuICAgKi9cclxuICBwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkKGl0ZW06TWVudUl0ZW0pOnZvaWQge1xyXG4gICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChpdGVtKTtcclxuICAgIHRoaXMudG9nZ2xlTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2VzIHRoZSBtZW51IGlmIHRoZSB0YWIga2V5IGlzIHByZXNzZWRcclxuICAgKi9cclxuICBwdWJsaWMga2V5TmF2aWdhdGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XHJcbiAgICAgIGNhc2UgJ0VudGVyJzpcclxuICAgICAgICB0aGlzLmlzS2V5Ym9hcmRFdmVudCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XHJcbiAgICAgIGNhc2UgJ1RhYic6XHJcbiAgICAgICAgaWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvZ2dsZU1lbnUoZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxyXG4gIDxlYy1idXR0b24gW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgIGlkPVwie3tpZH19X3RvZ2dsZVwiXHJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hhcy1hcnJvdyc6c2hvd0Fycm93LCAnYWN0aXZlJzogbWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnLCAndGV4dC1sZWZ0JzogYnV0dG9uQWxpZ25tZW50ID09PSAnbGVmdCcsICd0ZXh0LXJpZ2h0JzogYnV0dG9uQWxpZ25tZW50ID09PSAncmlnaHQnfVwiXHJcbiAgICAgICAgICAgICAqZWNQb3B1cD1cImRyb3Bkb3duTWVudVwiXHJcbiAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxyXG4gICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXHJcbiAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxyXG4gICAgICAgICAgICAgW3R5cGVdPVwiYnV0dG9uVHlwZVwiXHJcbiAgICAgICAgICAgICBbY3VzdG9tVGVtcGxhdGVdPVwiYnV0dG9uQ3VzdG9tVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgW3BlbmRpbmddPVwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICB0aXRsZT1cInt7YnV0dG9uVGl0bGV9fVwiXHJcbiAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIChrZXlkb3duKT1cImtleU5hdmlnYXRlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIj5cclxuICA8L2VjLWJ1dHRvbj5cclxuICA8c3BhbiBjbGFzcz1cImFycm93IGlzLXt7YnV0dG9uVHlwZX19XCJcclxuICAgICAgICAqbmdJZj1cInNob3dBcnJvd1wiXHJcbiAgICAgICAgW2NsYXNzLmlzLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICA8aSBjbGFzcz1cImVjLWljb24gaWNvbi1jYXJldC1kb3duXCIgW2NsYXNzLmZsaXAteV09XCJtZW51U3RhdHVzID09PSAndmlzaWJsZSdcIj48L2k+XHJcbiAgPC9zcGFuPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZHJvcGRvd25NZW51PlxyXG4gIDxkaXYgaWQ9XCJ7e2lkfX1fcG9wdXBcIlxyXG4gICAgICAgY2xhc3M9XCJwb3B1cFwiXHJcbiAgICAgICBlY092ZXJsYXlcclxuICAgICAgIFtzdGF0dXNdPVwic3RhdHVzPy5zdGF0dXNcIlxyXG4gICAgICAgW21lc3NhZ2VdPVwic3RhdHVzPy5tZXNzYWdlXCJcclxuICAgICAgIFtkaXNwbGF5QXNNYXNrXT1cInRydWVcIj5cclxuICAgIDwhLS0gRHJvcGRvd24gTWVudSBUaXRsZSAtLT5cclxuICAgIDxoZWFkZXIgaWQ9XCJ7e2lkfX1fdGl0bGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtaGVhZGluZy0yIHB4LTIgbXktMlwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwibWVudVRpdGxlXCI+e3ttZW51VGl0bGV9fVxyXG4gICAgPC9oZWFkZXI+XHJcbiAgICA8IS0tIERyb3Bkb3duIE1lbnUgLS0+XHJcbiAgICA8ZWMtbWVudSBpZD1cInt7aWR9fV9tZW51XCJcclxuICAgICAgICAgICAgIFtjbGFzcy53cmFwLWl0ZW1zXT1cIm1lbnVXaWR0aFwiXHJcbiAgICAgICAgICAgICBbdGVtcGxhdGVUeXBlXT1cIm1lbnVUZW1wbGF0ZVR5cGVcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIm1lbnVXaWR0aCA/IG1lbnVXaWR0aCArICdweCcgOiAnYXV0bydcIlxyXG4gICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJtZW51TWluV2lkdGggPyBtZW51TWluV2lkdGggKyAncHgnIDogJ2F1dG8nXCJcclxuICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwibWVudUhlaWdodCA/IG1lbnVIZWlnaHQgKyAncHgnIDogJ2F1dG8nXCJcclxuICAgICAgICAgICAgIFtpdGVtc109XCJpdGVtc1wiXHJcbiAgICAgICAgICAgICBbc2hvd05vSXRlbXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICBbZW5hYmxlS2V5TmF2XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgW2hpZ2hsaWdodGVkSXRlbV09XCJoaWdobGlnaHRlZEl0ZW1cIlxyXG4gICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlZCk9XCJzZWxlY3RlZENoYW5nZWQoJGV2ZW50KVwiPlxyXG4gICAgPC9lYy1tZW51PlxyXG4gICAgPGZvb3RlciAqbmdJZj1cIm1lbnVGb290ZXJcIj57e21lbnVGb290ZXJ9fTwvZm9vdGVyPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -0,0 +1,169 @@
1
+ import { Component, ElementRef, Input, ViewChild } from '@angular/core';
2
+ import { UntypedFormControl, UntypedFormGroup } from '@angular/forms';
3
+ import { takeUntil } from 'rxjs/operators';
4
+ import { FormControlBase } from '../form-control-base';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../core/validation-message.service";
7
+ import * as i2 from "../../shared/form-group.helper";
8
+ import * as i3 from "@angular/forms";
9
+ import * as i4 from "../button/button.component";
10
+ import * as i5 from "../form-control/form-control.component";
11
+ import * as i6 from "../form-group/form-group.component";
12
+ export const FileTypeExtensions = {
13
+ zip: ['.zip'],
14
+ excel: ['.xls', '.xlsx']
15
+ };
16
+ export class FileUploadComponent extends FormControlBase {
17
+ constructor(validationMessageService, formGroupHelper) {
18
+ super(validationMessageService, formGroupHelper);
19
+ this.validationMessageService = validationMessageService;
20
+ this.formGroupHelper = formGroupHelper;
21
+ /**
22
+ * The value of the textbox input's placeholder
23
+ */
24
+ this.placeholder = "Choose file...";
25
+ /**
26
+ * File output, determines which properties are supplied on the formModel
27
+ */
28
+ this.fileOutput = 'base64';
29
+ }
30
+ // static class to create the form group from a parent component
31
+ static getFormModel(validators, disabled = false) {
32
+ let formGroup = new UntypedFormGroup({
33
+ file: new UntypedFormControl({ value: null, disabled: disabled }, validators),
34
+ name: new UntypedFormControl({ value: null, disabled: disabled }, validators),
35
+ base64FileString: new UntypedFormControl(null),
36
+ uploadResult: new UntypedFormControl(null)
37
+ });
38
+ if (disabled) {
39
+ formGroup.disable();
40
+ }
41
+ return formGroup;
42
+ }
43
+ ngOnChanges(changes) {
44
+ super.ngOnChanges(changes);
45
+ this.updateFileTypeAccept();
46
+ }
47
+ ngOnInit() {
48
+ super.ngOnInit();
49
+ // Watch for name to change, if the value is cleared we will clear the other
50
+ // supporting model properties. The name can be cleared by the user manually or via
51
+ // the clear button
52
+ this.formModel?.get('name')?.valueChanges.pipe(takeUntil(this.componentDestroyed)).subscribe(value => {
53
+ if (!value) {
54
+ this.formModel.patchValue({
55
+ file: null,
56
+ base64FileString: null,
57
+ uploadResult: null
58
+ });
59
+ }
60
+ });
61
+ }
62
+ async fileChange(files) {
63
+ let file = files.item(0);
64
+ // If there is a file selected and then opened again and click cancel you get null so don't try and set anything
65
+ if (file) {
66
+ let reader = new FileReader();
67
+ reader.onloadend = async (e) => {
68
+ let base64FileString = reader?.result?.toString().split(",")[1];
69
+ this.processFile(file, base64FileString);
70
+ };
71
+ if (this.isBase64FileOutput()) {
72
+ reader.readAsDataURL(file);
73
+ }
74
+ else {
75
+ await this.processFile(file);
76
+ }
77
+ // Clear the file inputs value, this will allow the user to pick the same filename and cause
78
+ // the fileChange to trigger.
79
+ if (this.fileInput) {
80
+ this.fileInput.nativeElement.value = '';
81
+ }
82
+ }
83
+ }
84
+ /**
85
+ * Checks the file type and updates the file type accept property. This is what determines the file
86
+ * type choices that the user will be limited to in the file browse dialog
87
+ */
88
+ updateFileTypeAccept() {
89
+ if (this.fileType) {
90
+ if (this.fileType !== "custom") {
91
+ this.fileTypeAccept = FileTypeExtensions[this.fileType].join(",");
92
+ }
93
+ else {
94
+ if (this.customExtensions) {
95
+ this.fileTypeAccept = this.customExtensions.join(",");
96
+ }
97
+ }
98
+ }
99
+ }
100
+ /**
101
+ * Take a file that was selected by the user and process/patch our form model
102
+ * If the host component requires an action to occur with the file prior to the patch it will call
103
+ * and wait for it to return.
104
+ * @param file
105
+ * @param base64FileString Optional: Will have a value provided if the fileOutput is set to base64
106
+ */
107
+ async processFile(file, base64FileString) {
108
+ if (this.onFileSelected) {
109
+ try {
110
+ let result = await this.onFileSelected(file);
111
+ this.patchFileResult(file, base64FileString, result);
112
+ }
113
+ catch (e) {
114
+ // Bummer, we're not going to do anything about it though.
115
+ // We are not patching any of the result so any existing information remains
116
+ }
117
+ }
118
+ else {
119
+ this.patchFileResult(file, base64FileString);
120
+ }
121
+ }
122
+ /**
123
+ * Based on the fileOutput return whether this component is expected to deliver a base64 output
124
+ * @returns
125
+ */
126
+ isBase64FileOutput() {
127
+ return this.fileOutput === 'base64';
128
+ }
129
+ /**
130
+ * When the file was selected and processed patch the file information that the hosting form will
131
+ * be looking for.
132
+ * @param file
133
+ * @param base64FileString
134
+ * @param onFileSelectedResult
135
+ */
136
+ patchFileResult(file, base64FileString, onFileSelectedResult) {
137
+ this.formModel?.patchValue({
138
+ file: file,
139
+ name: file?.name,
140
+ base64FileString: base64FileString ?? null
141
+ });
142
+ if (onFileSelectedResult) {
143
+ this.formModel.patchValue({ uploadResult: onFileSelectedResult });
144
+ }
145
+ else {
146
+ this.formModel.patchValue({ uploadResult: null });
147
+ }
148
+ }
149
+ }
150
+ FileUploadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: FileUploadComponent, deps: [{ token: i1.ValidationMessageService }, { token: i2.FormGroupHelper }], target: i0.ɵɵFactoryTarget.Component });
151
+ FileUploadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: FileUploadComponent, selector: "ec-file-upload", inputs: { placeholder: "placeholder", fileType: "fileType", fileOutput: "fileOutput", customExtensions: "customExtensions", onFileSelected: "onFileSelected" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true, read: ElementRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ec-form-group [label]=\"label\"\r\n [formGroup]=\"formModel\"\r\n class=\"mb-0\">\r\n <div class=\"d-flex control-group\">\r\n <div class=\"d-flex flex-grow position-relative\">\r\n <input #fileInput\r\n id=\"{{inputId}}_input\"\r\n type=\"file\"\r\n tabindex=\"-1\"\r\n [attr.accept]=\"fileTypeAccept\"\r\n (click)=\"browseBtn.focus()\"\r\n (change)=\"fileChange($event.target.files)\"\r\n [class.has-value]=\"formModel?.get('name')?.value\">\r\n <ec-form-control id=\"{{inputId}}_formControl\"\r\n class=\"text-truncate\"\r\n [required]=\"required\"\r\n [pending]=\"pending\">\r\n <input id=\"{{inputId}}_name\"\r\n [formControl]=\"formModel?.get('name')\"\r\n type=\"text\"\r\n [placeholder]=\"placeholder\"\r\n [tabindex]=\"-1\">\r\n </ec-form-control>\r\n </div>\r\n <ec-button #browseBtn\r\n id=\"{{inputId}}_browseBtn\"\r\n (clicked)=\"fileInput.click()\"\r\n type=\"secondary\"\r\n [tabindex]=\"tabindex\"\r\n [disabled]=\"formModel?.get('name')?.disabled\"\r\n label=\"Browse\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n </div>\r\n</ec-form-group>", 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:block;margin-bottom:1rem}ec-form-control{margin-bottom:0}ec-form-control ::ng-deep>.ec-focus-ring{display:none!important}input[type=file]{opacity:0;display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;cursor:pointer}input[type=file].has-value{width:calc(100% - 1.5rem)}\n"], dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i5.FormControlComponent, selector: "ec-form-control", inputs: ["id", "icon", "actionIcon", "showClear", "pending", "required", "readonly"], outputs: ["actionClicked"] }, { kind: "component", type: i6.FormGroupComponent, selector: "ec-form-group", inputs: ["id", "label", "formGroup", "labelPosition", "overrideValidationError", "hideValidationMessage"] }] });
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: FileUploadComponent, decorators: [{
153
+ type: Component,
154
+ args: [{ selector: "ec-file-upload", template: "<ec-form-group [label]=\"label\"\r\n [formGroup]=\"formModel\"\r\n class=\"mb-0\">\r\n <div class=\"d-flex control-group\">\r\n <div class=\"d-flex flex-grow position-relative\">\r\n <input #fileInput\r\n id=\"{{inputId}}_input\"\r\n type=\"file\"\r\n tabindex=\"-1\"\r\n [attr.accept]=\"fileTypeAccept\"\r\n (click)=\"browseBtn.focus()\"\r\n (change)=\"fileChange($event.target.files)\"\r\n [class.has-value]=\"formModel?.get('name')?.value\">\r\n <ec-form-control id=\"{{inputId}}_formControl\"\r\n class=\"text-truncate\"\r\n [required]=\"required\"\r\n [pending]=\"pending\">\r\n <input id=\"{{inputId}}_name\"\r\n [formControl]=\"formModel?.get('name')\"\r\n type=\"text\"\r\n [placeholder]=\"placeholder\"\r\n [tabindex]=\"-1\">\r\n </ec-form-control>\r\n </div>\r\n <ec-button #browseBtn\r\n id=\"{{inputId}}_browseBtn\"\r\n (clicked)=\"fileInput.click()\"\r\n type=\"secondary\"\r\n [tabindex]=\"tabindex\"\r\n [disabled]=\"formModel?.get('name')?.disabled\"\r\n label=\"Browse\"\r\n [autofocus]=\"autofocus\">\r\n </ec-button>\r\n </div>\r\n</ec-form-group>", 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:block;margin-bottom:1rem}ec-form-control{margin-bottom:0}ec-form-control ::ng-deep>.ec-focus-ring{display:none!important}input[type=file]{opacity:0;display:block;position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;cursor:pointer}input[type=file].has-value{width:calc(100% - 1.5rem)}\n"] }]
155
+ }], ctorParameters: function () { return [{ type: i1.ValidationMessageService }, { type: i2.FormGroupHelper }]; }, propDecorators: { placeholder: [{
156
+ type: Input
157
+ }], fileType: [{
158
+ type: Input
159
+ }], fileOutput: [{
160
+ type: Input
161
+ }], customExtensions: [{
162
+ type: Input
163
+ }], onFileSelected: [{
164
+ type: Input
165
+ }], fileInput: [{
166
+ type: ViewChild,
167
+ args: ["fileInput", { read: ElementRef, static: true }]
168
+ }] } });
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2ZpbGUtdXBsb2FkL2ZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9maWxlLXVwbG9hZC9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQW9DLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQUt2RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNoQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDYixLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO0NBQ3pCLENBQUM7QUFPRixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsZUFBZTtJQWtEdEQsWUFDWSx3QkFBa0QsRUFDbEQsZUFBZ0M7UUFFMUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBSHZDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBakM1Qzs7V0FFRztRQUNhLGdCQUFXLEdBQVksZ0JBQWdCLENBQUM7UUFReEQ7O1dBRUc7UUFDYSxlQUFVLEdBQWdCLFFBQVEsQ0FBQztJQXNCbkQsQ0FBQztJQXJERCxnRUFBZ0U7SUFDekQs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TCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQzs7Z0hBNUtVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHlTQTZDRSxVQUFVLHVGQ2pFNUMsNDVDQWtDZ0I7MkZEZEgsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjs2SUEwQlYsV0FBVztzQkFBMUIsS0FBSztnQkFNVSxRQUFRO3NCQUF2QixLQUFLO2dCQUtVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBR1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQU9VLGNBQWM7c0JBQTdCLEtBQUs7Z0JBRTZELFNBQVM7c0JBQTNFLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvdmFsaWRhdGlvbi1tZXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXBIZWxwZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvZm9ybS1ncm91cC5oZWxwZXInO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbEJhc2UgfSBmcm9tICcuLi9mb3JtLWNvbnRyb2wtYmFzZSc7XHJcblxyXG5leHBvcnQgdHlwZSBGaWxlVHlwZSA9ICd6aXAnIHwgJ2V4Y2VsJyB8ICdjdXN0b20nO1xyXG5leHBvcnQgdHlwZSBGaWxlT3V0cHV0ID0gJ3JhdycgfCAnYmFzZTY0JztcclxuXHJcbmV4cG9ydCBjb25zdCBGaWxlVHlwZUV4dGVuc2lvbnMgPSB7XHJcbiAgemlwOiBbJy56aXAnXSxcclxuICBleGNlbDogWycueGxzJywgJy54bHN4J11cclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImVjLWZpbGUtdXBsb2FkXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9maWxlLXVwbG9hZC5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9maWxlLXVwbG9hZC5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgLy8gc3RhdGljIGNsYXNzIHRvIGNyZWF0ZSB0aGUgZm9ybSBncm91cCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudFxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Rm9ybU1vZGVsKFxyXG4gICAgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSxcclxuICAgIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2VcclxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIGxldCBmb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgIGZpbGU6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sIHZhbGlkYXRvcnMpLFxyXG4gICAgICBuYW1lOiBuZXcgVW50eXBlZEZvcm1Db250cm9sKHsgdmFsdWU6IG51bGwsIGRpc2FibGVkOiBkaXNhYmxlZCB9LCB2YWxpZGF0b3JzKSxcclxuICAgICAgYmFzZTY0RmlsZVN0cmluZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgdXBsb2FkUmVzdWx0OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwpXHJcbiAgICB9KTtcclxuICAgIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICBmb3JtR3JvdXAuZGlzYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgdGV4dGJveCBpbnB1dCdzIHBsYWNlaG9sZGVyXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyPzogc3RyaW5nID0gXCJDaG9vc2UgZmlsZS4uLlwiO1xyXG5cclxuICAvKiogQ29tbW9uIGV4dGVuc2lvbnMgZm9yIGEgZmlsZSBicm93c2luZyBkaWFsb2dcclxuICAgKiAgTm90ZTogRWRnZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBhY2NlcHQgYXR0cmlidXRlIG9uIGZpbGUgaW5wdXRzLCB0aGVyZWZvciBhbGwgZmlsZSB0eXBlc1xyXG4gICAqICAgICAgICB3aWxsIGJlIHNob3duLiAgRmlyZWZveCBhbmQgQ2hyb21lIGJvdGggc3VwcG9ydCB0aGlzIGZlYXR1cmUuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZpbGVUeXBlPzogRmlsZVR5cGUgfCB1bmRlZmluZWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbGUgb3V0cHV0LCBkZXRlcm1pbmVzIHdoaWNoIHByb3BlcnRpZXMgYXJlIHN1cHBsaWVkIG9uIHRoZSBmb3JtTW9kZWxcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZmlsZU91dHB1dD86IEZpbGVPdXRwdXQgPSAnYmFzZTY0JztcclxuXHJcbiAgLyoqIElmIGZpbGVUeXBlIGlzIHNldCB0byBjdXN0b20gc2V0IHRoZSBhY2NlcHRhYmxlIGZpbGUgdHlwZXMgYmFzZWQgb24gdGhlIGN1c3RvbSBhcnJheSAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21FeHRlbnNpb25zPzogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgY2FsbGJhY2sgc3VwcG9ydGVkIGlmIHRoZSBob3N0aW5nIHBhZ2UgbmVlZHMgdG8gcHJvY2VzcyB0aGUgZmlsZSBiZWZvcmVcclxuICAgKiBzZXR0aW5nIHRoZSBmb3JtTW9kZWwgd2l0aCB0aGUgZmlsZSBpbmZvcm1hdGlvbi4gSWYgdGhlIHByb21pc2UgcmVzb2x2ZXMgaXQgd2lsbCBjb250aW51ZVxyXG4gICAqIGFuZCBzZXQgdGhlIGZpbGUgbmFtZSBhbmQgY29udGVudHMgdG8gdGhlIGZvcm1Nb2RlbCwgb3RoZXJ3aXNlIG9uIGZhaWx1cmUgaXQnbGwgZG8gbm90aGluZy5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgb25GaWxlU2VsZWN0ZWQ/OiAoZmlsZTogRmlsZSkgPT4gUHJvbWlzZTxhbnk+O1xyXG5cclxuICBAVmlld0NoaWxkKFwiZmlsZUlucHV0XCIsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBmaWxlSW5wdXQ/OiBFbGVtZW50UmVmO1xyXG5cclxuICAvKiogUHJvcGVydHkgYm91bmQgdG8gdGhlIGZpbGUgaW5wdXQgdG8gZmlsdGVyIHdoYXQgZmlsZSB0eXBlcyBhcmUgc2hvd24gaW4gdGhlIGRpYWxvZyAqL1xyXG4gIHB1YmxpYyBmaWxlVHlwZUFjY2VwdDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByb3RlY3RlZCB2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2U6IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBmb3JtR3JvdXBIZWxwZXI6IEZvcm1Hcm91cEhlbHBlclxyXG4gICkge1xyXG4gICAgc3VwZXIodmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLCBmb3JtR3JvdXBIZWxwZXIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlRmlsZVR5cGVBY2NlcHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIG5hbWUgdG8gY2hhbmdlLCBpZiB0aGUgdmFsdWUgaXMgY2xlYXJlZCB3ZSB3aWxsIGNsZWFyIHRoZSBvdGhlclxyXG4gICAgLy8gc3VwcG9ydGluZyBtb2RlbCBwcm9wZXJ0aWVzLiBUaGUgbmFtZSBjYW4gYmUgY2xlYXJlZCBieSB0aGUgdXNlciBtYW51YWxseSBvciB2aWFcclxuICAgIC8vIHRoZSBjbGVhciBidXR0b25cclxuICAgIHRoaXMuZm9ybU1vZGVsPy5nZXQoJ25hbWUnKT8udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgZmlsZTogbnVsbCxcclxuICAgICAgICAgIGJhc2U2NEZpbGVTdHJpbmc6IG51bGwsXHJcbiAgICAgICAgICB1cGxvYWRSZXN1bHQ6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZmlsZUNoYW5nZShmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBmaWxlOiBGaWxlIHwgbnVsbCA9IGZpbGVzLml0ZW0oMCk7XHJcblxyXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBmaWxlIHNlbGVjdGVkIGFuZCB0aGVuIG9wZW5lZCBhZ2FpbiBhbmQgY2xpY2sgY2FuY2VsIHlvdSBnZXQgbnVsbCBzbyBkb24ndCB0cnkgYW5kIHNldCBhbnl0aGluZ1xyXG4gICAgaWYgKGZpbGUpIHtcclxuICAgICAgbGV0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICByZWFkZXIub25sb2FkZW5kID0gYXN5bmMgZSA9PiB7XHJcbiAgICAgICAgbGV0IGJhc2U2NEZpbGVTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHJlYWRlcj8ucmVzdWx0Py50b1N0cmluZygpLnNwbGl0KFwiLFwiKVsxXTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUhLCBiYXNlNjRGaWxlU3RyaW5nKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzQmFzZTY0RmlsZU91dHB1dCgpKSB7XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRmlsZShmaWxlISk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENsZWFyIHRoZSBmaWxlIGlucHV0cyB2YWx1ZSwgdGhpcyB3aWxsIGFsbG93IHRoZSB1c2VyIHRvIHBpY2sgdGhlIHNhbWUgZmlsZW5hbWUgYW5kIGNhdXNlXHJcbiAgICAgIC8vIHRoZSBmaWxlQ2hhbmdlIHRvIHRyaWdnZXIuXHJcbiAgICAgIGlmICh0aGlzLmZpbGVJbnB1dCkge1xyXG4gICAgICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIHRoZSBmaWxlIHR5cGUgYW5kIHVwZGF0ZXMgdGhlIGZpbGUgdHlwZSBhY2NlcHQgcHJvcGVydHkuIFRoaXMgaXMgd2hhdCBkZXRlcm1pbmVzIHRoZSBmaWxlXHJcbiAgICogdHlwZSBjaG9pY2VzIHRoYXQgdGhlIHVzZXIgd2lsbCBiZSBsaW1pdGVkIHRvIGluIHRoZSBmaWxlIGJyb3dzZSBkaWFsb2dcclxuICAgKi9cclxuICBwcml2YXRlIHVwZGF0ZUZpbGVUeXBlQWNjZXB0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZmlsZVR5cGUpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsZVR5cGUgIT09IFwiY3VzdG9tXCIpIHtcclxuICAgICAgICB0aGlzLmZpbGVUeXBlQWNjZXB0ID0gRmlsZVR5cGVFeHRlbnNpb25zW3RoaXMuZmlsZVR5cGVdLmpvaW4oXCIsXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbUV4dGVuc2lvbnMpIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVR5cGVBY2NlcHQgPSB0aGlzLmN1c3RvbUV4dGVuc2lvbnMuam9pbihcIixcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUYWtlIGEgZmlsZSB0aGF0IHdhcyBzZWxlY3RlZCBieSB0aGUgdXNlciBhbmQgcHJvY2Vzcy9wYXRjaCBvdXIgZm9ybSBtb2RlbFxyXG4gICAqIElmIHRoZSBob3N0IGNvbXBvbmVudCByZXF1aXJlcyBhbiBhY3Rpb24gdG8gb2NjdXIgd2l0aCB0aGUgZmlsZSBwcmlvciB0byB0aGUgcGF0Y2ggaXQgd2lsbCBjYWxsXHJcbiAgICogYW5kIHdhaXQgZm9yIGl0IHRvIHJldHVybi5cclxuICAgKiBAcGFyYW0gZmlsZSBcclxuICAgKiBAcGFyYW0gYmFzZTY0RmlsZVN0cmluZyBPcHRpb25hbDogV2lsbCBoYXZlIGEgdmFsdWUgcHJvdmlkZWQgaWYgdGhlIGZpbGVPdXRwdXQgaXMgc2V0IHRvIGJhc2U2NFxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0ZpbGUoZmlsZTogRmlsZSwgYmFzZTY0RmlsZVN0cmluZz86IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMub25GaWxlU2VsZWN0ZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5vbkZpbGVTZWxlY3RlZChmaWxlKTtcclxuICAgICAgICB0aGlzLnBhdGNoRmlsZVJlc3VsdChmaWxlLCBiYXNlNjRGaWxlU3RyaW5nLCByZXN1bHQpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLy8gQnVtbWVyLCB3ZSdyZSBub3QgZ29pbmcgdG8gZG8gYW55dGhpbmcgYWJvdXQgaXQgdGhvdWdoLiBcclxuICAgICAgICAvLyBXZSBhcmUgbm90IHBhdGNoaW5nIGFueSBvZiB0aGUgcmVzdWx0IHNvIGFueSBleGlzdGluZyBpbmZvcm1hdGlvbiByZW1haW5zXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGF0Y2hGaWxlUmVzdWx0KGZpbGUsIGJhc2U2NEZpbGVTdHJpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQmFzZWQgb24gdGhlIGZpbGVPdXRwdXQgcmV0dXJuIHdoZXRoZXIgdGhpcyBjb21wb25lbnQgaXMgZXhwZWN0ZWQgdG8gZGVsaXZlciBhIGJhc2U2NCBvdXRwdXRcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBwcml2YXRlIGlzQmFzZTY0RmlsZU91dHB1dCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVPdXRwdXQgPT09ICdiYXNlNjQnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiB0aGUgZmlsZSB3YXMgc2VsZWN0ZWQgYW5kIHByb2Nlc3NlZCBwYXRjaCB0aGUgZmlsZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBob3N0aW5nIGZvcm0gd2lsbFxyXG4gICAqIGJlIGxvb2tpbmcgZm9yLiBcclxuICAgKiBAcGFyYW0gZmlsZSBcclxuICAgKiBAcGFyYW0gYmFzZTY0RmlsZVN0cmluZyBcclxuICAgKiBAcGFyYW0gb25GaWxlU2VsZWN0ZWRSZXN1bHQgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXRjaEZpbGVSZXN1bHQoZmlsZTogRmlsZSB8IG51bGwsIGJhc2U2NEZpbGVTdHJpbmc/OiBzdHJpbmcsIG9uRmlsZVNlbGVjdGVkUmVzdWx0PzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1Nb2RlbD8ucGF0Y2hWYWx1ZSh7IFxyXG4gICAgICBmaWxlOiBmaWxlLCBcclxuICAgICAgbmFtZTogZmlsZT8ubmFtZSwgXHJcbiAgICAgIGJhc2U2NEZpbGVTdHJpbmc6IGJhc2U2NEZpbGVTdHJpbmcgPz8gbnVsbFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG9uRmlsZVNlbGVjdGVkUmVzdWx0KSB7XHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnBhdGNoVmFsdWUoeyB1cGxvYWRSZXN1bHQ6IG9uRmlsZVNlbGVjdGVkUmVzdWx0IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwucGF0Y2hWYWx1ZSh7IHVwbG9hZFJlc3VsdDogbnVsbCB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGVjLWZvcm0tZ3JvdXAgW2xhYmVsXT1cImxhYmVsXCJcclxuICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cIm1iLTBcIj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGNvbnRyb2wtZ3JvdXBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93IHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgIDxpbnB1dCAjZmlsZUlucHV0XHJcbiAgICAgICAgICAgICBpZD1cInt7aW5wdXRJZH19X2lucHV0XCJcclxuICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgICAgW2F0dHIuYWNjZXB0XT1cImZpbGVUeXBlQWNjZXB0XCJcclxuICAgICAgICAgICAgIChjbGljayk9XCJicm93c2VCdG4uZm9jdXMoKVwiXHJcbiAgICAgICAgICAgICAoY2hhbmdlKT1cImZpbGVDaGFuZ2UoJGV2ZW50LnRhcmdldC5maWxlcylcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLmhhcy12YWx1ZV09XCJmb3JtTW9kZWw/LmdldCgnbmFtZScpPy52YWx1ZVwiPlxyXG4gICAgICA8ZWMtZm9ybS1jb250cm9sIGlkPVwie3tpbnB1dElkfX1fZm9ybUNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBbcGVuZGluZ109XCJwZW5kaW5nXCI+XHJcbiAgICAgICAgPGlucHV0IGlkPVwie3tpbnB1dElkfX1fbmFtZVwiXHJcbiAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtTW9kZWw/LmdldCgnbmFtZScpXCJcclxuICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIj5cclxuICAgICAgPC9lYy1mb3JtLWNvbnRyb2w+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxlYy1idXR0b24gI2Jyb3dzZUJ0blxyXG4gICAgICAgICAgICAgICBpZD1cInt7aW5wdXRJZH19X2Jyb3dzZUJ0blwiXHJcbiAgICAgICAgICAgICAgIChjbGlja2VkKT1cImZpbGVJbnB1dC5jbGljaygpXCJcclxuICAgICAgICAgICAgICAgdHlwZT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXHJcbiAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtTW9kZWw/LmdldCgnbmFtZScpPy5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgIGxhYmVsPVwiQnJvd3NlXCJcclxuICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIj5cclxuICAgIDwvZWMtYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2VjLWZvcm0tZ3JvdXA+Il19
@@ -0,0 +1,86 @@
1
+ import { Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewEncapsulation, ContentChild } from '@angular/core';
2
+ import { FormControlDirective } from '@angular/forms';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class FormControlComponent {
6
+ constructor(el) {
7
+ this.el = el;
8
+ this.id = '';
9
+ this.showClear = true;
10
+ this.pending = false;
11
+ this.required = false;
12
+ this.readonly = false;
13
+ this.actionClicked = new EventEmitter();
14
+ }
15
+ get empty() { return !this.formModel?.value && this.formModel?.value !== 0; }
16
+ ;
17
+ get invalid() { return this.formModel?.touched == true && this.formModel.invalid == true; }
18
+ ;
19
+ get disabled() { return this.formModel?.disabled == true; }
20
+ ;
21
+ ngAfterViewInit() {
22
+ if (!this.formModel) {
23
+ console.error('Missing [formControl] directive on ec-form-control content.');
24
+ }
25
+ }
26
+ onClick() {
27
+ this.focus();
28
+ }
29
+ focus() {
30
+ const el = this.el.nativeElement;
31
+ const inputs = el.querySelectorAll('input, textarea, select');
32
+ if (inputs.length) {
33
+ inputs.item(0).focus();
34
+ }
35
+ }
36
+ clear() {
37
+ this.formModel?.reset();
38
+ }
39
+ }
40
+ FormControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: FormControlComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
41
+ FormControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: FormControlComponent, selector: "ec-form-control", inputs: { id: "id", icon: "icon", actionIcon: "actionIcon", showClear: "showClear", pending: "pending", required: "required", readonly: "readonly" }, outputs: { actionClicked: "actionClicked" }, host: { listeners: { "click": "onClick()" }, properties: { "class.is-pending": "this.pending", "class.is-required": "this.required", "class.is-readonly": "this.readonly", "class.is-empty": "this.empty", "class.is-invalid": "this.invalid", "class.is-disabled": "this.disabled" } }, queries: [{ propertyName: "formModel", first: true, predicate: FormControlDirective, descendants: true }], ngImport: i0, template: "<ng-content></ng-content>\r\n<i id=\"{{id + '_icon'}}\" class=\"ec-form-control-icon ec-icon {{icon}}\"></i>\r\n<i id=\"{{id + '_loading'}}\" class=\"ec-form-control-icon ec-icon icon-loading\"></i>\r\n<i id=\"{{id + '_required'}}\" class=\"ec-form-control-icon ec-icon icon-required\"></i>\r\n<i id=\"{{id + '_invalid'}}\" class=\"ec-form-control-icon ec-icon icon-invalid\"></i>\r\n<i id=\"{{id + '_clear'}}\" *ngIf=\"showClear\" class=\"ec-form-control-clear ec-icon icon-cancel\" (click)=\"clear()\"></i>\r\n<i id=\"{{id + '_action'}}\" *ngIf=\"actionIcon\" class=\"ec-form-control-action ec-icon {{actionIcon}}\" (click)=\"actionClicked.emit()\"></i>\r\n<div class=\"ec-focus-ring\"></div>", styles: ["ec-form-control{background-color:var(--ec-background-color);background-clip:padding-box;border:1px solid var(--ec-border-color);border-radius:var(--ec-border-radius);padding:0 .5rem;position:relative;color:var(--ec-color-primary-dark);display:flex;font-size:var(--ec-font-size-body);min-height:2rem;width:100%}ec-form-control>input,ec-form-control>select,ec-form-control>textarea{color:inherit;flex:1 1;min-width:0;border:0;background-color:transparent;order:2}ec-form-control>input::selection,ec-form-control>select::selection,ec-form-control>textarea::selection{background-color:var(--ec-color-interactive);color:var(--ec-color-primary-light)}ec-form-control>input::-webkit-input-placeholder,ec-form-control>select::-webkit-input-placeholder,ec-form-control>textarea::-webkit-input-placeholder{color:var(--ec-color-hint-dark)}ec-form-control>input::-moz-placeholder,ec-form-control>select::-moz-placeholder,ec-form-control>textarea::-moz-placeholder{color:var(--ec-color-hint-dark);opacity:1}ec-form-control>input:-ms-input-placeholder,ec-form-control>select:-ms-input-placeholder,ec-form-control>textarea:-ms-input-placeholder{color:var(--ec-color-hint-dark)}ec-form-control>input:-moz-placeholder,ec-form-control>select:-moz-placeholder,ec-form-control>textarea:-moz-placeholder{color:var(--ec-color-hint-dark);opacity:1}ec-form-control>input:focus,ec-form-control>select:focus,ec-form-control>textarea:focus{outline:none}ec-form-control>input:focus~.ec-focus-ring,ec-form-control>select:focus~.ec-focus-ring,ec-form-control>textarea:focus~.ec-focus-ring{display:block}ec-form-control>input,ec-form-control>textarea,ec-form-control>select,ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{padding:calc((1.875rem - (var(--ec-font-size-body) * 1.25)) / 2) 0;line-height:1.25;font-size:inherit}ec-form-control>textarea{resize:none;padding:.3125rem 0}ec-form-control .ec-form-control-icon{margin-top:.4375rem;margin-right:.25rem;order:1}ec-form-control .ec-form-control-icon:not([class*=icon-]){display:none}ec-form-control .icon-required{color:var(--ec-color-caution)}ec-form-control .ec-form-control-clear,ec-form-control .ec-form-control-action{cursor:pointer;flex:none;height:1.875rem;width:2rem;order:3}ec-form-control .ec-form-control-clear:last-of-type,ec-form-control .ec-form-control-action:last-of-type{margin-right:-.5rem}ec-form-control .ec-form-control-clear:hover,ec-form-control .ec-form-control-action:hover{background-color:var(--ec-background-color-hover)}ec-form-control .ec-form-control-clear{width:1.5rem}ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{color:var(--ec-color-secondary-dark);flex:none;cursor:default}ec-form-control .ec-form-control-prefix{margin-right:.125rem;order:2}ec-form-control .ec-form-control-suffix{margin-left:.125rem;order:3}ec-form-control .ec-focus-ring{position:absolute;left:-1px;right:-1px;top:-1px;bottom:-1px;border:.125rem solid var(--ec-border-color-focus);pointer-events:none;display:none;border-radius:var(--ec-border-radius);z-index:1}ec-form-control.is-pending .icon-invalid,ec-form-control.is-pending .icon-required{display:none}ec-form-control.is-invalid{border-color:var(--ec-color-caution);background-color:var(--ec-background-color-caution)}ec-form-control.is-invalid .icon-required{display:none}ec-form-control.is-empty .ec-form-control-clear{display:none}ec-form-control.is-required.is-empty .ec-form-control-icon:first-of-type{display:none}ec-form-control:not(.is-pending) .icon-loading{display:none}ec-form-control:not(.is-required) .icon-required,ec-form-control:not(.is-empty) .icon-required{display:none}ec-form-control:not(.is-invalid) .icon-invalid{display:none}ec-form-control.is-readonly,ec-form-control.is-disabled{background-color:var(--ec-background-color-disabled)}ec-form-control.is-readonly .icon-loading,ec-form-control.is-readonly .icon-invalid,ec-form-control.is-readonly .icon-required,ec-form-control.is-readonly .ec-form-control-clear,ec-form-control.is-disabled .icon-loading,ec-form-control.is-disabled .icon-invalid,ec-form-control.is-disabled .icon-required,ec-form-control.is-disabled .ec-form-control-clear{display:none}ec-form-control.is-readonly{border-color:transparent;color:var(--ec-color-primary-dark)}ec-form-control.is-readonly .ec-form-control-action{display:none}ec-form-control.is-disabled:not(.is-readonly){color:var(--ec-color-disabled-dark);opacity:.6}ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-prefix,ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-suffix{color:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: FormControlComponent, decorators: [{
43
+ type: Component,
44
+ args: [{ selector: 'ec-form-control', encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\r\n<i id=\"{{id + '_icon'}}\" class=\"ec-form-control-icon ec-icon {{icon}}\"></i>\r\n<i id=\"{{id + '_loading'}}\" class=\"ec-form-control-icon ec-icon icon-loading\"></i>\r\n<i id=\"{{id + '_required'}}\" class=\"ec-form-control-icon ec-icon icon-required\"></i>\r\n<i id=\"{{id + '_invalid'}}\" class=\"ec-form-control-icon ec-icon icon-invalid\"></i>\r\n<i id=\"{{id + '_clear'}}\" *ngIf=\"showClear\" class=\"ec-form-control-clear ec-icon icon-cancel\" (click)=\"clear()\"></i>\r\n<i id=\"{{id + '_action'}}\" *ngIf=\"actionIcon\" class=\"ec-form-control-action ec-icon {{actionIcon}}\" (click)=\"actionClicked.emit()\"></i>\r\n<div class=\"ec-focus-ring\"></div>", styles: ["ec-form-control{background-color:var(--ec-background-color);background-clip:padding-box;border:1px solid var(--ec-border-color);border-radius:var(--ec-border-radius);padding:0 .5rem;position:relative;color:var(--ec-color-primary-dark);display:flex;font-size:var(--ec-font-size-body);min-height:2rem;width:100%}ec-form-control>input,ec-form-control>select,ec-form-control>textarea{color:inherit;flex:1 1;min-width:0;border:0;background-color:transparent;order:2}ec-form-control>input::selection,ec-form-control>select::selection,ec-form-control>textarea::selection{background-color:var(--ec-color-interactive);color:var(--ec-color-primary-light)}ec-form-control>input::-webkit-input-placeholder,ec-form-control>select::-webkit-input-placeholder,ec-form-control>textarea::-webkit-input-placeholder{color:var(--ec-color-hint-dark)}ec-form-control>input::-moz-placeholder,ec-form-control>select::-moz-placeholder,ec-form-control>textarea::-moz-placeholder{color:var(--ec-color-hint-dark);opacity:1}ec-form-control>input:-ms-input-placeholder,ec-form-control>select:-ms-input-placeholder,ec-form-control>textarea:-ms-input-placeholder{color:var(--ec-color-hint-dark)}ec-form-control>input:-moz-placeholder,ec-form-control>select:-moz-placeholder,ec-form-control>textarea:-moz-placeholder{color:var(--ec-color-hint-dark);opacity:1}ec-form-control>input:focus,ec-form-control>select:focus,ec-form-control>textarea:focus{outline:none}ec-form-control>input:focus~.ec-focus-ring,ec-form-control>select:focus~.ec-focus-ring,ec-form-control>textarea:focus~.ec-focus-ring{display:block}ec-form-control>input,ec-form-control>textarea,ec-form-control>select,ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{padding:calc((1.875rem - (var(--ec-font-size-body) * 1.25)) / 2) 0;line-height:1.25;font-size:inherit}ec-form-control>textarea{resize:none;padding:.3125rem 0}ec-form-control .ec-form-control-icon{margin-top:.4375rem;margin-right:.25rem;order:1}ec-form-control .ec-form-control-icon:not([class*=icon-]){display:none}ec-form-control .icon-required{color:var(--ec-color-caution)}ec-form-control .ec-form-control-clear,ec-form-control .ec-form-control-action{cursor:pointer;flex:none;height:1.875rem;width:2rem;order:3}ec-form-control .ec-form-control-clear:last-of-type,ec-form-control .ec-form-control-action:last-of-type{margin-right:-.5rem}ec-form-control .ec-form-control-clear:hover,ec-form-control .ec-form-control-action:hover{background-color:var(--ec-background-color-hover)}ec-form-control .ec-form-control-clear{width:1.5rem}ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{color:var(--ec-color-secondary-dark);flex:none;cursor:default}ec-form-control .ec-form-control-prefix{margin-right:.125rem;order:2}ec-form-control .ec-form-control-suffix{margin-left:.125rem;order:3}ec-form-control .ec-focus-ring{position:absolute;left:-1px;right:-1px;top:-1px;bottom:-1px;border:.125rem solid var(--ec-border-color-focus);pointer-events:none;display:none;border-radius:var(--ec-border-radius);z-index:1}ec-form-control.is-pending .icon-invalid,ec-form-control.is-pending .icon-required{display:none}ec-form-control.is-invalid{border-color:var(--ec-color-caution);background-color:var(--ec-background-color-caution)}ec-form-control.is-invalid .icon-required{display:none}ec-form-control.is-empty .ec-form-control-clear{display:none}ec-form-control.is-required.is-empty .ec-form-control-icon:first-of-type{display:none}ec-form-control:not(.is-pending) .icon-loading{display:none}ec-form-control:not(.is-required) .icon-required,ec-form-control:not(.is-empty) .icon-required{display:none}ec-form-control:not(.is-invalid) .icon-invalid{display:none}ec-form-control.is-readonly,ec-form-control.is-disabled{background-color:var(--ec-background-color-disabled)}ec-form-control.is-readonly .icon-loading,ec-form-control.is-readonly .icon-invalid,ec-form-control.is-readonly .icon-required,ec-form-control.is-readonly .ec-form-control-clear,ec-form-control.is-disabled .icon-loading,ec-form-control.is-disabled .icon-invalid,ec-form-control.is-disabled .icon-required,ec-form-control.is-disabled .ec-form-control-clear{display:none}ec-form-control.is-readonly{border-color:transparent;color:var(--ec-color-primary-dark)}ec-form-control.is-readonly .ec-form-control-action{display:none}ec-form-control.is-disabled:not(.is-readonly){color:var(--ec-color-disabled-dark);opacity:.6}ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-prefix,ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-suffix{color:inherit}\n"] }]
45
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { formModel: [{
46
+ type: ContentChild,
47
+ args: [FormControlDirective]
48
+ }], id: [{
49
+ type: Input
50
+ }], icon: [{
51
+ type: Input
52
+ }], actionIcon: [{
53
+ type: Input
54
+ }], showClear: [{
55
+ type: Input
56
+ }], pending: [{
57
+ type: Input
58
+ }, {
59
+ type: HostBinding,
60
+ args: ['class.is-pending']
61
+ }], required: [{
62
+ type: Input
63
+ }, {
64
+ type: HostBinding,
65
+ args: ['class.is-required']
66
+ }], readonly: [{
67
+ type: Input
68
+ }, {
69
+ type: HostBinding,
70
+ args: ['class.is-readonly']
71
+ }], empty: [{
72
+ type: HostBinding,
73
+ args: ['class.is-empty']
74
+ }], invalid: [{
75
+ type: HostBinding,
76
+ args: ['class.is-invalid']
77
+ }], disabled: [{
78
+ type: HostBinding,
79
+ args: ['class.is-disabled']
80
+ }], actionClicked: [{
81
+ type: Output
82
+ }], onClick: [{
83
+ type: HostListener,
84
+ args: ['click']
85
+ }] } });
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1jb250cm9sLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9mb3JtLWNvbnRyb2wvZm9ybS1jb250cm9sLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9mb3JtLWNvbnRyb2wvZm9ybS1jb250cm9sLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQTJDLE1BQU0sZUFBZSxDQUFBO0FBQy9MLE9BQU8sRUFBbUIsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBUXZFLE1BQU0sT0FBTyxvQkFBb0I7SUFrQi9CLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBZmxCLE9BQUUsR0FBVyxFQUFFLENBQUM7UUFHdkIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVnQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBTWxELGtCQUFhLEdBQXVCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFM0IsQ0FBQztJQU52QyxJQUFtQyxLQUFLLEtBQWEsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQSxDQUFBLENBQUM7SUFBQSxDQUFDO0lBQ25ILElBQXFDLE9BQU8sS0FBYyxPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUEsQ0FBQSxDQUFDO0lBQUEsQ0FBQztJQUNwSSxJQUFzQyxRQUFRLEtBQWMsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUEsQ0FBQyxDQUFDO0lBQUEsQ0FBQztJQU10RyxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1NBQzlFO0lBQ0gsQ0FBQztJQUdELE9BQU87UUFDTCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsS0FBSztRQUNILE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBNEIsQ0FBQztRQUNoRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQWMseUJBQXlCLENBQUMsQ0FBQztRQUMzRSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUMxQixDQUFDOztpSEF6Q1Usb0JBQW9CO3FHQUFwQixvQkFBb0IsMGpCQUNqQixvQkFBb0IsZ0RDVnBDLHdyQkFPaUM7MkZERXBCLG9CQUFvQjtrQkFOaEMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSTtpR0FHRCxTQUFTO3NCQUE1QyxZQUFZO3VCQUFDLG9CQUFvQjtnQkFFbEIsRUFBRTtzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVvQyxPQUFPO3NCQUFoRCxLQUFLOztzQkFBSSxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDRyxRQUFRO3NCQUFsRCxLQUFLOztzQkFBSSxXQUFXO3VCQUFDLG1CQUFtQjtnQkFDRSxRQUFRO3NCQUFsRCxLQUFLOztzQkFBSSxXQUFXO3VCQUFDLG1CQUFtQjtnQkFFTixLQUFLO3NCQUF2QyxXQUFXO3VCQUFDLGdCQUFnQjtnQkFDUSxPQUFPO3NCQUEzQyxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDTyxRQUFRO3NCQUE3QyxXQUFXO3VCQUFDLG1CQUFtQjtnQkFFdEIsYUFBYTtzQkFBdEIsTUFBTTtnQkFXUCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uLCBDb250ZW50Q2hpbGQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2xEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLWZvcm0tY29udHJvbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tY29udHJvbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1jb250cm9sLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybUNvbnRyb2xDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0e1xyXG4gIEBDb250ZW50Q2hpbGQoRm9ybUNvbnRyb2xEaXJlY3RpdmUpIGZvcm1Nb2RlbD86IEFic3RyYWN0Q29udHJvbDtcclxuICBcclxuICBASW5wdXQoKSBwdWJsaWMgaWQ6IHN0cmluZyA9ICcnO1xyXG4gIEBJbnB1dCgpIGljb24/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYWN0aW9uSWNvbj86IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93Q2xlYXIgPSB0cnVlO1xyXG4gIFxyXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MuaXMtcGVuZGluZycpIHBlbmRpbmcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLXJlcXVpcmVkJykgcmVxdWlyZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLXJlYWRvbmx5JykgcmVhZG9ubHkgPSBmYWxzZTtcclxuICBcclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLWVtcHR5JykgZ2V0IGVtcHR5KCk6Ym9vbGVhbiB7IHJldHVybiAhdGhpcy5mb3JtTW9kZWw/LnZhbHVlICYmIHRoaXMuZm9ybU1vZGVsPy52YWx1ZSAhPT0gMH07XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1pbnZhbGlkJykgZ2V0IGludmFsaWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmZvcm1Nb2RlbD8udG91Y2hlZCA9PSB0cnVlICYmIHRoaXMuZm9ybU1vZGVsLmludmFsaWQgPT0gdHJ1ZX07XHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1kaXNhYmxlZCcpIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuZm9ybU1vZGVsPy5kaXNhYmxlZCA9PSB0cnVlIH07XHJcbiAgXHJcbiAgQE91dHB1dCgpIGFjdGlvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikgeyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICghdGhpcy5mb3JtTW9kZWwpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignTWlzc2luZyBbZm9ybUNvbnRyb2xdIGRpcmVjdGl2ZSBvbiBlYy1mb3JtLWNvbnRyb2wgY29udGVudC4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcclxuICBvbkNsaWNrKCkge1xyXG4gICAgdGhpcy5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXMoKSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IGlucHV0cyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcpO1xyXG4gICAgaWYgKGlucHV0cy5sZW5ndGgpIHtcclxuICAgICAgaW5wdXRzLml0ZW0oMCkuZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyKCkge1xyXG4gICAgdGhpcy5mb3JtTW9kZWw/LnJlc2V0KCk7XHJcbiAgfVxyXG59IiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG48aSBpZD1cInt7aWQgKyAnX2ljb24nfX1cIiBjbGFzcz1cImVjLWZvcm0tY29udHJvbC1pY29uIGVjLWljb24ge3tpY29ufX1cIj48L2k+XHJcbjxpIGlkPVwie3tpZCArICdfbG9hZGluZyd9fVwiIGNsYXNzPVwiZWMtZm9ybS1jb250cm9sLWljb24gZWMtaWNvbiBpY29uLWxvYWRpbmdcIj48L2k+XHJcbjxpIGlkPVwie3tpZCArICdfcmVxdWlyZWQnfX1cIiBjbGFzcz1cImVjLWZvcm0tY29udHJvbC1pY29uIGVjLWljb24gaWNvbi1yZXF1aXJlZFwiPjwvaT5cclxuPGkgaWQ9XCJ7e2lkICsgJ19pbnZhbGlkJ319XCIgY2xhc3M9XCJlYy1mb3JtLWNvbnRyb2wtaWNvbiBlYy1pY29uIGljb24taW52YWxpZFwiPjwvaT5cclxuPGkgaWQ9XCJ7e2lkICsgJ19jbGVhcid9fVwiICpuZ0lmPVwic2hvd0NsZWFyXCIgY2xhc3M9XCJlYy1mb3JtLWNvbnRyb2wtY2xlYXIgZWMtaWNvbiBpY29uLWNhbmNlbFwiIChjbGljayk9XCJjbGVhcigpXCI+PC9pPlxyXG48aSBpZD1cInt7aWQgKyAnX2FjdGlvbid9fVwiICpuZ0lmPVwiYWN0aW9uSWNvblwiIGNsYXNzPVwiZWMtZm9ybS1jb250cm9sLWFjdGlvbiBlYy1pY29uIHt7YWN0aW9uSWNvbn19XCIgKGNsaWNrKT1cImFjdGlvbkNsaWNrZWQuZW1pdCgpXCI+PC9pPlxyXG48ZGl2IGNsYXNzPVwiZWMtZm9jdXMtcmluZ1wiPjwvZGl2PiJdfQ==