@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,342 @@
1
+ import { Component, ContentChildren, EventEmitter, Input, Output } from '@angular/core';
2
+ import { EMPTY, merge, Subject } from 'rxjs';
3
+ import { catchError, debounceTime, map, pluck, skipUntil, switchMap, takeUntil, tap } from 'rxjs/operators';
4
+ import { Overlay } from '../view-overlay/view-overlay.component';
5
+ import { ResizableColumnComponent } from './resizable-column.component';
6
+ import { TablePaginationComponent } from './table-pagination.component';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../core/error.service";
9
+ import * as i2 from "@ngx-translate/core";
10
+ import * as i3 from "../../shared/display/pipes/row-count.pipe";
11
+ import * as i4 from "@angular/common";
12
+ import * as i5 from "../../controls/textbox/textbox.component";
13
+ import * as i6 from "../view-overlay/view-overlay.component";
14
+ import * as i7 from "./table.component";
15
+ import * as i8 from "./table-pagination.component";
16
+ export class SearchableTableComponent {
17
+ /** Reference to the searchModel */
18
+ get searchModel() {
19
+ return this.formModel.controls.searchModel;
20
+ }
21
+ constructor(errorService, translateService, rowCountPipe) {
22
+ this.errorService = errorService;
23
+ this.translateService = translateService;
24
+ this.rowCountPipe = rowCountPipe;
25
+ this.id = '';
26
+ this.resizable = false;
27
+ this.sortable = false;
28
+ this.autofocus = false;
29
+ /**Set to a space-separated set of strings that should be added to the ec-table class attribute
30
+ * this allows finer control over styling.
31
+ */
32
+ this.tableClasses = '';
33
+ /** Emits when table sort has changed */
34
+ this.sortChange = new EventEmitter();
35
+ /** Emits when the table page has changed */
36
+ this.pageChangeEmitter = new EventEmitter();
37
+ /** Placeholder text for the searchbox */
38
+ this.searchboxPlaceholder = '';
39
+ /**
40
+ * Displayed in overlay when no data is returned (without searching).
41
+ *
42
+ * Defaults to "SearchableTable_Default_NoData_SC"
43
+ */
44
+ this.noDataMessage = 'SearchableTable_Default_NoData_SC';
45
+ /**
46
+ * Displayed in overlay when no data is returned (after searching).
47
+ * Ensure translation has an interpolation placeholder for "searchText".
48
+ *
49
+ * Defaults to "SearchableTable_Default_NoMatches_SC"
50
+ *
51
+ * @example
52
+ * // 7 requires single curly braces
53
+ * No items found matching <strong>{{searchText}}</strong>
54
+ */
55
+ this.noSearchResultsMessage = 'SearchableTable_Default_NoMatches_SC';
56
+ /** Allow the host component to supply an overlay to control the pending state of the table */
57
+ this.status = new Overlay('hasData');
58
+ /**
59
+ * Sets the underlying table's layout to fixed.
60
+ */
61
+ this.tableLayoutFixed = false;
62
+ /** Emits items returned by the getItems function, along with total count */
63
+ this.itemsChange = new EventEmitter();
64
+ /** Maximum number of items to show in the table (default: 100) */
65
+ this.maxItemCount = 100;
66
+ /** Set to true to hide search box (does not hide the other searchable table controls */
67
+ this.hideSearchControl = false;
68
+ /** Set to true to hide the entire header */
69
+ this.hideHeader = false;
70
+ /** Type of object in the table. Displayed in footer (default: 'results')*/
71
+ this.objectType = 'results';
72
+ /** Set to true to hide the table footer */
73
+ this.hideFooter = false;
74
+ /**
75
+ * Set to true to enable paging. If paging is enabled, pageSize must be provided.
76
+ * getItems will be passed both a search and a PagingInfo object when called. It must include totalItemsBeforePaging in the TableSearchResults output.
77
+ * Here is a simple implementation:
78
+ * @example
79
+ * getItems(search?: string, pageChangeInfo?: PagingInfo): Observable<TableSearchResults> {
80
+ let results: SimpleItem[] = [...this.paginatedTableItems];
81
+ //apply search
82
+ if(search) {
83
+ results = this.paginatedTableItems.filter(i => i.a.toLowerCase().includes(search.toLowerCase()));
84
+ }
85
+ //get count before applying paging
86
+ let countBeforePaging = results.length;
87
+ //apply paging
88
+ if(pageChangeInfo) {
89
+ results = results.slice(pageChangeInfo!.skip, pageChangeInfo!.skip + pageChangeInfo!.pageSize);
90
+ }
91
+ return of({ items: results, totalItems: results.length, totalItemsBeforePaging: countBeforePaging });
92
+ }
93
+ */
94
+ this.pageable = false;
95
+ /**
96
+ * Maximum number of page tabs to show
97
+ */
98
+ this.maxTabs = 10;
99
+ /**
100
+ * Makes the searchbox readonly if true.
101
+ */
102
+ this.searchboxReadonly = false;
103
+ /** Optional text to add to the results count in the table footer. This text will be added after the count and objectType. */
104
+ this.additionalCountText = '';
105
+ /** Enables table row selection and row highlighting styles when true */
106
+ this.selectable = false;
107
+ /** When true, removes the card styles from the table wrapper */
108
+ this.removeCard = false;
109
+ /** Classes to add to the overlay/card element */
110
+ this.overlayClasses = '';
111
+ /** When true the overlay and table will not have flex-shrink-max but instead flex-grow */
112
+ this.fillParentHeight = false;
113
+ /** Passed to the pagination control component. Used to disable the pagination controls */
114
+ this.disablePaginationControls = false;
115
+ /**
116
+ * Text displayed in the footer.
117
+ * Sometimes `noDataMessage`, sometimes `noSearchResultsMessage`
118
+ */
119
+ this.tableCaption = this.translateService.instant(this.noDataMessage || 'SearchableTable_Default_NoData_SC');
120
+ /** count of results displayed in the table */
121
+ this.resultsCount = '';
122
+ /** Items returned by the getItems function, along with total count */
123
+ this.searchResults = { items: [], totalItems: 0 };
124
+ /**
125
+ * If passed an input for refresh, triggers reloading items.
126
+ * Otherwise, completes immediately (will never trigger reload).
127
+ */
128
+ this.refreshTrigger = EMPTY;
129
+ this.destroyed = new Subject();
130
+ this.pageChanged = new Subject();
131
+ /** Triggers the initial load of the table */
132
+ this.initTable = new Subject();
133
+ }
134
+ ngOnChanges(changes) {
135
+ if (changes.pageSize && !changes.pageSize.firstChange && this.pageable) {
136
+ // If the pageSize changes, reset to the first page and refresh.
137
+ this.pageInfo = TablePaginationComponent.getPagingInfo(1, this.pageSize);
138
+ this.onPageChange(this.pageInfo);
139
+ }
140
+ }
141
+ ngOnInit() {
142
+ this.status.setStatus('pending', 'Loading');
143
+ this.setUpRefreshTrigger();
144
+ // Watch for searchbox/other control changes or refresh requests
145
+ const searchOrRefresh = merge(this.formModel.valueChanges.pipe(skipUntil(this.ready), debounceTime(300)), this.refreshTrigger, this.initTable).pipe(tap(() => {
146
+ //a change to any form control or a refresh should reset the pageInfo to the first page if the table is pageable.
147
+ //(if we didnt reset the pageInfo, we'd have to call getItems with the previous pageInfo, which may not be valid for the new results)
148
+ if (this.pageable) {
149
+ this.pageInfo = TablePaginationComponent.getPagingInfo(1, this.pageSize);
150
+ }
151
+ }));
152
+ const updateResults = merge(searchOrRefresh, this.pageChanged.pipe(
153
+ // Prevent a call to getItems when the pageSize is set during page init and before ready is completed
154
+ skipUntil(this.ready)));
155
+ // Call getItems and watch for errors
156
+ const getData = updateResults.pipe(
157
+ // Pluck the searchModel value out of the formModel
158
+ pluck('searchModel'),
159
+ // Ensure search string is defined
160
+ // Trim and lowercase it to aid case-insensitive searching
161
+ map((searchString) => {
162
+ let search = searchString || '';
163
+ return search.trim().toLowerCase();
164
+ }),
165
+ // Show status overlay
166
+ tap(() => this.status.setStatus('pending', 'Loading')),
167
+ // Call passed function
168
+ switchMap((searchString) =>
169
+ //if the table is pageable, pageInfo will be defined.
170
+ this.getItems(searchString, this.pageInfo)),
171
+ // If passed function fails, show error status
172
+ catchError((err, caught) => {
173
+ this.status.setStatus('error', this.errorService.parseApiError(err));
174
+ // return the caught observable so the subscription doesn't complete
175
+ return caught;
176
+ }), takeUntil(this.destroyed));
177
+ // Handle returned data and notify parent
178
+ getData.subscribe((results) => {
179
+ // Limiting number of results to show if not pageable (if pageable the max number of items in the table
180
+ // can be modified by increasing/decreasing the pageSize.)
181
+ if (!this.pageable) {
182
+ results.items = results.items.slice(0, this.maxItemCount);
183
+ }
184
+ // Need to know this (along with if there's a value in the formModel) to determine what to show in the footer
185
+ this.searchResults = results;
186
+ this.tableCaption = this.getCaption(results);
187
+ this.resultsCount = this.pageable ? this.rowCountPipe.transform(results, this.objectType, undefined, this.pageInfo) :
188
+ this.rowCountPipe.transform(results, this.objectType, this.maxItemCount);
189
+ // Disable searchbox when in no-data state
190
+ if (!results.items.length && !this.searchModel.value) {
191
+ this.searchModel.disable({ emitEvent: false });
192
+ }
193
+ else if (this.searchModel.disabled) {
194
+ // re-enable if it was disabled, but now has items
195
+ this.searchModel.enable({ emitEvent: false });
196
+ }
197
+ this.status.setStatus('hasData');
198
+ // Send the results to the parent component
199
+ this.itemsChange.emit(results);
200
+ });
201
+ // When 'ready' is completed by the host, initialize the table with the current form model values
202
+ this.ready.subscribe({
203
+ complete: () => {
204
+ this.initTable.next(this.formModel.value);
205
+ this.initTable.complete();
206
+ }
207
+ });
208
+ }
209
+ ngOnDestroy() {
210
+ this.destroyed.next();
211
+ this.destroyed.unsubscribe();
212
+ }
213
+ /** Pass along sort to parent component */
214
+ onSortChange(sort) {
215
+ this.sortChange.emit(sort);
216
+ }
217
+ /**
218
+ * When a page changes, store the new pagingInfo and emit the current value of the form to trigger getData.
219
+ */
220
+ onPageChange(pagingInfo) {
221
+ this.status.setStatus('pending', 'Loading');
222
+ this.pageInfo = pagingInfo;
223
+ this.pageChangeEmitter.emit(pagingInfo);
224
+ this.pageChanged.next(this.formModel.value);
225
+ }
226
+ /**
227
+ * Wire up a handler to the `refresh` observable so that when
228
+ * the host page context changes it can force the table to update as well.
229
+ *
230
+ * If the `refresh` observable passes options and the `clearSearch` property
231
+ * is set to true, reset the searchModel and pass an empty string.
232
+ *
233
+ * If `refresh` observable does not pass options or the `clearSearch` property
234
+ * is set to false, pass along the current searchModel Value.
235
+ */
236
+ setUpRefreshTrigger() {
237
+ if (this.refresh) {
238
+ this.refreshTrigger = this.refresh.pipe(map(opts => {
239
+ if (opts && opts.clearSearch) {
240
+ this.searchModel.reset('', { emitEvent: false });
241
+ return { ...this.formModel, searchModel: '' };
242
+ }
243
+ return this.formModel.value;
244
+ }), takeUntil(this.destroyed));
245
+ }
246
+ }
247
+ /** Get text to display in the footer. */
248
+ getCaption(results) {
249
+ if (results.items.length) {
250
+ return '';
251
+ }
252
+ if (this.searchModel.value) {
253
+ return this.translateService.instant(this.noSearchResultsMessage || 'SearchableTable_Default_NoMatches_SC', { searchText: this.searchModel.value });
254
+ }
255
+ return this.translateService.instant(this.noDataMessage || 'SearchableTable_Default_NoData_SC');
256
+ }
257
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchableTableComponent, deps: [{ token: i1.ErrorService }, { token: i2.TranslateService }, { token: i3.RowCountPipe }], target: i0.ɵɵFactoryTarget.Component }); }
258
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SearchableTableComponent, selector: "ec-searchable-table", inputs: { id: "id", resizable: "resizable", sortable: "sortable", sort: "sort", autofocus: "autofocus", tableClasses: "tableClasses", searchboxPlaceholder: "searchboxPlaceholder", formModel: "formModel", noDataMessage: "noDataMessage", noSearchResultsMessage: "noSearchResultsMessage", ready: "ready", getItems: "getItems", refresh: "refresh", status: "status", tableLayoutFixed: "tableLayoutFixed", searchboxTabIndex: "searchboxTabIndex", maxItemCount: "maxItemCount", hideSearchControl: "hideSearchControl", hideHeader: "hideHeader", objectType: "objectType", hideFooter: "hideFooter", pageable: "pageable", pageSize: "pageSize", maxTabs: "maxTabs", searchboxReadonly: "searchboxReadonly", selectionContext: "selectionContext", selectionToolbarTemplate: "selectionToolbarTemplate", additionalCountText: "additionalCountText", selectable: "selectable", customContentTemplate: "customContentTemplate", removeCard: "removeCard", overlayClasses: "overlayClasses", fillParentHeight: "fillParentHeight", disablePaginationControls: "disablePaginationControls" }, outputs: { sortChange: "sortChange", pageChangeEmitter: "pageChange", itemsChange: "itemsChange" }, queries: [{ propertyName: "resizableColumns", predicate: ResizableColumnComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"{{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"pagination-footer\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n [disablePaginationControls]=\"disablePaginationControls\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"caption-footer\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>", styles: [":host{--ec-searchable-table-flex-properties: 0 1 auto;--ec-searchable-table-flex-overlay-section: var(--ec-searchable-table-flex-properties, 0 1 auto);--ec-searchable-table-flex-ec-table: var(--ec-searchable-table-flex-properties, 0 1 auto);display:flex;flex-direction:column;flex:1 1;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-searchable-table-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-searchable-table-flex-ec-table);min-height:0}footer{display:flex;align-items:center;flex:none;font-size:var(--ec-font-size-label);line-height:1rem}footer.has-results{color:var(--ec-color-hint-dark);text-align:right}.pagination-footer{padding:0 .5rem 0 0}.caption-footer{padding:.5rem;height:var(--ec-searchable-table-height-caption-footer)}.card.has-mask{min-height:15rem}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.TextboxComponent, selector: "ec-textbox", inputs: ["autocomplete", "type", "placeholder", "maxlength", "minlength", "rows", "selectOnAutofocus", "upperCase"] }, { kind: "component", type: i6.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i7.TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: i8.TablePaginationComponent, selector: "ec-table-pagination", inputs: ["id", "totalItems", "pageSize", "pageNumber", "maxTabs", "disablePaginationControls"], outputs: ["pageChanged"] }] }); }
259
+ }
260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SearchableTableComponent, decorators: [{
261
+ type: Component,
262
+ args: [{ selector: 'ec-searchable-table', template: "<header *ngIf=\"!hideHeader\"\r\n class=\"d-flex flex-shrink align-items-center mb-3\">\r\n <ec-textbox id=\"{{id}}_searchbox\"\r\n *ngIf=\"!hideSearchControl\"\r\n class=\"mb-0 flex-grow mr-2\"\r\n [autofocus]=\"autofocus\"\r\n [formModel]=\"searchModel\"\r\n [tabindex]=\"searchboxTabIndex\"\r\n [placeholder]=\"searchboxPlaceholder\"\r\n [readonly]=\"searchboxReadonly\"></ec-textbox>\r\n <div class=\"flex-grow\">\r\n <ng-content select=\".searchable-table-controls\"></ng-content>\r\n </div>\r\n</header>\r\n<section id=\"{{id}}_card\"\r\n class=\"d-flex flex-column {{overlayClasses}}\"\r\n [ngClass]=\"{'is-translucent': status.status !== 'error', 'has-mask': status.status !== 'hasData', 'card m-0 bg-content': !customContentTemplate && !removeCard}\"\r\n ecOverlay\r\n [status]=\"status.status\"\r\n [message]=\"status.message\"\r\n [displayAsMask]=\"true\">\r\n <ng-content select=\".card-header\"></ng-content>\r\n <ng-container *ngTemplateOutlet=\"customContentTemplate || defaultContentTemplate\">\r\n </ng-container>\r\n\r\n <!-- the default template is an ec-table with proxied-over searchable table inputs. \r\n If that doesn't work for you then you can specify a customContentTemplate to use instead\r\n and still retain all the event handling, header, footer pagination, etc support -->\r\n <ng-template #defaultContentTemplate>\r\n <ec-table id=\"{{id}}_table\"\r\n class=\"{{tableClasses}}\"\r\n [class.is-fixed]=\"tableLayoutFixed\"\r\n [sortable]=\"sortable\"\r\n [sort]=\"sort\"\r\n (sortChange)=\"onSortChange($event)\"\r\n [resizable]=\"resizable\"\r\n [scrollable]=\"true\"\r\n [selectable]=\"selectable\"\r\n [selectionContext]=\"selectionContext\"\r\n [selectionToolbarTemplate]=\"selectionToolbarTemplate\"\r\n [resizableColumns]=\"resizableColumns\">\r\n <ng-content></ng-content>\r\n </ec-table>\r\n </ng-template>\r\n\r\n <!-- pagination footer visible if table is page-able and there are more than one page of results -->\r\n <footer *ngIf=\"!hideFooter && pageable && searchResults.totalItemsBeforePaging! > pageSize!\"\r\n class=\"pagination-footer\"\r\n [class.border-top]=\"!customContentTemplate\">\r\n <ec-table-pagination id=\"{{id}}_pager\"\r\n class=\"font-color-primary\"\r\n [totalItems]=\"searchResults.totalItemsBeforePaging\"\r\n [pageSize]=\"pageSize\"\r\n [maxTabs]=\"maxTabs\"\r\n [pageNumber]=\"pageInfo?.pageNumber\"\r\n [disablePaginationControls]=\"disablePaginationControls\"\r\n (pageChanged)=\"onPageChange($event)\">\r\n </ec-table-pagination>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto font-color-hint text-truncate\" \r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n\r\n <!-- default footer: visible if hideFooter is false and table is not page-able or there are only one page of results (always shows if there is a caption to indicate no results) -->\r\n <footer *ngIf=\"(!hideFooter && (!pageable || searchResults.totalItemsBeforePaging! <= pageSize!)) || tableCaption\"\r\n class=\"caption-footer\"\r\n [ngClass]=\"{'has-results': searchResults?.items?.length, 'border-top': searchResults?.items?.length && !customContentTemplate}\">\r\n <ng-content *ngIf=\"!tableCaption\"\r\n select=\".searchable-table-footer\"></ng-content>\r\n <div id=\"tableCaption\"\r\n *ngIf=\"tableCaption\"\r\n [innerHTML]=\"tableCaption\"></div>\r\n <div id=\"resultsCount\"\r\n *ngIf=\"searchResults?.items?.length\"\r\n class=\"ml-auto text-truncate\"\r\n title=\"{{resultsCount}} {{additionalCountText}}\">{{resultsCount}} {{additionalCountText}}</div>\r\n </footer>\r\n</section>", styles: [":host{--ec-searchable-table-flex-properties: 0 1 auto;--ec-searchable-table-flex-overlay-section: var(--ec-searchable-table-flex-properties, 0 1 auto);--ec-searchable-table-flex-ec-table: var(--ec-searchable-table-flex-properties, 0 1 auto);display:flex;flex-direction:column;flex:1 1;min-height:0}:host ::ng-deep .card-header+ec-table.is-selectable th{height:2.5rem;padding-bottom:.9375rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle{padding-top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable th.is-resizable .handle:before{top:.5rem}:host ::ng-deep .card-header+ec-table.is-selectable .selectable-table-toolbar{height:2.5rem;padding-bottom:.5rem}section{flex:var(--ec-searchable-table-flex-overlay-section);min-height:0}ec-table{flex:var(--ec-searchable-table-flex-ec-table);min-height:0}footer{display:flex;align-items:center;flex:none;font-size:var(--ec-font-size-label);line-height:1rem}footer.has-results{color:var(--ec-color-hint-dark);text-align:right}.pagination-footer{padding:0 .5rem 0 0}.caption-footer{padding:.5rem;height:var(--ec-searchable-table-height-caption-footer)}.card.has-mask{min-height:15rem}\n"] }]
263
+ }], ctorParameters: () => [{ type: i1.ErrorService }, { type: i2.TranslateService }, { type: i3.RowCountPipe }], propDecorators: { id: [{
264
+ type: Input
265
+ }], resizable: [{
266
+ type: Input
267
+ }], sortable: [{
268
+ type: Input
269
+ }], sort: [{
270
+ type: Input
271
+ }], autofocus: [{
272
+ type: Input
273
+ }], tableClasses: [{
274
+ type: Input
275
+ }], sortChange: [{
276
+ type: Output
277
+ }], pageChangeEmitter: [{
278
+ type: Output,
279
+ args: ['pageChange']
280
+ }], searchboxPlaceholder: [{
281
+ type: Input
282
+ }], formModel: [{
283
+ type: Input
284
+ }], noDataMessage: [{
285
+ type: Input
286
+ }], noSearchResultsMessage: [{
287
+ type: Input
288
+ }], ready: [{
289
+ type: Input
290
+ }], getItems: [{
291
+ type: Input
292
+ }], refresh: [{
293
+ type: Input
294
+ }], status: [{
295
+ type: Input
296
+ }], tableLayoutFixed: [{
297
+ type: Input
298
+ }], itemsChange: [{
299
+ type: Output
300
+ }], searchboxTabIndex: [{
301
+ type: Input
302
+ }], maxItemCount: [{
303
+ type: Input
304
+ }], hideSearchControl: [{
305
+ type: Input
306
+ }], hideHeader: [{
307
+ type: Input
308
+ }], objectType: [{
309
+ type: Input
310
+ }], hideFooter: [{
311
+ type: Input
312
+ }], pageable: [{
313
+ type: Input
314
+ }], pageSize: [{
315
+ type: Input
316
+ }], maxTabs: [{
317
+ type: Input
318
+ }], searchboxReadonly: [{
319
+ type: Input
320
+ }], selectionContext: [{
321
+ type: Input
322
+ }], selectionToolbarTemplate: [{
323
+ type: Input
324
+ }], resizableColumns: [{
325
+ type: ContentChildren,
326
+ args: [ResizableColumnComponent, { descendants: true }]
327
+ }], additionalCountText: [{
328
+ type: Input
329
+ }], selectable: [{
330
+ type: Input
331
+ }], customContentTemplate: [{
332
+ type: Input
333
+ }], removeCard: [{
334
+ type: Input
335
+ }], overlayClasses: [{
336
+ type: Input
337
+ }], fillParentHeight: [{
338
+ type: Input
339
+ }], disablePaginationControls: [{
340
+ type: Input
341
+ }] } });
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUF5QyxNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFjLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7QUFjcEYsTUFBTSxPQUFPLHdCQUF3QjtJQTRLbkMsbUNBQW1DO0lBQ25DLElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQWlDLENBQUM7SUFDbkUsQ0FBQztJQTBCRCxZQUNVLFlBQTBCLEVBQzFCLGdCQUFrQyxFQUNsQyxZQUEwQjtRQUYxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENB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QUFNO2dCQUdFLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFzQkcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFMEQsZ0JBQWdCO3NCQUEvRSxlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFHckQsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0cseUJBQXlCO3NCQUFqQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgRU1QVFksIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlVGltZSwgbWFwLCBwbHVjaywgc2tpcFVudGlsLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2Vycm9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3dDb3VudFBpcGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvZGlzcGxheS9waXBlcy9yb3ctY291bnQucGlwZSc7XHJcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tICcuLi92aWV3LW92ZXJsYXkvdmlldy1vdmVybGF5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vcmVzaXphYmxlLWNvbHVtbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdpbmdJbmZvLCBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dCB9IGZyb20gJy4vdGFibGUtc2VsZWN0YWJsZS1yb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVGFibGVTb3J0IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IHR5cGUgVGFibGVTZWFyY2hSZXN1bHRzID0geyBpdGVtczogdW5rbm93bltdLCB0b3RhbEl0ZW1zOiBudW1iZXIsIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmc/OiBudW1iZXIgfTtcclxuZXhwb3J0IHR5cGUgU2VhcmNoYWJsZVRhYmxlUmVmcmVzaE9wdGlvbnMgPSB7IGNsZWFyU2VhcmNoPzogYm9vbGVhbiB9O1xyXG5cclxudHlwZSBTZWFyY2hhYmxlVGFibGVGb3JtTW9kZWwgPSB7IHNlYXJjaE1vZGVsPzogc3RyaW5nIH07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2VjLXNlYXJjaGFibGUtdGFibGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlYXJjaGFibGVUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG5cclxuICBASW5wdXQoKSBpZCA9ICcnO1xyXG4gIEBJbnB1dCgpIHJlc2l6YWJsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNvcnRhYmxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc29ydD86IFRhYmxlU29ydCB8IFRhYmxlU29ydFtdO1xyXG4gIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipTZXQgdG8gYSBzcGFjZS1zZXBhcmF0ZWQgc2V0IG9mIHN0cmluZ3MgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGVjLXRhYmxlIGNsYXNzIGF0dHJpYnV0ZVxyXG4gICAqIHRoaXMgYWxsb3dzIGZpbmVyIGNvbnRyb2wgb3ZlciBzdHlsaW5nLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRhYmxlQ2xhc3Nlczogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIHRhYmxlIHNvcnQgaGFzIGNoYW5nZWQgKi9cclxuICBAT3V0cHV0KCkgc29ydENoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlU29ydCB8IFRhYmxlU29ydFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTb3J0IHwgVGFibGVTb3J0W10+KCk7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSB0YWJsZSBwYWdlIGhhcyBjaGFuZ2VkICovXHJcbiAgQE91dHB1dCgncGFnZUNoYW5nZScpIHBhZ2VDaGFuZ2VFbWl0dGVyOiBFdmVudEVtaXR0ZXI8UGFnaW5nSW5mbz4gPSBuZXcgRXZlbnRFbWl0dGVyPFBhZ2luZ0luZm8+KCk7XHJcblxyXG4gIC8qKiBQbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgc2VhcmNoYm94ICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94UGxhY2Vob2xkZXIgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybUdyb3VwIGZvciB0aGUgc2VhcmNoYm94XHJcbiAgICpcclxuICAgKiBUaGUgcmVmZXJlbmNlZCBGb3JtR3JvdXAgKiptdXN0KiogY29udGFpbiBhIEZvcm1Db250cm9sIGNhbGxlZCAnc2VhcmNoTW9kZWwnLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWwhOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5ZWQgaW4gb3ZlcmxheSB3aGVuIG5vIGRhdGEgaXMgcmV0dXJuZWQgKHdpdGhvdXQgc2VhcmNoaW5nKS5cclxuICAgKlxyXG4gICAqIERlZmF1bHRzIHRvIFwiU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9EYXRhX1NDXCJcclxuICAgKi9cclxuICBASW5wdXQoKSBub0RhdGFNZXNzYWdlOiBzdHJpbmcgPSAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9EYXRhX1NDJztcclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheWVkIGluIG92ZXJsYXkgd2hlbiBubyBkYXRhIGlzIHJldHVybmVkIChhZnRlciBzZWFyY2hpbmcpLlxyXG4gICAqIEVuc3VyZSB0cmFuc2xhdGlvbiBoYXMgYW4gaW50ZXJwb2xhdGlvbiBwbGFjZWhvbGRlciBmb3IgXCJzZWFyY2hUZXh0XCIuXHJcbiAgICpcclxuICAgKiBEZWZhdWx0cyB0byBcIlNlYXJjaGFibGVUYWJsZV9EZWZhdWx0X05vTWF0Y2hlc19TQ1wiXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIC8vIDcgcmVxdWlyZXMgc2luZ2xlIGN1cmx5IGJyYWNlc1xyXG4gICAqIE5vIGl0ZW1zIGZvdW5kIG1hdGNoaW5nIDxzdHJvbmc+e3tzZWFyY2hUZXh0fX08L3N0cm9uZz5cclxuICAgKi9cclxuICBASW5wdXQoKSBub1NlYXJjaFJlc3VsdHNNZXNzYWdlOiBzdHJpbmcgPSAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9NYXRjaGVzX1NDJztcclxuXHJcbiAgLyoqXHJcbiAgICogSW5kaWNhdGVzIGhvc3RpbmcgcGFnZSBpcyByZWFkeSBmb3IgdGhlIHRhYmxlIHRvIGxvYWQgZGF0YS5cclxuICAgKlxyXG4gICAqIE5leHQgYW5kIENvbXBsZXRlIHRoaXMgb2JzZXJ2YWJsZSBhZnRlciBob3N0aW5nIHBhZ2UgaGFzIG1hZGUgYW55IHByZWxpbWluYXJ5XHJcbiAgICogQVBJIChvciBvdGhlciBhc3luY2hyb25vdXMpIGNhbGxzIHRvIGxvYWQgcHJlcmVxdWlzaXRlIGRhdGEgdXBvbiB3aGljaCB0aGUgY29kZVxyXG4gICAqIGluIHRoZSBgZ2V0SXRlbXNgIGZ1bmN0aW9uIGRlcGVuZHMuICBVc2UgYSBgUmVwbGF5U3ViamVjdGAgdG8gZW5zdXJlIGV2ZXJ5IGNvbXBvbmVudFxyXG4gICAqIHRoYXQgdXNlcyB0aGlzIG9ic2VydmFibGUgZ2V0cyB0aGUgTmV4dCBhbmQgQ29tcGxldGUgbm90aWZpY2F0aW9ucy5cclxuICAgKi9cclxuICBASW5wdXQoKSByZWFkeSE6IE9ic2VydmFibGU8dm9pZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCB0byBnZXQgaXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgdGFibGUuXHJcbiAgICogSWYgcGFnZWFibGUgaXMgdHJ1ZSwgdGhlIFRhYmxlU2VhcmNoUmVzdWx0cyBuZWVkIHRvIGluY2x1ZGUgdG90YWxJdGVtc0JlZm9yZVBhZ2luZywgd2hpY2ggaXMgdGhlXHJcbiAgICogY291bnQgb2YgaXRlbXMgYmVmb3JlIHlvdSd2ZSBhcHBsaWVkIGFueSBwYWdpbmF0aW9uIChpLmUuIHRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW1lIGJhY2sgZnJvbSB0aGUgc2VhcmNoKS5cclxuICAgKlxyXG4gICAqIE1ha2Ugc3VyZSB0byBiaW5kIHRoZSBzY29wZSBpbiB0aGUgdGVtcGxhdGVcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIFtnZXRJdGVtc109XCJ5b3VyRnVuY3Rpb24uYmluZCh0aGlzKVwiXHJcbiAgICovXHJcbiAgQElucHV0KCkgZ2V0SXRlbXMhOiAoc2VhcmNoPzogc3RyaW5nLCBwYWdlQ2hhbmdlSW5mbz86IFBhZ2luZ0luZm8pID0+IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPjtcclxuXHJcbiAgLyoqIE9ic2VydmFibGUgdGhhdCB3aWxsIGZvcmNlIHRoZSBnZXRJdGVtcyBmdW5jdGlvbiB0byBnZXQgY2FsbGVkIGFnYWluICovXHJcbiAgQElucHV0KCkgcmVmcmVzaD86IE9ic2VydmFibGU8U2VhcmNoYWJsZVRhYmxlUmVmcmVzaE9wdGlvbnMgfCB2b2lkPjtcclxuXHJcbiAgLyoqIEFsbG93IHRoZSBob3N0IGNvbXBvbmVudCB0byBzdXBwbHkgYW4gb3ZlcmxheSB0byBjb250cm9sIHRoZSBwZW5kaW5nIHN0YXRlIG9mIHRoZSB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHN0YXR1czogT3ZlcmxheSA9IG5ldyBPdmVybGF5KCdoYXNEYXRhJyk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVuZGVybHlpbmcgdGFibGUncyBsYXlvdXQgdG8gZml4ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGFibGVMYXlvdXRGaXhlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogRW1pdHMgaXRlbXMgcmV0dXJuZWQgYnkgdGhlIGdldEl0ZW1zIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHRvdGFsIGNvdW50ICovXHJcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTZWFyY2hSZXN1bHRzPigpO1xyXG5cclxuICAvKiogT3B0aW9uYWwgdGFiIGluZGV4IGZvciB0aGUgc2VhcmNoYm94ICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94VGFiSW5kZXg/OiBudW1iZXI7XHJcblxyXG4gIC8qKiBNYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0byBzaG93IGluIHRoZSB0YWJsZSAoZGVmYXVsdDogMTAwKSAqL1xyXG4gIEBJbnB1dCgpIG1heEl0ZW1Db3VudDogbnVtYmVyID0gMTAwO1xyXG5cclxuICAvKiogU2V0IHRvIHRydWUgdG8gaGlkZSBzZWFyY2ggYm94IChkb2VzIG5vdCBoaWRlIHRoZSBvdGhlciBzZWFyY2hhYmxlIHRhYmxlIGNvbnRyb2xzICovXHJcbiAgQElucHV0KCkgaGlkZVNlYXJjaENvbnRyb2w6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIGVudGlyZSBoZWFkZXIgKi9cclxuICBASW5wdXQoKSBoaWRlSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBUeXBlIG9mIG9iamVjdCBpbiB0aGUgdGFibGUuIERpc3BsYXllZCBpbiBmb290ZXIgKGRlZmF1bHQ6ICdyZXN1bHRzJykqL1xyXG4gIEBJbnB1dCgpIG9iamVjdFR5cGU6IHN0cmluZyA9ICdyZXN1bHRzJztcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgdGhlIHRhYmxlIGZvb3RlciAqL1xyXG4gIEBJbnB1dCgpIGhpZGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHBhZ2luZy4gSWYgcGFnaW5nIGlzIGVuYWJsZWQsIHBhZ2VTaXplIG11c3QgYmUgcHJvdmlkZWQuXHJcbiAgICogZ2V0SXRlbXMgd2lsbCBiZSBwYXNzZWQgYm90aCBhIHNlYXJjaCBhbmQgYSBQYWdpbmdJbmZvIG9iamVjdCB3aGVuIGNhbGxlZC4gSXQgbXVzdCBpbmNsdWRlIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmcgaW4gdGhlIFRhYmxlU2VhcmNoUmVzdWx0cyBvdXRwdXQuXHJcbiAgICogSGVyZSBpcyBhIHNpbXBsZSBpbXBsZW1lbnRhdGlvbjogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBnZXRJdGVtcyhzZWFyY2g/OiBzdHJpbmcsIHBhZ2VDaGFuZ2VJbmZvPzogUGFnaW5nSW5mbyk6IE9ic2VydmFibGU8VGFibGVTZWFyY2hSZXN1bHRzPiB7XHJcbiAgICAgIGxldCByZXN1bHRzOiBTaW1wbGVJdGVtW10gPSBbLi4udGhpcy5wYWdpbmF0ZWRUYWJsZUl0ZW1zXTtcclxuICAgICAgLy9hcHBseSBzZWFyY2hcclxuICAgICAgaWYoc2VhcmNoKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHRoaXMucGFnaW5hdGVkVGFibGVJdGVtcy5maWx0ZXIoaSA9PiBpLmEudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vZ2V0IGNvdW50IGJlZm9yZSBhcHBseWluZyBwYWdpbmdcclxuICAgICAgbGV0IGNvdW50QmVmb3JlUGFnaW5nID0gcmVzdWx0cy5sZW5ndGg7XHJcbiAgICAgIC8vYXBwbHkgcGFnaW5nXHJcbiAgICAgIGlmKHBhZ2VDaGFuZ2VJbmZvKSB7XHJcbiAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UocGFnZUNoYW5nZUluZm8hLnNraXAsIHBhZ2VDaGFuZ2VJbmZvIS5za2lwICsgcGFnZUNoYW5nZUluZm8hLnBhZ2VTaXplKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2YoeyBpdGVtczogcmVzdWx0cywgdG90YWxJdGVtczogcmVzdWx0cy5sZW5ndGgsIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmc6IGNvdW50QmVmb3JlUGFnaW5nIH0pO1xyXG4gICAgfVxyXG4gICovXHJcbiAgQElucHV0KCkgcGFnZWFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogTWF4IHNpemUgb2YgYSBwYWdlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplPzogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICogTWF4aW11bSBudW1iZXIgb2YgcGFnZSB0YWJzIHRvIHNob3dcclxuICovXHJcbiAgQElucHV0KCkgbWF4VGFicz86IG51bWJlciA9IDEwO1xyXG5cclxuICAvKipcclxuICAgKiBNYWtlcyB0aGUgc2VhcmNoYm94IHJlYWRvbmx5IGlmIHRydWUuXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2VhcmNoYm94UmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gKi9cclxuICBASW5wdXQoKSBzZWxlY3Rpb25Db250ZXh0PzogVGFibGVTZWxlY3RhYmxlUm93Q29udGV4dDtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgaW5uZXIgVGFibGVDb21wb25lbnQgdG8gZGlzcGxheSBhIHRvb2xiYXIgd2hlbiAxIG9yIG1vcmUgcm93cyBhcmUgc2VsZWN0ZWQuIFJlcXVpcmVzIGBbc2VsZWN0aW9uQ29udGV4dF1gIHRvIGJlIGRlZmluZWQuICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uVG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICBcclxuICBAQ29udGVudENoaWxkcmVuKFJlc2l6YWJsZUNvbHVtbkNvbXBvbmVudCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgcmVzaXphYmxlQ29sdW1ucyE6IFF1ZXJ5TGlzdDxSZXNpemFibGVDb2x1bW5Db21wb25lbnQ+O1xyXG5cclxuICAvKiogT3B0aW9uYWwgdGV4dCB0byBhZGQgdG8gdGhlIHJlc3VsdHMgY291bnQgaW4gdGhlIHRhYmxlIGZvb3Rlci4gVGhpcyB0ZXh0IHdpbGwgYmUgYWRkZWQgYWZ0ZXIgdGhlIGNvdW50IGFuZCBvYmplY3RUeXBlLiAqL1xyXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb3VudFRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogRW5hYmxlcyB0YWJsZSByb3cgc2VsZWN0aW9uIGFuZCByb3cgaGlnaGxpZ2h0aW5nIHN0eWxlcyB3aGVuIHRydWUgKi9cclxuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKkRlZmF1bHRzIHRvIHVuZGVmaW5lZC4gU3BlY2lmeSB5b3VyIG93biB0ZW1wbGF0ZSBpZiBhbiBlYy10YWJsZSB3cmFwcGVkIGFyb3VuZCB5b3VyIHRyYW5zY2x1ZGVkIGNvbnRlbnQgd29uJ3QgbWVldCB5b3VyIG5lZWRzXHJcbiAgICovXHJcbiAgQElucHV0KCkgY3VzdG9tQ29udGVudFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgLyoqIFdoZW4gdHJ1ZSwgcmVtb3ZlcyB0aGUgY2FyZCBzdHlsZXMgZnJvbSB0aGUgdGFibGUgd3JhcHBlciAqL1xyXG4gIEBJbnB1dCgpIHJlbW92ZUNhcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIENsYXNzZXMgdG8gYWRkIHRvIHRoZSBvdmVybGF5L2NhcmQgZWxlbWVudCAqL1xyXG4gIEBJbnB1dCgpIG92ZXJsYXlDbGFzc2VzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIFdoZW4gdHJ1ZSB0aGUgb3ZlcmxheSBhbmQgdGFibGUgd2lsbCBub3QgaGF2ZSBmbGV4LXNocmluay1tYXggYnV0IGluc3RlYWQgZmxleC1ncm93ICovXHJcbiAgQElucHV0KCkgZmlsbFBhcmVudEhlaWdodD86IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIFBhc3NlZCB0byB0aGUgcGFnaW5hdGlvbiBjb250cm9sIGNvbXBvbmVudC4gVXNlZCB0byBkaXNhYmxlIHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzICovXHJcbiAgQElucHV0KCkgZGlzYWJsZVBhZ2luYXRpb25Db250cm9scz86IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBQYWdpbmdJbmZvIGZvciB0aGUgY3VycmVudCBwYWdlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBwYWdlSW5mbz86IFBhZ2luZ0luZm87XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIHNlYXJjaE1vZGVsICovXHJcbiAgcHVibGljIGdldCBzZWFyY2hNb2RlbCgpOiBVbnR5cGVkRm9ybUNvbnRyb2wge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybU1vZGVsLmNvbnRyb2xzLnNlYXJjaE1vZGVsIGFzIFVudHlwZWRGb3JtQ29udHJvbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRleHQgZGlzcGxheWVkIGluIHRoZSBmb290ZXIuXHJcbiAgICogU29tZXRpbWVzIGBub0RhdGFNZXNzYWdlYCwgc29tZXRpbWVzIGBub1NlYXJjaFJlc3VsdHNNZXNzYWdlYFxyXG4gICAqL1xyXG4gIHB1YmxpYyB0YWJsZUNhcHRpb246IHN0cmluZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9EYXRhTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9EYXRhX1NDJyk7XHJcblxyXG4gIC8qKiBjb3VudCBvZiByZXN1bHRzIGRpc3BsYXllZCBpbiB0aGUgdGFibGUgKi9cclxuICBwdWJsaWMgcmVzdWx0c0NvdW50OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEl0ZW1zIHJldHVybmVkIGJ5IHRoZSBnZXRJdGVtcyBmdW5jdGlvbiwgYWxvbmcgd2l0aCB0b3RhbCBjb3VudCAqL1xyXG4gIHB1YmxpYyBzZWFyY2hSZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMgPSB7IGl0ZW1zOiBbXSwgdG90YWxJdGVtczogMCB9O1xyXG5cclxuICAvKipcclxuICAgKiBJZiBwYXNzZWQgYW4gaW5wdXQgZm9yIHJlZnJlc2gsIHRyaWdnZXJzIHJlbG9hZGluZyBpdGVtcy5cclxuICAgKiBPdGhlcndpc2UsIGNvbXBsZXRlcyBpbW1lZGlhdGVseSAod2lsbCBuZXZlciB0cmlnZ2VyIHJlbG9hZCkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSByZWZyZXNoVHJpZ2dlcjogT2JzZXJ2YWJsZTxTZWFyY2hhYmxlVGFibGVGb3JtTW9kZWwgfCB1bmRlZmluZWQ+ID0gRU1QVFk7XHJcbiAgcHJpdmF0ZSBkZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIHBhZ2VDaGFuZ2VkOiBTdWJqZWN0PFNlYXJjaGFibGVUYWJsZUZvcm1Nb2RlbD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKiogVHJpZ2dlcnMgdGhlIGluaXRpYWwgbG9hZCBvZiB0aGUgdGFibGUgKi9cclxuICBwcml2YXRlIGluaXRUYWJsZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGVycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3dDb3VudFBpcGU6IFJvd0NvdW50UGlwZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLnBhZ2VTaXplICYmICFjaGFuZ2VzLnBhZ2VTaXplLmZpcnN0Q2hhbmdlICYmIHRoaXMucGFnZWFibGUpIHtcclxuICAgICAgLy8gSWYgdGhlIHBhZ2VTaXplIGNoYW5nZXMsIHJlc2V0IHRvIHRoZSBmaXJzdCBwYWdlIGFuZCByZWZyZXNoLlxyXG4gICAgICB0aGlzLnBhZ2VJbmZvID0gVGFibGVQYWdpbmF0aW9uQ29tcG9uZW50LmdldFBhZ2luZ0luZm8oMSwgdGhpcy5wYWdlU2l6ZSEpO1xyXG4gICAgICB0aGlzLm9uUGFnZUNoYW5nZSh0aGlzLnBhZ2VJbmZvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdwZW5kaW5nJywgJ0xvYWRpbmcnKTtcclxuICAgIHRoaXMuc2V0VXBSZWZyZXNoVHJpZ2dlcigpO1xyXG5cclxuICAgIC8vIFdhdGNoIGZvciBzZWFyY2hib3gvb3RoZXIgY29udHJvbCBjaGFuZ2VzIG9yIHJlZnJlc2ggcmVxdWVzdHNcclxuICAgIGNvbnN0IHNlYXJjaE9yUmVmcmVzaCA9IG1lcmdlKFxyXG4gICAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICBza2lwVW50aWwodGhpcy5yZWFkeSksXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMClcclxuICAgICAgKSxcclxuICAgICAgdGhpcy5yZWZyZXNoVHJpZ2dlcixcclxuICAgICAgdGhpcy5pbml0VGFibGVcclxuICAgICkucGlwZSh0YXAoKCk9PiB7XHJcbiAgICAgIC8vYSBjaGFuZ2UgdG8gYW55IGZvcm0gY29udHJvbCBvciBhIHJlZnJlc2ggc2hvdWxkIHJlc2V0IHRoZSBwYWdlSW5mbyB0byB0aGUgZmlyc3QgcGFnZSBpZiB0aGUgdGFibGUgaXMgcGFnZWFibGUuXHJcbiAgICAgIC8vKGlmIHdlIGRpZG50IHJlc2V0IHRoZSBwYWdlSW5mbywgd2UnZCBoYXZlIHRvIGNhbGwgZ2V0SXRlbXMgd2l0aCB0aGUgcHJldmlvdXMgcGFnZUluZm8sIHdoaWNoIG1heSBub3QgYmUgdmFsaWQgZm9yIHRoZSBuZXcgcmVzdWx0cylcclxuICAgICAgaWYodGhpcy5wYWdlYWJsZSkge1xyXG4gICAgICAgIHRoaXMucGFnZUluZm8gPSBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbygxLCB0aGlzLnBhZ2VTaXplISk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVSZXN1bHRzID0gbWVyZ2UoXHJcbiAgICAgIHNlYXJjaE9yUmVmcmVzaCxcclxuICAgICAgdGhpcy5wYWdlQ2hhbmdlZC5waXBlKFxyXG4gICAgICAgIC8vIFByZXZlbnQgYSBjYWxsIHRvIGdldEl0ZW1zIHdoZW4gdGhlIHBhZ2VTaXplIGlzIHNldCBkdXJpbmcgcGFnZSBpbml0IGFuZCBiZWZvcmUgcmVhZHkgaXMgY29tcGxldGVkXHJcbiAgICAgICAgc2tpcFVudGlsKHRoaXMucmVhZHkpXHJcbiAgICAgIClcclxuICAgIClcclxuXHJcbiAgICAvLyBDYWxsIGdldEl0ZW1zIGFuZCB3YXRjaCBmb3IgZXJyb3JzXHJcbiAgICBjb25zdCBnZXREYXRhID0gdXBkYXRlUmVzdWx0cy5waXBlKFxyXG4gICAgICAvLyBQbHVjayB0aGUgc2VhcmNoTW9kZWwgdmFsdWUgb3V0IG9mIHRoZSBmb3JtTW9kZWxcclxuICAgICAgcGx1Y2soJ3NlYXJjaE1vZGVsJyksXHJcblxyXG4gICAgICAvLyBFbnN1cmUgc2VhcmNoIHN0cmluZyBpcyBkZWZpbmVkXHJcbiAgICAgIC8vIFRyaW0gYW5kIGxvd2VyY2FzZSBpdCB0byBhaWQgY2FzZS1pbnNlbnNpdGl2ZSBzZWFyY2hpbmdcclxuICAgICAgbWFwKChzZWFyY2hTdHJpbmc/OiBzdHJpbmcpID0+IHtcclxuICAgICAgICBsZXQgc2VhcmNoID0gc2VhcmNoU3RyaW5nIHx8ICcnO1xyXG4gICAgICAgIHJldHVybiBzZWFyY2gudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH0pLFxyXG5cclxuICAgICAgLy8gU2hvdyBzdGF0dXMgb3ZlcmxheVxyXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdwZW5kaW5nJywgJ0xvYWRpbmcnKSksXHJcblxyXG4gICAgICAvLyBDYWxsIHBhc3NlZCBmdW5jdGlvblxyXG4gICAgICBzd2l0Y2hNYXAoKHNlYXJjaFN0cmluZzogc3RyaW5nKSA9PiBcclxuICAgICAgICAvL2lmIHRoZSB0YWJsZSBpcyBwYWdlYWJsZSwgcGFnZUluZm8gd2lsbCBiZSBkZWZpbmVkLlxyXG4gICAgICAgIHRoaXMuZ2V0SXRlbXMoc2VhcmNoU3RyaW5nLCB0aGlzLnBhZ2VJbmZvKVxyXG4gICAgICApLFxyXG5cclxuICAgICAgLy8gSWYgcGFzc2VkIGZ1bmN0aW9uIGZhaWxzLCBzaG93IGVycm9yIHN0YXR1c1xyXG4gICAgICBjYXRjaEVycm9yKChlcnIsIGNhdWdodCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygnZXJyb3InLCB0aGlzLmVycm9yU2VydmljZS5wYXJzZUFwaUVycm9yKGVycikpO1xyXG4gICAgICAgIC8vIHJldHVybiB0aGUgY2F1Z2h0IG9ic2VydmFibGUgc28gdGhlIHN1YnNjcmlwdGlvbiBkb2Vzbid0IGNvbXBsZXRlXHJcbiAgICAgICAgcmV0dXJuIGNhdWdodDtcclxuICAgICAgfSksXHJcblxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBIYW5kbGUgcmV0dXJuZWQgZGF0YSBhbmQgbm90aWZ5IHBhcmVudFxyXG4gICAgZ2V0RGF0YS5zdWJzY3JpYmUoKHJlc3VsdHM6IFRhYmxlU2VhcmNoUmVzdWx0cykgPT4ge1xyXG4gICAgICAvLyBMaW1pdGluZyBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93IGlmIG5vdCBwYWdlYWJsZSAoaWYgcGFnZWFibGUgdGhlIG1heCBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHRhYmxlXHJcbiAgICAgIC8vIGNhbiBiZSBtb2RpZmllZCBieSBpbmNyZWFzaW5nL2RlY3JlYXNpbmcgdGhlIHBhZ2VTaXplLilcclxuICAgICAgaWYoIXRoaXMucGFnZWFibGUpIHtcclxuICAgICAgICByZXN1bHRzLml0ZW1zID0gcmVzdWx0cy5pdGVtcy5zbGljZSgwLCB0aGlzLm1heEl0ZW1Db3VudCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5lZWQgdG8ga25vdyB0aGlzIChhbG9uZyB3aXRoIGlmIHRoZXJlJ3MgYSB2YWx1ZSBpbiB0aGUgZm9ybU1vZGVsKSB0byBkZXRlcm1pbmUgd2hhdCB0byBzaG93IGluIHRoZSBmb290ZXJcclxuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gcmVzdWx0cztcclxuICAgIFxyXG4gICAgICB0aGlzLnRhYmxlQ2FwdGlvbiA9IHRoaXMuZ2V0Q2FwdGlvbihyZXN1bHRzKTtcclxuICAgICAgdGhpcy5yZXN1bHRzQ291bnQgPSB0aGlzLnBhZ2VhYmxlID8gdGhpcy5yb3dDb3VudFBpcGUudHJhbnNmb3JtKHJlc3VsdHMsIHRoaXMub2JqZWN0VHlwZSwgdW5kZWZpbmVkLCB0aGlzLnBhZ2VJbmZvKTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dDb3VudFBpcGUudHJhbnNmb3JtKHJlc3VsdHMsIHRoaXMub2JqZWN0VHlwZSwgdGhpcy5tYXhJdGVtQ291bnQpO1xyXG5cclxuICAgICAgLy8gRGlzYWJsZSBzZWFyY2hib3ggd2hlbiBpbiBuby1kYXRhIHN0YXRlXHJcbiAgICAgIGlmICghcmVzdWx0cy5pdGVtcy5sZW5ndGggJiYgIXRoaXMuc2VhcmNoTW9kZWwudmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE1vZGVsLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoTW9kZWwuZGlzYWJsZWQpIHtcclxuICAgICAgICAvLyByZS1lbmFibGUgaWYgaXQgd2FzIGRpc2FibGVkLCBidXQgbm93IGhhcyBpdGVtc1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZWwuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdoYXNEYXRhJyk7XHJcbiAgICAgIC8vIFNlbmQgdGhlIHJlc3VsdHMgdG8gdGhlIHBhcmVudCBjb21wb25lbnRcclxuICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHJlc3VsdHMpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gV2hlbiAncmVhZHknIGlzIGNvbXBsZXRlZCBieSB0aGUgaG9zdCwgaW5pdGlhbGl6ZSB0aGUgdGFibGUgd2l0aCB0aGUgY3VycmVudCBmb3JtIG1vZGVsIHZhbHVlc1xyXG4gICAgdGhpcy5yZWFkeS5zdWJzY3JpYmUoe1xyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5pdFRhYmxlLm5leHQodGhpcy5mb3JtTW9kZWwudmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW5pdFRhYmxlLmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3llZC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBhc3MgYWxvbmcgc29ydCB0byBwYXJlbnQgY29tcG9uZW50ICovXHJcbiAgb25Tb3J0Q2hhbmdlKHNvcnQ6IFRhYmxlU29ydCB8IFRhYmxlU29ydFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChzb3J0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYSBwYWdlIGNoYW5nZXMsIHN0b3JlIHRoZSBuZXcgcGFnaW5nSW5mbyBhbmQgZW1pdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZm9ybSB0byB0cmlnZ2VyIGdldERhdGEuXHJcbiAgICovXHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2luZ0luZm86IFBhZ2luZ0luZm8pIHtcclxuICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygncGVuZGluZycsICdMb2FkaW5nJyk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvID0gcGFnaW5nSW5mbztcclxuICAgIHRoaXMucGFnZUNoYW5nZUVtaXR0ZXIuZW1pdChwYWdpbmdJbmZvKTtcclxuICAgIHRoaXMucGFnZUNoYW5nZWQubmV4dCh0aGlzLmZvcm1Nb2RlbC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogV2lyZSB1cCBhIGhhbmRsZXIgdG8gdGhlIGByZWZyZXNoYCBvYnNlcnZhYmxlIHNvIHRoYXQgd2hlblxyXG4gICAqIHRoZSBob3N0IHBhZ2UgY29udGV4dCBjaGFuZ2VzIGl0IGNhbiBmb3JjZSB0aGUgdGFibGUgdG8gdXBkYXRlIGFzIHdlbGwuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgYHJlZnJlc2hgIG9ic2VydmFibGUgcGFzc2VzIG9wdGlvbnMgYW5kIHRoZSBgY2xlYXJTZWFyY2hgIHByb3BlcnR5XHJcbiAgICogaXMgc2V0IHRvIHRydWUsIHJlc2V0IHRoZSBzZWFyY2hNb2RlbCBhbmQgcGFzcyBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgICpcclxuICAgKiBJZiBgcmVmcmVzaGAgb2JzZXJ2YWJsZSBkb2VzIG5vdCBwYXNzIG9wdGlvbnMgb3IgdGhlIGBjbGVhclNlYXJjaGAgcHJvcGVydHlcclxuICAgKiBpcyBzZXQgdG8gZmFsc2UsIHBhc3MgYWxvbmcgdGhlIGN1cnJlbnQgc2VhcmNoTW9kZWwgVmFsdWUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRVcFJlZnJlc2hUcmlnZ2VyKCkge1xyXG4gICAgaWYgKHRoaXMucmVmcmVzaCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyID0gdGhpcy5yZWZyZXNoLnBpcGUoXHJcbiAgICAgICAgbWFwKG9wdHMgPT4ge1xyXG4gICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5jbGVhclNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGVsLnJlc2V0KCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMuZm9ybU1vZGVsLCBzZWFyY2hNb2RlbDogJycgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1Nb2RlbC52YWx1ZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRleHQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyLiAqL1xyXG4gIHByaXZhdGUgZ2V0Q2FwdGlvbihyZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMpOiBzdHJpbmcge1xyXG4gICAgaWYgKHJlc3VsdHMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hNb2RlbC52YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5ub1NlYXJjaFJlc3VsdHNNZXNzYWdlIHx8ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0MnLCB7IHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoTW9kZWwudmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9EYXRhTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9EYXRhX1NDJyk7XHJcbiAgfVxyXG5cclxufSIsIjxoZWFkZXIgKm5nSWY9XCIhaGlkZUhlYWRlclwiXHJcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1zaHJpbmsgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICA8ZWMtdGV4dGJveCBpZD1cInt7aWR9fV9zZWFyY2hib3hcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWFyY2hDb250cm9sXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1iLTAgZmxleC1ncm93IG1yLTJcIlxyXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybU1vZGVsXT1cInNlYXJjaE1vZGVsXCJcclxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic2VhcmNoYm94VGFiSW5kZXhcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hib3hQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInNlYXJjaGJveFJlYWRvbmx5XCI+PC9lYy10ZXh0Ym94PlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3dcIj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5zZWFyY2hhYmxlLXRhYmxlLWNvbnRyb2xzXCI+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2hlYWRlcj5cclxuPHNlY3Rpb24gaWQ9XCJ7e2lkfX1fY2FyZFwiXHJcbiAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHt7b3ZlcmxheUNsYXNzZXN9fVwiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtdHJhbnNsdWNlbnQnOiBzdGF0dXMuc3RhdHVzICE9PSAnZXJyb3InLCAnaGFzLW1hc2snOiBzdGF0dXMuc3RhdHVzICE9PSAnaGFzRGF0YScsICdjYXJkIG0tMCBiZy1jb250ZW50JzogIWN1c3RvbUNvbnRlbnRUZW1wbGF0ZSAmJiAhcmVtb3ZlQ2FyZH1cIlxyXG4gICAgICAgICBlY092ZXJsYXlcclxuICAgICAgICAgW3N0YXR1c109XCJzdGF0dXMuc3RhdHVzXCJcclxuICAgICAgICAgW21lc3NhZ2VdPVwic3RhdHVzLm1lc3NhZ2VcIlxyXG4gICAgICAgICBbZGlzcGxheUFzTWFza109XCJ0cnVlXCI+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmNhcmQtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Db250ZW50VGVtcGxhdGUgfHwgZGVmYXVsdENvbnRlbnRUZW1wbGF0ZVwiPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8IS0tIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGlzIGFuIGVjLXRhYmxlIHdpdGggcHJveGllZC1vdmVyIHNlYXJjaGFibGUgdGFibGUgaW5wdXRzLiBcclxuICAgIElmIHRoYXQgZG9lc24ndCB3b3JrIGZvciB5b3UgdGhlbiB5b3UgY2FuIHNwZWNpZnkgYSBjdXN0b21Db250ZW50VGVtcGxhdGUgdG8gdXNlIGluc3RlYWRcclxuICAgIGFuZCBzdGlsbCByZXRhaW4gYWxsIHRoZSBldmVudCBoYW5kbGluZywgaGVhZGVyLCBmb290ZXIgcGFnaW5hdGlvbiwgZXRjIHN1cHBvcnQgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29udGVudFRlbXBsYXRlPlxyXG4gICAgPGVjLXRhYmxlIGlkPVwie3tpZH19X3RhYmxlXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInt7dGFibGVDbGFzc2VzfX1cIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1maXhlZF09XCJ0YWJsZUxheW91dEZpeGVkXCJcclxuICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGVcIlxyXG4gICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRcIlxyXG4gICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXHJcbiAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbnRleHRdPVwic2VsZWN0aW9uQ29udGV4dFwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZV09XCJzZWxlY3Rpb25Ub29sYmFyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInJlc2l6YWJsZUNvbHVtbnNcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9lYy10YWJsZT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8IS0tIHBhZ2luYXRpb24gZm9vdGVyIHZpc2libGUgaWYgdGFibGUgaXMgcGFnZS1hYmxlIGFuZCB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlIG9mIHJlc3VsdHMgLS0+XHJcbiAgPGZvb3RlciAqbmdJZj1cIiFoaWRlRm9vdGVyICYmIHBhZ2VhYmxlICYmIHNlYXJjaFJlc3VsdHMudG90YWxJdGVtc0JlZm9yZVBhZ2luZyEgPiBwYWdlU2l6ZSFcIlxyXG4gICAgICAgICAgY2xhc3M9XCJwYWdpbmF0aW9uLWZvb3RlclwiXHJcbiAgICAgICAgICBbY2xhc3MuYm9yZGVyLXRvcF09XCIhY3VzdG9tQ29udGVudFRlbXBsYXRlXCI+XHJcbiAgICA8ZWMtdGFibGUtcGFnaW5hdGlvbiBpZD1cInt7aWR9fV9wYWdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtY29sb3ItcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJzZWFyY2hSZXN1bHRzLnRvdGFsSXRlbXNCZWZvcmVQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhUYWJzXT1cIm1heFRhYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VOdW1iZXJdPVwicGFnZUluZm8/LnBhZ2VOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVQYWdpbmF0aW9uQ29udHJvbHNdPVwiZGlzYWJsZVBhZ2luYXRpb25Db250cm9sc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZWQpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIj5cclxuICAgIDwvZWMtdGFibGUtcGFnaW5hdGlvbj5cclxuICAgIDxkaXYgaWQ9XCJyZXN1bHRzQ291bnRcIlxyXG4gICAgICAgICAqbmdJZj1cInNlYXJjaFJlc3VsdHM/Lml0ZW1zPy5sZW5ndGhcIlxyXG4gICAgICAgICBjbGFzcz1cIm1sLWF1dG8gZm9udC1jb2xvci1oaW50IHRleHQtdHJ1bmNhdGVcIiBcclxuICAgICAgICAgdGl0bGU9XCJ7e3Jlc3VsdHNDb3VudH19IHt7YWRkaXRpb25hbENvdW50VGV4dH19XCI+e3tyZXN1bHRzQ291bnR9fSB7e2FkZGl0aW9uYWxDb3VudFRleHR9fTwvZGl2PlxyXG4gIDwvZm9vdGVyPlxyXG5cclxuICA8IS0tIGRlZmF1bHQgZm9vdGVyOiB2aXNpYmxlIGlmIGhpZGVGb290ZXIgaXMgZmFsc2UgYW5kIHRhYmxlIGlzIG5vdCBwYWdlLWFibGUgb3IgdGhlcmUgYXJlIG9ubHkgb25lIHBhZ2Ugb2YgcmVzdWx0cyAoYWx3YXlzIHNob3dzIGlmIHRoZXJlIGlzIGEgY2FwdGlvbiB0byBpbmRpY2F0ZSBubyByZXN1bHRzKSAtLT5cclxuICA8Zm9vdGVyICpuZ0lmPVwiKCFoaWRlRm9vdGVyICYmICghcGFnZWFibGUgfHwgc2VhcmNoUmVzdWx0cy50b3RhbEl0ZW1zQmVmb3JlUGFnaW5nISA8PSBwYWdlU2l6ZSEpKSB8fCB0YWJsZUNhcHRpb25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJjYXB0aW9uLWZvb3RlclwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2hhcy1yZXN1bHRzJzogc2VhcmNoUmVzdWx0cz8uaXRlbXM/Lmxlbmd0aCwgJ2JvcmRlci10b3AnOiBzZWFyY2hSZXN1bHRzPy5pdGVtcz8ubGVuZ3RoICYmICFjdXN0b21Db250ZW50VGVtcGxhdGV9XCI+XHJcbiAgICA8bmctY29udGVudCAqbmdJZj1cIiF0YWJsZUNhcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgc2VsZWN0PVwiLnNlYXJjaGFibGUtdGFibGUtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxyXG4gICAgPGRpdiBpZD1cInRhYmxlQ2FwdGlvblwiXHJcbiAgICAgICAgICpuZ0lmPVwidGFibGVDYXB0aW9uXCJcclxuICAgICAgICAgW2lubmVySFRNTF09XCJ0YWJsZUNhcHRpb25cIj48L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJyZXN1bHRzQ291bnRcIlxyXG4gICAgICAgICAqbmdJZj1cInNlYXJjaFJlc3VsdHM/Lml0ZW1zPy5sZW5ndGhcIlxyXG4gICAgICAgICBjbGFzcz1cIm1sLWF1dG8gdGV4dC10cnVuY2F0ZVwiXHJcbiAgICAgICAgIHRpdGxlPVwie3tyZXN1bHRzQ291bnR9fSB7e2FkZGl0aW9uYWxDb3VudFRleHR9fVwiPnt7cmVzdWx0c0NvdW50fX0ge3thZGRpdGlvbmFsQ291bnRUZXh0fX08L2Rpdj5cclxuICA8L2Zvb3Rlcj5cclxuPC9zZWN0aW9uPiJdfQ==
@@ -0,0 +1,28 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/cdk/scrolling";
4
+ export class TableDetailRowComponent {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableDetailRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableDetailRowComponent, selector: "[ecTableDetailRow]", inputs: { contentClass: "contentClass", contentColSpan: "contentColSpan", maxHeight: "maxHeight" }, ngImport: i0, template: `
7
+ <td></td>
8
+ <td [class.has-max-height]="maxHeight" class="table-detail-content {{contentClass}}" [attr.colspan]="contentColSpan">
9
+ <div [style.max-height]="maxHeight" cdkScrollable><ng-content></ng-content></div>
10
+ </td>
11
+ `, isInline: true, styles: [":host{background-color:var(--ec-background-color-detail)}td:first-child{width:1.5rem;padding:.25rem 0!important;vertical-align:top}.table-detail-content{background-color:transparent;border-top:1px solid var(--ec-border-color);padding:1rem 2rem 1rem 0!important}.table-detail-content.has-max-height{padding:0!important}.table-detail-content.has-max-height>div{overflow-y:auto;padding:1rem 2rem 1rem 0}\n"], dependencies: [{ kind: "directive", type: i1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }] }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableDetailRowComponent, decorators: [{
14
+ type: Component,
15
+ args: [{ selector: '[ecTableDetailRow]', template: `
16
+ <td></td>
17
+ <td [class.has-max-height]="maxHeight" class="table-detail-content {{contentClass}}" [attr.colspan]="contentColSpan">
18
+ <div [style.max-height]="maxHeight" cdkScrollable><ng-content></ng-content></div>
19
+ </td>
20
+ `, styles: [":host{background-color:var(--ec-background-color-detail)}td:first-child{width:1.5rem;padding:.25rem 0!important;vertical-align:top}.table-detail-content{background-color:transparent;border-top:1px solid var(--ec-border-color);padding:1rem 2rem 1rem 0!important}.table-detail-content.has-max-height{padding:0!important}.table-detail-content.has-max-height>div{overflow-y:auto;padding:1rem 2rem 1rem 0}\n"] }]
21
+ }], propDecorators: { contentClass: [{
22
+ type: Input
23
+ }], contentColSpan: [{
24
+ type: Input
25
+ }], maxHeight: [{
26
+ type: Input
27
+ }] } });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGV0YWlsLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1kZXRhaWwtcm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBWWpELE1BQU0sT0FBTyx1QkFBdUI7K0dBQXZCLHVCQUF1QjttR0FBdkIsdUJBQXVCLDhKQVJ4Qjs7Ozs7R0FLVDs7NEZBR1UsdUJBQXVCO2tCQVZuQyxTQUFTOytCQUNFLG9CQUFvQixZQUNwQjs7Ozs7R0FLVDs4QkFJUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnW2VjVGFibGVEZXRhaWxSb3ddJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPHRkPjwvdGQ+XHJcbiAgICA8dGQgW2NsYXNzLmhhcy1tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiIGNsYXNzPVwidGFibGUtZGV0YWlsLWNvbnRlbnQge3tjb250ZW50Q2xhc3N9fVwiIFthdHRyLmNvbHNwYW5dPVwiY29udGVudENvbFNwYW5cIj5cclxuICAgICAgPGRpdiBbc3R5bGUubWF4LWhlaWdodF09XCJtYXhIZWlnaHRcIiBjZGtTY3JvbGxhYmxlPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5cclxuICAgIDwvdGQ+XHJcbiAgYCxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1kZXRhaWwtcm93LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYmxlRGV0YWlsUm93Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSBjb250ZW50Q2xhc3M/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29udGVudENvbFNwYW4hOiBudW1iZXI7XHJcbiAgQElucHV0KCkgbWF4SGVpZ2h0Pzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,58 @@
1
+ import { Component, HostBinding, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TableLockedColumnComponent {
4
+ constructor(el) {
5
+ this.el = el;
6
+ this.borderRight = false;
7
+ this.borderLeft = false;
8
+ }
9
+ ngOnInit() {
10
+ if (this.el.nativeElement.classList.contains('is-resizable')) {
11
+ throw new Error(`Failed to lock table column because it was also resizable. Resizable table columns cannot currently be locked. Remove the 'is-resizable' class from THs of table columms that have the [ecTableLockedColumn] component.`);
12
+ }
13
+ if (this.el.nativeElement.attributes.getNamedItem('colspan')) {
14
+ throw new Error(`Failed to lock table column because it had a 'colspan'. Locked columns do not currently support THs or TDs with a 'colspan'. Remove the 'colspan' attribute from table columns that have the [ecTableLockedColumn] component.`);
15
+ }
16
+ this.updatePositionAndBorder();
17
+ }
18
+ ngOnChanges() {
19
+ if (this.options) {
20
+ this.updatePositionAndBorder();
21
+ }
22
+ }
23
+ updatePositionAndBorder() {
24
+ if (typeof this.options.left === 'number' && typeof this.options.right === 'number') {
25
+ throw new Error(`Failed to lock table column because it had a value for both left and right. Only left or right can have a value.`);
26
+ }
27
+ if (typeof this.options.left === 'number') {
28
+ this.left = this.options.left;
29
+ this.borderRight = this.options.border || false;
30
+ }
31
+ else {
32
+ this.right = this.options.right;
33
+ this.borderLeft = this.options.border || false;
34
+ }
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableLockedColumnComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
37
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableLockedColumnComponent, selector: "[ecTableLockedColumn]", inputs: { options: ["ecTableLockedColumn", "options"] }, host: { properties: { "style.left.px": "this.left", "style.right.px": "this.right", "class.border-right": "this.borderRight", "class.border-left": "this.borderLeft" } }, usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{background-color:var(--ec-background-color);position:sticky!important;z-index:calc(var(--ec-z-index-sticky-header) + 1)!important}:host(th){z-index:calc(var(--ec-z-index-sticky-header) + 2)!important}\n"] }); }
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableLockedColumnComponent, decorators: [{
40
+ type: Component,
41
+ args: [{ selector: '[ecTableLockedColumn]', template: `<ng-content></ng-content>`, styles: [":host{background-color:var(--ec-background-color);position:sticky!important;z-index:calc(var(--ec-z-index-sticky-header) + 1)!important}:host(th){z-index:calc(var(--ec-z-index-sticky-header) + 2)!important}\n"] }]
42
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { options: [{
43
+ type: Input,
44
+ args: ['ecTableLockedColumn']
45
+ }], left: [{
46
+ type: HostBinding,
47
+ args: ['style.left.px']
48
+ }], right: [{
49
+ type: HostBinding,
50
+ args: ['style.right.px']
51
+ }], borderRight: [{
52
+ type: HostBinding,
53
+ args: ['class.border-right']
54
+ }], borderLeft: [{
55
+ type: HostBinding,
56
+ args: ['class.border-left']
57
+ }] } });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbG9ja2VkLWNvbHVtbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1sb2NrZWQtY29sdW1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXNELE1BQU0sZUFBZSxDQUFDOztBQU9sSCxNQUFNLE9BQU8sMEJBQTBCO0lBZ0JyQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUxsQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUdwQixlQUFVLEdBQUcsS0FBSyxDQUFDO0lBRW1CLENBQUM7SUFFdkMsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMseU5BQXlOLENBQUMsQ0FBQztRQUM3TyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrTkFBK04sQ0FBQyxDQUFDO1FBQ25QLENBQUM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwRixNQUFNLElBQUksS0FBSyxDQUFDLGtIQUFrSCxDQUFDLENBQUM7UUFDdEksQ0FBQztRQUVELElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1FBQ2xELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQzsrR0FoRFUsMEJBQTBCO21HQUExQiwwQkFBMEIscVRBSDNCLDJCQUEyQjs7NEZBRzFCLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx1QkFBdUIsWUFDdkIsMkJBQTJCOytFQUtQLE9BQU87c0JBQXBDLEtBQUs7dUJBQUMscUJBQXFCO2dCQUc1QixJQUFJO3NCQURILFdBQVc7dUJBQUMsZUFBZTtnQkFJNUIsS0FBSztzQkFESixXQUFXO3VCQUFDLGdCQUFnQjtnQkFJN0IsV0FBVztzQkFEVixXQUFXO3VCQUFDLG9CQUFvQjtnQkFJakMsVUFBVTtzQkFEVCxXQUFXO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIEVsZW1lbnRSZWYsIEhvc3QsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZUxvY2tlZENvbHVtbl0nLFxyXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtbG9ja2VkLWNvbHVtbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUxvY2tlZENvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCdlY1RhYmxlTG9ja2VkQ29sdW1uJykgb3B0aW9ucyE6IHsgYm9yZGVyOiBib29sZWFuLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciB9O1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmxlZnQucHgnKVxyXG4gIGxlZnQ/OiBudW1iZXI7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUucmlnaHQucHgnKVxyXG4gIHJpZ2h0PzogbnVtYmVyO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJvcmRlci1yaWdodCcpXHJcbiAgYm9yZGVyUmlnaHQgPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ib3JkZXItbGVmdCcpXHJcbiAgYm9yZGVyTGVmdCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnaXMtcmVzaXphYmxlJykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jayB0YWJsZSBjb2x1bW4gYmVjYXVzZSBpdCB3YXMgYWxzbyByZXNpemFibGUuIFJlc2l6YWJsZSB0YWJsZSBjb2x1bW5zIGNhbm5vdCBjdXJyZW50bHkgYmUgbG9ja2VkLiBSZW1vdmUgdGhlICdpcy1yZXNpemFibGUnIGNsYXNzIGZyb20gVEhzIG9mIHRhYmxlIGNvbHVtbXMgdGhhdCBoYXZlIHRoZSBbZWNUYWJsZUxvY2tlZENvbHVtbl0gY29tcG9uZW50LmApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2NvbHNwYW4nKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NrIHRhYmxlIGNvbHVtbiBiZWNhdXNlIGl0IGhhZCBhICdjb2xzcGFuJy4gTG9ja2VkIGNvbHVtbnMgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IFRIcyBvciBURHMgd2l0aCBhICdjb2xzcGFuJy4gUmVtb3ZlIHRoZSAnY29sc3BhbicgYXR0cmlidXRlIGZyb20gdGFibGUgY29sdW1ucyB0aGF0IGhhdmUgdGhlIFtlY1RhYmxlTG9ja2VkQ29sdW1uXSBjb21wb25lbnQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbkFuZEJvcmRlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25BbmRCb3JkZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25BbmRCb3JkZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5sZWZ0ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLnJpZ2h0ID09PSAnbnVtYmVyJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NrIHRhYmxlIGNvbHVtbiBiZWNhdXNlIGl0IGhhZCBhIHZhbHVlIGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0LiBPbmx5IGxlZnQgb3IgcmlnaHQgY2FuIGhhdmUgYSB2YWx1ZS5gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5sZWZ0ID09PSAnbnVtYmVyJykge1xyXG4gICAgICB0aGlzLmxlZnQgPSB0aGlzLm9wdGlvbnMubGVmdDtcclxuICAgICAgdGhpcy5ib3JkZXJSaWdodCA9IHRoaXMub3B0aW9ucy5ib3JkZXIgfHwgZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5vcHRpb25zLnJpZ2h0O1xyXG4gICAgICB0aGlzLmJvcmRlckxlZnQgPSB0aGlzLm9wdGlvbnMuYm9yZGVyIHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class TableMasterHeaderRowComponent {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableMasterHeaderRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableMasterHeaderRowComponent, selector: "[ecTableMasterHeaderRow]", inputs: { hideTableMaster: "hideTableMaster" }, ngImport: i0, template: `<th *ngIf="!hideTableMaster"></th><ng-content></ng-content>`, isInline: true, styles: ["th{width:1.5rem;padding:.25rem 0!important;vertical-align:top}th ::ng-deep+th,th ::ng-deep+th.is-resizable{padding-left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableMasterHeaderRowComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ selector: '[ecTableMasterHeaderRow]', template: `<th *ngIf="!hideTableMaster"></th><ng-content></ng-content>`, styles: ["th{width:1.5rem;padding:.25rem 0!important;vertical-align:top}th ::ng-deep+th,th ::ng-deep+th.is-resizable{padding-left:0}\n"] }]
11
+ }], propDecorators: { hideTableMaster: [{
12
+ type: Input
13
+ }] } });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWFzdGVyLWhlYWRlci1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUtbWFzdGVyLWhlYWRlci1yb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPakQsTUFBTSxPQUFPLDZCQUE2QjsrR0FBN0IsNkJBQTZCO21HQUE3Qiw2QkFBNkIsZ0hBSDlCLDZEQUE2RDs7NEZBRzVELDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSwwQkFBMEIsWUFDMUIsNkRBQTZEOzhCQU92RCxlQUFlO3NCQUE5QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZU1hc3RlckhlYWRlclJvd10nLFxyXG4gIHRlbXBsYXRlOiBgPHRoICpuZ0lmPVwiIWhpZGVUYWJsZU1hc3RlclwiPjwvdGg+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtbWFzdGVyLWhlYWRlci1yb3cuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVNYXN0ZXJIZWFkZXJSb3dDb21wb25lbnQge1xyXG4gIC8qKiBVc2VkIHRvIGhpZGUgdGhlIGhlYWRlciBhZGRlZCB0byB0aGUgdGFibGUuIFVzZWZ1bCBpZiBhIHRhYmxlIGlzIHNoYXJlZCBiZXR3ZWVuIHZpZXdzIGFuZCBub3QgYWxsXHJcbiAgICogIHN1cHBvcnQgdGhlIHRhYmxlIG1hc3RlciBzY2VuYXJpb1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBoaWRlVGFibGVNYXN0ZXI/OiBib29sZWFuO1xyXG59XHJcbiJdfQ==