@energycap/components 0.42.4-esbuild.20250131-1208 → 0.42.4-esbuild.20250131-1219

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/package.json +7 -11
  2. package/esm2022/energycap-components.mjs +0 -5
  3. package/esm2022/lib/components.module.mjs +0 -423
  4. package/esm2022/lib/controls/banner/banner.component.mjs +0 -109
  5. package/esm2022/lib/controls/button/button.component.mjs +0 -106
  6. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
  7. package/esm2022/lib/controls/button/copy-button.directive.mjs +0 -28
  8. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
  9. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -91
  10. package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -248
  11. package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -2
  12. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
  13. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +0 -38
  14. package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
  15. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  16. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  17. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  18. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  19. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  20. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  21. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  22. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  23. package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -464
  24. package/esm2022/lib/controls/date-input/date-input.types.mjs +0 -44
  25. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
  26. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
  27. package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -98
  28. package/esm2022/lib/controls/form-control-base.mjs +0 -151
  29. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  30. package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
  31. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +0 -31
  32. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
  33. package/esm2022/lib/controls/link-button/link-button.component.mjs +0 -11
  34. package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
  35. package/esm2022/lib/controls/navigation/link-item.mjs +0 -2
  36. package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
  37. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  38. package/esm2022/lib/controls/navigation/nav-item.mjs +0 -2
  39. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
  40. package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
  41. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +0 -3
  42. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
  43. package/esm2022/lib/controls/select/select.component.mjs +0 -88
  44. package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
  45. package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
  46. package/esm2022/lib/core/cache.service.mjs +0 -105
  47. package/esm2022/lib/core/custom-validators.mjs +0 -29
  48. package/esm2022/lib/core/date-time-helper.mjs +0 -228
  49. package/esm2022/lib/core/error.service.mjs +0 -61
  50. package/esm2022/lib/core/router-helper.service.mjs +0 -111
  51. package/esm2022/lib/core/scroll.service.mjs +0 -89
  52. package/esm2022/lib/core/telemetry-tracker.service.mjs +0 -16
  53. package/esm2022/lib/core/telemetry.service.mjs +0 -38
  54. package/esm2022/lib/core/validation-message.service.mjs +0 -185
  55. package/esm2022/lib/core/validation-patterns.mjs +0 -31
  56. package/esm2022/lib/core/window.service.mjs +0 -186
  57. package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -46
  58. package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
  59. package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
  60. package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
  61. package/esm2022/lib/display/dialog/dialog-content.mjs +0 -2
  62. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  63. package/esm2022/lib/display/dialog/dialog-types.mjs +0 -77
  64. package/esm2022/lib/display/dialog/dialog.component.mjs +0 -281
  65. package/esm2022/lib/display/dialog/dialog.service.mjs +0 -71
  66. package/esm2022/lib/display/help/help-types.mjs +0 -2
  67. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  68. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +0 -54
  69. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -61
  70. package/esm2022/lib/display/item-display/item-display.component.mjs +0 -81
  71. package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
  72. package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
  73. package/esm2022/lib/display/resizable/resizable.component.mjs +0 -57
  74. package/esm2022/lib/display/spinner/spinner.component.mjs +0 -12
  75. package/esm2022/lib/display/splash/splash.component.mjs +0 -42
  76. package/esm2022/lib/display/splash/splash.service.mjs +0 -35
  77. package/esm2022/lib/display/table/resizable-column.component.mjs +0 -20
  78. package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
  79. package/esm2022/lib/display/table/searchable-table.component.mjs +0 -342
  80. package/esm2022/lib/display/table/table-detail-row.component.mjs +0 -28
  81. package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
  82. package/esm2022/lib/display/table/table-master-header-row.component.mjs +0 -14
  83. package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
  84. package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
  85. package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
  86. package/esm2022/lib/display/table/table.component.mjs +0 -249
  87. package/esm2022/lib/display/tags/tag.mjs +0 -18
  88. package/esm2022/lib/display/tags/tags.component.mjs +0 -77
  89. package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
  90. package/esm2022/lib/display/toast/toast-types.mjs +0 -8
  91. package/esm2022/lib/display/toast/toast.service.mjs +0 -35
  92. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
  93. package/esm2022/lib/display/tooltip/tooltip.component.mjs +0 -28
  94. package/esm2022/lib/display/tooltip/tooltip.service.mjs +0 -78
  95. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  96. package/esm2022/lib/display/tour/tour-types.mjs +0 -34
  97. package/esm2022/lib/display/tour/tour.component.mjs +0 -398
  98. package/esm2022/lib/display/tour/tour.service.mjs +0 -75
  99. package/esm2022/lib/display/tree/tree.component.mjs +0 -135
  100. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  101. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  102. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  103. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -100
  104. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
  105. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -50
  106. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  107. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  108. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  109. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  110. package/esm2022/lib/shared/display.mjs +0 -6
  111. package/esm2022/lib/shared/form-group.helper.mjs +0 -67
  112. package/esm2022/lib/shared/json-helper.mjs +0 -19
  113. package/esm2022/lib/shared/lodash-helper.mjs +0 -52
  114. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
  115. package/esm2022/lib/shared/page/page-statuses.mjs +0 -23
  116. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +0 -23
  117. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
  118. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +0 -17
  119. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +0 -17
  120. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +0 -38
  121. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  122. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +0 -148
  123. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +0 -40
  124. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +0 -57
  125. package/esm2022/lib/shared/user-preference.service.mjs +0 -17
  126. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  127. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +0 -68
  128. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +0 -18
  129. package/esm2022/public-api.mjs +0 -117
  130. package/fesm2022/energycap-components.mjs +0 -13219
  131. package/fesm2022/energycap-components.mjs.map +0 -1
  132. package/index.d.ts +0 -5
  133. package/lib/components.module.d.ts +0 -92
  134. package/lib/controls/banner/banner.component.d.ts +0 -50
  135. package/lib/controls/button/button.component.d.ts +0 -78
  136. package/lib/controls/button/copy-button-base.directive.d.ts +0 -20
  137. package/lib/controls/button/copy-button.directive.d.ts +0 -14
  138. package/lib/controls/button/copy-table-button.directive.d.ts +0 -19
  139. package/lib/controls/calendar/calendar-item.component.d.ts +0 -22
  140. package/lib/controls/calendar/calendar.component.d.ts +0 -52
  141. package/lib/controls/calendar/calendar.types.d.ts +0 -11
  142. package/lib/controls/checkbox/checkbox.component.d.ts +0 -65
  143. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +0 -25
  144. package/lib/controls/combobox/combobox.component.d.ts +0 -418
  145. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +0 -42
  146. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +0 -21
  147. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +0 -21
  148. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +0 -21
  149. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +0 -18
  150. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +0 -18
  151. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +0 -21
  152. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +0 -20
  153. package/lib/controls/date-input/date-input.component.d.ts +0 -115
  154. package/lib/controls/date-input/date-input.types.d.ts +0 -62
  155. package/lib/controls/dropdown/dropdown.component.d.ts +0 -161
  156. package/lib/controls/file-upload/file-upload.component.d.ts +0 -124
  157. package/lib/controls/form-control/form-control.component.d.ts +0 -28
  158. package/lib/controls/form-control-base.d.ts +0 -110
  159. package/lib/controls/form-control-label/form-control-label.component.d.ts +0 -73
  160. package/lib/controls/form-group/form-group.component.d.ts +0 -105
  161. package/lib/controls/help-popover/help-popover.component.d.ts +0 -11
  162. package/lib/controls/item-picker/item-picker.component.d.ts +0 -164
  163. package/lib/controls/link-button/link-button.component.d.ts +0 -5
  164. package/lib/controls/menu/menu.component.d.ts +0 -255
  165. package/lib/controls/navigation/link-item.d.ts +0 -32
  166. package/lib/controls/navigation/nav-group.d.ts +0 -18
  167. package/lib/controls/navigation/nav-item-active.directive.d.ts +0 -42
  168. package/lib/controls/navigation/nav-item.d.ts +0 -31
  169. package/lib/controls/numericbox/numericbox.component.d.ts +0 -148
  170. package/lib/controls/popover/popover.component.d.ts +0 -51
  171. package/lib/controls/radio-button/radio-button-option.d.ts +0 -19
  172. package/lib/controls/radio-button/radio-button.component.d.ts +0 -53
  173. package/lib/controls/select/select.component.d.ts +0 -44
  174. package/lib/controls/tabs/tabs.component.d.ts +0 -30
  175. package/lib/controls/textbox/textbox.component.d.ts +0 -107
  176. package/lib/core/cache.service.d.ts +0 -33
  177. package/lib/core/custom-validators.d.ts +0 -20
  178. package/lib/core/date-time-helper.d.ts +0 -101
  179. package/lib/core/error.service.d.ts +0 -20
  180. package/lib/core/router-helper.service.d.ts +0 -48
  181. package/lib/core/scroll.service.d.ts +0 -36
  182. package/lib/core/telemetry-tracker.service.d.ts +0 -13
  183. package/lib/core/telemetry.service.d.ts +0 -31
  184. package/lib/core/validation-message.service.d.ts +0 -26
  185. package/lib/core/validation-patterns.d.ts +0 -22
  186. package/lib/core/window.service.d.ts +0 -116
  187. package/lib/display/app-bar/app-bar.component.d.ts +0 -20
  188. package/lib/display/avatar/avatar.component.d.ts +0 -35
  189. package/lib/display/avatar/avatar.service.d.ts +0 -24
  190. package/lib/display/confirm/confirm.component.d.ts +0 -123
  191. package/lib/display/dialog/dialog-content.d.ts +0 -19
  192. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +0 -32
  193. package/lib/display/dialog/dialog-types.d.ts +0 -130
  194. package/lib/display/dialog/dialog.component.d.ts +0 -120
  195. package/lib/display/dialog/dialog.service.d.ts +0 -48
  196. package/lib/display/help/help-types.d.ts +0 -33
  197. package/lib/display/hierarchy/hierarchy-base.d.ts +0 -97
  198. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +0 -53
  199. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +0 -34
  200. package/lib/display/item-display/item-display.component.d.ts +0 -43
  201. package/lib/display/json-display/json-display.component.d.ts +0 -16
  202. package/lib/display/resizable/resizable-base.d.ts +0 -67
  203. package/lib/display/resizable/resizable.component.d.ts +0 -31
  204. package/lib/display/spinner/spinner.component.d.ts +0 -5
  205. package/lib/display/splash/splash.component.d.ts +0 -16
  206. package/lib/display/splash/splash.service.d.ts +0 -22
  207. package/lib/display/table/resizable-column.component.d.ts +0 -10
  208. package/lib/display/table/resizable-table.directive.d.ts +0 -93
  209. package/lib/display/table/searchable-table.component.d.ts +0 -206
  210. package/lib/display/table/table-detail-row.component.d.ts +0 -8
  211. package/lib/display/table/table-locked-column.component.d.ts +0 -20
  212. package/lib/display/table/table-master-header-row.component.d.ts +0 -9
  213. package/lib/display/table/table-master-row.component.d.ts +0 -113
  214. package/lib/display/table/table-pagination.component.d.ts +0 -91
  215. package/lib/display/table/table-selectable-row.component.d.ts +0 -102
  216. package/lib/display/table/table.component.d.ts +0 -121
  217. package/lib/display/tags/tag.d.ts +0 -18
  218. package/lib/display/tags/tags.component.d.ts +0 -48
  219. package/lib/display/toast/toast/toast.component.d.ts +0 -23
  220. package/lib/display/toast/toast-types.d.ts +0 -24
  221. package/lib/display/toast/toast.service.d.ts +0 -20
  222. package/lib/display/toast/toaster/toaster.component.d.ts +0 -35
  223. package/lib/display/tooltip/tooltip.component.d.ts +0 -70
  224. package/lib/display/tooltip/tooltip.service.d.ts +0 -16
  225. package/lib/display/tooltip-directive/tooltip.directive.d.ts +0 -44
  226. package/lib/display/tour/tour-types.d.ts +0 -70
  227. package/lib/display/tour/tour.component.d.ts +0 -147
  228. package/lib/display/tour/tour.service.d.ts +0 -38
  229. package/lib/display/tree/tree.component.d.ts +0 -75
  230. package/lib/display/view-overlay/view-overlay.component.d.ts +0 -38
  231. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +0 -14
  232. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +0 -60
  233. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +0 -23
  234. package/lib/shared/directives/popup/popup-container.directive.d.ts +0 -101
  235. package/lib/shared/display/pipes/date-display.pipe.d.ts +0 -21
  236. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +0 -9
  237. package/lib/shared/display/pipes/relative-date.pipe.d.ts +0 -36
  238. package/lib/shared/display/pipes/row-count.pipe.d.ts +0 -23
  239. package/lib/shared/display/pipes/time-display.pipe.d.ts +0 -18
  240. package/lib/shared/display.d.ts +0 -42
  241. package/lib/shared/form-group.helper.d.ts +0 -31
  242. package/lib/shared/json-helper.d.ts +0 -7
  243. package/lib/shared/lodash-helper.d.ts +0 -18
  244. package/lib/shared/page/page-base/page-base.component.d.ts +0 -259
  245. package/lib/shared/page/page-statuses.d.ts +0 -13
  246. package/lib/shared/page/page-title/page-title.component.d.ts +0 -9
  247. package/lib/shared/page/page-view/page-view.component.d.ts +0 -102
  248. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +0 -4
  249. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +0 -4
  250. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +0 -30
  251. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +0 -28
  252. package/lib/shared/testing/public-mocks.spec.d.ts +0 -90
  253. package/lib/shared/testing/spy-factory.spec.d.ts +0 -27
  254. package/lib/shared/testing/translation-mocks.spec.d.ts +0 -30
  255. package/lib/shared/user-preference.service.d.ts +0 -13
  256. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +0 -134
  257. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +0 -27
  258. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +0 -10
  259. package/public-api.d.ts +0 -113
  260. package/schematics/collection.json +0 -10
  261. package/schematics/rxjs-7-upgrade/index.d.ts +0 -3
  262. package/schematics/rxjs-7-upgrade/index.js +0 -68
  263. package/schematics/rxjs-7-upgrade/index.js.map +0 -1
  264. package/schematics/rxjs-7-upgrade/schema.d.ts +0 -4
  265. package/schematics/rxjs-7-upgrade/schema.js +0 -3
  266. package/schematics/rxjs-7-upgrade/schema.js.map +0 -1
  267. package/schematics/rxjs-7-upgrade/schema.json +0 -14
  268. package/schematics/utilities/typescript.d.ts +0 -7
  269. package/schematics/utilities/typescript.js +0 -42
  270. package/schematics/utilities/typescript.js.map +0 -1
  271. package/schematics/utilities/workspace.d.ts +0 -8
  272. package/schematics/utilities/workspace.js +0 -72
  273. package/schematics/utilities/workspace.js.map +0 -1
  274. package/src/assets/images/email-icon.png +0 -0
  275. package/src/assets/images/email-logo.png +0 -0
  276. package/src/assets/images/favicon-ech.svg +0 -7
  277. package/src/assets/images/favicon-esa.svg +0 -6
  278. package/src/assets/images/favicon-eum.svg +0 -6
  279. package/src/assets/images/favicon.svg +0 -5
  280. package/src/assets/images/icon-carbonhub.svg +0 -10
  281. package/src/assets/images/icon-eum.svg +0 -5
  282. package/src/assets/images/icon-ucp.svg +0 -5
  283. package/src/assets/images/icon-wattics.svg +0 -5
  284. package/src/assets/images/icon.svg +0 -4
  285. package/src/assets/images/logo.svg +0 -3
  286. package/src/assets/images/splash.gif +0 -0
  287. package/src/assets/locales/en_US.json +0 -59
  288. package/src/assets/scripts/unsupported-browser.js +0 -17
  289. package/src/styles/_base.scss +0 -38
  290. package/src/styles/_colors.scss +0 -96
  291. package/src/styles/_core.scss +0 -4
  292. package/src/styles/_functions.scss +0 -114
  293. package/src/styles/_global-variables.scss +0 -232
  294. package/src/styles/_icons.scss +0 -24
  295. package/src/styles/bootstrap/_grid.scss +0 -34
  296. package/src/styles/bootstrap/_reboot.scss +0 -323
  297. package/src/styles/components/_card.scss +0 -21
  298. package/src/styles/components/_link-icons.scss +0 -38
  299. package/src/styles/components/_splash.scss +0 -57
  300. package/src/styles/components/_unsupported-browsers.scss +0 -24
  301. package/src/styles/email/_email-base.scss +0 -228
  302. package/src/styles/email/email.scss +0 -43
  303. package/src/styles/index.scss +0 -27
  304. package/src/styles/mixins/_animations.scss +0 -18
  305. package/src/styles/mixins/_button-base.scss +0 -185
  306. package/src/styles/mixins/_card-base.scss +0 -40
  307. package/src/styles/mixins/_common.scss +0 -52
  308. package/src/styles/mixins/_dialog-base.scss +0 -96
  309. package/src/styles/mixins/_form-control-base.scss +0 -641
  310. package/src/styles/mixins/_login.scss +0 -74
  311. package/src/styles/mixins/_menu-base.scss +0 -153
  312. package/src/styles/mixins/_overlay-base.scss +0 -33
  313. package/src/styles/mixins/_resizable-base.scss +0 -57
  314. package/src/styles/mixins/_spinner-base.scss +0 -34
  315. package/src/styles/mixins/_table-base.scss +0 -298
  316. package/src/styles/mixins/_tabs-base.scss +0 -110
  317. package/src/styles/mixins/_tags-base.scss +0 -116
  318. package/src/styles/mixins/_text.scss +0 -89
  319. package/src/styles/mixins.scss +0 -15
  320. package/src/styles/utilities/_borders.scss +0 -30
  321. package/src/styles/utilities/_common.scss +0 -49
  322. package/src/styles/utilities/_layout.scss +0 -116
  323. package/src/styles/utilities/_spacing.scss +0 -65
  324. package/src/styles/utilities/_text.scss +0 -139
@@ -1,235 +0,0 @@
1
- import { Component, HostBinding, HostListener, Input } from '@angular/core';
2
- import { UntypedFormArray, UntypedFormControl } from '@angular/forms';
3
- import { Subject } from 'rxjs';
4
- import { debounceTime, takeUntil } from 'rxjs/operators';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common";
7
- import * as i2 from "../../controls/checkbox/checkbox.component";
8
- import * as i3 from "./table-locked-column.component";
9
- export class TableSelectableRowContext {
10
- constructor() {
11
- /**specify the form control to use for the selectAll checkbox or provide your own.
12
- * This can be useful if you want to subscribe to changes to change button states as the selection changes
13
- * or if you want to add it to an already-existing form group
14
- */
15
- this.selectAllCheckbox = new UntypedFormControl(false);
16
- /**specify the FormArray to use for the dependent checkboxes of the selectAll checkbox
17
- * The dependent checkboxes will add and remove themselves automatically and the selectAll
18
- * box will react accordingly. Do not provide your own controls
19
- * This can be useful if you want to subscribe to changes to change button states as the selection changes
20
- * or if you want to add it to an already-existing form group
21
- */
22
- this.rowCheckboxes = new UntypedFormArray([]);
23
- /**The index of the last row the user clicked. This allows multiple directives on a screen to coordinate
24
- * for reacting to shift+click actions that should automatically select multiple rows between the clicked rows
25
- * defaults to -1 to indicate that no user click has been captured
26
- */
27
- this.lastClickedIndex = -1;
28
- /**A subject that is triggered when a row-based directive is added or removed. It allows
29
- * the master checkbox in the header to know that it needs to reset tracking information
30
- * without replacing the actual FormArray that the hosting component may be subscribed to for changes
31
- */
32
- this.rowAddedOrRemoved = new Subject();
33
- /**
34
- * Set to true to disable Shift-Click/Ctrl-Click functionality
35
- */
36
- this.disableAdvancedRowClickBehavior = false;
37
- /**
38
- * Set to list of indices of controls that should not toggle when master/header checkbox toggles
39
- */
40
- this.nonDependentCheckboxes = [];
41
- }
42
- }
43
- export class TableSelectableRowComponent {
44
- constructor() {
45
- /**The ID root to use for the checkbox and table cell */
46
- this.id = '';
47
- this._selectionEnabled = true;
48
- /*Required for all rows. The row index this component represents, to allow it to know how to handle shift+clicks.
49
- Defaults to -1 which will cause the directive to behave as a header row*/
50
- this.rowIndex = -1;
51
- /**The options used to lock the checkbox column to the left of the table, must be modified by host
52
- * if the checkbox is not the first column in the table
53
- */
54
- this.lockedColOptions = { border: false, left: 0 };
55
- /** Automatically set to true based on checkbox state, used to highlight the row to match our table selected row styles */
56
- this.isSelected = false;
57
- /** Automatically set to true if no rowIndex is provided or the row index is less than zero */
58
- this.isHeader = false;
59
- /**
60
- * Set to true if you want the checkbox to be disabled.
61
- *
62
- * When you use this property, make sure you set `disableAdvancedRowClickBehavior: true`
63
- * in the `TableSelectableRowContext`, or undesired side-effects will occur.
64
- */
65
- this.isCheckboxDisabled = false;
66
- /* A reference that we can change when a control is replaced to force the master checkbox reference to update
67
- without also replacing the form array that the host component may be watching for selected row changes */
68
- this.dependentCheckboxesReference = { controls: [] };
69
- this.checkboxAttributeID = '';
70
- /**Sends an event when the component is destroyed so that it can unsubscribe from any observables */
71
- this.destroyed = new Subject();
72
- }
73
- /** Disables the selection functionality when false */
74
- set isSelectionEnabled(value) { this._selectionEnabled = value !== false; }
75
- get isSelectionEnabled() { return this._selectionEnabled; }
76
- /**Validate and populate the context as the table is dynamically built. Because the context is shared between the
77
- * header and each of the rows, changes to it can be used to determine what is happening and hook up the correct
78
- * subscriptions for selectAll. The user can provide an existing formArray for the rows and form control for the header,
79
- * or it can just be the default empty ones created by the context class.
80
- */
81
- ngOnInit() {
82
- this.isHeader = this.rowIndex < 0;
83
- if (!this.context) {
84
- console.error('ecTableSelectableRow requires a defined SelectableTableRowContext to be shared with all instances in one table.');
85
- }
86
- else {
87
- let rowCheckbox = this.context?.rowCheckboxes?.at(this.rowIndex);
88
- if (!this.isHeader && !rowCheckbox) {
89
- rowCheckbox = new UntypedFormControl(this.isSelected);
90
- this.context?.rowCheckboxes.push(rowCheckbox);
91
- }
92
- this.formControl = this.isHeader ? this.context.selectAllCheckbox : rowCheckbox;
93
- this.watchForChanges();
94
- }
95
- }
96
- /**Watch for changes to the row index that can occur if the table is reordered in-place instead of
97
- * recreated from scratch. Re-capture the correct form control to keep everything in sync
98
- */
99
- ngOnChanges(changes) {
100
- if (changes.rowIndex && !this.isHeader) {
101
- this.formControl = this.context.rowCheckboxes.at(this.rowIndex);
102
- this.checkboxAttributeID = `${this.id}_row${this.rowIndex}_ecCheckbox`;
103
- }
104
- if (changes.isSelectionEnabled && !this.isSelectionEnabled && this.formControl?.value === true) {
105
- this.formControl.setValue(false);
106
- }
107
- if (changes.isSelected && this.formControl) {
108
- this.formControl.setValue(this.isSelected);
109
- }
110
- }
111
- /** Tell the header checkbox to refresh the selectAll subscription because a row was removed*/
112
- ngOnDestroy() {
113
- if (!this.isHeader && this.formControl) {
114
- this.context.rowAddedOrRemoved.next();
115
- //find the location in the array that matches the checkbox. If many rows are being removed it may not match rowIndex yet
116
- let matchIndex = this.context.rowCheckboxes.controls.findIndex(c => c == this.formControl);
117
- if (matchIndex >= 0) {
118
- this.context.rowCheckboxes.removeAt(matchIndex);
119
- }
120
- }
121
- }
122
- /**Handle when a user clicks on a table row (or something inside it which bubbles up) to increase the hit area for row selection
123
- * Only work on the table body (not the header) because the header may have other click handlers for sort etc that we don't care about.
124
- * Handle shift and control select as well as checkbox click like windows explorer or the original bill lists do.
125
- */
126
- rowClicked(event) {
127
- if (!this.isHeader && this.isSelectionEnabled && !this.isCheckboxDisabled) {
128
- let targetEl = event?.target;
129
- //clicking on a row always toggles that row. Sometimes the shift-select will toggle it back
130
- this.formControl.setValue(!this.formControl.value);
131
- if (!this.context.disableAdvancedRowClickBehavior) {
132
- this.handleShiftSelect(event);
133
- }
134
- }
135
- }
136
- watchForChanges() {
137
- //watch for rows being replaced so that the master checkbox and shift-select support can be reset to match
138
- //this keeps the master in sync as the table changes pages etc and stops unexpected rows from being selected after redraw
139
- if (this.isHeader) {
140
- this.context.rowAddedOrRemoved.pipe(debounceTime(10), takeUntil(this.destroyed)).subscribe(() => {
141
- this.context.lastClickedIndex = -1;
142
- // exclude nonDependentCheckboxes (some may not be allowed to be deselected)
143
- let dependentCheckboxes = [];
144
- this.context.rowCheckboxes.controls.forEach((control, index) => {
145
- if (!this.context.nonDependentCheckboxes.includes(index)) {
146
- dependentCheckboxes.push(control);
147
- }
148
- });
149
- this.dependentCheckboxesReference = { controls: dependentCheckboxes };
150
- });
151
- }
152
- else {
153
- this.context.rowAddedOrRemoved.next();
154
- //watch for the checkbox state to change on a child row and set the row isSelected class / highlight to match
155
- //this way the rows match even if external code updates the form model
156
- this.formControl?.valueChanges.pipe(takeUntil(this.destroyed)).subscribe((value) => {
157
- this.isSelected = value;
158
- });
159
- }
160
- }
161
- /**
162
- * If they are holding the shift key, try to select all the checkboxes between their last selection
163
- * and most recent selection. The logic is setup to behave the way windows explorer behaves
164
- * We don't allow drag-to-select like the kendo tables, but it means users can highlight text and copy+paste to excel etc
165
- * so I think this is actually preferable
166
- */
167
- handleShiftSelect(event) {
168
- let lastIndex = this.context.lastClickedIndex;
169
- let curIndex = this.rowIndex;
170
- if (event.shiftKey && lastIndex >= 0) {
171
- this.clearAllRows();
172
- if (curIndex > lastIndex) {
173
- for (var index = lastIndex; index <= curIndex; index++) {
174
- this.context.rowCheckboxes.at(index).setValue(true);
175
- }
176
- }
177
- else if (curIndex < lastIndex) {
178
- for (var index = lastIndex; index >= curIndex; index--) {
179
- this.context.rowCheckboxes.at(index).setValue(true);
180
- }
181
- }
182
- else if (curIndex === lastIndex) {
183
- this.formControl.setValue(true);
184
- }
185
- document.getSelection()?.removeAllRanges();
186
- }
187
- else {
188
- //record the current row index for future row clicks to know where they last interacted
189
- //but only if they don't have shift down for this click. If shift is down then the next shift+click
190
- //should be considered an extension (or contraction) of the original multi-row selection
191
- this.context.lastClickedIndex = this.rowIndex;
192
- }
193
- }
194
- clearAllRows() {
195
- this.context.rowCheckboxes.controls.forEach(control => control.setValue(false));
196
- }
197
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableSelectableRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
198
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableSelectableRowComponent, selector: "[ecTableSelectableRow]", inputs: { id: "id", isSelectionEnabled: ["ecTableSelectableRow", "isSelectionEnabled"], context: ["selectionContext", "context"], rowIndex: "rowIndex", lockedColOptions: "lockedColOptions", isSelected: "isSelected", isCheckboxDisabled: "isCheckboxDisabled" }, host: { listeners: { "click": "rowClicked($event)" }, properties: { "attr.id": "this.id", "class.is-enabled": "this.isSelectionEnabled", "class.is-selected": "this.isSelected", "class.is-header": "this.isHeader" } }, usesOnChanges: true, ngImport: i0, template: "<!-- any elements of the existing table row that must go before the row selection checkbox can be marked with a class of before-checkbox -->\r\n<ng-content select=\".before-checkbox\"></ng-content>\r\n<ng-container *ngIf=\"isSelectionEnabled\">\r\n <th *ngIf=\"isHeader\"\r\n class=\"checkbox\"\r\n [ecTableLockedColumn]=\"lockedColOptions\">\r\n <ec-checkbox id=\"{{id}}_selectAll\"\r\n class=\"m-0\"\r\n *ngIf=\"context?.selectAllCheckbox\"\r\n [formModel]=\"context?.selectAllCheckbox\"\r\n [dependentCheckboxesGroup]=\"dependentCheckboxesReference\"\r\n [ignoreDisabledDependents]=\"false\">\r\n </ec-checkbox>\r\n </th>\r\n <td *ngIf=\"!isHeader && formControl\"\r\n class=\"checkbox\"\r\n [ecTableLockedColumn]=\"lockedColOptions\">\r\n <!-- Use [readonly] and not [disabled] for isCheckboxDisabled to prevent user interaction\r\n and allow the value to be visible to other components (for example, when they subscribe\r\n to valueChanges on the FormArray that contains all the checkbox FormControls). -->\r\n <ec-checkbox id=\"{{id}}_row{{rowIndex}}_checkbox\"\r\n [readonly]=\"isCheckboxDisabled\"\r\n [attr.id]=\"checkboxAttributeID\"\r\n class=\"m-0 row-checkbox\"\r\n [formModel]=\"formControl\">\r\n </ec-checkbox>\r\n </td>\r\n</ng-container>\r\n<!-- The rest of the table row -->\r\n<ng-content></ng-content>", styles: [":host.is-enabled:not(.is-header){cursor:pointer}:host .checkbox{padding-left:2px;padding-right:2px;width:1.25rem}:host .checkbox:first-child{padding-left:.5rem;width:1.625rem}:host.border-bottom-0 .checkbox{border-bottom:0}td.checkbox ec-checkbox ::ng-deep *{pointer-events:none}th.checkbox{vertical-align:var(--ec-table-selectable-row-vertical-align-checkbox-th, middle)}td.checkbox{vertical-align:var(--ec-table-selectable-row-vertical-align-checkbox-td, top)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CheckboxComponent, selector: "ec-checkbox", inputs: ["name", "dependentCheckboxesGroup", "ignoreDisabledDependents"] }, { kind: "component", type: i3.TableLockedColumnComponent, selector: "[ecTableLockedColumn]", inputs: ["ecTableLockedColumn"] }] }); }
199
- }
200
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableSelectableRowComponent, decorators: [{
201
- type: Component,
202
- args: [{ selector: '[ecTableSelectableRow]', template: "<!-- any elements of the existing table row that must go before the row selection checkbox can be marked with a class of before-checkbox -->\r\n<ng-content select=\".before-checkbox\"></ng-content>\r\n<ng-container *ngIf=\"isSelectionEnabled\">\r\n <th *ngIf=\"isHeader\"\r\n class=\"checkbox\"\r\n [ecTableLockedColumn]=\"lockedColOptions\">\r\n <ec-checkbox id=\"{{id}}_selectAll\"\r\n class=\"m-0\"\r\n *ngIf=\"context?.selectAllCheckbox\"\r\n [formModel]=\"context?.selectAllCheckbox\"\r\n [dependentCheckboxesGroup]=\"dependentCheckboxesReference\"\r\n [ignoreDisabledDependents]=\"false\">\r\n </ec-checkbox>\r\n </th>\r\n <td *ngIf=\"!isHeader && formControl\"\r\n class=\"checkbox\"\r\n [ecTableLockedColumn]=\"lockedColOptions\">\r\n <!-- Use [readonly] and not [disabled] for isCheckboxDisabled to prevent user interaction\r\n and allow the value to be visible to other components (for example, when they subscribe\r\n to valueChanges on the FormArray that contains all the checkbox FormControls). -->\r\n <ec-checkbox id=\"{{id}}_row{{rowIndex}}_checkbox\"\r\n [readonly]=\"isCheckboxDisabled\"\r\n [attr.id]=\"checkboxAttributeID\"\r\n class=\"m-0 row-checkbox\"\r\n [formModel]=\"formControl\">\r\n </ec-checkbox>\r\n </td>\r\n</ng-container>\r\n<!-- The rest of the table row -->\r\n<ng-content></ng-content>", styles: [":host.is-enabled:not(.is-header){cursor:pointer}:host .checkbox{padding-left:2px;padding-right:2px;width:1.25rem}:host .checkbox:first-child{padding-left:.5rem;width:1.625rem}:host.border-bottom-0 .checkbox{border-bottom:0}td.checkbox ec-checkbox ::ng-deep *{pointer-events:none}th.checkbox{vertical-align:var(--ec-table-selectable-row-vertical-align-checkbox-th, middle)}td.checkbox{vertical-align:var(--ec-table-selectable-row-vertical-align-checkbox-td, top)}\n"] }]
203
- }], propDecorators: { id: [{
204
- type: HostBinding,
205
- args: ['attr.id']
206
- }, {
207
- type: Input
208
- }], isSelectionEnabled: [{
209
- type: HostBinding,
210
- args: ['class.is-enabled']
211
- }, {
212
- type: Input,
213
- args: ['ecTableSelectableRow']
214
- }], context: [{
215
- type: Input,
216
- args: ['selectionContext']
217
- }], rowIndex: [{
218
- type: Input
219
- }], lockedColOptions: [{
220
- type: Input
221
- }], isSelected: [{
222
- type: HostBinding,
223
- args: ['class.is-selected']
224
- }, {
225
- type: Input
226
- }], isHeader: [{
227
- type: HostBinding,
228
- args: ['class.is-header']
229
- }], isCheckboxDisabled: [{
230
- type: Input
231
- }], rowClicked: [{
232
- type: HostListener,
233
- args: ['click', ['$event']]
234
- }] } });
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBK0MsTUFBTSxlQUFlLENBQUM7QUFDekgsT0FBTyxFQUFtQixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFFekQsTUFBTSxPQUFPLHlCQUF5QjtJQUF0QztRQUNFOzs7V0FHRztRQUNJLHNCQUFpQixHQUFvQixJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFFOzs7OztXQUtHO1FBQ0ksa0JBQWEsR0FBcUIsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVsRTs7O1dBR0c7UUFDSSxxQkFBZ0IsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUVyQzs7O1dBR0c7UUFDSSxzQkFBaUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUV4RDs7V0FFRztRQUNJLG9DQUErQixHQUFZLEtBQUssQ0FBQztRQUV4RDs7V0FFRztRQUNJLDJCQUFzQixHQUFhLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0NBQUE7QUFPRCxNQUFNLE9BQU8sMkJBQTJCO0lBTHhD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QUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDOytHQWpNVSwyQkFBMkI7bUdBQTNCLDJCQUEyQixnakJDaER4QyxtL0NBNkJ5Qjs7NEZEbUJaLDJCQUEyQjtrQkFMdkMsU0FBUzsrQkFDRSx3QkFBd0I7OEJBUTNCLEVBQUU7c0JBRlIsV0FBVzt1QkFBQyxTQUFTOztzQkFDckIsS0FBSztnQkFNSyxrQkFBa0I7c0JBRjVCLFdBQVc7dUJBQUMsa0JBQWtCOztzQkFDOUIsS0FBSzt1QkFBQyxzQkFBc0I7Z0JBUXRCLE9BQU87c0JBRGIsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBTWxCLFFBQVE7c0JBRGQsS0FBSztnQkFPQyxnQkFBZ0I7c0JBRHRCLEtBQUs7Z0JBTUMsVUFBVTtzQkFGaEIsV0FBVzt1QkFBQyxtQkFBbUI7O3NCQUMvQixLQUFLO2dCQUtDLFFBQVE7c0JBRGQsV0FBVzt1QkFBQyxpQkFBaUI7Z0JBVXZCLGtCQUFrQjtzQkFEeEIsS0FBSztnQkF5RUMsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQge1xyXG4gIC8qKnNwZWNpZnkgdGhlIGZvcm0gY29udHJvbCB0byB1c2UgZm9yIHRoZSBzZWxlY3RBbGwgY2hlY2tib3ggb3IgcHJvdmlkZSB5b3VyIG93bi5cclxuICAgKiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc3Vic2NyaWJlIHRvIGNoYW5nZXMgdG8gY2hhbmdlIGJ1dHRvbiBzdGF0ZXMgYXMgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzXHJcbiAgICogb3IgaWYgeW91IHdhbnQgdG8gYWRkIGl0IHRvIGFuIGFscmVhZHktZXhpc3RpbmcgZm9ybSBncm91cFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveDogQWJzdHJhY3RDb250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChmYWxzZSk7XHJcblxyXG4gIC8qKnNwZWNpZnkgdGhlIEZvcm1BcnJheSB0byB1c2UgZm9yIHRoZSBkZXBlbmRlbnQgY2hlY2tib3hlcyBvZiB0aGUgc2VsZWN0QWxsIGNoZWNrYm94XHJcbiAgICogVGhlIGRlcGVuZGVudCBjaGVja2JveGVzIHdpbGwgYWRkIGFuZCByZW1vdmUgdGhlbXNlbHZlcyBhdXRvbWF0aWNhbGx5IGFuZCB0aGUgc2VsZWN0QWxsXHJcbiAgICogYm94IHdpbGwgcmVhY3QgYWNjb3JkaW5nbHkuIERvIG5vdCBwcm92aWRlIHlvdXIgb3duIGNvbnRyb2xzXHJcbiAgICogVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIHN1YnNjcmliZSB0byBjaGFuZ2VzIHRvIGNoYW5nZSBidXR0b24gc3RhdGVzIGFzIHRoZSBzZWxlY3Rpb24gY2hhbmdlc1xyXG4gICAqIG9yIGlmIHlvdSB3YW50IHRvIGFkZCBpdCB0byBhbiBhbHJlYWR5LWV4aXN0aW5nIGZvcm0gZ3JvdXBcclxuICAgKi9cclxuICBwdWJsaWMgcm93Q2hlY2tib3hlczogVW50eXBlZEZvcm1BcnJheSA9IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtdKTtcclxuXHJcbiAgLyoqVGhlIGluZGV4IG9mIHRoZSBsYXN0IHJvdyB0aGUgdXNlciBjbGlja2VkLiBUaGlzIGFsbG93cyBtdWx0aXBsZSBkaXJlY3RpdmVzIG9uIGEgc2NyZWVuIHRvIGNvb3JkaW5hdGVcclxuICAgKiBmb3IgcmVhY3RpbmcgdG8gc2hpZnQrY2xpY2sgYWN0aW9ucyB0aGF0IHNob3VsZCBhdXRvbWF0aWNhbGx5IHNlbGVjdCBtdWx0aXBsZSByb3dzIGJldHdlZW4gdGhlIGNsaWNrZWQgcm93c1xyXG4gICAqIGRlZmF1bHRzIHRvIC0xIHRvIGluZGljYXRlIHRoYXQgbm8gdXNlciBjbGljayBoYXMgYmVlbiBjYXB0dXJlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBsYXN0Q2xpY2tlZEluZGV4OiBudW1iZXIgPSAtMTtcclxuXHJcbiAgLyoqQSBzdWJqZWN0IHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gYSByb3ctYmFzZWQgZGlyZWN0aXZlIGlzIGFkZGVkIG9yIHJlbW92ZWQuIEl0IGFsbG93c1xyXG4gICAqIHRoZSBtYXN0ZXIgY2hlY2tib3ggaW4gdGhlIGhlYWRlciB0byBrbm93IHRoYXQgaXQgbmVlZHMgdG8gcmVzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb25cclxuICAgKiB3aXRob3V0IHJlcGxhY2luZyB0aGUgYWN0dWFsIEZvcm1BcnJheSB0aGF0IHRoZSBob3N0aW5nIGNvbXBvbmVudCBtYXkgYmUgc3Vic2NyaWJlZCB0byBmb3IgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHB1YmxpYyByb3dBZGRlZE9yUmVtb3ZlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIHRvIGRpc2FibGUgU2hpZnQtQ2xpY2svQ3RybC1DbGljayBmdW5jdGlvbmFsaXR5XHJcbiAgICovXHJcbiAgcHVibGljIGRpc2FibGVBZHZhbmNlZFJvd0NsaWNrQmVoYXZpb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRvIGxpc3Qgb2YgaW5kaWNlcyBvZiBjb250cm9scyB0aGF0IHNob3VsZCBub3QgdG9nZ2xlIHdoZW4gbWFzdGVyL2hlYWRlciBjaGVja2JveCB0b2dnbGVzXHJcbiAgICovXHJcbiAgcHVibGljIG5vbkRlcGVuZGVudENoZWNrYm94ZXM6IG51bWJlcltdID0gW107XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnW2VjVGFibGVTZWxlY3RhYmxlUm93XScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1zZWxlY3RhYmxlLXJvdy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZVNlbGVjdGFibGVSb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcclxuICAvKipUaGUgSUQgcm9vdCB0byB1c2UgZm9yIHRoZSBjaGVja2JveCBhbmQgdGFibGUgY2VsbCAqL1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogRGlzYWJsZXMgdGhlIHNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5IHdoZW4gZmFsc2UgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLWVuYWJsZWQnKVxyXG4gIEBJbnB1dCgnZWNUYWJsZVNlbGVjdGFibGVSb3cnKVxyXG4gIHB1YmxpYyBzZXQgaXNTZWxlY3Rpb25FbmFibGVkKHZhbHVlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCkgeyB0aGlzLl9zZWxlY3Rpb25FbmFibGVkID0gdmFsdWUgIT09IGZhbHNlOyB9XHJcbiAgcHVibGljIGdldCBpc1NlbGVjdGlvbkVuYWJsZWQoKSB7IHJldHVybiB0aGlzLl9zZWxlY3Rpb25FbmFibGVkOyB9XHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKlNoYXJlZCBjb250ZXh0IGJldHdlZW4gbWFzdGVyIGFuZCBjaGlsZHJlbi4gQ2hpbGQgZGlyZWN0aXZlIGFkZHMgaXRzIG93biBGb3JtQ29udHJvbCB0byB0aGlzXHJcbiAgYW5kIHJlbW92ZXMgaXQgb25EZXN0cm95LiBUaGUgc2FtZSBjb250ZXh0IG9iamVjdCBtdXN0IGJlIHVzZWQgZm9yIGFsbCBkaXJlY3RpdmVzIGluIGEgc2luZ2xlIHRhYmxlKi9cclxuICBASW5wdXQoJ3NlbGVjdGlvbkNvbnRleHQnKVxyXG4gIHB1YmxpYyBjb250ZXh0ITogVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dDtcclxuXHJcbiAgLypSZXF1aXJlZCBmb3IgYWxsIHJvd3MuIFRoZSByb3cgaW5kZXggdGhpcyBjb21wb25lbnQgcmVwcmVzZW50cywgdG8gYWxsb3cgaXQgdG8ga25vdyBob3cgdG8gaGFuZGxlIHNoaWZ0K2NsaWNrcy5cclxuICAgIERlZmF1bHRzIHRvIC0xIHdoaWNoIHdpbGwgY2F1c2UgdGhlIGRpcmVjdGl2ZSB0byBiZWhhdmUgYXMgYSBoZWFkZXIgcm93Ki9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByb3dJbmRleDogbnVtYmVyID0gLTE7XHJcblxyXG4gIC8qKlRoZSBvcHRpb25zIHVzZWQgdG8gbG9jayB0aGUgY2hlY2tib3ggY29sdW1uIHRvIHRoZSBsZWZ0IG9mIHRoZSB0YWJsZSwgbXVzdCBiZSBtb2RpZmllZCBieSBob3N0XHJcbiAgICogaWYgdGhlIGNoZWNrYm94IGlzIG5vdCB0aGUgZmlyc3QgY29sdW1uIGluIHRoZSB0YWJsZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxvY2tlZENvbE9wdGlvbnM6IHsgYm9yZGVyOiBib29sZWFuLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciB9ID0geyBib3JkZXI6IGZhbHNlLCBsZWZ0OiAwIH07XHJcblxyXG4gIC8qKiBBdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlIGJhc2VkIG9uIGNoZWNrYm94IHN0YXRlLCB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgcm93IHRvIG1hdGNoIG91ciB0YWJsZSBzZWxlY3RlZCByb3cgc3R5bGVzICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1zZWxlY3RlZCcpXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaXNTZWxlY3RlZCA9IGZhbHNlO1xyXG5cclxuICAvKiogQXV0b21hdGljYWxseSBzZXQgdG8gdHJ1ZSBpZiBubyByb3dJbmRleCBpcyBwcm92aWRlZCBvciB0aGUgcm93IGluZGV4IGlzIGxlc3MgdGhhbiB6ZXJvICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1oZWFkZXInKVxyXG4gIHB1YmxpYyBpc0hlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0aGUgY2hlY2tib3ggdG8gYmUgZGlzYWJsZWQuXHJcbiAgICpcclxuICAgKiBXaGVuIHlvdSB1c2UgdGhpcyBwcm9wZXJ0eSwgbWFrZSBzdXJlIHlvdSBzZXQgYGRpc2FibGVBZHZhbmNlZFJvd0NsaWNrQmVoYXZpb3I6IHRydWVgXHJcbiAgICogaW4gdGhlIGBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0YCwgb3IgdW5kZXNpcmVkIHNpZGUtZWZmZWN0cyB3aWxsIG9jY3VyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlzQ2hlY2tib3hEaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyogQSByZWZlcmVuY2UgdGhhdCB3ZSBjYW4gY2hhbmdlIHdoZW4gYSBjb250cm9sIGlzIHJlcGxhY2VkIHRvIGZvcmNlIHRoZSBtYXN0ZXIgY2hlY2tib3ggcmVmZXJlbmNlIHRvIHVwZGF0ZVxyXG4gICAgIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGZvcm0gYXJyYXkgdGhhdCB0aGUgaG9zdCBjb21wb25lbnQgbWF5IGJlIHdhdGNoaW5nIGZvciBzZWxlY3RlZCByb3cgY2hhbmdlcyAqL1xyXG4gIHB1YmxpYyBkZXBlbmRlbnRDaGVja2JveGVzUmVmZXJlbmNlOiB7IGNvbnRyb2xzOiBBYnN0cmFjdENvbnRyb2xbXSB9ID0geyBjb250cm9sczogW10gfTtcclxuXHJcbiAgLypDYXB0dXJlIHRoZSBmb3JtIGNvbnRyb2wgdGhpcyBjb21wb25lbnQgY3JlYXRlcyB0byBhbGxvdyBjbGVhbnVwIGxhdGVyIG9uIGFuZCBleHBvc2UgaXQgdG8gdGhlIHJvdyovXHJcbiAgcHVibGljIGZvcm1Db250cm9sITogQWJzdHJhY3RDb250cm9sO1xyXG5cclxuICBwdWJsaWMgY2hlY2tib3hBdHRyaWJ1dGVJRDogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKlNlbmRzIGFuIGV2ZW50IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgc28gdGhhdCBpdCBjYW4gdW5zdWJzY3JpYmUgZnJvbSBhbnkgb2JzZXJ2YWJsZXMgKi9cclxuICBwcml2YXRlIGRlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIC8qKlZhbGlkYXRlIGFuZCBwb3B1bGF0ZSB0aGUgY29udGV4dCBhcyB0aGUgdGFibGUgaXMgZHluYW1pY2FsbHkgYnVpbHQuIEJlY2F1c2UgdGhlIGNvbnRleHQgaXMgc2hhcmVkIGJldHdlZW4gdGhlXHJcbiAgICogaGVhZGVyIGFuZCBlYWNoIG9mIHRoZSByb3dzLCBjaGFuZ2VzIHRvIGl0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGF0IGlzIGhhcHBlbmluZyBhbmQgaG9vayB1cCB0aGUgY29ycmVjdFxyXG4gICAqIHN1YnNjcmlwdGlvbnMgZm9yIHNlbGVjdEFsbC4gVGhlIHVzZXIgY2FuIHByb3ZpZGUgYW4gZXhpc3RpbmcgZm9ybUFycmF5IGZvciB0aGUgcm93cyBhbmQgZm9ybSBjb250cm9sIGZvciB0aGUgaGVhZGVyLFxyXG4gICAqIG9yIGl0IGNhbiBqdXN0IGJlIHRoZSBkZWZhdWx0IGVtcHR5IG9uZXMgY3JlYXRlZCBieSB0aGUgY29udGV4dCBjbGFzcy5cclxuICAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaXNIZWFkZXIgPSB0aGlzLnJvd0luZGV4IDwgMDtcclxuICAgIGlmICghdGhpcy5jb250ZXh0KSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2VjVGFibGVTZWxlY3RhYmxlUm93IHJlcXVpcmVzIGEgZGVmaW5lZCBTZWxlY3RhYmxlVGFibGVSb3dDb250ZXh0IHRvIGJlIHNoYXJlZCB3aXRoIGFsbCBpbnN0YW5jZXMgaW4gb25lIHRhYmxlLicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IHJvd0NoZWNrYm94ID0gdGhpcy5jb250ZXh0Py5yb3dDaGVja2JveGVzPy5hdCh0aGlzLnJvd0luZGV4KTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pc0hlYWRlciAmJiAhcm93Q2hlY2tib3gpIHtcclxuICAgICAgICByb3dDaGVja2JveCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wodGhpcy5pc1NlbGVjdGVkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQ/LnJvd0NoZWNrYm94ZXMucHVzaChyb3dDaGVja2JveCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmlzSGVhZGVyID8gdGhpcy5jb250ZXh0LnNlbGVjdEFsbENoZWNrYm94IDogcm93Q2hlY2tib3g7XHJcbiAgICAgIHRoaXMud2F0Y2hGb3JDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipXYXRjaCBmb3IgY2hhbmdlcyB0byB0aGUgcm93IGluZGV4IHRoYXQgY2FuIG9jY3VyIGlmIHRoZSB0YWJsZSBpcyByZW9yZGVyZWQgaW4tcGxhY2UgaW5zdGVhZCBvZlxyXG4gICAqIHJlY3JlYXRlZCBmcm9tIHNjcmF0Y2guIFJlLWNhcHR1cmUgdGhlIGNvcnJlY3QgZm9ybSBjb250cm9sIHRvIGtlZXAgZXZlcnl0aGluZyBpbiBzeW5jXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLnJvd0luZGV4ICYmICF0aGlzLmlzSGVhZGVyKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmNvbnRleHQucm93Q2hlY2tib3hlcy5hdCh0aGlzLnJvd0luZGV4KTtcclxuICAgICAgdGhpcy5jaGVja2JveEF0dHJpYnV0ZUlEID0gYCR7dGhpcy5pZH1fcm93JHt0aGlzLnJvd0luZGV4fV9lY0NoZWNrYm94YDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5pc1NlbGVjdGlvbkVuYWJsZWQgJiYgIXRoaXMuaXNTZWxlY3Rpb25FbmFibGVkICYmIHRoaXMuZm9ybUNvbnRyb2w/LnZhbHVlID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzLmlzU2VsZWN0ZWQgJiYgdGhpcy5mb3JtQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuaXNTZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogVGVsbCB0aGUgaGVhZGVyIGNoZWNrYm94IHRvIHJlZnJlc2ggdGhlIHNlbGVjdEFsbCBzdWJzY3JpcHRpb24gYmVjYXVzZSBhIHJvdyB3YXMgcmVtb3ZlZCovXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKCF0aGlzLmlzSGVhZGVyICYmIHRoaXMuZm9ybUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb250ZXh0LnJvd0FkZGVkT3JSZW1vdmVkLm5leHQoKTtcclxuXHJcbiAgICAgIC8vZmluZCB0aGUgbG9jYXRpb24gaW4gdGhlIGFycmF5IHRoYXQgbWF0Y2hlcyB0aGUgY2hlY2tib3guIElmIG1hbnkgcm93cyBhcmUgYmVpbmcgcmVtb3ZlZCBpdCBtYXkgbm90IG1hdGNoIHJvd0luZGV4IHlldFxyXG4gICAgICBsZXQgbWF0Y2hJbmRleCA9IHRoaXMuY29udGV4dC5yb3dDaGVja2JveGVzLmNvbnRyb2xzLmZpbmRJbmRleChjID0+IGMgPT0gdGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgICAgIGlmIChtYXRjaEluZGV4ID49IDApIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQucm93Q2hlY2tib3hlcy5yZW1vdmVBdChtYXRjaEluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqSGFuZGxlIHdoZW4gYSB1c2VyIGNsaWNrcyBvbiBhIHRhYmxlIHJvdyAob3Igc29tZXRoaW5nIGluc2lkZSBpdCB3aGljaCBidWJibGVzIHVwKSB0byBpbmNyZWFzZSB0aGUgaGl0IGFyZWEgZm9yIHJvdyBzZWxlY3Rpb25cclxuICAgKiBPbmx5IHdvcmsgb24gdGhlIHRhYmxlIGJvZHkgKG5vdCB0aGUgaGVhZGVyKSBiZWNhdXNlIHRoZSBoZWFkZXIgbWF5IGhhdmUgb3RoZXIgY2xpY2sgaGFuZGxlcnMgZm9yIHNvcnQgZXRjIHRoYXQgd2UgZG9uJ3QgY2FyZSBhYm91dC5cclxuICAgKiBIYW5kbGUgc2hpZnQgYW5kIGNvbnRyb2wgc2VsZWN0IGFzIHdlbGwgYXMgY2hlY2tib3ggY2xpY2sgbGlrZSB3aW5kb3dzIGV4cGxvcmVyIG9yIHRoZSBvcmlnaW5hbCBiaWxsIGxpc3RzIGRvLlxyXG4gICovXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHB1YmxpYyByb3dDbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNIZWFkZXIgJiYgdGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQgJiYgIXRoaXMuaXNDaGVja2JveERpc2FibGVkKSB7XHJcbiAgICAgIGxldCB0YXJnZXRFbCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAvL2NsaWNraW5nIG9uIGEgcm93IGFsd2F5cyB0b2dnbGVzIHRoYXQgcm93LiBTb21ldGltZXMgdGhlIHNoaWZ0LXNlbGVjdCB3aWxsIHRvZ2dsZSBpdCBiYWNrXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoIXRoaXMuZm9ybUNvbnRyb2wudmFsdWUpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZGlzYWJsZUFkdmFuY2VkUm93Q2xpY2tCZWhhdmlvcikge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlU2hpZnRTZWxlY3QoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhdGNoRm9yQ2hhbmdlcygpIHtcclxuICAgIC8vd2F0Y2ggZm9yIHJvd3MgYmVpbmcgcmVwbGFjZWQgc28gdGhhdCB0aGUgbWFzdGVyIGNoZWNrYm94IGFuZCBzaGlmdC1zZWxlY3Qgc3VwcG9ydCBjYW4gYmUgcmVzZXQgdG8gbWF0Y2hcclxuICAgIC8vdGhpcyBrZWVwcyB0aGUgbWFzdGVyIGluIHN5bmMgYXMgdGhlIHRhYmxlIGNoYW5nZXMgcGFnZXMgZXRjIGFuZCBzdG9wcyB1bmV4cGVjdGVkIHJvd3MgZnJvbSBiZWluZyBzZWxlY3RlZCBhZnRlciByZWRyYXdcclxuICAgIGlmICh0aGlzLmlzSGVhZGVyKSB7XHJcbiAgICAgIHRoaXMuY29udGV4dC5yb3dBZGRlZE9yUmVtb3ZlZC5waXBlKGRlYm91bmNlVGltZSgxMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0Lmxhc3RDbGlja2VkSW5kZXggPSAtMTtcclxuXHJcbiAgICAgICAgLy8gZXhjbHVkZSBub25EZXBlbmRlbnRDaGVja2JveGVzIChzb21lIG1heSBub3QgYmUgYWxsb3dlZCB0byBiZSBkZXNlbGVjdGVkKVxyXG4gICAgICAgIGxldCBkZXBlbmRlbnRDaGVja2JveGVzOiBBYnN0cmFjdENvbnRyb2xbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5yb3dDaGVja2JveGVzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5ub25EZXBlbmRlbnRDaGVja2JveGVzLmluY2x1ZGVzKGluZGV4KSkge1xyXG4gICAgICAgICAgICBkZXBlbmRlbnRDaGVja2JveGVzLnB1c2goY29udHJvbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGVwZW5kZW50Q2hlY2tib3hlc1JlZmVyZW5jZSA9IHsgY29udHJvbHM6IGRlcGVuZGVudENoZWNrYm94ZXMgfTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRleHQucm93QWRkZWRPclJlbW92ZWQubmV4dCgpO1xyXG5cclxuICAgICAgLy93YXRjaCBmb3IgdGhlIGNoZWNrYm94IHN0YXRlIHRvIGNoYW5nZSBvbiBhIGNoaWxkIHJvdyBhbmQgc2V0IHRoZSByb3cgaXNTZWxlY3RlZCBjbGFzcyAvIGhpZ2hsaWdodCB0byBtYXRjaFxyXG4gICAgICAvL3RoaXMgd2F5IHRoZSByb3dzIG1hdGNoIGV2ZW4gaWYgZXh0ZXJuYWwgY29kZSB1cGRhdGVzIHRoZSBmb3JtIG1vZGVsXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2w/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpLnN1YnNjcmliZSgodmFsdWU6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICB0aGlzLmlzU2VsZWN0ZWQgPSB2YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIElmIHRoZXkgYXJlIGhvbGRpbmcgdGhlIHNoaWZ0IGtleSwgdHJ5IHRvIHNlbGVjdCBhbGwgdGhlIGNoZWNrYm94ZXMgYmV0d2VlbiB0aGVpciBsYXN0IHNlbGVjdGlvblxyXG4gICAgKiBhbmQgbW9zdCByZWNlbnQgc2VsZWN0aW9uLiBUaGUgbG9naWMgaXMgc2V0dXAgdG8gYmVoYXZlIHRoZSB3YXkgd2luZG93cyBleHBsb3JlciBiZWhhdmVzXHJcbiAgICAqIFdlIGRvbid0IGFsbG93IGRyYWctdG8tc2VsZWN0IGxpa2UgdGhlIGtlbmRvIHRhYmxlcywgYnV0IGl0IG1lYW5zIHVzZXJzIGNhbiBoaWdobGlnaHQgdGV4dCBhbmQgY29weStwYXN0ZSB0byBleGNlbCBldGNcclxuICAgICogc28gSSB0aGluayB0aGlzIGlzIGFjdHVhbGx5IHByZWZlcmFibGVcclxuICAgICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVTaGlmdFNlbGVjdChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgbGV0IGxhc3RJbmRleCA9IHRoaXMuY29udGV4dC5sYXN0Q2xpY2tlZEluZGV4O1xyXG4gICAgbGV0IGN1ckluZGV4ID0gdGhpcy5yb3dJbmRleDtcclxuICAgIGlmIChldmVudC5zaGlmdEtleSAmJiBsYXN0SW5kZXggPj0gMCkge1xyXG4gICAgICB0aGlzLmNsZWFyQWxsUm93cygpO1xyXG4gICAgICBpZiAoY3VySW5kZXggPiBsYXN0SW5kZXgpIHtcclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IGxhc3RJbmRleDsgaW5kZXggPD0gY3VySW5kZXg7IGluZGV4KyspIHtcclxuICAgICAgICAgIHRoaXMuY29udGV4dC5yb3dDaGVja2JveGVzLmF0KGluZGV4KS5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY3VySW5kZXggPCBsYXN0SW5kZXgpIHtcclxuICAgICAgICBmb3IgKHZhciBpbmRleCA9IGxhc3RJbmRleDsgaW5kZXggPj0gY3VySW5kZXg7IGluZGV4LS0pIHtcclxuICAgICAgICAgIHRoaXMuY29udGV4dC5yb3dDaGVja2JveGVzLmF0KGluZGV4KS5zZXRWYWx1ZSh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoY3VySW5kZXggPT09IGxhc3RJbmRleCkge1xyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpPy5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vcmVjb3JkIHRoZSBjdXJyZW50IHJvdyBpbmRleCBmb3IgZnV0dXJlIHJvdyBjbGlja3MgdG8ga25vdyB3aGVyZSB0aGV5IGxhc3QgaW50ZXJhY3RlZFxyXG4gICAgICAvL2J1dCBvbmx5IGlmIHRoZXkgZG9uJ3QgaGF2ZSBzaGlmdCBkb3duIGZvciB0aGlzIGNsaWNrLiBJZiBzaGlmdCBpcyBkb3duIHRoZW4gdGhlIG5leHQgc2hpZnQrY2xpY2tcclxuICAgICAgLy9zaG91bGQgYmUgY29uc2lkZXJlZCBhbiBleHRlbnNpb24gKG9yIGNvbnRyYWN0aW9uKSBvZiB0aGUgb3JpZ2luYWwgbXVsdGktcm93IHNlbGVjdGlvblxyXG4gICAgICB0aGlzLmNvbnRleHQubGFzdENsaWNrZWRJbmRleCA9IHRoaXMucm93SW5kZXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyQWxsUm93cygpIHtcclxuICAgIHRoaXMuY29udGV4dC5yb3dDaGVja2JveGVzLmNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiBjb250cm9sLnNldFZhbHVlKGZhbHNlKSk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gYW55IGVsZW1lbnRzIG9mIHRoZSBleGlzdGluZyB0YWJsZSByb3cgdGhhdCBtdXN0IGdvIGJlZm9yZSB0aGUgcm93IHNlbGVjdGlvbiBjaGVja2JveCBjYW4gYmUgbWFya2VkIHdpdGggYSBjbGFzcyBvZiBiZWZvcmUtY2hlY2tib3ggLS0+XHJcbjxuZy1jb250ZW50IHNlbGVjdD1cIi5iZWZvcmUtY2hlY2tib3hcIj48L25nLWNvbnRlbnQ+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJpc1NlbGVjdGlvbkVuYWJsZWRcIj5cclxuICA8dGggKm5nSWY9XCJpc0hlYWRlclwiXHJcbiAgICAgIGNsYXNzPVwiY2hlY2tib3hcIlxyXG4gICAgICBbZWNUYWJsZUxvY2tlZENvbHVtbl09XCJsb2NrZWRDb2xPcHRpb25zXCI+XHJcbiAgICA8ZWMtY2hlY2tib3ggaWQ9XCJ7e2lkfX1fc2VsZWN0QWxsXCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tMFwiXHJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250ZXh0Py5zZWxlY3RBbGxDaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgW2Zvcm1Nb2RlbF09XCJjb250ZXh0Py5zZWxlY3RBbGxDaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgW2RlcGVuZGVudENoZWNrYm94ZXNHcm91cF09XCJkZXBlbmRlbnRDaGVja2JveGVzUmVmZXJlbmNlXCJcclxuICAgICAgICAgICAgICAgICBbaWdub3JlRGlzYWJsZWREZXBlbmRlbnRzXT1cImZhbHNlXCI+XHJcbiAgICA8L2VjLWNoZWNrYm94PlxyXG4gIDwvdGg+XHJcbiAgPHRkICpuZ0lmPVwiIWlzSGVhZGVyICYmIGZvcm1Db250cm9sXCJcclxuICAgICAgY2xhc3M9XCJjaGVja2JveFwiXHJcbiAgICAgIFtlY1RhYmxlTG9ja2VkQ29sdW1uXT1cImxvY2tlZENvbE9wdGlvbnNcIj5cclxuICAgIDwhLS0gVXNlIFtyZWFkb25seV0gYW5kIG5vdCBbZGlzYWJsZWRdIGZvciBpc0NoZWNrYm94RGlzYWJsZWQgdG8gcHJldmVudCB1c2VyIGludGVyYWN0aW9uXHJcbiAgICAgICAgIGFuZCBhbGxvdyB0aGUgdmFsdWUgdG8gYmUgdmlzaWJsZSB0byBvdGhlciBjb21wb25lbnRzIChmb3IgZXhhbXBsZSwgd2hlbiB0aGV5IHN1YnNjcmliZVxyXG4gICAgICAgICB0byB2YWx1ZUNoYW5nZXMgb24gdGhlIEZvcm1BcnJheSB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgY2hlY2tib3ggRm9ybUNvbnRyb2xzKS4gLS0+XHJcbiAgICA8ZWMtY2hlY2tib3ggaWQ9XCJ7e2lkfX1fcm93e3tyb3dJbmRleH19X2NoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNDaGVja2JveERpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJjaGVja2JveEF0dHJpYnV0ZUlEXCJcclxuICAgICAgICAgICAgICAgICBjbGFzcz1cIm0tMCByb3ctY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgIFtmb3JtTW9kZWxdPVwiZm9ybUNvbnRyb2xcIj5cclxuICAgIDwvZWMtY2hlY2tib3g+XHJcbiAgPC90ZD5cclxuPC9uZy1jb250YWluZXI+XHJcbjwhLS0gVGhlIHJlc3Qgb2YgdGhlIHRhYmxlIHJvdyAtLT5cclxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PiJdfQ==
@@ -1,249 +0,0 @@
1
- import { Component, ContentChildren, EventEmitter, HostBinding, Input, Output, ViewEncapsulation } from '@angular/core';
2
- import { cloneDeep, isEqual } from 'lodash';
3
- import { Subject } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
5
- import { ResizableColumnComponent } from './resizable-column.component';
6
- import { TableMasterRowComponent } from './table-master-row.component';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/common";
9
- import * as i2 from "@angular/cdk/scrolling";
10
- import * as i3 from "./resizable-table.directive";
11
- export class TableComponent {
12
- constructor(renderer, el) {
13
- this.renderer = renderer;
14
- this.el = el;
15
- this.id = '';
16
- /**
17
- * Enables table scrolling with a sticky header and footer. Use
18
- * <thead> and <tfoot> elements for styles to be applied correctly.
19
- */
20
- this.scrollable = false;
21
- /**
22
- * Enables resizable table columns. Apply the 'is-resizable' class
23
- * to the <th> of a table column than can be resized.
24
- */
25
- this.resizable = false;
26
- /**
27
- * Turns on condensed table styling. By default a condensed table
28
- * has no row borders. To show borders, apply the 'has-borders' class
29
- * to the <ec-table> element
30
- */
31
- this.condensed = false;
32
- /**
33
- * Enables sorting by clicking on table columns. To make a column sortable
34
- * apply the `data-sortable` attribute to the columns `<th>` element with
35
- * the value of the field used to sort the column. When a column is clicked
36
- * the fields and current sort direction is emitted from the `sortChange`
37
- * output
38
- *
39
- * @example
40
- * ```html
41
- * <ec-table [sortable]="true" [sort]="currentSort" (sortChange)="onSort($event)">
42
- * <thead>
43
- * <th data-sortable="name">Name</th>
44
- * <th data-sortable="qty">Qty.</th>
45
- * <th data-sortable="price">Price</th>
46
- * </thead>
47
- * ...
48
- * </ec-table>
49
- * ```
50
- */
51
- this.sortable = false;
52
- /** Set to true if selectionContext is defined */
53
- this.selectable = false;
54
- /** Hides/shows the selection toolbar template when 1 or more rows is selected */
55
- this.hasSelection = false;
56
- /**
57
- * Enables form table styling to allow form controls inside table cells.
58
- */
59
- this.isForm = false;
60
- /**
61
- * Emits the new sort value whenever a sortable column is clicked
62
- */
63
- this.sortChange = new EventEmitter();
64
- /**
65
- * True if a TableMasterRowComponent exists in the table content
66
- */
67
- this.hasMasterDetailRows = false;
68
- /**
69
- * Unlisten function returned by `renderer.listen()` that are called
70
- * OnDestroy to clean up all listeners
71
- */
72
- this.unlisteners = [];
73
- /** A map of sortable `<th>` elements */
74
- this.sortableCols = {};
75
- this.destroyed = new Subject();
76
- }
77
- ngOnChanges(changes) {
78
- if (this.sortable && changes.sort && changes.sort.currentValue && !changes.sort.firstChange) {
79
- const newValue = changes.sort.currentValue;
80
- if (!this.currentSort || !isEqual(newValue, this.currentSort)) {
81
- this.onSort(newValue);
82
- }
83
- }
84
- }
85
- ngAfterContentInit() {
86
- this.hasMasterDetailRows = !!this.masterRows.length;
87
- this.masterRows.changes.pipe(takeUntil(this.destroyed)).subscribe(() => {
88
- this.hasMasterDetailRows = !!this.masterRows.length;
89
- });
90
- this.resizableColumns = this.searchableTableResizableColumns || this._resizableColumns;
91
- }
92
- ngAfterViewInit() {
93
- if (this.sortable) {
94
- this.initSortable();
95
- }
96
- if (this.selectable) {
97
- this.initSelectable();
98
- }
99
- }
100
- ngOnDestroy() {
101
- if (this.unlisteners.length) {
102
- this.unlisteners.forEach(unlisten => unlisten());
103
- }
104
- this.destroyed.next();
105
- this.destroyed.unsubscribe();
106
- }
107
- /**
108
- * Get all elements inside the host element that match a selector
109
- * @param selector - Any valid selector for [querySelectorAll](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll)
110
- */
111
- queryElements(selector) {
112
- const table = this.el.nativeElement;
113
- return Array.from(table.querySelectorAll(selector));
114
- }
115
- /**
116
- * Store a `<th>` for each sortable column and attach a click
117
- * event listener.
118
- */
119
- initSortable() {
120
- this.queryElements('th').forEach(th => {
121
- if (th.hasAttribute('data-sortfield')) {
122
- const field = th.getAttribute('data-sortfield');
123
- if (field) {
124
- this.sortableCols[field] = th;
125
- const unlisten = this.renderer.listen(th, 'click', (event) => {
126
- // Do not sort if the event target was the resizable handle
127
- if (th.classList.contains('is-resizable') && event.target && event.target.classList.contains('handle')) {
128
- return;
129
- }
130
- let direction;
131
- if (th.classList.contains('is-sorted-desc')) {
132
- direction = 'asc';
133
- }
134
- else {
135
- direction = 'desc';
136
- }
137
- this.onSort({ field, direction });
138
- });
139
- // Store unlisten function to remove listener when component is destroyed
140
- this.unlisteners.push(unlisten);
141
- }
142
- else {
143
- console.error(`data-sortfield attribute was not assigned a value.`, th);
144
- }
145
- }
146
- });
147
- // Set the initial sort
148
- if (this.sort) {
149
- this.onSort(this.sort);
150
- }
151
- }
152
- /**
153
- * Find the sorted column and apply the desc or asc class in order
154
- * to show the correct sort icon. If another field was sorted, reset it.
155
- * Emit the current field and direction of the sorted column
156
- * @param field
157
- */
158
- onSort(sort) {
159
- this.clearSort();
160
- if (Array.isArray(sort)) {
161
- sort.forEach(s => this.applySort(s));
162
- }
163
- else {
164
- this.applySort(sort);
165
- }
166
- this.currentSort = cloneDeep(sort);
167
- this.sortChange.emit(this.currentSort);
168
- }
169
- clearSort() {
170
- Object.values(this.sortableCols).forEach(th => {
171
- this.renderer.removeClass(th, `is-sorted-asc`);
172
- this.renderer.removeClass(th, `is-sorted-desc`);
173
- });
174
- }
175
- applySort(sort) {
176
- const th = this.sortableCols[sort.field];
177
- if (!th) {
178
- return;
179
- }
180
- this.renderer.addClass(th, `is-sorted-${sort.direction}`);
181
- }
182
- initSelectable() {
183
- this.selectionContext.rowCheckboxes.valueChanges.pipe(takeUntil(this.destroyed)).subscribe((value) => {
184
- this.hasSelection = value.some(v => v);
185
- });
186
- }
187
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
188
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableComponent, selector: "ec-table", inputs: { id: "id", scrollable: "scrollable", resizable: "resizable", condensed: "condensed", sortable: "sortable", selectionContext: "selectionContext", selectionToolbarTemplate: "selectionToolbarTemplate", selectable: "selectable", isForm: "isForm", sort: "sort", searchableTableResizableColumns: ["resizableColumns", "searchableTableResizableColumns"] }, outputs: { sortChange: "sortChange" }, host: { properties: { "attr.id": "this.id", "class.is-scrollable": "this.scrollable", "class.is-resizable": "this.resizable", "class.is-condensed": "this.condensed", "class.is-sortable": "this.sortable", "class.is-selectable": "this.selectable", "class.is-form-table": "this.isForm", "class.is-master-detail": "this.hasMasterDetailRows" } }, queries: [{ propertyName: "masterRows", predicate: TableMasterRowComponent, descendants: true }, { propertyName: "_resizableColumns", predicate: ResizableColumnComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"selectable-table-toolbar\"\r\n *ngIf=\"hasSelection && selectionToolbarTemplate\">\r\n <ng-container *ngTemplateOutlet=\"selectionToolbarTemplate\"></ng-container>\r\n</div>\r\n<div id=\"{{id}}-scroll-container\" \r\n class=\"table-scroll-container\"\r\n cdkScrollable>\r\n <table class=\"main-table\"\r\n id=\"{{id}}\"\r\n [ecResizableTable]=\"resizable\"\r\n [containerEl]=\"el\"\r\n [sortableTable]=\"sortable\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </table>\r\n</div>", styles: ["ec-table{display:flex;position:relative;min-height:0}ec-table .table-scroll-container{flex:1 1;min-height:0;overflow-y:auto}ec-table .main-table{border-collapse:separate;border-spacing:0;width:100%;font-size:var(--ec-font-size-label)}ec-table .main-table th{height:2rem;line-height:1rem;padding:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid var(--ec-border-color-dark);color:var(--ec-color-secondary-dark);font-weight:400;vertical-align:middle}ec-table .main-table th:first-child{padding-left:1rem}ec-table .main-table th:last-child{padding-right:1rem}ec-table .main-table td{height:2rem;line-height:1rem;padding:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-top:1px solid var(--ec-border-color);vertical-align:top}ec-table .main-table td:first-child{padding-left:1rem}ec-table .main-table td:last-child{padding-right:1rem}ec-table .main-table tbody>tr:first-child td{border-top:0}ec-table .main-table tbody>tr.is-error td{background-color:var(--ec-background-color-danger)}ec-table .main-table tbody>tr.is-success td{background-color:var(--ec-background-color-success)}ec-table .main-table tfoot td{font-weight:700}ec-table .main-table tbody>tr.is-selected>td,ec-table .main-table tbody>tr.is-selected{background-color:var(--ec-background-color-selected)}ec-table .main-table tr.is-heading td{color:var(--ec-color-secondary-dark);font-size:var(--ec-font-size-label);font-weight:var(--ec-font-weight-bold);line-height:1.333333333;text-transform:uppercase;padding-bottom:0;vertical-align:bottom;border-top:0}ec-table .main-table tr.is-heading+tr td{border-top:0}ec-table .main-table th.actions-col,ec-table .main-table td.actions-col{padding:0}ec-table .main-table th.actions-1,ec-table .main-table td.actions-1{width:2.0625rem}ec-table .main-table th.actions-2,ec-table .main-table td.actions-2{width:4.0625rem}ec-table .main-table th.actions-3,ec-table .main-table td.actions-3{width:6.0625rem}ec-table .main-table th.actions-4,ec-table .main-table td.actions-4{width:8.0625rem}ec-table .main-table th.actions-5,ec-table .main-table td.actions-5{width:10.0625rem}ec-table.is-condensed th,ec-table.is-condensed td{padding-top:.25rem;padding-bottom:.25rem;height:1.5rem}ec-table.is-condensed:not(.has-borders)>table td{border-bottom-width:0;border-top-width:0}ec-table .selectable-table-toolbar{align-items:center;background-color:var(--ec-background-color);border-bottom:1px solid var(--ec-border-color-dark);display:flex;padding:0 .5rem;position:absolute;left:calc(var(--selection-toolbar-left, 0rem) + 1.625rem);top:0;height:3rem;right:0;z-index:calc(var(--ec-z-index-sticky-header) + 3)}ec-table.is-scrollable>.table-scroll-container>table{position:relative}ec-table.is-scrollable>.table-scroll-container>table>thead th{background-color:var(--ec-background-color);position:sticky!important;top:0;z-index:var(--ec-z-index-sticky-header)}ec-table.is-scrollable>.table-scroll-container>table>tfoot td{background-color:var(--ec-background-color);position:sticky!important;bottom:0;z-index:var(--ec-z-index-sticky-header)}ec-table.is-scrollable.bg-body>.table-scroll-container>table>thead th{background-color:var(--ec-background-color-body)}ec-table.is-scrollable.bg-body>.table-scroll-container>table>tfoot td{background-color:var(--ec-background-color-body)}ec-table.is-sortable th[data-sortfield]{-webkit-user-select:none;user-select:none}ec-table.is-sortable th[data-sortfield].is-resizable .content-wrapper{display:flex;cursor:pointer}ec-table.is-sortable th[data-sortfield].is-resizable .content{flex:0 1 auto}ec-table.is-sortable th[data-sortfield].is-resizable .content-wrapper:after{flex:none;width:.875rem;height:.875rem;margin:0 .25rem;font-size:.75rem;display:none;align-items:center;justify-content:center}ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-desc .content-wrapper:after,ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-asc .content-wrapper:after{font:var(--fa-font-solid);content:\"\\f062\";display:inline-flex}ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-desc .content-wrapper:after{transform:scaleY(-1)}ec-table.is-sortable th[data-sortfield].is-resizable.text-right .content-wrapper{flex-direction:row-reverse}ec-table.is-sortable th[data-sortfield]:not(.is-resizable){cursor:pointer}ec-table.is-sortable th[data-sortfield]:not(.is-resizable):after{width:.875rem;height:.875rem;margin:0 .25rem;font-size:.75rem;display:none;align-items:center;justify-content:center}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-desc:after,ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-asc:after{font:var(--fa-font-solid);content:\"\\f062\";display:inline-flex}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-desc:after{transform:scaleY(-1)}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right:after{content:\"\";display:none!important}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right:before{width:.875rem;height:.875rem;margin:0 .25rem;font-size:.75rem;display:none;align-items:center;justify-content:center}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-desc:before,ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-asc:before{font:var(--fa-font-solid);content:\"\\f062\";display:inline-block}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-desc:before{transform:scaleY(-1)}ec-table.is-resizable .main-table{table-layout:fixed;width:100%}ec-table.is-resizable th.is-resizable{position:relative;overflow:visible;z-index:var(--ec-z-index-sticky-header)}ec-table.is-resizable th.is-resizable.is-active{-webkit-user-select:none;user-select:none}ec-table.is-resizable th.is-resizable.is-active .handle:after{background-color:var(--ec-color-interactive)}ec-table.is-resizable th.is-resizable .handle{position:absolute;width:13px;height:100%;top:0;padding:0 5px;z-index:var(--ec-z-index-splitter);right:0;padding:.5rem 0 .5rem 10px}ec-table.is-resizable th.is-resizable .handle:after{content:\"\";display:block;transition:background-color .3s ease;height:100%;position:relative}ec-table.is-resizable th.is-resizable .handle:hover{cursor:col-resize}ec-table.is-resizable th.is-resizable .handle:hover:after{background-color:var(--ec-color-interactive)}ec-table.is-resizable th.is-resizable .handle:before{content:\"\";display:block;width:1px;background-color:var(--ec-border-color);position:absolute;top:.5rem;bottom:.5rem;right:0}ec-table.is-resizable th.is-resizable .content{overflow:hidden;text-overflow:clip;white-space:nowrap}ec-table.is-resizable th.is-resizable:last-child .handle:before{display:none}ec-table.is-resizable td,ec-table.is-resizable th{overflow:hidden;text-overflow:clip;white-space:nowrap}ec-table.is-selectable .main-table thead th{height:3rem}ec-table.is-selectable .main-table tbody>tr:hover>td{background-color:var(--ec-background-color-hover);border-color:transparent;cursor:pointer}ec-table.is-selectable .main-table tbody>tr:hover.is-selected{background-color:var(--ec-background-color-selected)}ec-table.is-selectable .main-table tbody>tr:hover+tr>td{border-color:var(--ec-background-color-hover)}ec-table.is-selectable th.is-resizable .handle{padding-top:1rem;padding-bottom:1rem}ec-table.is-selectable th.is-resizable .handle:before{top:1rem;bottom:1rem}ec-table.is-master-detail>table{table-layout:fixed}ec-table.is-form-table td{padding-bottom:.25rem;padding-top:.25rem;height:2.5rem;line-height:2rem;border-top:0;font-size:var(--ec-font-size-body)}ec-table.is-form-table tr:first-child td{padding-top:.5rem;height:2.75rem}ec-table.is-form-table tr:last-child td{padding-bottom:.5rem;height:2.75rem}ec-table.is-fixed .main-table{table-layout:fixed}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: i3.ResizableTableDirective, selector: "[ecResizableTable]", inputs: ["ecResizableTable", "containerEl", "sortableTable", "resizableColumns"] }], encapsulation: i0.ViewEncapsulation.None }); }
189
- }
190
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
191
- type: Component,
192
- args: [{ selector: 'ec-table', encapsulation: ViewEncapsulation.None, template: "<div class=\"selectable-table-toolbar\"\r\n *ngIf=\"hasSelection && selectionToolbarTemplate\">\r\n <ng-container *ngTemplateOutlet=\"selectionToolbarTemplate\"></ng-container>\r\n</div>\r\n<div id=\"{{id}}-scroll-container\" \r\n class=\"table-scroll-container\"\r\n cdkScrollable>\r\n <table class=\"main-table\"\r\n id=\"{{id}}\"\r\n [ecResizableTable]=\"resizable\"\r\n [containerEl]=\"el\"\r\n [sortableTable]=\"sortable\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </table>\r\n</div>", styles: ["ec-table{display:flex;position:relative;min-height:0}ec-table .table-scroll-container{flex:1 1;min-height:0;overflow-y:auto}ec-table .main-table{border-collapse:separate;border-spacing:0;width:100%;font-size:var(--ec-font-size-label)}ec-table .main-table th{height:2rem;line-height:1rem;padding:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px solid var(--ec-border-color-dark);color:var(--ec-color-secondary-dark);font-weight:400;vertical-align:middle}ec-table .main-table th:first-child{padding-left:1rem}ec-table .main-table th:last-child{padding-right:1rem}ec-table .main-table td{height:2rem;line-height:1rem;padding:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-top:1px solid var(--ec-border-color);vertical-align:top}ec-table .main-table td:first-child{padding-left:1rem}ec-table .main-table td:last-child{padding-right:1rem}ec-table .main-table tbody>tr:first-child td{border-top:0}ec-table .main-table tbody>tr.is-error td{background-color:var(--ec-background-color-danger)}ec-table .main-table tbody>tr.is-success td{background-color:var(--ec-background-color-success)}ec-table .main-table tfoot td{font-weight:700}ec-table .main-table tbody>tr.is-selected>td,ec-table .main-table tbody>tr.is-selected{background-color:var(--ec-background-color-selected)}ec-table .main-table tr.is-heading td{color:var(--ec-color-secondary-dark);font-size:var(--ec-font-size-label);font-weight:var(--ec-font-weight-bold);line-height:1.333333333;text-transform:uppercase;padding-bottom:0;vertical-align:bottom;border-top:0}ec-table .main-table tr.is-heading+tr td{border-top:0}ec-table .main-table th.actions-col,ec-table .main-table td.actions-col{padding:0}ec-table .main-table th.actions-1,ec-table .main-table td.actions-1{width:2.0625rem}ec-table .main-table th.actions-2,ec-table .main-table td.actions-2{width:4.0625rem}ec-table .main-table th.actions-3,ec-table .main-table td.actions-3{width:6.0625rem}ec-table .main-table th.actions-4,ec-table .main-table td.actions-4{width:8.0625rem}ec-table .main-table th.actions-5,ec-table .main-table td.actions-5{width:10.0625rem}ec-table.is-condensed th,ec-table.is-condensed td{padding-top:.25rem;padding-bottom:.25rem;height:1.5rem}ec-table.is-condensed:not(.has-borders)>table td{border-bottom-width:0;border-top-width:0}ec-table .selectable-table-toolbar{align-items:center;background-color:var(--ec-background-color);border-bottom:1px solid var(--ec-border-color-dark);display:flex;padding:0 .5rem;position:absolute;left:calc(var(--selection-toolbar-left, 0rem) + 1.625rem);top:0;height:3rem;right:0;z-index:calc(var(--ec-z-index-sticky-header) + 3)}ec-table.is-scrollable>.table-scroll-container>table{position:relative}ec-table.is-scrollable>.table-scroll-container>table>thead th{background-color:var(--ec-background-color);position:sticky!important;top:0;z-index:var(--ec-z-index-sticky-header)}ec-table.is-scrollable>.table-scroll-container>table>tfoot td{background-color:var(--ec-background-color);position:sticky!important;bottom:0;z-index:var(--ec-z-index-sticky-header)}ec-table.is-scrollable.bg-body>.table-scroll-container>table>thead th{background-color:var(--ec-background-color-body)}ec-table.is-scrollable.bg-body>.table-scroll-container>table>tfoot td{background-color:var(--ec-background-color-body)}ec-table.is-sortable th[data-sortfield]{-webkit-user-select:none;user-select:none}ec-table.is-sortable th[data-sortfield].is-resizable .content-wrapper{display:flex;cursor:pointer}ec-table.is-sortable th[data-sortfield].is-resizable .content{flex:0 1 auto}ec-table.is-sortable th[data-sortfield].is-resizable .content-wrapper:after{flex:none;width:.875rem;height:.875rem;margin:0 .25rem;font-size:.75rem;display:none;align-items:center;justify-content:center}ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-desc .content-wrapper:after,ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-asc .content-wrapper:after{font:var(--fa-font-solid);content:\"\\f062\";display:inline-flex}ec-table.is-sortable th[data-sortfield].is-resizable.is-sorted-desc .content-wrapper:after{transform:scaleY(-1)}ec-table.is-sortable th[data-sortfield].is-resizable.text-right .content-wrapper{flex-direction:row-reverse}ec-table.is-sortable th[data-sortfield]:not(.is-resizable){cursor:pointer}ec-table.is-sortable th[data-sortfield]:not(.is-resizable):after{width:.875rem;height:.875rem;margin:0 .25rem;font-size:.75rem;display:none;align-items:center;justify-content:center}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-desc:after,ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-asc:after{font:var(--fa-font-solid);content:\"\\f062\";display:inline-flex}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).is-sorted-desc:after{transform:scaleY(-1)}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right:after{content:\"\";display:none!important}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right:before{width:.875rem;height:.875rem;margin:0 .25rem;font-size:.75rem;display:none;align-items:center;justify-content:center}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-desc:before,ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-asc:before{font:var(--fa-font-solid);content:\"\\f062\";display:inline-block}ec-table.is-sortable th[data-sortfield]:not(.is-resizable).text-right.is-sorted-desc:before{transform:scaleY(-1)}ec-table.is-resizable .main-table{table-layout:fixed;width:100%}ec-table.is-resizable th.is-resizable{position:relative;overflow:visible;z-index:var(--ec-z-index-sticky-header)}ec-table.is-resizable th.is-resizable.is-active{-webkit-user-select:none;user-select:none}ec-table.is-resizable th.is-resizable.is-active .handle:after{background-color:var(--ec-color-interactive)}ec-table.is-resizable th.is-resizable .handle{position:absolute;width:13px;height:100%;top:0;padding:0 5px;z-index:var(--ec-z-index-splitter);right:0;padding:.5rem 0 .5rem 10px}ec-table.is-resizable th.is-resizable .handle:after{content:\"\";display:block;transition:background-color .3s ease;height:100%;position:relative}ec-table.is-resizable th.is-resizable .handle:hover{cursor:col-resize}ec-table.is-resizable th.is-resizable .handle:hover:after{background-color:var(--ec-color-interactive)}ec-table.is-resizable th.is-resizable .handle:before{content:\"\";display:block;width:1px;background-color:var(--ec-border-color);position:absolute;top:.5rem;bottom:.5rem;right:0}ec-table.is-resizable th.is-resizable .content{overflow:hidden;text-overflow:clip;white-space:nowrap}ec-table.is-resizable th.is-resizable:last-child .handle:before{display:none}ec-table.is-resizable td,ec-table.is-resizable th{overflow:hidden;text-overflow:clip;white-space:nowrap}ec-table.is-selectable .main-table thead th{height:3rem}ec-table.is-selectable .main-table tbody>tr:hover>td{background-color:var(--ec-background-color-hover);border-color:transparent;cursor:pointer}ec-table.is-selectable .main-table tbody>tr:hover.is-selected{background-color:var(--ec-background-color-selected)}ec-table.is-selectable .main-table tbody>tr:hover+tr>td{border-color:var(--ec-background-color-hover)}ec-table.is-selectable th.is-resizable .handle{padding-top:1rem;padding-bottom:1rem}ec-table.is-selectable th.is-resizable .handle:before{top:1rem;bottom:1rem}ec-table.is-master-detail>table{table-layout:fixed}ec-table.is-form-table td{padding-bottom:.25rem;padding-top:.25rem;height:2.5rem;line-height:2rem;border-top:0;font-size:var(--ec-font-size-body)}ec-table.is-form-table tr:first-child td{padding-top:.5rem;height:2.75rem}ec-table.is-form-table tr:last-child td{padding-bottom:.5rem;height:2.75rem}ec-table.is-fixed .main-table{table-layout:fixed}\n"] }]
193
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }], propDecorators: { id: [{
194
- type: HostBinding,
195
- args: ['attr.id']
196
- }, {
197
- type: Input
198
- }], scrollable: [{
199
- type: HostBinding,
200
- args: ['class.is-scrollable']
201
- }, {
202
- type: Input
203
- }], resizable: [{
204
- type: HostBinding,
205
- args: ['class.is-resizable']
206
- }, {
207
- type: Input
208
- }], condensed: [{
209
- type: HostBinding,
210
- args: ['class.is-condensed']
211
- }, {
212
- type: Input
213
- }], sortable: [{
214
- type: HostBinding,
215
- args: ['class.is-sortable']
216
- }, {
217
- type: Input
218
- }], selectionContext: [{
219
- type: Input
220
- }], selectionToolbarTemplate: [{
221
- type: Input
222
- }], selectable: [{
223
- type: HostBinding,
224
- args: ['class.is-selectable']
225
- }, {
226
- type: Input
227
- }], isForm: [{
228
- type: HostBinding,
229
- args: ['class.is-form-table']
230
- }, {
231
- type: Input
232
- }], sort: [{
233
- type: Input
234
- }], sortChange: [{
235
- type: Output
236
- }], hasMasterDetailRows: [{
237
- type: HostBinding,
238
- args: ['class.is-master-detail']
239
- }], masterRows: [{
240
- type: ContentChildren,
241
- args: [TableMasterRowComponent, { descendants: true }]
242
- }], _resizableColumns: [{
243
- type: ContentChildren,
244
- args: [ResizableColumnComponent, { descendants: true }]
245
- }], searchableTableResizableColumns: [{
246
- type: Input,
247
- args: ['resizableColumns']
248
- }] } });
249
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQyxTQUFTLEVBQUUsZUFBZSxFQUFjLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUF3QixNQUFNLEVBQW9ELGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdPLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7OztBQWV2RSxNQUFNLE9BQU8sY0FBYztJQTRHekIsWUFBb0IsUUFBbUIsRUFBUyxFQUFjO1FBQTFDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBUyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBMUdyRCxPQUFFLEdBQUcsRUFBRSxDQUFDO1FBRWpCOzs7V0FHRztRQUVNLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFNUI7OztXQUdHO1FBRU0sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQjs7OztXQUlHO1FBRU0sY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUzQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O1dBa0JHO1FBRU0sYUFBUSxHQUFHLEtBQUssQ0FBQztRQWExQixpREFBaUQ7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RUFBQztnQkFHRyxpQkFBaUI7c0JBQWhGLGVBQWU7dUJBQUMsd0JBQXdCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUVuQywrQkFBK0I7c0JBQXpELEtBQUs7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT3V0cHV0LCBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSZXNpemFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuL3Jlc2l6YWJsZS1jb2x1bW4uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVNYXN0ZXJSb3dDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLW1hc3Rlci1yb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB9IGZyb20gJy4vdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCB0eXBlIFRhYmxlU29ydERpcmVjdGlvbiA9ICdkZXNjJyB8ICdhc2MnO1xyXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlU29ydCB7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICBkaXJlY3Rpb246IFRhYmxlU29ydERpcmVjdGlvbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdlYy10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXR7XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcclxuICBASW5wdXQoKSBpZCA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBFbmFibGVzIHRhYmxlIHNjcm9sbGluZyB3aXRoIGEgc3RpY2t5IGhlYWRlciBhbmQgZm9vdGVyLiBVc2VcclxuICAgKiA8dGhlYWQ+IGFuZCA8dGZvb3Q+IGVsZW1lbnRzIGZvciBzdHlsZXMgdG8gYmUgYXBwbGllZCBjb3JyZWN0bHkuIFxyXG4gICAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtc2Nyb2xsYWJsZScpXHJcbiAgQElucHV0KCkgc2Nyb2xsYWJsZSA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIEVuYWJsZXMgcmVzaXphYmxlIHRhYmxlIGNvbHVtbnMuIEFwcGx5IHRoZSAnaXMtcmVzaXphYmxlJyBjbGFzc1xyXG4gICAqIHRvIHRoZSA8dGg+IG9mIGEgdGFibGUgY29sdW1uIHRoYW4gY2FuIGJlIHJlc2l6ZWQuXHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1yZXNpemFibGUnKVxyXG4gIEBJbnB1dCgpIHJlc2l6YWJsZSA9IGZhbHNlO1xyXG4gIFxyXG4gIC8qKiBcclxuICAgKiBUdXJucyBvbiBjb25kZW5zZWQgdGFibGUgc3R5bGluZy4gQnkgZGVmYXVsdCBhIGNvbmRlbnNlZCB0YWJsZVxyXG4gICAqIGhhcyBubyByb3cgYm9yZGVycy4gVG8gc2hvdyBib3JkZXJzLCBhcHBseSB0aGUgJ2hhcy1ib3JkZXJzJyBjbGFzc1xyXG4gICAqIHRvIHRoZSA8ZWMtdGFibGU+IGVsZW1lbnRcclxuICAgKi9cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzLWNvbmRlbnNlZCcpXHJcbiAgQElucHV0KCkgY29uZGVuc2VkID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqIFxyXG4gICAqIEVuYWJsZXMgc29ydGluZyBieSBjbGlja2luZyBvbiB0YWJsZSBjb2x1bW5zLiBUbyBtYWtlIGEgY29sdW1uIHNvcnRhYmxlXHJcbiAgICogYXBwbHkgdGhlIGBkYXRhLXNvcnRhYmxlYCBhdHRyaWJ1dGUgdG8gdGhlIGNvbHVtbnMgYDx0aD5gIGVsZW1lbnQgd2l0aCBcclxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkIHVzZWQgdG8gc29ydCB0aGUgY29sdW1uLiBXaGVuIGEgY29sdW1uIGlzIGNsaWNrZWRcclxuICAgKiB0aGUgZmllbGRzIGFuZCBjdXJyZW50IHNvcnQgZGlyZWN0aW9uIGlzIGVtaXR0ZWQgZnJvbSB0aGUgYHNvcnRDaGFuZ2VgXHJcbiAgICogb3V0cHV0XHJcbiAgICogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBodG1sXHJcbiAgICogPGVjLXRhYmxlIFtzb3J0YWJsZV09XCJ0cnVlXCIgW3NvcnRdPVwiY3VycmVudFNvcnRcIiAoc29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPlxyXG4gICAqICA8dGhlYWQ+XHJcbiAgICogICAgPHRoIGRhdGEtc29ydGFibGU9XCJuYW1lXCI+TmFtZTwvdGg+XHJcbiAgICogICAgPHRoIGRhdGEtc29ydGFibGU9XCJxdHlcIj5RdHkuPC90aD5cclxuICAgKiAgICA8dGggZGF0YS1zb3J0YWJsZT1cInByaWNlXCI+UHJpY2U8L3RoPlxyXG4gICAqICA8L3RoZWFkPlxyXG4gICAqICAuLi5cclxuICAgKiA8L2VjLXRhYmxlPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtc29ydGFibGUnKVxyXG4gIEBJbnB1dCgpIHNvcnRhYmxlID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogU2hhcmVkIGNvbnRleHQgb2YgVGFibGVTZWxlY3RhYmxlUm93Q29tcG9uZW50cyBpbiB0aGUgdGFibGUuIFdpbGwgdHVybiBvbiBoaWdobGlnaHRpbmcgb24gcm93IGhvdmVyLlxyXG4gICAqIEFkZCB0aGUgYFRhYmxlU2VsZWN0YWJsZVJvd0NvbXBvbmVudGAgdG8gdGhlIHRhYmxlIGNvbnRlbnQgdG8gYWRkIGNoZWNrYm94ZXMgdG8gZWFjaCByb3cgYW5kIGFzc2lnbiBhIFxyXG4gICAqIFRlbXBsYXRlUmVmIHRvIHRoZSBgW3NlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZV1gIGlucHV0IHRoYXQgaW5jbHVkZXMgYWN0aW9ucyB0byB0YWtlIG9uIHNlbGVjdGVkIGl0ZW1zIFxyXG4gICAqIHRoYXQgd2lsbCBhcHBlYXIgb3ZlciB0aGUgdGFibGUgaGVhZGVyIHdoZW4gMSBvciBtb3JlIHJvd3MgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvbkNvbnRleHQ/OiBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0O1xyXG5cclxuICAvKiogSW5jbHVkZSBhY3Rpb25zIHRvIGRpc3BsYXkgaW4gYSBiYXIgb3ZlciB0aGUgdGFibGUgaGVhZGVyIHdoZW4gMSBvciBtb3JlIHJvd3MgYXJlIHNlbGVjdGVkLiBSZXF1aXJlcyBgW3NlbGVjdGlvbkNvbnRleHRdYCB0byBiZSBkZWZpbmVkICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBcclxuICAvKiogU2V0IHRvIHRydWUgaWYgc2VsZWN0aW9uQ29udGV4dCBpcyBkZWZpbmVkICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1zZWxlY3RhYmxlJylcclxuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gZmFsc2U7XHJcblxyXG4gIC8qKiBIaWRlcy9zaG93cyB0aGUgc2VsZWN0aW9uIHRvb2xiYXIgdGVtcGxhdGUgd2hlbiAxIG9yIG1vcmUgcm93cyBpcyBzZWxlY3RlZCAqL1xyXG4gIGhhc1NlbGVjdGlvbiA9IGZhbHNlXHJcblxyXG4gIC8qKlxyXG4gICAqIEVuYWJsZXMgZm9ybSB0YWJsZSBzdHlsaW5nIHRvIGFsbG93IGZvcm0gY29udHJvbHMgaW5zaWRlIHRhYmxlIGNlbGxzLlxyXG4gICAqL1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaXMtZm9ybS10YWJsZScpXHJcbiAgQElucHV0KCkgaXNGb3JtID0gZmFsc2U7XHJcbiAgXHJcbiAgLyoqXHJcbiAgICogVGhlIGN1cnJlbnQgc29ydCBmaWVsZCBhbmQgZGlyZWN0aW9uICgnZGVzYycgb3IgJ2FzYycpXHJcbiAgICovXHJcbiAgQElucHV0KCkgc29ydD86IFRhYmxlU29ydCB8IFRhYmxlU29ydFtdO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0cyB0aGUgbmV3IHNvcnQgdmFsdWUgd2hlbmV2ZXIgYSBzb3J0YWJsZSBjb2x1bW4gaXMgY2xpY2tlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTb3J0IHwgVGFibGVTb3J0W10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBUcnVlIGlmIGEgVGFibGVNYXN0ZXJSb3dDb21wb25lbnQgZXhpc3RzIGluIHRoZSB0YWJsZSBjb250ZW50XHJcbiAgICovXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pcy1tYXN0ZXItZGV0YWlsJykgaGFzTWFzdGVyRGV0YWlsUm93cyA9IGZhbHNlO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlTWFzdGVyUm93Q29tcG9uZW50LCB7ZGVzY2VuZGFudHM6IHRydWV9KSBtYXN0ZXJSb3dzITogUXVlcnlMaXN0PFRhYmxlTWFzdGVyUm93Q29tcG9uZW50PjtcclxuXHJcbiAgcHVibGljIHJlc2l6YWJsZUNvbHVtbnMhOiBRdWVyeUxpc3Q8UmVzaXphYmxlQ29sdW1uQ29tcG9uZW50PjtcclxuICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgX3Jlc2l6YWJsZUNvbHVtbnMhOiBRdWVyeUxpc3Q8UmVzaXphYmxlQ29sdW1uQ29tcG9uZW50PjtcclxuXHJcbiAgQElucHV0KCdyZXNpemFibGVDb2x1bW5zJykgc2VhcmNoYWJsZVRhYmxlUmVzaXphYmxlQ29sdW1ucz86IFF1ZXJ5TGlzdDxSZXNpemFibGVDb2x1bW5Db21wb25lbnQ+O1xyXG5cclxuICAvKipcclxuICAgKiBVbmxpc3RlbiBmdW5jdGlvbiByZXR1cm5lZCBieSBgcmVuZGVyZXIubGlzdGVuKClgIHRoYXQgYXJlIGNhbGxlZFxyXG4gICAqIE9uRGVzdHJveSB0byBjbGVhbiB1cCBhbGwgbGlzdGVuZXJzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1bmxpc3RlbmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcclxuICBcclxuICAvKiogVGhlIGN1cnJlbnQgc29ydCB2YWx1ZSAqL1xyXG4gIHByaXZhdGUgY3VycmVudFNvcnQ/OiBUYWJsZVNvcnQgfCBUYWJsZVNvcnRbXTtcclxuICBcclxuICAvKiogQSBtYXAgb2Ygc29ydGFibGUgYDx0aD5gIGVsZW1lbnRzICovXHJcbiAgcHJpdmF0ZSBzb3J0YWJsZUNvbHM6IHtbZmllbGQ6IHN0cmluZ106IEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50fSA9IHt9O1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3llZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNvcnRhYmxlICYmIGNoYW5nZXMuc29ydCAmJiBjaGFuZ2VzLnNvcnQuY3VycmVudFZhbHVlICYmICFjaGFuZ2VzLnNvcnQuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgY29uc3QgbmV3VmFsdWU6IFRhYmxlU29ydCB8IFRhYmxlU29ydFtdID0gY2hhbmdlcy5zb3J0LmN1cnJlbnRWYWx1ZTtcclxuICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTb3J0IHx8ICFpc0VxdWFsKG5ld1ZhbHVlLCB0aGlzLmN1cnJlbnRTb3J0KSl7XHJcbiAgICAgICAgdGhpcy5vblNvcnQobmV3VmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhc01hc3RlckRldGFpbFJvd3MgPSAhIXRoaXMubWFzdGVyUm93cy5sZW5ndGg7XHJcbiAgICBcclxuICAgIHRoaXMubWFzdGVyUm93cy5jaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5oYXNNYXN0ZXJEZXRhaWxSb3dzID0gISF0aGlzLm1hc3RlclJvd3MubGVuZ3RoO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZXNpemFibGVDb2x1bW5zID0gdGhpcy5zZWFyY2hhYmxlVGFibGVSZXNpemFibGVDb2x1bW5zIHx8IHRoaXMuX3Jlc2l6YWJsZUNvbHVtbnM7XHJcbiAgfVxyXG4gIFxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNvcnRhYmxlKSB7XHJcbiAgICAgIHRoaXMuaW5pdFNvcnRhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xyXG4gICAgICB0aGlzLmluaXRTZWxlY3RhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudW5saXN0ZW5lcnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudW5saXN0ZW5lcnMuZm9yRWFjaCh1bmxpc3RlbiA9PiB1bmxpc3RlbigpKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95ZWQudW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbGwgZWxlbWVudHMgaW5zaWRlIHRoZSBob3N0IGVsZW1lbnQgdGhhdCBtYXRjaCBhIHNlbGVjdG9yIFxyXG4gICAqIEBwYXJhbSBzZWxlY3RvciAtIEFueSB2YWxpZCBzZWxlY3RvciBmb3IgW3F1ZXJ5U2VsZWN0b3JBbGxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudC9xdWVyeVNlbGVjdG9yQWxsKVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcXVlcnlFbGVtZW50czxUPihzZWxlY3Rvcjogc3RyaW5nKTogVFtdIHtcclxuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgcmV0dXJuIEFycmF5LmZyb20odGFibGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgYSBgPHRoPmAgZm9yIGVhY2ggc29ydGFibGUgY29sdW1uIGFuZCBhdHRhY2ggYSBjbGlja1xyXG4gICAqIGV2ZW50IGxpc3RlbmVyLiBcclxuICAgKi9cclxuICBwcml2YXRlIGluaXRTb3J0YWJsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMucXVlcnlFbGVtZW50czxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudD4oJ3RoJykuZm9yRWFjaCh0aCA9PiB7XHJcbiAgICAgIGlmICh0aC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc29ydGZpZWxkJykpIHtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoLmdldEF0dHJpYnV0ZSgnZGF0YS1zb3J0ZmllbGQnKTtcclxuICAgICAgICBpZiAoZmllbGQpIHtcclxuICAgICAgICAgIHRoaXMuc29ydGFibGVDb2xzW2ZpZWxkXSA9IHRoO1xyXG4gICAgICAgICAgY29uc3QgdW5saXN0ZW4gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aCwgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBEbyBub3Qgc29ydCBpZiB0aGUgZXZlbnQgdGFyZ2V0IHdhcyB0aGUgcmVzaXphYmxlIGhhbmRsZVxyXG4gICAgICAgICAgICBpZiAodGguY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1yZXNpemFibGUnKSAmJiBldmVudC50YXJnZXQgJiYgKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlJykpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBkaXJlY3Rpb246IFRhYmxlU29ydERpcmVjdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aC5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLXNvcnRlZC1kZXNjJykpIHtcclxuICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAnYXNjJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAnZGVzYyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMub25Tb3J0KHsgZmllbGQsIGRpcmVjdGlvbiB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gIFxyXG4gICAgICAgICAgLy8gU3RvcmUgdW5saXN0ZW4gZnVuY3Rpb24gdG8gcmVtb3ZlIGxpc3RlbmVyIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxyXG4gICAgICAgICAgdGhpcy51bmxpc3RlbmVycy5wdXNoKHVubGlzdGVuKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgZGF0YS1zb3J0ZmllbGQgYXR0cmlidXRlIHdhcyBub3QgYXNzaWduZWQgYSB2YWx1ZS5gLCB0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBTZXQgdGhlIGluaXRpYWwgc29ydFxyXG4gICAgaWYgKHRoaXMuc29ydCkge1xyXG4gICAgICB0aGlzLm9uU29ydCh0aGlzLnNvcnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCB0aGUgc29ydGVkIGNvbHVtbiBhbmQgYXBwbHkgdGhlIGRlc2Mgb3IgYXNjIGNsYXNzIGluIG9yZGVyXHJcbiAgICogdG8gc2hvdyB0aGUgY29ycmVjdCBzb3J0IGljb24uIElmIGFub3RoZXIgZmllbGQgd2FzIHNvcnRlZCwgcmVzZXQgaXQuXHJcbiAgICogRW1pdCB0aGUgY3VycmVudCBmaWVsZCBhbmQgZGlyZWN0aW9uIG9mIHRoZSBzb3J0ZWQgY29sdW1uXHJcbiAgICogQHBhcmFtIGZpZWxkIFxyXG4gICAqL1xyXG4gIHByaXZhdGUgb25Tb3J0KHNvcnQ6IFRhYmxlU29ydCB8IFRhYmxlU29ydFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyU29ydCgpO1xyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHNvcnQpKSB7XHJcbiAgICAgIHNvcnQuZm9yRWFjaChzID0+IHRoaXMuYXBwbHlTb3J0KHMpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXBwbHlTb3J0KHNvcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY3VycmVudFNvcnQgPSBjbG9uZURlZXAoc29ydCk7XHJcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRTb3J0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTb3J0KCkge1xyXG4gICAgT2JqZWN0LnZhbHVlcyh0aGlzLnNvcnRhYmxlQ29scykuZm9yRWFjaCh0aCA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGgsIGBpcy1zb3J0ZWQtYXNjYCk7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGgsIGBpcy1zb3J0ZWQtZGVzY2ApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5U29ydChzb3J0OiBUYWJsZVNvcnQpIHtcclxuICAgIGNvbnN0IHRoID0gdGhpcy5zb3J0YWJsZUNvbHNbc29ydC5maWVsZF07XHJcbiAgICBpZiAoIXRoKSB7IHJldHVybjsgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGgsIGBpcy1zb3J0ZWQtJHtzb3J0LmRpcmVjdGlvbn1gKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdFNlbGVjdGFibGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQhLnJvd0NoZWNrYm94ZXMudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcclxuICAgICkuc3Vic2NyaWJlKCh2YWx1ZTogYm9vbGVhbltdKSA9PiB7XHJcbiAgICAgIHRoaXMuaGFzU2VsZWN0aW9uID0gdmFsdWUuc29tZSh2ID0+IHYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJzZWxlY3RhYmxlLXRhYmxlLXRvb2xiYXJcIlxyXG4gICAgICpuZ0lmPVwiaGFzU2VsZWN0aW9uICYmIHNlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3Rpb25Ub29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxkaXYgaWQ9XCJ7e2lkfX0tc2Nyb2xsLWNvbnRhaW5lclwiIFxyXG4gICAgIGNsYXNzPVwidGFibGUtc2Nyb2xsLWNvbnRhaW5lclwiXHJcbiAgICAgY2RrU2Nyb2xsYWJsZT5cclxuICA8dGFibGUgY2xhc3M9XCJtYWluLXRhYmxlXCJcclxuICAgICAgICAgaWQ9XCJ7e2lkfX1cIlxyXG4gICAgICAgICBbZWNSZXNpemFibGVUYWJsZV09XCJyZXNpemFibGVcIlxyXG4gICAgICAgICBbY29udGFpbmVyRWxdPVwiZWxcIlxyXG4gICAgICAgICBbc29ydGFibGVUYWJsZV09XCJzb3J0YWJsZVwiXHJcbiAgICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInJlc2l6YWJsZUNvbHVtbnNcIj5cclxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICA8L3RhYmxlPlxyXG48L2Rpdj4iXX0=