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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/esm2022/energycap-components.mjs +5 -0
  2. package/esm2022/lib/components.module.mjs +423 -0
  3. package/esm2022/lib/controls/banner/banner.component.mjs +109 -0
  4. package/esm2022/lib/controls/button/button.component.mjs +106 -0
  5. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +67 -0
  6. package/esm2022/lib/controls/button/copy-button.directive.mjs +28 -0
  7. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +43 -0
  8. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +91 -0
  9. package/esm2022/lib/controls/calendar/calendar.component.mjs +248 -0
  10. package/esm2022/lib/controls/calendar/calendar.types.mjs +2 -0
  11. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +140 -0
  12. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -0
  13. package/esm2022/lib/controls/combobox/combobox.component.mjs +879 -0
  14. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +57 -0
  15. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +62 -0
  16. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +100 -0
  17. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +101 -0
  18. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +76 -0
  19. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +79 -0
  20. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +210 -0
  21. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +81 -0
  22. package/esm2022/lib/controls/date-input/date-input.component.mjs +464 -0
  23. package/esm2022/lib/controls/date-input/date-input.types.mjs +44 -0
  24. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +243 -0
  25. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +261 -0
  26. package/esm2022/lib/controls/form-control/form-control.component.mjs +98 -0
  27. package/esm2022/lib/controls/form-control-base.mjs +151 -0
  28. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  29. package/esm2022/lib/controls/form-group/form-group.component.mjs +261 -0
  30. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +31 -0
  31. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +329 -0
  32. package/esm2022/lib/controls/link-button/link-button.component.mjs +11 -0
  33. package/esm2022/lib/controls/menu/menu.component.mjs +485 -0
  34. package/esm2022/lib/controls/navigation/link-item.mjs +2 -0
  35. package/esm2022/lib/controls/navigation/nav-group.mjs +39 -0
  36. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  37. package/esm2022/lib/controls/navigation/nav-item.mjs +2 -0
  38. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +372 -0
  39. package/esm2022/lib/controls/popover/popover.component.mjs +117 -0
  40. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +3 -0
  41. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +82 -0
  42. package/esm2022/lib/controls/select/select.component.mjs +88 -0
  43. package/esm2022/lib/controls/tabs/tabs.component.mjs +47 -0
  44. package/esm2022/lib/controls/textbox/textbox.component.mjs +155 -0
  45. package/esm2022/lib/core/cache.service.mjs +105 -0
  46. package/esm2022/lib/core/custom-validators.mjs +29 -0
  47. package/esm2022/lib/core/date-time-helper.mjs +228 -0
  48. package/esm2022/lib/core/error.service.mjs +61 -0
  49. package/esm2022/lib/core/router-helper.service.mjs +111 -0
  50. package/esm2022/lib/core/scroll.service.mjs +89 -0
  51. package/esm2022/lib/core/telemetry-tracker.service.mjs +16 -0
  52. package/esm2022/lib/core/telemetry.service.mjs +38 -0
  53. package/esm2022/lib/core/validation-message.service.mjs +185 -0
  54. package/esm2022/lib/core/validation-patterns.mjs +31 -0
  55. package/esm2022/lib/core/window.service.mjs +186 -0
  56. package/esm2022/lib/display/app-bar/app-bar.component.mjs +46 -0
  57. package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
  58. package/esm2022/lib/display/avatar/avatar.service.mjs +64 -0
  59. package/esm2022/lib/display/confirm/confirm.component.mjs +168 -0
  60. package/esm2022/lib/display/dialog/dialog-content.mjs +2 -0
  61. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  62. package/esm2022/lib/display/dialog/dialog-types.mjs +77 -0
  63. package/esm2022/lib/display/dialog/dialog.component.mjs +281 -0
  64. package/esm2022/lib/display/dialog/dialog.service.mjs +71 -0
  65. package/esm2022/lib/display/help/help-types.mjs +2 -0
  66. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +111 -0
  67. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +54 -0
  68. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -0
  69. package/esm2022/lib/display/item-display/item-display.component.mjs +81 -0
  70. package/esm2022/lib/display/json-display/json-display.component.mjs +47 -0
  71. package/esm2022/lib/display/resizable/resizable-base.mjs +120 -0
  72. package/esm2022/lib/display/resizable/resizable.component.mjs +57 -0
  73. package/esm2022/lib/display/spinner/spinner.component.mjs +12 -0
  74. package/esm2022/lib/display/splash/splash.component.mjs +42 -0
  75. package/esm2022/lib/display/splash/splash.service.mjs +35 -0
  76. package/esm2022/lib/display/table/resizable-column.component.mjs +20 -0
  77. package/esm2022/lib/display/table/resizable-table.directive.mjs +227 -0
  78. package/esm2022/lib/display/table/searchable-table.component.mjs +342 -0
  79. package/esm2022/lib/display/table/table-detail-row.component.mjs +28 -0
  80. package/esm2022/lib/display/table/table-locked-column.component.mjs +58 -0
  81. package/esm2022/lib/display/table/table-master-header-row.component.mjs +14 -0
  82. package/esm2022/lib/display/table/table-master-row.component.mjs +163 -0
  83. package/esm2022/lib/display/table/table-pagination.component.mjs +155 -0
  84. package/esm2022/lib/display/table/table-selectable-row.component.mjs +235 -0
  85. package/esm2022/lib/display/table/table.component.mjs +249 -0
  86. package/esm2022/lib/display/tags/tag.mjs +18 -0
  87. package/esm2022/lib/display/tags/tags.component.mjs +77 -0
  88. package/esm2022/lib/display/toast/toast/toast.component.mjs +77 -0
  89. package/esm2022/lib/display/toast/toast-types.mjs +8 -0
  90. package/esm2022/lib/display/toast/toast.service.mjs +35 -0
  91. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +114 -0
  92. package/esm2022/lib/display/tooltip/tooltip.component.mjs +28 -0
  93. package/esm2022/lib/display/tooltip/tooltip.service.mjs +78 -0
  94. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +173 -0
  95. package/esm2022/lib/display/tour/tour-types.mjs +34 -0
  96. package/esm2022/lib/display/tour/tour.component.mjs +398 -0
  97. package/esm2022/lib/display/tour/tour.service.mjs +75 -0
  98. package/esm2022/lib/display/tree/tree.component.mjs +135 -0
  99. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  100. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  101. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  102. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +100 -0
  103. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
  104. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  105. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  106. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +62 -0
  107. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  108. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  109. package/esm2022/lib/shared/display.mjs +6 -0
  110. package/esm2022/lib/shared/form-group.helper.mjs +67 -0
  111. package/esm2022/lib/shared/json-helper.mjs +19 -0
  112. package/esm2022/lib/shared/lodash-helper.mjs +52 -0
  113. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +387 -0
  114. package/esm2022/lib/shared/page/page-statuses.mjs +23 -0
  115. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +23 -0
  116. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +147 -0
  117. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +17 -0
  118. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +17 -0
  119. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +38 -0
  120. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
  121. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +148 -0
  122. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +40 -0
  123. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +57 -0
  124. package/esm2022/lib/shared/user-preference.service.mjs +17 -0
  125. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  126. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -0
  127. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -0
  128. package/esm2022/public-api.mjs +117 -0
  129. package/fesm2022/energycap-components.mjs +13219 -0
  130. package/fesm2022/energycap-components.mjs.map +1 -0
  131. package/index.d.ts +5 -0
  132. package/lib/components.module.d.ts +92 -0
  133. package/lib/controls/banner/banner.component.d.ts +50 -0
  134. package/lib/controls/button/button.component.d.ts +78 -0
  135. package/lib/controls/button/copy-button-base.directive.d.ts +20 -0
  136. package/lib/controls/button/copy-button.directive.d.ts +14 -0
  137. package/lib/controls/button/copy-table-button.directive.d.ts +19 -0
  138. package/lib/controls/calendar/calendar-item.component.d.ts +22 -0
  139. package/lib/controls/calendar/calendar.component.d.ts +52 -0
  140. package/lib/controls/calendar/calendar.types.d.ts +11 -0
  141. package/lib/controls/checkbox/checkbox.component.d.ts +65 -0
  142. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -0
  143. package/lib/controls/combobox/combobox.component.d.ts +418 -0
  144. package/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.d.ts +42 -0
  145. package/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.d.ts +21 -0
  146. package/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.d.ts +21 -0
  147. package/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.d.ts +21 -0
  148. package/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.d.ts +18 -0
  149. package/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.d.ts +18 -0
  150. package/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.d.ts +21 -0
  151. package/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.d.ts +20 -0
  152. package/lib/controls/date-input/date-input.component.d.ts +115 -0
  153. package/lib/controls/date-input/date-input.types.d.ts +62 -0
  154. package/lib/controls/dropdown/dropdown.component.d.ts +161 -0
  155. package/lib/controls/file-upload/file-upload.component.d.ts +124 -0
  156. package/lib/controls/form-control/form-control.component.d.ts +28 -0
  157. package/lib/controls/form-control-base.d.ts +110 -0
  158. package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -0
  159. package/lib/controls/form-group/form-group.component.d.ts +105 -0
  160. package/lib/controls/help-popover/help-popover.component.d.ts +11 -0
  161. package/lib/controls/item-picker/item-picker.component.d.ts +164 -0
  162. package/lib/controls/link-button/link-button.component.d.ts +5 -0
  163. package/lib/controls/menu/menu.component.d.ts +255 -0
  164. package/lib/controls/navigation/link-item.d.ts +32 -0
  165. package/lib/controls/navigation/nav-group.d.ts +18 -0
  166. package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -0
  167. package/lib/controls/navigation/nav-item.d.ts +31 -0
  168. package/lib/controls/numericbox/numericbox.component.d.ts +148 -0
  169. package/lib/controls/popover/popover.component.d.ts +51 -0
  170. package/lib/controls/radio-button/radio-button-option.d.ts +19 -0
  171. package/lib/controls/radio-button/radio-button.component.d.ts +53 -0
  172. package/lib/controls/select/select.component.d.ts +44 -0
  173. package/lib/controls/tabs/tabs.component.d.ts +30 -0
  174. package/lib/controls/textbox/textbox.component.d.ts +107 -0
  175. package/lib/core/cache.service.d.ts +33 -0
  176. package/lib/core/custom-validators.d.ts +20 -0
  177. package/lib/core/date-time-helper.d.ts +101 -0
  178. package/lib/core/error.service.d.ts +20 -0
  179. package/lib/core/router-helper.service.d.ts +48 -0
  180. package/lib/core/scroll.service.d.ts +36 -0
  181. package/lib/core/telemetry-tracker.service.d.ts +13 -0
  182. package/lib/core/telemetry.service.d.ts +31 -0
  183. package/lib/core/validation-message.service.d.ts +26 -0
  184. package/lib/core/validation-patterns.d.ts +22 -0
  185. package/lib/core/window.service.d.ts +116 -0
  186. package/lib/display/app-bar/app-bar.component.d.ts +20 -0
  187. package/lib/display/avatar/avatar.component.d.ts +35 -0
  188. package/lib/display/avatar/avatar.service.d.ts +24 -0
  189. package/lib/display/confirm/confirm.component.d.ts +123 -0
  190. package/lib/display/dialog/dialog-content.d.ts +19 -0
  191. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -0
  192. package/lib/display/dialog/dialog-types.d.ts +130 -0
  193. package/lib/display/dialog/dialog.component.d.ts +120 -0
  194. package/lib/display/dialog/dialog.service.d.ts +48 -0
  195. package/lib/display/help/help-types.d.ts +33 -0
  196. package/lib/display/hierarchy/hierarchy-base.d.ts +97 -0
  197. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -0
  198. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -0
  199. package/lib/display/item-display/item-display.component.d.ts +43 -0
  200. package/lib/display/json-display/json-display.component.d.ts +16 -0
  201. package/lib/display/resizable/resizable-base.d.ts +67 -0
  202. package/lib/display/resizable/resizable.component.d.ts +31 -0
  203. package/lib/display/spinner/spinner.component.d.ts +5 -0
  204. package/lib/display/splash/splash.component.d.ts +16 -0
  205. package/lib/display/splash/splash.service.d.ts +22 -0
  206. package/lib/display/table/resizable-column.component.d.ts +10 -0
  207. package/lib/display/table/resizable-table.directive.d.ts +93 -0
  208. package/lib/display/table/searchable-table.component.d.ts +206 -0
  209. package/lib/display/table/table-detail-row.component.d.ts +8 -0
  210. package/lib/display/table/table-locked-column.component.d.ts +20 -0
  211. package/lib/display/table/table-master-header-row.component.d.ts +9 -0
  212. package/lib/display/table/table-master-row.component.d.ts +113 -0
  213. package/lib/display/table/table-pagination.component.d.ts +91 -0
  214. package/lib/display/table/table-selectable-row.component.d.ts +102 -0
  215. package/lib/display/table/table.component.d.ts +121 -0
  216. package/lib/display/tags/tag.d.ts +18 -0
  217. package/lib/display/tags/tags.component.d.ts +48 -0
  218. package/lib/display/toast/toast/toast.component.d.ts +23 -0
  219. package/lib/display/toast/toast-types.d.ts +24 -0
  220. package/lib/display/toast/toast.service.d.ts +20 -0
  221. package/lib/display/toast/toaster/toaster.component.d.ts +35 -0
  222. package/lib/display/tooltip/tooltip.component.d.ts +70 -0
  223. package/lib/display/tooltip/tooltip.service.d.ts +16 -0
  224. package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -0
  225. package/lib/display/tour/tour-types.d.ts +70 -0
  226. package/lib/display/tour/tour.component.d.ts +147 -0
  227. package/lib/display/tour/tour.service.d.ts +38 -0
  228. package/lib/display/tree/tree.component.d.ts +75 -0
  229. package/lib/display/view-overlay/view-overlay.component.d.ts +38 -0
  230. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -0
  231. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -0
  232. package/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.d.ts +23 -0
  233. package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -0
  234. package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -0
  235. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -0
  236. package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -0
  237. package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -0
  238. package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -0
  239. package/lib/shared/display.d.ts +42 -0
  240. package/lib/shared/form-group.helper.d.ts +31 -0
  241. package/lib/shared/json-helper.d.ts +7 -0
  242. package/lib/shared/lodash-helper.d.ts +18 -0
  243. package/lib/shared/page/page-base/page-base.component.d.ts +259 -0
  244. package/lib/shared/page/page-statuses.d.ts +13 -0
  245. package/lib/shared/page/page-title/page-title.component.d.ts +9 -0
  246. package/lib/shared/page/page-view/page-view.component.d.ts +102 -0
  247. package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -0
  248. package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -0
  249. package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -0
  250. package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -0
  251. package/lib/shared/testing/public-mocks.spec.d.ts +90 -0
  252. package/lib/shared/testing/spy-factory.spec.d.ts +27 -0
  253. package/lib/shared/testing/translation-mocks.spec.d.ts +30 -0
  254. package/lib/shared/user-preference.service.d.ts +13 -0
  255. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -0
  256. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -0
  257. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -0
  258. package/package.json +1 -5
  259. package/public-api.d.ts +113 -0
  260. package/schematics/collection.json +10 -0
  261. package/schematics/rxjs-7-upgrade/index.d.ts +3 -0
  262. package/schematics/rxjs-7-upgrade/index.js +68 -0
  263. package/schematics/rxjs-7-upgrade/index.js.map +1 -0
  264. package/schematics/rxjs-7-upgrade/schema.d.ts +4 -0
  265. package/schematics/rxjs-7-upgrade/schema.js +3 -0
  266. package/schematics/rxjs-7-upgrade/schema.js.map +1 -0
  267. package/schematics/rxjs-7-upgrade/schema.json +14 -0
  268. package/schematics/utilities/typescript.d.ts +7 -0
  269. package/schematics/utilities/typescript.js +42 -0
  270. package/schematics/utilities/typescript.js.map +1 -0
  271. package/schematics/utilities/workspace.d.ts +8 -0
  272. package/schematics/utilities/workspace.js +72 -0
  273. package/schematics/utilities/workspace.js.map +1 -0
  274. package/src/assets/images/email-icon.png +0 -0
  275. package/src/assets/images/email-logo.png +0 -0
  276. package/src/assets/images/favicon-ech.svg +7 -0
  277. package/src/assets/images/favicon-esa.svg +6 -0
  278. package/src/assets/images/favicon-eum.svg +6 -0
  279. package/src/assets/images/favicon.svg +5 -0
  280. package/src/assets/images/icon-carbonhub.svg +10 -0
  281. package/src/assets/images/icon-eum.svg +5 -0
  282. package/src/assets/images/icon-ucp.svg +5 -0
  283. package/src/assets/images/icon-wattics.svg +5 -0
  284. package/src/assets/images/icon.svg +4 -0
  285. package/src/assets/images/logo.svg +3 -0
  286. package/src/assets/images/splash.gif +0 -0
  287. package/src/assets/locales/en_US.json +59 -0
  288. package/src/assets/scripts/unsupported-browser.js +17 -0
  289. package/src/styles/_base.scss +38 -0
  290. package/src/styles/_colors.scss +96 -0
  291. package/src/styles/_core.scss +4 -0
  292. package/src/styles/_functions.scss +114 -0
  293. package/src/styles/_global-variables.scss +232 -0
  294. package/src/styles/_icons.scss +24 -0
  295. package/src/styles/bootstrap/_grid.scss +34 -0
  296. package/src/styles/bootstrap/_reboot.scss +323 -0
  297. package/src/styles/components/_card.scss +21 -0
  298. package/src/styles/components/_link-icons.scss +38 -0
  299. package/src/styles/components/_splash.scss +57 -0
  300. package/src/styles/components/_unsupported-browsers.scss +24 -0
  301. package/src/styles/email/_email-base.scss +228 -0
  302. package/src/styles/email/email.scss +43 -0
  303. package/src/styles/index.scss +27 -0
  304. package/src/styles/mixins/_animations.scss +18 -0
  305. package/src/styles/mixins/_button-base.scss +185 -0
  306. package/src/styles/mixins/_card-base.scss +40 -0
  307. package/src/styles/mixins/_common.scss +52 -0
  308. package/src/styles/mixins/_dialog-base.scss +96 -0
  309. package/src/styles/mixins/_form-control-base.scss +641 -0
  310. package/src/styles/mixins/_login.scss +74 -0
  311. package/src/styles/mixins/_menu-base.scss +153 -0
  312. package/src/styles/mixins/_overlay-base.scss +33 -0
  313. package/src/styles/mixins/_resizable-base.scss +57 -0
  314. package/src/styles/mixins/_spinner-base.scss +34 -0
  315. package/src/styles/mixins/_table-base.scss +298 -0
  316. package/src/styles/mixins/_tabs-base.scss +110 -0
  317. package/src/styles/mixins/_tags-base.scss +116 -0
  318. package/src/styles/mixins/_text.scss +89 -0
  319. package/src/styles/mixins.scss +15 -0
  320. package/src/styles/utilities/_borders.scss +30 -0
  321. package/src/styles/utilities/_common.scss +49 -0
  322. package/src/styles/utilities/_layout.scss +116 -0
  323. package/src/styles/utilities/_spacing.scss +65 -0
  324. package/src/styles/utilities/_text.scss +139 -0
@@ -0,0 +1,163 @@
1
+ import { Component, Input, Output, EventEmitter, TemplateRef, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "../../controls/collapsible-toggle/collapsible-toggle.component";
5
+ import * as i3 from "./table-detail-row.component";
6
+ export class TableMasterRowComponent {
7
+ constructor(renderer, el, appRef) {
8
+ this.renderer = renderer;
9
+ this.el = el;
10
+ this.appRef = appRef;
11
+ /**
12
+ * Programmatically toggle the visibility of the detail row. Default is false.
13
+ */
14
+ this.showDetails = false;
15
+ /**
16
+ * Emits an event when the value of `showDetails` changes.
17
+ */
18
+ this.showDetailsChanged = new EventEmitter();
19
+ }
20
+ ngOnInit() {
21
+ if (!this.detailRowColSpan) {
22
+ console.error(`A value for [detailRowColSpan] is required to render a detail row correctly. This should be the number of columns TDs placed inside an tr[ecTableMasterRow].`);
23
+ }
24
+ this.parentNode = this.renderer.parentNode(this.el.nativeElement);
25
+ this.updateDetailRow();
26
+ }
27
+ ngOnChanges(changes) {
28
+ if (changes.hasDetails && !changes.hasDetails.firstChange && changes.hasDetails.currentValue !== undefined) {
29
+ this.updateDetailRow();
30
+ }
31
+ if (changes.showDetails && !changes.showDetails.firstChange && changes.showDetails.currentValue !== undefined) {
32
+ this.updateVisibility();
33
+ }
34
+ }
35
+ ngOnDestroy() {
36
+ this.removeDetailView();
37
+ }
38
+ /**
39
+ * When the master row has details, create the detail row and update it's visibility. If the master
40
+ * has no details, remove the detail row
41
+ */
42
+ updateDetailRow() {
43
+ if (this.hasDetails) {
44
+ if (!this.detailTemplate) {
45
+ console.error(`A value for the [detailTemplate] input is required when 'hasDetails' is true.`);
46
+ return;
47
+ }
48
+ // First check to see if the detailView is already present and if so, remove it so we don't get a
49
+ // duplicate detail view
50
+ if (this.detailView !== undefined) {
51
+ this.removeDetailView();
52
+ }
53
+ this.detailView = this.detailRowTemplate.createEmbeddedView({});
54
+ //solution to allowing change detection in embedded view adapted from here:
55
+ //https://github.com/angular/angular/issues/42977
56
+ this.appRef.attachView(this.detailView);
57
+ this.updateVisibility();
58
+ }
59
+ else {
60
+ this.removeDetailView();
61
+ }
62
+ }
63
+ /**
64
+ * Show/hide the detail row
65
+ */
66
+ toggleDetails(show) {
67
+ this.showDetails = show;
68
+ this.showDetailsChanged.emit(show);
69
+ this.updateVisibility();
70
+ }
71
+ updateVisibility() {
72
+ if (this.showDetails) {
73
+ this.show();
74
+ }
75
+ else {
76
+ this.hide();
77
+ }
78
+ }
79
+ /**
80
+ * Attach the detailView the change detection tree and insert the generated html
81
+ * of the detail row to DOM after the host element
82
+ */
83
+ show() {
84
+ if (this.detailView) {
85
+ //The nextSibling may have changed, so update it. (This could happen if the table is embedded in a searchable table
86
+ // and a search is performed)
87
+ this.siblingNode = this.renderer.nextSibling(this.el.nativeElement);
88
+ this.detailView.reattach();
89
+ this.detailView.detectChanges();
90
+ this.detailView.rootNodes.forEach(node => {
91
+ this.renderer.insertBefore(this.parentNode, node, this.siblingNode);
92
+ });
93
+ }
94
+ }
95
+ /**
96
+ * Detach the detailView from the change detection tree and remove the generated
97
+ * html of the detail row from the DOM
98
+ */
99
+ hide() {
100
+ if (this.detailView) {
101
+ this.detailView.detach();
102
+ this.removeDetailNodes();
103
+ }
104
+ }
105
+ /**
106
+ * Destroy the detailView and remove the generated html of the detail row from the DOM
107
+ */
108
+ removeDetailView() {
109
+ if (this.detailView) {
110
+ this.detailView.destroy();
111
+ this.removeDetailNodes();
112
+ }
113
+ }
114
+ /**
115
+ * Remove the generated html of the detail row from the DOM
116
+ */
117
+ removeDetailNodes() {
118
+ if (this.detailView) {
119
+ this.detailView.rootNodes.forEach(n => {
120
+ try {
121
+ this.renderer.removeChild(this.parentNode, n);
122
+ }
123
+ catch (err) {
124
+ // Ignore errors thrown by removing nodes that were never added to the DOM.
125
+ }
126
+ });
127
+ }
128
+ }
129
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableMasterRowComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Component }); }
130
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableMasterRowComponent, selector: "[ecTableMasterRow]", inputs: { id: "id", hasDetails: "hasDetails", showDetails: "showDetails", detailTemplate: "detailTemplate", detailContext: "detailContext", detailRowColSpan: "detailRowColSpan", detailRowClass: "detailRowClass", detailRowContentClass: "detailRowContentClass", detailRowMaxHeight: "detailRowMaxHeight", collapsibleToggleCellClass: "collapsibleToggleCellClass", hideTableMaster: "hideTableMaster" }, outputs: { showDetailsChanged: "showDetailsChanged" }, viewQueries: [{ propertyName: "detailRowTemplate", first: true, predicate: ["detailRow"], descendants: true, read: TemplateRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<td *ngIf=\"!hideTableMaster\" class=\"{{collapsibleToggleCellClass}}\">\r\n <ec-collapsible-toggle *ngIf=\"hasDetails\"\r\n id=\"{{id}}_toggle\"\r\n [expanded]=\"showDetails\"\r\n (expandedChange)=\"toggleDetails($event)\"></ec-collapsible-toggle>\r\n</td>\r\n<ng-content></ng-content>\r\n\r\n<ng-template #detailRow>\r\n <tr ecTableDetailRow class=\"{{detailRowClass}}\" [contentClass]=\"detailRowContentClass\" [contentColSpan]=\"detailRowColSpan\" [maxHeight]=\"detailRowMaxHeight\">\r\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: {$implicit: detailContext}\"></ng-container>\r\n </tr>\r\n</ng-template>", styles: ["td{width:1.5rem;padding:.25rem 0!important;vertical-align:top}td ::ng-deep+td{padding-left:0}\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: "component", type: i2.CollapsibleToggleComponent, selector: "ec-collapsible-toggle", inputs: ["id", "expanded", "tabindex"], outputs: ["expandedChange"] }, { kind: "component", type: i3.TableDetailRowComponent, selector: "[ecTableDetailRow]", inputs: ["contentClass", "contentColSpan", "maxHeight"] }] }); }
131
+ }
132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableMasterRowComponent, decorators: [{
133
+ type: Component,
134
+ args: [{ selector: '[ecTableMasterRow]', template: "<td *ngIf=\"!hideTableMaster\" class=\"{{collapsibleToggleCellClass}}\">\r\n <ec-collapsible-toggle *ngIf=\"hasDetails\"\r\n id=\"{{id}}_toggle\"\r\n [expanded]=\"showDetails\"\r\n (expandedChange)=\"toggleDetails($event)\"></ec-collapsible-toggle>\r\n</td>\r\n<ng-content></ng-content>\r\n\r\n<ng-template #detailRow>\r\n <tr ecTableDetailRow class=\"{{detailRowClass}}\" [contentClass]=\"detailRowContentClass\" [contentColSpan]=\"detailRowColSpan\" [maxHeight]=\"detailRowMaxHeight\">\r\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: {$implicit: detailContext}\"></ng-container>\r\n </tr>\r\n</ng-template>", styles: ["td{width:1.5rem;padding:.25rem 0!important;vertical-align:top}td ::ng-deep+td{padding-left:0}\n"] }]
135
+ }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ApplicationRef }], propDecorators: { id: [{
136
+ type: Input
137
+ }], hasDetails: [{
138
+ type: Input
139
+ }], showDetails: [{
140
+ type: Input
141
+ }], detailTemplate: [{
142
+ type: Input
143
+ }], detailContext: [{
144
+ type: Input
145
+ }], detailRowColSpan: [{
146
+ type: Input
147
+ }], detailRowClass: [{
148
+ type: Input
149
+ }], detailRowContentClass: [{
150
+ type: Input
151
+ }], detailRowMaxHeight: [{
152
+ type: Input
153
+ }], collapsibleToggleCellClass: [{
154
+ type: Input
155
+ }], hideTableMaster: [{
156
+ type: Input
157
+ }], showDetailsChanged: [{
158
+ type: Output
159
+ }], detailRowTemplate: [{
160
+ type: ViewChild,
161
+ args: ['detailRow', { read: TemplateRef, static: true }]
162
+ }] } });
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWFzdGVyLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1tYXN0ZXItcm93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3RhYmxlLW1hc3Rlci1yb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUF1RyxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFPcE0sTUFBTSxPQUFPLHVCQUF1QjtJQXlGbEMsWUFBb0IsUUFBbUIsRUFBVSxFQUFjLEVBQVUsTUFBc0I7UUFBM0UsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQTlFL0Y7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQWtEN0I7O1dBRUc7UUFDTyx1QkFBa0IsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQXNCMEIsQ0FBQztJQUVwRyxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEpBQThKLENBQUMsQ0FBQztRQUNoTCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUV6QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FB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VyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgRW1iZWRkZWRWaWV3UmVmLCBTaW1wbGVDaGFuZ2VzLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBBcHBsaWNhdGlvblJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZU1hc3RlclJvd10nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1tYXN0ZXItcm93LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1tYXN0ZXItcm93LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlTWFzdGVyUm93Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLyoqXHJcbiAgICogSWRlbnRpZmllciB0byBwYXNzIHRvIHRoZSBjb2xsYXBzaWJsZSB0b2dnbGVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgdGhlIHRhYmxlIHJvdyBoYXMgZGV0YWlscyBhbmQgc2hvd3MgdGhlIGNvbGxhcHNpYmxlIHRvZ2dsZSBpZiBpdCBkb2VzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGhhc0RldGFpbHM/OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IHRvZ2dsZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZGV0YWlsIHJvdy4gRGVmYXVsdCBpcyBmYWxzZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBzaG93RGV0YWlscyA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBUZW1wbGF0ZSBmb3IgdGhlIGRldGFpbCByb3cgY29udGVudC4gR2VuZXJhdGVzIGFuIFtFbWJlZGRlZFZpZXdSZWZdKGh0dHBzOi8vYW5ndWxhci5pby9hcGkvY29yZS9FbWJlZGRlZFZpZXdSZWYpXHJcbiAgICogd2l0aCB0aGUgJ2RldGFpbENvbnRleHQnLiBSZXF1aXJlZCBpZiBoYXNEZXRhaWxzIGlzIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGV0YWlsVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBjb250ZXh0IGJvdW5kIHRvIHRoZSAnZGV0YWlsVGVtcGxhdGUnLiBBdmFpbGFibGUgaW4gdGhlIHRlbXBsYXRlIGFzIHRoZSBkZWZhdWx0IGxvY2FsIHRlbXBsYXRlIGBsZXRgIGRlY2xhcmF0aW9uLlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogYGBgaHRtbFxyXG4gICAqIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiIGVjVGFibGVNYXN0ZXJSb3cgW2RldGFpbFRlbXBsYXRlXT1cIm15RGV0YWlsVGVtcGxhdGVcIiBbZGV0YWlsQ29udGV4dF09XCJpdGVtXCI+XHJcbiAgICogIC4uLlxyXG4gICAqIDwvdHI+XHJcbiAgICpcclxuICAgKiA8bmctdGVtcGxhdGUgI215RGV0YWlsVGVtcGxhdGUgbGV0LWl0ZW0+XHJcbiAgICogIDxwPnt7aXRlbS5jb21tZW50fX08L3A+XHJcbiAgICogPC9uZy10ZW1wbGF0ZT5cclxuICAgKi9cclxuICBASW5wdXQoKSBkZXRhaWxDb250ZXh0PzogYW55O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgaW4geW91ciB0YWJsZSBtaW51cyB0aGUgY29sdW1uIHRoYXQgaXMgYXV0b21hdGljYWxseSBhZGRlZCBieSB0aGVcclxuICAgKiBUYWJsZU1hc3RlclJvd0NvbXBvbmVudC4gUmVxdWlyZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGV0YWlsUm93Q29sU3BhbiE6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogU3BhY2UgZGVsaW1pdGVkIHN0cmluZyBhZGRlZCB0byB0aGUgY2xhc3MgYXR0cmlidXRlIG9mIGRldGFpbCByb3cgVFIuXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGV0YWlsUm93Q2xhc3M/OiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNwYWNlIGRlbGltaXRlZCBzdHJpbmcgYWRkZWQgdG8gdGhlIGNsYXNzIGF0dHJpYnV0ZSBvZiB0aGUgVEQgdGhhdCBjb250YWlucyB0aGUgZGV0YWlsIHJvdyBjb250ZW50XHJcbiAgICovXHJcbiAgQElucHV0KCkgZGV0YWlsUm93Q29udGVudENsYXNzPzogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSBkZXRhaWxSb3dNYXhIZWlnaHQ/OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBTcGFjZSBkZWxpbWl0ZWQgc3RyaW5nIGFkZGVkIHRvIHRoZSBjbGFzcyBhdHRyaWJ1dGUgb2YgdGhlIFREIHRoYXQgY29udGFpbnMgdGhlIGNvbGxhcHNpYmxlIHRvZ2dsZVxyXG4gICAqICBlbGVtZW50LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNvbGxhcHNpYmxlVG9nZ2xlQ2VsbENsYXNzPzogc3RyaW5nO1xyXG5cclxuICAvKiogVXNlZCB0byBoaWRlIHRoZSBjZWxsIGFkZGVkIHRvIHRoZSB0YWJsZS4gVXNlZnVsIGlmIGEgdGFibGUgaXMgc2hhcmVkIGJldHdlZW4gdmlld3MgYW5kIG5vdCBhbGxcclxuICAgKiAgc3VwcG9ydCB0aGUgdGFibGUgbWFzdGVyIHNjZW5hcmlvXHJcbiAgICovXHJcbiAgIEBJbnB1dCgpIGhpZGVUYWJsZU1hc3Rlcj86IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIEVtaXRzIGFuIGV2ZW50IHdoZW4gdGhlIHZhbHVlIG9mIGBzaG93RGV0YWlsc2AgY2hhbmdlcy5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgc2hvd0RldGFpbHNDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgdGhlIGRldGFpbCByb3csIGluc2VydGVkIGluIHRoZSBET00gYWZ0ZXIgdGhlIG1hc3RlciByb3cuXHJcbiAgICovXHJcbiAgQFZpZXdDaGlsZCgnZGV0YWlsUm93Jywge3JlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWV9KSBkZXRhaWxSb3dUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSB2aWV3IGNyZWF0ZWQgZnJvbSB0aGUgYGRldGFpbFJvd2AgdGVtcGxhdGUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkZXRhaWxWaWV3PzogRW1iZWRkZWRWaWV3UmVmPGFueT47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBwYXJlbnQgbm9kZSBvZiB0aGUgaG9zdCBlbGVtZW50LlxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyZW50Tm9kZTogYW55O1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgc2libGluZyBub2RlIG9mIHRoZSBob3N0IGVsZW1lbnQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzaWJsaW5nTm9kZTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmRldGFpbFJvd0NvbFNwYW4pIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgQSB2YWx1ZSBmb3IgW2RldGFpbFJvd0NvbFNwYW5dIGlzIHJlcXVpcmVkIHRvIHJlbmRlciBhIGRldGFpbCByb3cgY29ycmVjdGx5LiBUaGlzIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgVERzIHBsYWNlZCBpbnNpZGUgYW4gdHJbZWNUYWJsZU1hc3RlclJvd10uYCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXJlbnROb2RlID0gdGhpcy5yZW5kZXJlci5wYXJlbnROb2RlKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLnVwZGF0ZURldGFpbFJvdygpO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLmhhc0RldGFpbHMgJiYgIWNoYW5nZXMuaGFzRGV0YWlscy5maXJzdENoYW5nZSAmJiBjaGFuZ2VzLmhhc0RldGFpbHMuY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVEZXRhaWxSb3coKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlcy5zaG93RGV0YWlscyAmJiAhY2hhbmdlcy5zaG93RGV0YWlscy5maXJzdENoYW5nZSAmJiBjaGFuZ2VzLnNob3dEZXRhaWxzLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlbW92ZURldGFpbFZpZXcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gdGhlIG1hc3RlciByb3cgaGFzIGRldGFpbHMsIGNyZWF0ZSB0aGUgZGV0YWlsIHJvdyBhbmQgdXBkYXRlIGl0J3MgdmlzaWJpbGl0eS4gSWYgdGhlIG1hc3RlclxyXG4gICAqIGhhcyBubyBkZXRhaWxzLCByZW1vdmUgdGhlIGRldGFpbCByb3dcclxuICAgKi9cclxuICB1cGRhdGVEZXRhaWxSb3coKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oYXNEZXRhaWxzKSB7XHJcbiAgICAgIGlmICghdGhpcy5kZXRhaWxUZW1wbGF0ZSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEEgdmFsdWUgZm9yIHRoZSBbZGV0YWlsVGVtcGxhdGVdIGlucHV0IGlzIHJlcXVpcmVkIHdoZW4gJ2hhc0RldGFpbHMnIGlzIHRydWUuYCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaXJzdCBjaGVjayB0byBzZWUgaWYgdGhlIGRldGFpbFZpZXcgaXMgYWxyZWFkeSBwcmVzZW50IGFuZCBpZiBzbywgcmVtb3ZlIGl0IHNvIHdlIGRvbid0IGdldCBhIFxyXG4gICAgICAvLyBkdXBsaWNhdGUgZGV0YWlsIHZpZXdcclxuICAgICAgaWYgKHRoaXMuZGV0YWlsVmlldyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVEZXRhaWxWaWV3KCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZGV0YWlsVmlldyA9IHRoaXMuZGV0YWlsUm93VGVtcGxhdGUuY3JlYXRlRW1iZWRkZWRWaWV3KHt9KTtcclxuXHJcbiAgICAgIC8vc29sdXRpb24gdG8gYWxsb3dpbmcgY2hhbmdlIGRldGVjdGlvbiBpbiBlbWJlZGRlZCB2aWV3IGFkYXB0ZWQgZnJvbSBoZXJlOlxyXG4gICAgICAvL2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzQyOTc3XHJcbiAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5kZXRhaWxWaWV3KTtcclxuICAgICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbW92ZURldGFpbFZpZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cvaGlkZSB0aGUgZGV0YWlsIHJvd1xyXG4gICAqL1xyXG4gIHRvZ2dsZURldGFpbHMoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93RGV0YWlscyA9IHNob3c7XHJcbiAgICB0aGlzLnNob3dEZXRhaWxzQ2hhbmdlZC5lbWl0KHNob3cpO1xyXG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZpc2liaWxpdHkoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaG93RGV0YWlscykge1xyXG4gICAgICB0aGlzLnNob3coKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXR0YWNoIHRoZSBkZXRhaWxWaWV3IHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIHRyZWUgYW5kIGluc2VydCB0aGUgZ2VuZXJhdGVkIGh0bWxcclxuICAgKiBvZiB0aGUgZGV0YWlsIHJvdyB0byBET00gYWZ0ZXIgdGhlIGhvc3QgZWxlbWVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2hvdygpIHtcclxuICAgIGlmICh0aGlzLmRldGFpbFZpZXcpIHtcclxuICAgICAgLy9UaGUgbmV4dFNpYmxpbmcgbWF5IGhhdmUgY2hhbmdlZCwgc28gdXBkYXRlIGl0LiAoVGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlIHRhYmxlIGlzIGVtYmVkZGVkIGluIGEgc2VhcmNoYWJsZSB0YWJsZVxyXG4gICAgICAvLyAgYW5kIGEgc2VhcmNoIGlzIHBlcmZvcm1lZClcclxuICAgICAgdGhpcy5zaWJsaW5nTm9kZSA9IHRoaXMucmVuZGVyZXIubmV4dFNpYmxpbmcodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgdGhpcy5kZXRhaWxWaWV3LnJlYXR0YWNoKCk7XHJcbiAgICAgIHRoaXMuZGV0YWlsVmlldy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMuZGV0YWlsVmlldy5yb290Tm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZSh0aGlzLnBhcmVudE5vZGUsIG5vZGUsIHRoaXMuc2libGluZ05vZGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGFjaCB0aGUgZGV0YWlsVmlldyBmcm9tIHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIHRyZWUgYW5kIHJlbW92ZSB0aGUgZ2VuZXJhdGVkXHJcbiAgICogaHRtbCBvZiB0aGUgZGV0YWlsIHJvdyBmcm9tIHRoZSBET01cclxuICAgKi9cclxuICBwcml2YXRlIGhpZGUoKSB7XHJcbiAgICBpZiAodGhpcy5kZXRhaWxWaWV3KSB7XHJcbiAgICAgIHRoaXMuZGV0YWlsVmlldy5kZXRhY2goKTtcclxuICAgICAgdGhpcy5yZW1vdmVEZXRhaWxOb2RlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVzdHJveSB0aGUgZGV0YWlsVmlldyBhbmQgcmVtb3ZlIHRoZSBnZW5lcmF0ZWQgaHRtbCBvZiB0aGUgZGV0YWlsIHJvdyBmcm9tIHRoZSBET01cclxuICAgKi9cclxuICBwcml2YXRlIHJlbW92ZURldGFpbFZpZXcoKSB7XHJcbiAgICBpZiAodGhpcy5kZXRhaWxWaWV3KSB7XHJcbiAgICAgIHRoaXMuZGV0YWlsVmlldy5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMucmVtb3ZlRGV0YWlsTm9kZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSB0aGUgZ2VuZXJhdGVkIGh0bWwgb2YgdGhlIGRldGFpbCByb3cgZnJvbSB0aGUgRE9NXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZW1vdmVEZXRhaWxOb2RlcygpIHtcclxuICAgIGlmICh0aGlzLmRldGFpbFZpZXcpIHtcclxuICAgICAgdGhpcy5kZXRhaWxWaWV3LnJvb3ROb2Rlcy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMucGFyZW50Tm9kZSwgbik7XHJcbiAgICAgICAgfSBjYXRjaChlcnIpIHtcclxuICAgICAgICAgIC8vIElnbm9yZSBlcnJvcnMgdGhyb3duIGJ5IHJlbW92aW5nIG5vZGVzIHRoYXQgd2VyZSBuZXZlciBhZGRlZCB0byB0aGUgRE9NLlxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8dGQgKm5nSWY9XCIhaGlkZVRhYmxlTWFzdGVyXCIgY2xhc3M9XCJ7e2NvbGxhcHNpYmxlVG9nZ2xlQ2VsbENsYXNzfX1cIj5cclxuICA8ZWMtY29sbGFwc2libGUtdG9nZ2xlICpuZ0lmPVwiaGFzRGV0YWlsc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7aWR9fV90b2dnbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2V4cGFuZGVkXT1cInNob3dEZXRhaWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChleHBhbmRlZENoYW5nZSk9XCJ0b2dnbGVEZXRhaWxzKCRldmVudClcIj48L2VjLWNvbGxhcHNpYmxlLXRvZ2dsZT5cclxuPC90ZD5cclxuPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZXRhaWxSb3c+XHJcbiAgPHRyIGVjVGFibGVEZXRhaWxSb3cgY2xhc3M9XCJ7e2RldGFpbFJvd0NsYXNzfX1cIiBbY29udGVudENsYXNzXT1cImRldGFpbFJvd0NvbnRlbnRDbGFzc1wiIFtjb250ZW50Q29sU3Bhbl09XCJkZXRhaWxSb3dDb2xTcGFuXCIgW21heEhlaWdodF09XCJkZXRhaWxSb3dNYXhIZWlnaHRcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbFRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBkZXRhaWxDb250ZXh0fVwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvdHI+XHJcbjwvbmctdGVtcGxhdGU+Il19
@@ -0,0 +1,155 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { NavGroup } from '../../controls/navigation/nav-group';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "../../controls/tabs/tabs.component";
6
+ import * as i3 from "../../controls/dropdown/dropdown.component";
7
+ export class TablePaginationComponent {
8
+ constructor(el) {
9
+ this.el = el;
10
+ /**
11
+ * Number of the current page.
12
+ * Initial value is 1, can be overridden to change the starting page number.
13
+ */
14
+ this.pageNumber = 1;
15
+ /**
16
+ * Maximum number of page tabs to show
17
+ */
18
+ this.maxTabs = 10;
19
+ /** When true the tabs and the more pages dropdown will be disabled */
20
+ this.disablePaginationControls = false;
21
+ /**
22
+ * Emits when the page changes.
23
+ *
24
+ * Bind to the event in a template using a function that uses the "skip" and "pageSize"
25
+ * properties to slice the new page from your data set.
26
+ *
27
+ * @example
28
+ * //.html
29
+ * (pageChanged)="onPageChanged($event)"
30
+ * //.ts
31
+ * public onPageChanged(event: PagingInfo) {
32
+ * this.currentPageItems = this.paginatedTableItems.slice(event.skip, event.skip + event.pageSize);
33
+ * }
34
+ * //Since pageChanged doesn't emit for the initial page, onPageChanged should be manually called during initialization
35
+ * //using getPagingInfo:
36
+ * this.onPageChanged(TablePaginationComponent.getPagingInfo(this.startingPageNumber, this.pageSize));
37
+ */
38
+ this.pageChanged = new EventEmitter();
39
+ /**
40
+ * All possible items in the dropdown menu.
41
+ */
42
+ this.dropdownItems = [];
43
+ /**
44
+ * Current tabs being displayed.
45
+ */
46
+ this.currentTabs = new NavGroup();
47
+ }
48
+ ngOnChanges() {
49
+ if (this.totalItems === 0) {
50
+ this.dropdownItems = [];
51
+ this.currentTabs = new NavGroup();
52
+ return;
53
+ }
54
+ this.setDropdownItems();
55
+ //Find the menu item that the page corresponding to this.pageNumber lies in
56
+ let firstMenuItem = this.dropdownItems.find(item => {
57
+ return item.value.firstPage <= this.pageNumber && item.value.lastPage >= this.pageNumber;
58
+ });
59
+ if (!firstMenuItem) {
60
+ console.error(`Page ${this.pageNumber} does not exist. Setting the starting page number to 1.`);
61
+ firstMenuItem = this.dropdownItems[0];
62
+ this.pageNumber = 1;
63
+ }
64
+ //Set the tabs to those corresponding to the first menu item.
65
+ //Note that we dont emit a pageChanged event here because the consumer already knows what the first page is.
66
+ this.setTabs(firstMenuItem, this.pageNumber);
67
+ }
68
+ /**
69
+ * Given the number of a page and the pageSize, return the PagingInfo object for that page.
70
+ */
71
+ static getPagingInfo(pageNumber, pageSize) {
72
+ return { skip: (pageNumber - 1) * pageSize, pageSize: pageSize, pageNumber: pageNumber };
73
+ }
74
+ onItemSelected(menuItem) {
75
+ this.setTabs(menuItem);
76
+ this.onPageChange(parseInt(this.currentTabs.selected.label));
77
+ //focus the currently selected tab to help keyboard navigation
78
+ this.el.nativeElement.querySelector('.tab.active').focus();
79
+ }
80
+ /**
81
+ * Create a tab for each item in the range represented in the MenuItem
82
+ */
83
+ setTabs(menuItem, pageNumber) {
84
+ let tabItems = [];
85
+ for (let i = menuItem.value.firstPage; i <= menuItem.value.lastPage; i++) {
86
+ tabItems.push({
87
+ label: `${i}`,
88
+ disabled: this.disablePaginationControls,
89
+ onClick: () => { this.onPageChange(i); }
90
+ });
91
+ }
92
+ //if a pageNumber is provided, select the tab with that page number.
93
+ //otherwise, select the first tab.
94
+ let selectedTab = pageNumber ? tabItems.find(tab => { return parseInt(tab.label) === pageNumber; })
95
+ : tabItems[0];
96
+ this.currentTabs = new NavGroup(tabItems, selectedTab);
97
+ }
98
+ onPageChange(pageNumber) {
99
+ this.pageNumber = pageNumber;
100
+ this.pageChanged.emit(TablePaginationComponent.getPagingInfo(pageNumber, this.pageSize));
101
+ }
102
+ /**
103
+ * Create all the items for the dropdown menu.
104
+ * A dropdown item represents a page range (e.g. 1-10, 11-20, or 21-25).
105
+ * A single dropdown item can represent a range of up to 10 pages (the last item could have less than 10).
106
+ */
107
+ setDropdownItems() {
108
+ this.dropdownItems = [];
109
+ //find the last page
110
+ let dividend = Math.floor(this.totalItems / this.pageSize);
111
+ let remainder = this.totalItems % this.pageSize;
112
+ const lastPage = (remainder === 0) ? dividend : dividend + 1;
113
+ //keep building menu items of the form 1-10, 11-20, 21-30, etc until
114
+ //end >= lastPage, which means we've found the range that contains the last page.
115
+ let start = 1;
116
+ let maxTabs = this.maxTabs || 10;
117
+ let end = maxTabs;
118
+ while (end < lastPage) {
119
+ this.dropdownItems.push({
120
+ label: `${start}-${end}`,
121
+ value: { firstPage: start, lastPage: end }
122
+ });
123
+ start = start + maxTabs;
124
+ end = end + maxTabs;
125
+ }
126
+ //add the menu item that contains the last page.
127
+ this.dropdownItems.push({
128
+ label: (start === lastPage) ? `${start}` : `${start}-${lastPage}`,
129
+ value: { firstPage: start, lastPage: lastPage }
130
+ });
131
+ }
132
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TablePaginationComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
133
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TablePaginationComponent, selector: "ec-table-pagination", inputs: { id: "id", totalItems: "totalItems", pageSize: "pageSize", pageNumber: "pageNumber", maxTabs: "maxTabs", disablePaginationControls: "disablePaginationControls" }, outputs: { pageChanged: "pageChanged" }, host: { classAttribute: "d-flex px-2 align-items-center" }, usesOnChanges: true, ngImport: i0, template: "<ec-tabs id=\"{{id}}_pages\"\r\n class=\"my-2 is-condensed\"\r\n [tabGroup]=\"currentTabs\"\r\n tabStyle=\"pills\">\r\n</ec-tabs>\r\n<ec-dropdown id=\"{{id}}_morePages\"\r\n *ngIf=\"dropdownItems.length > 1\"\r\n class=\"my-1 ml-1\"\r\n menuTemplateType=\"label\"\r\n icon=\"icon-more\"\r\n menuPosition=\"left\"\r\n [menuMinWidth]=\"80\"\r\n [showArrow]=\"false\"\r\n [popupFixed]=\"true\"\r\n [items]=\"dropdownItems\"\r\n [disabled]=\"disablePaginationControls\"\r\n (itemSelected)=\"onItemSelected($event)\">\r\n</ec-dropdown>", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.TabsComponent, selector: "ec-tabs", inputs: ["id", "tabindex", "tabStyle", "tabGroup"] }, { kind: "component", type: i3.DropdownComponent, selector: "ec-dropdown", inputs: ["id", "autofocus", "status", "disabled", "label", "icon", "buttonType", "buttonAlignment", "buttonTitle", "tabindex", "showArrow", "items", "menuTemplateType", "menuTitle", "menuHeight", "menuWidth", "menuMinWidth", "menuPosition", "menuFooter", "popupFixed", "buttonCustomTemplate", "pending"], outputs: ["itemSelected", "popupOpened"] }] }); }
134
+ }
135
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TablePaginationComponent, decorators: [{
136
+ type: Component,
137
+ args: [{ selector: 'ec-table-pagination', host: {
138
+ class: 'd-flex px-2 align-items-center'
139
+ }, template: "<ec-tabs id=\"{{id}}_pages\"\r\n class=\"my-2 is-condensed\"\r\n [tabGroup]=\"currentTabs\"\r\n tabStyle=\"pills\">\r\n</ec-tabs>\r\n<ec-dropdown id=\"{{id}}_morePages\"\r\n *ngIf=\"dropdownItems.length > 1\"\r\n class=\"my-1 ml-1\"\r\n menuTemplateType=\"label\"\r\n icon=\"icon-more\"\r\n menuPosition=\"left\"\r\n [menuMinWidth]=\"80\"\r\n [showArrow]=\"false\"\r\n [popupFixed]=\"true\"\r\n [items]=\"dropdownItems\"\r\n [disabled]=\"disablePaginationControls\"\r\n (itemSelected)=\"onItemSelected($event)\">\r\n</ec-dropdown>" }]
140
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { id: [{
141
+ type: Input
142
+ }], totalItems: [{
143
+ type: Input
144
+ }], pageSize: [{
145
+ type: Input
146
+ }], pageNumber: [{
147
+ type: Input
148
+ }], maxTabs: [{
149
+ type: Input
150
+ }], disablePaginationControls: [{
151
+ type: Input
152
+ }], pageChanged: [{
153
+ type: Output
154
+ }] } });
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBeUIsTUFBTSxlQUFlLENBQUM7QUFHOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7OztBQXVCL0QsTUFBTSxPQUFPLHdCQUF3QjtJQTBEbkMsWUFBb0IsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUEzQ2xDOzs7V0FHRztRQUNNLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFFaEM7O1dBRUc7UUFDTSxZQUFPLEdBQVksRUFBRSxDQUFDO1FBRS9CLHNFQUFzRTtRQUM3RCw4QkFBeUIsR0FBYSxLQUFLLENBQUM7UUFFckQ7Ozs7Ozs7Ozs7Ozs7Ozs7V0FnQkc7UUFDTyxnQkFBVyxHQUE2QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXJFOztXQUVHO1FBQ0ksa0JBQWEsR0FBMEIsRUFBRSxDQUFDO1FBRWpEOztXQUVHO1FBQ0ksZ0JBQVcsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBRVIsQ0FBQztJQUd2QyxXQUFXO1FBQ1QsSUFBRyxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNsQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLDJFQUEyRTtRQUMzRSxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqRCxPQUFPLElBQUksQ0FBQyxLQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEtBQU0sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUM3RixDQUFDLENBQUMsQ0FBQztRQUNILElBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLFVBQVUseURBQXlELENBQUMsQ0FBQztZQUNoRyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBQ0QsNkRBQTZEO1FBQzdELDRHQUE0RztRQUM1RyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxVQUFrQixFQUFFLFFBQWdCO1FBQzlELE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3pGLENBQUM7SUFFTSxjQUFjLENBQUMsUUFBNkI7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVMsQ0FBQyxLQUFNLENBQUMsQ0FBQyxDQUFDO1FBQy9ELDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ssT0FBTyxDQUFDLFFBQTZCLEVBQUUsVUFBbUI7UUFDaEUsSUFBSSxRQUFRLEdBQWMsRUFBRSxDQUFDO1FBQzdCLEtBQUksSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUUsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDWixLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2IsUUFBUSxFQUFFLElBQUksQ0FBQyx5QkFBeUI7Z0JBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBQzthQUN0QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0Qsb0VBQW9FO1FBQ3BFLGtDQUFrQztRQUNsQyxJQUFJLFdBQVcsR0FBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBTSxDQUFDLEtBQUssVUFBVSxDQUFBLENBQUEsQ0FBQyxDQUFFO1lBQ3JFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVPLFlBQVksQ0FBQyxVQUFrQjtRQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO0lBQzFGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLG9CQUFvQjtRQUNwQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBRTdELHNFQUFzRTtRQUN0RSxpRkFBaUY7UUFDakYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDakMsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBRWxCLE9BQU0sR0FBRyxHQUFHLFFBQVEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUN0QixLQUFLLEVBQUUsR0FBRyxLQUFLLElBQUksR0FBRyxFQUFFO2dCQUN4QixLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUM7YUFDekMsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7WUFDeEIsR0FBRyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7UUFDdEIsQ0FBQztRQUNELGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztZQUN0QixLQUFLLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUNoRSxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUM7U0FDOUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F6SlUsd0JBQXdCO21HQUF4Qix3QkFBd0IsaVdDMUJyQyxnckJBaUJjOzs0RkRTRCx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0UscUJBQXFCLFFBRXpCO3dCQUNKLEtBQUssRUFBRSxnQ0FBZ0M7cUJBQ3hDOytFQUlRLEVBQUU7c0JBQVYsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQW1CSSxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uLy4uL2NvbnRyb2xzL21lbnUvbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOYXZJdGVtIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbmF2aWdhdGlvbi9uYXYtaXRlbSc7XHJcbmltcG9ydCB7IE5hdkdyb3VwIH0gZnJvbSAnLi4vLi4vY29udHJvbHMvbmF2aWdhdGlvbi9uYXYtZ3JvdXAnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmdJbmZvIHtcclxuICAvKipOdW1iZXIgb2YgaXRlbXMgdG8gc2tpcCB0byBnZXQgdG8gdGhpcyBwYWdlKi9cclxuICBza2lwOiBudW1iZXIsXHJcbiAgLyoqTnVtYmVyIG9mIGl0ZW1zIGluIHRoaXMgcGFnZSovXHJcbiAgcGFnZVNpemU6IG51bWJlcixcclxuICAvKipUaGUgbnVtYmVyIG9mIHRoZSBwYWdlKi9cclxuICBwYWdlTnVtYmVyOiBudW1iZXJcclxufVxyXG5cclxuaW50ZXJmYWNlIFBhZ2VSYW5nZSB7XHJcbiAgZmlyc3RQYWdlOiBudW1iZXIsXHJcbiAgbGFzdFBhZ2U6IG51bWJlclxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXRhYmxlLXBhZ2luYXRpb24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcclxuICBob3N0OiB7XHJcbiAgICBjbGFzczogJ2QtZmxleCBweC0yIGFsaWduLWl0ZW1zLWNlbnRlcidcclxuICB9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSBpZD86IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogVG90YWwgbnVtYmVyIG9mIHJvd3MgdGhhdCB3ZSBuZWVkIHRvIHBhZ2UgdGhyb3VnaC5cclxuICAgKiBpLmUuIHRoZSBzdW0gb2YgYWxsIHJvd3Mgb24gYWxsIHBhZ2VzLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRvdGFsSXRlbXMhOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heCBzaXplIG9mIGEgcGFnZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBwYWdlU2l6ZSE6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogTnVtYmVyIG9mIHRoZSBjdXJyZW50IHBhZ2UuXHJcbiAgICogSW5pdGlhbCB2YWx1ZSBpcyAxLCBjYW4gYmUgb3ZlcnJpZGRlbiB0byBjaGFuZ2UgdGhlIHN0YXJ0aW5nIHBhZ2UgbnVtYmVyLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VOdW1iZXI6IG51bWJlciA9IDE7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHBhZ2UgdGFicyB0byBzaG93XHJcbiAgICovXHJcbiAgQElucHV0KCkgbWF4VGFicz86IG51bWJlciA9IDEwO1xyXG5cclxuICAvKiogV2hlbiB0cnVlIHRoZSB0YWJzIGFuZCB0aGUgbW9yZSBwYWdlcyBkcm9wZG93biB3aWxsIGJlIGRpc2FibGVkICovXHJcbiAgQElucHV0KCkgZGlzYWJsZVBhZ2luYXRpb25Db250cm9scz86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgd2hlbiB0aGUgcGFnZSBjaGFuZ2VzLlxyXG4gICAqIFxyXG4gICAqIEJpbmQgdG8gdGhlIGV2ZW50IGluIGEgdGVtcGxhdGUgdXNpbmcgYSBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIFwic2tpcFwiIGFuZCBcInBhZ2VTaXplXCJcclxuICAgKiBwcm9wZXJ0aWVzIHRvIHNsaWNlIHRoZSBuZXcgcGFnZSBmcm9tIHlvdXIgZGF0YSBzZXQuXHJcbiAgICogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiAvLy5odG1sXHJcbiAgICogKHBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICogLy8udHNcclxuICAgKiBwdWJsaWMgb25QYWdlQ2hhbmdlZChldmVudDogUGFnaW5nSW5mbykge1xyXG4gICAqICB0aGlzLmN1cnJlbnRQYWdlSXRlbXMgPSB0aGlzLnBhZ2luYXRlZFRhYmxlSXRlbXMuc2xpY2UoZXZlbnQuc2tpcCwgZXZlbnQuc2tpcCArIGV2ZW50LnBhZ2VTaXplKTtcclxuICAgKiB9XHJcbiAgICogLy9TaW5jZSBwYWdlQ2hhbmdlZCBkb2Vzbid0IGVtaXQgZm9yIHRoZSBpbml0aWFsIHBhZ2UsIG9uUGFnZUNoYW5nZWQgc2hvdWxkIGJlIG1hbnVhbGx5IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gXHJcbiAgICogLy91c2luZyBnZXRQYWdpbmdJbmZvOlxyXG4gICAqIHRoaXMub25QYWdlQ2hhbmdlZChUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbyh0aGlzLnN0YXJ0aW5nUGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSkpO1xyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPFBhZ2luZ0luZm8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvKipcclxuICAgKiBBbGwgcG9zc2libGUgaXRlbXMgaW4gdGhlIGRyb3Bkb3duIG1lbnUuXHJcbiAgICovXHJcbiAgcHVibGljIGRyb3Bkb3duSXRlbXM6IE1lbnVJdGVtPFBhZ2VSYW5nZT5bXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBDdXJyZW50IHRhYnMgYmVpbmcgZGlzcGxheWVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjdXJyZW50VGFiczogTmF2R3JvdXAgPSBuZXcgTmF2R3JvdXAoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikgeyB9XHJcblxyXG5cclxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMudG90YWxJdGVtcyA9PT0gMCkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSBbXTtcclxuICAgICAgdGhpcy5jdXJyZW50VGFicyA9IG5ldyBOYXZHcm91cCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERyb3Bkb3duSXRlbXMoKTtcclxuXHJcbiAgICAvL0ZpbmQgdGhlIG1lbnUgaXRlbSB0aGF0IHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcy5wYWdlTnVtYmVyIGxpZXMgaW5cclxuICAgIGxldCBmaXJzdE1lbnVJdGVtID0gdGhpcy5kcm9wZG93bkl0ZW1zLmZpbmQoaXRlbSA9PiB7XHJcbiAgICAgIHJldHVybiBpdGVtLnZhbHVlIS5maXJzdFBhZ2UgPD0gdGhpcy5wYWdlTnVtYmVyICYmIGl0ZW0udmFsdWUhLmxhc3RQYWdlID49IHRoaXMucGFnZU51bWJlcjtcclxuICAgIH0pO1xyXG4gICAgaWYoIWZpcnN0TWVudUl0ZW0pIHtcclxuICAgICAgY29uc29sZS5lcnJvcihgUGFnZSAke3RoaXMucGFnZU51bWJlcn0gZG9lcyBub3QgZXhpc3QuIFNldHRpbmcgdGhlIHN0YXJ0aW5nIHBhZ2UgbnVtYmVyIHRvIDEuYCk7XHJcbiAgICAgIGZpcnN0TWVudUl0ZW0gPSB0aGlzLmRyb3Bkb3duSXRlbXNbMF07XHJcbiAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICB9XHJcbiAgICAvL1NldCB0aGUgdGFicyB0byB0aG9zZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtZW51IGl0ZW0uXHJcbiAgICAvL05vdGUgdGhhdCB3ZSBkb250IGVtaXQgYSBwYWdlQ2hhbmdlZCBldmVudCBoZXJlIGJlY2F1c2UgdGhlIGNvbnN1bWVyIGFscmVhZHkga25vd3Mgd2hhdCB0aGUgZmlyc3QgcGFnZSBpcy5cclxuICAgIHRoaXMuc2V0VGFicyhmaXJzdE1lbnVJdGVtLCB0aGlzLnBhZ2VOdW1iZXIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gdGhlIG51bWJlciBvZiBhIHBhZ2UgYW5kIHRoZSBwYWdlU2l6ZSwgcmV0dXJuIHRoZSBQYWdpbmdJbmZvIG9iamVjdCBmb3IgdGhhdCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0UGFnaW5nSW5mbyhwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB7IHNraXA6IChwYWdlTnVtYmVyIC0gMSkqcGFnZVNpemUsIHBhZ2VTaXplOiBwYWdlU2l6ZSwgcGFnZU51bWJlcjogcGFnZU51bWJlciB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uSXRlbVNlbGVjdGVkKG1lbnVJdGVtOiBNZW51SXRlbTxQYWdlUmFuZ2U+KSB7ICBcclxuICAgIHRoaXMuc2V0VGFicyhtZW51SXRlbSk7XHJcbiAgICB0aGlzLm9uUGFnZUNoYW5nZShwYXJzZUludCh0aGlzLmN1cnJlbnRUYWJzLnNlbGVjdGVkIS5sYWJlbCEpKTtcclxuICAgIC8vZm9jdXMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YWIgdG8gaGVscCBrZXlib2FyZCBuYXZpZ2F0aW9uXHJcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRhYi5hY3RpdmUnKS5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgdGFiIGZvciBlYWNoIGl0ZW0gaW4gdGhlIHJhbmdlIHJlcHJlc2VudGVkIGluIHRoZSBNZW51SXRlbVxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VGFicyhtZW51SXRlbTogTWVudUl0ZW08UGFnZVJhbmdlPiwgcGFnZU51bWJlcj86IG51bWJlcikge1xyXG4gICAgbGV0IHRhYkl0ZW1zOiBOYXZJdGVtW10gPSBbXTtcclxuICAgIGZvcihsZXQgaSA9IG1lbnVJdGVtLnZhbHVlIS5maXJzdFBhZ2U7IGkgPD0gbWVudUl0ZW0udmFsdWUhLmxhc3RQYWdlOyBpKyspIHtcclxuICAgICAgdGFiSXRlbXMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IGAke2l9YCxcclxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlUGFnaW5hdGlvbkNvbnRyb2xzLFxyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IHt0aGlzLm9uUGFnZUNoYW5nZShpKX1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvL2lmIGEgcGFnZU51bWJlciBpcyBwcm92aWRlZCwgc2VsZWN0IHRoZSB0YWIgd2l0aCB0aGF0IHBhZ2UgbnVtYmVyLlxyXG4gICAgLy9vdGhlcndpc2UsIHNlbGVjdCB0aGUgZmlyc3QgdGFiLlxyXG4gICAgbGV0IHNlbGVjdGVkVGFiOiBOYXZJdGVtID0gcGFnZU51bWJlciA/IHRhYkl0ZW1zLmZpbmQodGFiID0+IHtyZXR1cm4gcGFyc2VJbnQodGFiLmxhYmVsISkgPT09IHBhZ2VOdW1iZXJ9KSFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0YWJJdGVtc1swXTtcclxuICAgIHRoaXMuY3VycmVudFRhYnMgPSBuZXcgTmF2R3JvdXAodGFiSXRlbXMsIHNlbGVjdGVkVGFiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25QYWdlQ2hhbmdlKHBhZ2VOdW1iZXI6IG51bWJlcikge1xyXG4gICAgdGhpcy5wYWdlTnVtYmVyID0gcGFnZU51bWJlcjtcclxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbyhwYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhbGwgdGhlIGl0ZW1zIGZvciB0aGUgZHJvcGRvd24gbWVudS5cclxuICAgKiBBIGRyb3Bkb3duIGl0ZW0gcmVwcmVzZW50cyBhIHBhZ2UgcmFuZ2UgKGUuZy4gMS0xMCwgMTEtMjAsIG9yIDIxLTI1KS5cclxuICAgKiBBIHNpbmdsZSBkcm9wZG93biBpdGVtIGNhbiByZXByZXNlbnQgYSByYW5nZSBvZiB1cCB0byAxMCBwYWdlcyAodGhlIGxhc3QgaXRlbSBjb3VsZCBoYXZlIGxlc3MgdGhhbiAxMCkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXREcm9wZG93bkl0ZW1zKCkge1xyXG4gICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gW107XHJcbiAgICAvL2ZpbmQgdGhlIGxhc3QgcGFnZVxyXG4gICAgbGV0IGRpdmlkZW5kID0gTWF0aC5mbG9vcih0aGlzLnRvdGFsSXRlbXMgLyB0aGlzLnBhZ2VTaXplKTtcclxuICAgIGxldCByZW1haW5kZXIgPSB0aGlzLnRvdGFsSXRlbXMgJSB0aGlzLnBhZ2VTaXplO1xyXG4gICAgY29uc3QgbGFzdFBhZ2UgPSAocmVtYWluZGVyID09PSAwKSA/IGRpdmlkZW5kIDogZGl2aWRlbmQgKyAxO1xyXG5cclxuICAgIC8va2VlcCBidWlsZGluZyBtZW51IGl0ZW1zIG9mIHRoZSBmb3JtIDEtMTAsIDExLTIwLCAyMS0zMCwgZXRjIHVudGlsICBcclxuICAgIC8vZW5kID49IGxhc3RQYWdlLCB3aGljaCBtZWFucyB3ZSd2ZSBmb3VuZCB0aGUgcmFuZ2UgdGhhdCBjb250YWlucyB0aGUgbGFzdCBwYWdlLlxyXG4gICAgbGV0IHN0YXJ0ID0gMTtcclxuXHJcbiAgICBsZXQgbWF4VGFicyA9IHRoaXMubWF4VGFicyB8fCAxMDtcclxuICAgIGxldCBlbmQgPSBtYXhUYWJzO1xyXG5cclxuICAgIHdoaWxlKGVuZCA8IGxhc3RQYWdlKSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcy5wdXNoKHtcclxuICAgICAgICBsYWJlbDogYCR7c3RhcnR9LSR7ZW5kfWAsXHJcbiAgICAgICAgdmFsdWU6IHtmaXJzdFBhZ2U6IHN0YXJ0LCBsYXN0UGFnZTogZW5kfVxyXG4gICAgICB9KTtcclxuICAgICAgc3RhcnQgPSBzdGFydCArIG1heFRhYnM7XHJcbiAgICAgIGVuZCA9IGVuZCArIG1heFRhYnM7XHJcbiAgICB9XHJcbiAgICAvL2FkZCB0aGUgbWVudSBpdGVtIHRoYXQgY29udGFpbnMgdGhlIGxhc3QgcGFnZS5cclxuICAgIHRoaXMuZHJvcGRvd25JdGVtcy5wdXNoKHtcclxuICAgICAgbGFiZWw6IChzdGFydCA9PT0gbGFzdFBhZ2UpID8gYCR7c3RhcnR9YDogYCR7c3RhcnR9LSR7bGFzdFBhZ2V9YCxcclxuICAgICAgdmFsdWU6IHtmaXJzdFBhZ2U6IHN0YXJ0LCBsYXN0UGFnZTogbGFzdFBhZ2V9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59IiwiPGVjLXRhYnMgaWQ9XCJ7e2lkfX1fcGFnZXNcIlxyXG4gICAgICAgICBjbGFzcz1cIm15LTIgaXMtY29uZGVuc2VkXCJcclxuICAgICAgICAgW3RhYkdyb3VwXT1cImN1cnJlbnRUYWJzXCJcclxuICAgICAgICAgdGFiU3R5bGU9XCJwaWxsc1wiPlxyXG48L2VjLXRhYnM+XHJcbjxlYy1kcm9wZG93biBpZD1cInt7aWR9fV9tb3JlUGFnZXNcIlxyXG4gICAgICAgICAgICAgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgY2xhc3M9XCJteS0xIG1sLTFcIlxyXG4gICAgICAgICAgICAgbWVudVRlbXBsYXRlVHlwZT1cImxhYmVsXCJcclxuICAgICAgICAgICAgIGljb249XCJpY29uLW1vcmVcIlxyXG4gICAgICAgICAgICAgbWVudVBvc2l0aW9uPVwibGVmdFwiXHJcbiAgICAgICAgICAgICBbbWVudU1pbldpZHRoXT1cIjgwXCJcclxuICAgICAgICAgICAgIFtzaG93QXJyb3ddPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgW3BvcHVwRml4ZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICBbaXRlbXNdPVwiZHJvcGRvd25JdGVtc1wiXHJcbiAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZVBhZ2luYXRpb25Db250cm9sc1wiXHJcbiAgICAgICAgICAgICAoaXRlbVNlbGVjdGVkKT1cIm9uSXRlbVNlbGVjdGVkKCRldmVudClcIj5cclxuPC9lYy1kcm9wZG93bj4iXX0=