@energycap/components 0.31.5 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/energycap-components.min.css +2 -2
  2. package/energycap-email.min.css +1 -1
  3. package/esm2020/energycap-components.mjs +5 -0
  4. package/esm2020/lib/components.module.mjs +386 -0
  5. package/esm2020/lib/controls/banner/banner.component.mjs +106 -0
  6. package/esm2020/lib/controls/button/button.component.mjs +106 -0
  7. package/esm2020/lib/controls/button/copy-button.directive.mjs +65 -0
  8. package/esm2020/lib/controls/checkbox/checkbox.component.mjs +139 -0
  9. package/esm2020/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -0
  10. package/esm2020/lib/controls/combobox/combobox.component.mjs +841 -0
  11. package/esm2020/lib/controls/dropdown/dropdown.component.mjs +237 -0
  12. package/esm2020/lib/controls/file-upload/file-upload.component.mjs +169 -0
  13. package/esm2020/lib/controls/form-control/form-control.component.mjs +86 -0
  14. package/esm2020/lib/controls/form-control-base.mjs +143 -0
  15. package/esm2020/lib/controls/form-control-label/form-control-label.component.mjs +136 -0
  16. package/esm2020/lib/controls/form-group/form-group.component.mjs +252 -0
  17. package/esm2020/lib/controls/help-popover/help-popover.component.mjs +28 -0
  18. package/esm2020/lib/controls/item-picker/item-picker.component.mjs +233 -0
  19. package/esm2020/lib/controls/link-button/link-button.component.mjs +11 -0
  20. package/esm2020/lib/controls/menu/menu.component.mjs +443 -0
  21. package/{esm2015/lib/controls/navigation/link-item.js → esm2020/lib/controls/navigation/link-item.mjs} +0 -0
  22. package/{esm2015/lib/controls/navigation/nav-group.js → esm2020/lib/controls/navigation/nav-group.mjs} +0 -0
  23. package/esm2020/lib/controls/navigation/nav-item-active.directive.mjs +92 -0
  24. package/{esm2015/lib/controls/navigation/nav-item.js → esm2020/lib/controls/navigation/nav-item.mjs} +0 -0
  25. package/esm2020/lib/controls/numericbox/numericbox.component.mjs +371 -0
  26. package/esm2020/lib/controls/popover/popover.component.mjs +84 -0
  27. package/{esm2015/lib/controls/radio-button/radio-button-option.js → esm2020/lib/controls/radio-button/radio-button-option.mjs} +0 -0
  28. package/esm2020/lib/controls/radio-button/radio-button.component.mjs +81 -0
  29. package/esm2020/lib/controls/select/select.component.mjs +87 -0
  30. package/esm2020/lib/controls/tabs/tabs.component.mjs +47 -0
  31. package/esm2020/lib/controls/textbox/textbox.component.mjs +154 -0
  32. package/{esm2015/lib/core/cache.service.js → esm2020/lib/core/cache.service.mjs} +9 -8
  33. package/{esm2015/lib/core/custom-validators.js → esm2020/lib/core/custom-validators.mjs} +0 -0
  34. package/{esm2015/lib/core/date-time-helper.js → esm2020/lib/core/date-time-helper.mjs} +0 -0
  35. package/esm2020/lib/core/error.service.mjs +57 -0
  36. package/esm2020/lib/core/scroll.service.mjs +89 -0
  37. package/esm2020/lib/core/telemetry-tracker.service.mjs +16 -0
  38. package/esm2020/lib/core/telemetry.service.mjs +38 -0
  39. package/esm2020/lib/core/validation-message.service.mjs +181 -0
  40. package/{esm2015/lib/core/validation-patterns.js → esm2020/lib/core/validation-patterns.mjs} +0 -0
  41. package/esm2020/lib/core/window.service.mjs +182 -0
  42. package/esm2020/lib/display/app-bar/app-bar.component.mjs +46 -0
  43. package/esm2020/lib/display/avatar/avatar.component.mjs +67 -0
  44. package/{esm2015/lib/display/avatar/avatar.service.js → esm2020/lib/display/avatar/avatar.service.mjs} +9 -7
  45. package/esm2020/lib/display/confirm/confirm.component.mjs +131 -0
  46. package/{esm2015/lib/display/dialog/dialog-content.js → esm2020/lib/display/dialog/dialog-content.mjs} +0 -0
  47. package/esm2020/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -0
  48. package/{esm2015/lib/display/dialog/dialog-types.js → esm2020/lib/display/dialog/dialog-types.mjs} +0 -0
  49. package/esm2020/lib/display/dialog/dialog.component.mjs +242 -0
  50. package/esm2020/lib/display/dialog/dialog.service.mjs +71 -0
  51. package/{esm2015/lib/display/help/help-types.js → esm2020/lib/display/help/help-types.mjs} +0 -0
  52. package/esm2020/lib/display/hierarchy/hierarchy-base.mjs +106 -0
  53. package/{esm2015/lib/display/hierarchy/hierarchy-mocks.spec.js → esm2020/lib/display/hierarchy/hierarchy-mocks.spec.mjs} +5 -9
  54. package/esm2020/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +59 -0
  55. package/esm2020/lib/display/item-display/item-display.component.mjs +67 -0
  56. package/esm2020/lib/display/json-display/json-display.component.mjs +47 -0
  57. package/esm2020/lib/display/resizable/resizable-base.mjs +120 -0
  58. package/esm2020/lib/display/resizable/resizable.component.mjs +57 -0
  59. package/esm2020/lib/display/spinner/spinner.component.mjs +12 -0
  60. package/esm2020/lib/display/splash/splash.component.mjs +42 -0
  61. package/esm2020/lib/display/splash/splash.service.mjs +35 -0
  62. package/esm2020/lib/display/table/resizable-column.component.mjs +20 -0
  63. package/esm2020/lib/display/table/resizable-table.directive.mjs +227 -0
  64. package/esm2020/lib/display/table/searchable-table.component.mjs +338 -0
  65. package/esm2020/lib/display/table/table-detail-row.component.mjs +27 -0
  66. package/esm2020/lib/display/table/table-locked-column.component.mjs +58 -0
  67. package/esm2020/lib/display/table/table-master-header-row.component.mjs +11 -0
  68. package/esm2020/lib/display/table/table-master-row.component.mjs +150 -0
  69. package/esm2020/lib/display/table/table-pagination.component.mjs +150 -0
  70. package/esm2020/lib/display/table/table-selectable-row.component.mjs +235 -0
  71. package/esm2020/lib/display/table/table.component.mjs +244 -0
  72. package/esm2020/lib/display/tags/tag.mjs +15 -0
  73. package/esm2020/lib/display/tags/tags.component.mjs +77 -0
  74. package/esm2020/lib/display/toast/toast/toast.component.mjs +77 -0
  75. package/{esm2015/lib/display/toast/toast-types.js → esm2020/lib/display/toast/toast-types.mjs} +0 -0
  76. package/esm2020/lib/display/toast/toast.service.mjs +35 -0
  77. package/esm2020/lib/display/toast/toaster/toaster.component.mjs +114 -0
  78. package/esm2020/lib/display/tooltip/tooltip.component.mjs +25 -0
  79. package/esm2020/lib/display/tooltip/tooltip.service.mjs +63 -0
  80. package/esm2020/lib/display/tree/tree.component.mjs +125 -0
  81. package/esm2020/lib/display/view-overlay/view-overlay.component.mjs +58 -0
  82. package/esm2020/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -0
  83. package/esm2020/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -0
  84. package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +163 -0
  85. package/esm2020/lib/shared/display/pipes/date-display.pipe.mjs +50 -0
  86. package/esm2020/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -0
  87. package/esm2020/lib/shared/display/pipes/relative-date.pipe.mjs +48 -0
  88. package/esm2020/lib/shared/display/pipes/row-count.pipe.mjs +48 -0
  89. package/esm2020/lib/shared/display/pipes/time-display.pipe.mjs +41 -0
  90. package/{esm2015/lib/shared/display.js → esm2020/lib/shared/display.mjs} +0 -0
  91. package/esm2020/lib/shared/form-group.helper.mjs +67 -0
  92. package/{esm2015/lib/shared/json-helper.js → esm2020/lib/shared/json-helper.mjs} +0 -0
  93. package/{esm2015/lib/shared/lodash-helper.js → esm2020/lib/shared/lodash-helper.mjs} +0 -0
  94. package/esm2020/lib/shared/page/page-base/page-base.component.mjs +339 -0
  95. package/{esm2015/lib/shared/page/page-statuses.js → esm2020/lib/shared/page/page-statuses.mjs} +0 -0
  96. package/esm2020/lib/shared/page/page-title/page-title.component.mjs +23 -0
  97. package/esm2020/lib/shared/page/page-view/page-view.component.mjs +121 -0
  98. package/{esm2015/lib/shared/testing/hierarchy-base-test-injector-factory.spec.js → esm2020/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs} +0 -0
  99. package/esm2020/lib/shared/testing/page-base-component-test-helper.spec.mjs +30 -0
  100. package/{esm2015/lib/shared/testing/page-base-component-test-injector-factory.spec.js → esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs} +0 -0
  101. package/esm2020/lib/shared/testing/public-mocks.spec.mjs +132 -0
  102. package/{esm2015/lib/shared/testing/spy-factory.spec.js → esm2020/lib/shared/testing/spy-factory.spec.mjs} +0 -0
  103. package/{esm2015/lib/shared/testing/translation-mocks.spec.js → esm2020/lib/shared/testing/translation-mocks.spec.mjs} +0 -0
  104. package/esm2020/lib/shared/user-preference.service.mjs +17 -0
  105. package/esm2020/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -0
  106. package/esm2020/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -0
  107. package/esm2020/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -0
  108. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  109. package/fesm2015/energycap-components.mjs +10090 -0
  110. package/fesm2015/energycap-components.mjs.map +1 -0
  111. package/fesm2020/energycap-components.mjs +9999 -0
  112. package/fesm2020/energycap-components.mjs.map +1 -0
  113. package/index.d.ts +5 -0
  114. package/lib/components.module.d.ts +72 -0
  115. package/lib/controls/banner/banner.component.d.ts +3 -0
  116. package/lib/controls/button/button.component.d.ts +3 -0
  117. package/lib/controls/button/copy-button.directive.d.ts +3 -0
  118. package/lib/controls/checkbox/checkbox.component.d.ts +3 -0
  119. package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +3 -0
  120. package/lib/controls/combobox/combobox.component.d.ts +5 -2
  121. package/lib/controls/dropdown/dropdown.component.d.ts +3 -0
  122. package/lib/controls/file-upload/file-upload.component.d.ts +5 -2
  123. package/lib/controls/form-control/form-control.component.d.ts +3 -0
  124. package/lib/controls/form-control-base.d.ts +3 -0
  125. package/lib/controls/form-control-label/form-control-label.component.d.ts +3 -0
  126. package/lib/controls/form-group/form-group.component.d.ts +6 -3
  127. package/lib/controls/help-popover/help-popover.component.d.ts +3 -0
  128. package/lib/controls/item-picker/item-picker.component.d.ts +5 -2
  129. package/lib/controls/link-button/link-button.component.d.ts +3 -0
  130. package/lib/controls/menu/menu.component.d.ts +3 -0
  131. package/lib/controls/navigation/nav-item-active.directive.d.ts +3 -0
  132. package/lib/controls/numericbox/numericbox.component.d.ts +5 -2
  133. package/lib/controls/popover/popover.component.d.ts +3 -0
  134. package/lib/controls/radio-button/radio-button.component.d.ts +3 -0
  135. package/lib/controls/select/select.component.d.ts +3 -0
  136. package/lib/controls/tabs/tabs.component.d.ts +3 -0
  137. package/lib/controls/textbox/textbox.component.d.ts +3 -0
  138. package/lib/core/cache.service.d.ts +3 -0
  139. package/lib/core/error.service.d.ts +3 -0
  140. package/lib/core/scroll.service.d.ts +3 -0
  141. package/lib/core/telemetry-tracker.service.d.ts +3 -0
  142. package/lib/core/telemetry.service.d.ts +3 -0
  143. package/lib/core/validation-message.service.d.ts +3 -0
  144. package/lib/core/window.service.d.ts +3 -0
  145. package/lib/display/app-bar/app-bar.component.d.ts +3 -0
  146. package/lib/display/avatar/avatar.component.d.ts +3 -0
  147. package/lib/display/avatar/avatar.service.d.ts +3 -0
  148. package/lib/display/confirm/confirm.component.d.ts +5 -2
  149. package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +3 -0
  150. package/lib/display/dialog/dialog.component.d.ts +3 -0
  151. package/lib/display/dialog/dialog.service.d.ts +3 -0
  152. package/lib/display/hierarchy/hierarchy-base.d.ts +3 -0
  153. package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +3 -0
  154. package/lib/display/item-display/item-display.component.d.ts +3 -0
  155. package/lib/display/json-display/json-display.component.d.ts +5 -2
  156. package/lib/display/resizable/resizable-base.d.ts +3 -0
  157. package/lib/display/resizable/resizable.component.d.ts +3 -0
  158. package/lib/display/spinner/spinner.component.d.ts +3 -0
  159. package/lib/display/splash/splash.component.d.ts +3 -0
  160. package/lib/display/splash/splash.service.d.ts +3 -0
  161. package/lib/display/table/resizable-column.component.d.ts +3 -0
  162. package/lib/display/table/resizable-table.directive.d.ts +3 -0
  163. package/lib/display/table/searchable-table.component.d.ts +6 -3
  164. package/lib/display/table/table-detail-row.component.d.ts +3 -0
  165. package/lib/display/table/table-locked-column.component.d.ts +3 -0
  166. package/lib/display/table/table-master-header-row.component.d.ts +3 -0
  167. package/lib/display/table/table-master-row.component.d.ts +3 -0
  168. package/lib/display/table/table-pagination.component.d.ts +3 -0
  169. package/lib/display/table/table-selectable-row.component.d.ts +5 -2
  170. package/lib/display/table/table.component.d.ts +3 -0
  171. package/lib/display/tags/tags.component.d.ts +3 -0
  172. package/lib/display/toast/toast/toast.component.d.ts +3 -0
  173. package/lib/display/toast/toast.service.d.ts +3 -0
  174. package/lib/display/toast/toaster/toaster.component.d.ts +3 -0
  175. package/lib/display/tooltip/tooltip.component.d.ts +3 -0
  176. package/lib/display/tooltip/tooltip.service.d.ts +3 -0
  177. package/lib/display/tree/tree.component.d.ts +3 -0
  178. package/lib/display/view-overlay/view-overlay.component.d.ts +3 -0
  179. package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +3 -0
  180. package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +3 -0
  181. package/lib/shared/directives/popup/popup-container.directive.d.ts +3 -0
  182. package/lib/shared/display/pipes/date-display.pipe.d.ts +3 -0
  183. package/lib/shared/display/pipes/highlight-text.pipe.d.ts +3 -0
  184. package/lib/shared/display/pipes/relative-date.pipe.d.ts +3 -0
  185. package/lib/shared/display/pipes/row-count.pipe.d.ts +3 -0
  186. package/lib/shared/display/pipes/time-display.pipe.d.ts +3 -0
  187. package/lib/shared/form-group.helper.d.ts +5 -2
  188. package/lib/shared/page/page-base/page-base.component.d.ts +5 -2
  189. package/lib/shared/page/page-title/page-title.component.d.ts +3 -0
  190. package/lib/shared/page/page-view/page-view.component.d.ts +3 -0
  191. package/lib/shared/testing/public-mocks.spec.d.ts +7 -0
  192. package/lib/shared/user-preference.service.d.ts +3 -0
  193. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +3 -0
  194. package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +3 -0
  195. package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +3 -0
  196. package/package.json +27 -15
  197. package/src/styles/_functions.scss +6 -4
  198. package/src/styles/_icons.scss +1 -1
  199. package/src/styles/mixins/_control-base.scss +2 -2
  200. package/src/styles/mixins/_form-control-base.scss +3 -1
  201. package/src/styles/mixins/_spinner-base.scss +3 -1
  202. package/bundles/energycap-components.umd.js +0 -10646
  203. package/bundles/energycap-components.umd.js.map +0 -1
  204. package/bundles/energycap-components.umd.min.js +0 -17
  205. package/bundles/energycap-components.umd.min.js.map +0 -1
  206. package/energycap-components.d.ts +0 -7
  207. package/energycap-components.metadata.json +0 -1
  208. package/esm2015/energycap-components.js +0 -8
  209. package/esm2015/lib/components.module.js +0 -238
  210. package/esm2015/lib/controls/banner/banner.component.js +0 -94
  211. package/esm2015/lib/controls/button/button.component.js +0 -89
  212. package/esm2015/lib/controls/button/copy-button.directive.js +0 -63
  213. package/esm2015/lib/controls/checkbox/checkbox.component.js +0 -137
  214. package/esm2015/lib/controls/collapsible-toggle/collapsible-toggle.component.js +0 -35
  215. package/esm2015/lib/controls/combobox/combobox.component.js +0 -819
  216. package/esm2015/lib/controls/dropdown/dropdown.component.js +0 -207
  217. package/esm2015/lib/controls/file-upload/file-upload.component.js +0 -172
  218. package/esm2015/lib/controls/form-control/form-control.component.js +0 -65
  219. package/esm2015/lib/controls/form-control-base.js +0 -140
  220. package/esm2015/lib/controls/form-control-label/form-control-label.component.js +0 -139
  221. package/esm2015/lib/controls/form-group/form-group.component.js +0 -254
  222. package/esm2015/lib/controls/help-popover/help-popover.component.js +0 -22
  223. package/esm2015/lib/controls/item-picker/item-picker.component.js +0 -216
  224. package/esm2015/lib/controls/link-button/link-button.component.js +0 -12
  225. package/esm2015/lib/controls/menu/menu.component.js +0 -424
  226. package/esm2015/lib/controls/navigation/nav-item-active.directive.js +0 -86
  227. package/esm2015/lib/controls/numericbox/numericbox.component.js +0 -362
  228. package/esm2015/lib/controls/popover/popover.component.js +0 -85
  229. package/esm2015/lib/controls/radio-button/radio-button.component.js +0 -78
  230. package/esm2015/lib/controls/select/select.component.js +0 -89
  231. package/esm2015/lib/controls/tabs/tabs.component.js +0 -42
  232. package/esm2015/lib/controls/textbox/textbox.component.js +0 -149
  233. package/esm2015/lib/core/error.service.js +0 -56
  234. package/esm2015/lib/core/scroll.service.js +0 -88
  235. package/esm2015/lib/core/telemetry-tracker.service.js +0 -14
  236. package/esm2015/lib/core/telemetry.service.js +0 -40
  237. package/esm2015/lib/core/validation-message.service.js +0 -185
  238. package/esm2015/lib/core/window.service.js +0 -191
  239. package/esm2015/lib/display/app-bar/app-bar.component.js +0 -42
  240. package/esm2015/lib/display/avatar/avatar.component.js +0 -73
  241. package/esm2015/lib/display/confirm/confirm.component.js +0 -127
  242. package/esm2015/lib/display/dialog/dialog-group/dialog-group.component.js +0 -65
  243. package/esm2015/lib/display/dialog/dialog.component.js +0 -229
  244. package/esm2015/lib/display/dialog/dialog.service.js +0 -69
  245. package/esm2015/lib/display/hierarchy/hierarchy-base.js +0 -106
  246. package/esm2015/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.js +0 -58
  247. package/esm2015/lib/display/item-display/item-display.component.js +0 -57
  248. package/esm2015/lib/display/json-display/json-display.component.js +0 -44
  249. package/esm2015/lib/display/resizable/resizable-base.js +0 -119
  250. package/esm2015/lib/display/resizable/resizable.component.js +0 -57
  251. package/esm2015/lib/display/spinner/spinner.component.js +0 -12
  252. package/esm2015/lib/display/splash/splash.component.js +0 -45
  253. package/esm2015/lib/display/splash/splash.service.js +0 -34
  254. package/esm2015/lib/display/table/resizable-column.component.js +0 -23
  255. package/esm2015/lib/display/table/resizable-table.directive.js +0 -223
  256. package/esm2015/lib/display/table/searchable-table.component.js +0 -303
  257. package/esm2015/lib/display/table/table-detail-row.component.js +0 -21
  258. package/esm2015/lib/display/table/table-locked-column.component.js +0 -53
  259. package/esm2015/lib/display/table/table-master-header-row.component.js +0 -11
  260. package/esm2015/lib/display/table/table-master-row.component.js +0 -141
  261. package/esm2015/lib/display/table/table-pagination.component.js +0 -146
  262. package/esm2015/lib/display/table/table-selectable-row.component.js +0 -216
  263. package/esm2015/lib/display/table/table.component.js +0 -210
  264. package/esm2015/lib/display/tags/tag.js +0 -15
  265. package/esm2015/lib/display/tags/tags.component.js +0 -73
  266. package/esm2015/lib/display/toast/toast/toast.component.js +0 -70
  267. package/esm2015/lib/display/toast/toast.service.js +0 -34
  268. package/esm2015/lib/display/toast/toaster/toaster.component.js +0 -117
  269. package/esm2015/lib/display/tooltip/tooltip.component.js +0 -24
  270. package/esm2015/lib/display/tooltip/tooltip.service.js +0 -64
  271. package/esm2015/lib/display/tree/tree.component.js +0 -100
  272. package/esm2015/lib/display/view-overlay/view-overlay.component.js +0 -50
  273. package/esm2015/lib/shared/directives/click-area-for/click-area-for.directive.js +0 -25
  274. package/esm2015/lib/shared/directives/if-viewport-width/if-viewport-width.directive.js +0 -112
  275. package/esm2015/lib/shared/directives/popup/popup-container.directive.js +0 -160
  276. package/esm2015/lib/shared/display/pipes/date-display.pipe.js +0 -49
  277. package/esm2015/lib/shared/display/pipes/highlight-text.pipe.js +0 -26
  278. package/esm2015/lib/shared/display/pipes/relative-date.pipe.js +0 -49
  279. package/esm2015/lib/shared/display/pipes/row-count.pipe.js +0 -47
  280. package/esm2015/lib/shared/display/pipes/time-display.pipe.js +0 -40
  281. package/esm2015/lib/shared/form-group.helper.js +0 -65
  282. package/esm2015/lib/shared/page/page-base/page-base.component.js +0 -356
  283. package/esm2015/lib/shared/page/page-title/page-title.component.js +0 -19
  284. package/esm2015/lib/shared/page/page-view/page-view.component.js +0 -94
  285. package/esm2015/lib/shared/testing/page-base-component-test-helper.spec.js +0 -35
  286. package/esm2015/lib/shared/testing/public-mocks.spec.js +0 -126
  287. package/esm2015/lib/shared/user-preference.service.js +0 -15
  288. package/esm2015/lib/shared/wizard/wizard-base/wizard-base.component.js +0 -260
  289. package/esm2015/lib/shared/wizard/wizard-buttons/wizard-buttons.component.js +0 -54
  290. package/esm2015/lib/shared/wizard/wizard-progress/wizard-progress.component.js +0 -18
  291. package/fesm2015/energycap-components.js +0 -9638
  292. package/fesm2015/energycap-components.js.map +0 -1
@@ -0,0 +1,338 @@
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
+ constructor(errorService, translateService, rowCountPipe) {
18
+ this.errorService = errorService;
19
+ this.translateService = translateService;
20
+ this.rowCountPipe = rowCountPipe;
21
+ this.id = '';
22
+ this.resizable = false;
23
+ this.sortable = false;
24
+ this.autofocus = false;
25
+ /**Set to a space-separated set of strings that should be added to the ec-table class attribute
26
+ * this allows finer control over styling.
27
+ */
28
+ this.tableClasses = '';
29
+ /** Emits when table sort has changed */
30
+ this.sortChange = new EventEmitter();
31
+ /** Emits when the table page has changed */
32
+ this.pageChangeEmitter = new EventEmitter();
33
+ /** Placeholder text for the searchbox */
34
+ this.searchboxPlaceholder = '';
35
+ /**
36
+ * Displayed in overlay when no data is returned (without searching).
37
+ *
38
+ * Defaults to "SearchableTable_Default_NoData_SC"
39
+ */
40
+ this.noDataMessage = 'SearchableTable_Default_NoData_SC';
41
+ /**
42
+ * Displayed in overlay when no data is returned (after searching).
43
+ * Ensure translation has an interpolation placeholder for "searchText".
44
+ *
45
+ * Defaults to "SearchableTable_Default_NoMatches_SC"
46
+ *
47
+ * @example
48
+ * // 7 requires single curly braces
49
+ * No items found matching <strong>{{searchText}}</strong>
50
+ */
51
+ this.noSearchResultsMessage = 'SearchableTable_Default_NoMatches_SC';
52
+ /** Allow the host component to supply an overlay to control the pending state of the table */
53
+ this.status = new Overlay('hasData');
54
+ /**
55
+ * Sets the underlying table's layout to fixed.
56
+ */
57
+ this.tableLayoutFixed = false;
58
+ /** Emits items returned by the getItems function, along with total count */
59
+ this.itemsChange = new EventEmitter();
60
+ /** Maximum number of items to show in the table (default: 100) */
61
+ this.maxItemCount = 100;
62
+ /** Set to true to hide search box (does not hide the other searchable table controls */
63
+ this.hideSearchControl = false;
64
+ /** Set to true to hide the entire header */
65
+ this.hideHeader = false;
66
+ /** Type of object in the table. Displayed in footer (default: 'results')*/
67
+ this.objectType = 'results';
68
+ /** Set to true to hide the table footer */
69
+ this.hideFooter = false;
70
+ /**
71
+ * Set to true to enable paging. If paging is enabled, pageSize must be provided.
72
+ * getItems will be passed both a search and a PagingInfo object when called. It must include totalItemsBeforePaging in the TableSearchResults output.
73
+ * Here is a simple implementation:
74
+ * @example
75
+ * getItems(search?: string, pageChangeInfo?: PagingInfo): Observable<TableSearchResults> {
76
+ let results: SimpleItem[] = [...this.paginatedTableItems];
77
+ //apply search
78
+ if(search) {
79
+ results = this.paginatedTableItems.filter(i => i.a.toLowerCase().includes(search.toLowerCase()));
80
+ }
81
+ //get count before applying paging
82
+ let countBeforePaging = results.length;
83
+ //apply paging
84
+ if(pageChangeInfo) {
85
+ results = results.slice(pageChangeInfo!.skip, pageChangeInfo!.skip + pageChangeInfo!.pageSize);
86
+ }
87
+ return of({ items: results, totalItems: results.length, totalItemsBeforePaging: countBeforePaging });
88
+ }
89
+ */
90
+ this.pageable = false;
91
+ /**
92
+ * Maximum number of page tabs to show
93
+ */
94
+ this.maxTabs = 10;
95
+ /**
96
+ * Makes the searchbox readonly if true.
97
+ */
98
+ this.searchboxReadonly = false;
99
+ /** Optional text to add to the results count in the table footer. This text will be added after the count and objectType. */
100
+ this.additionalCountText = '';
101
+ /** Enables table row selection and row highlighting styles when true */
102
+ this.selectable = false;
103
+ /** When true, removes the card styles from the table wrapper */
104
+ this.removeCard = false;
105
+ /** Classes to add to the overlay/card element */
106
+ this.overlayClasses = '';
107
+ /** When true the overlay and table will not have flex-shrink-max but instead flex-grow */
108
+ this.fillParentHeight = false;
109
+ /**
110
+ * Text displayed in the footer.
111
+ * Sometimes `noDataMessage`, sometimes `noSearchResultsMessage`
112
+ */
113
+ this.tableCaption = this.translateService.instant(this.noDataMessage || 'SearchableTable_Default_NoData_SC');
114
+ /** count of results displayed in the table */
115
+ this.resultsCount = '';
116
+ /** Items returned by the getItems function, along with total count */
117
+ this.searchResults = { items: [], totalItems: 0 };
118
+ /**
119
+ * If passed an input for refresh, triggers reloading items.
120
+ * Otherwise, completes immediately (will never trigger reload).
121
+ */
122
+ this.refreshTrigger = EMPTY;
123
+ this.destroyed = new Subject();
124
+ this.pageChanged = new Subject();
125
+ /** Triggers the initial load of the table */
126
+ this.initTable = new Subject();
127
+ }
128
+ /** Reference to the searchModel */
129
+ get searchModel() {
130
+ return this.formModel.controls.searchModel;
131
+ }
132
+ ngOnChanges(changes) {
133
+ if (changes.pageSize && !changes.pageSize.firstChange && this.pageable) {
134
+ // If the pageSize changes, reset to the first page and refresh.
135
+ this.pageInfo = TablePaginationComponent.getPagingInfo(1, this.pageSize);
136
+ this.onPageChange(this.pageInfo);
137
+ }
138
+ }
139
+ ngOnInit() {
140
+ this.status.setStatus('pending', 'Loading');
141
+ this.setUpRefreshTrigger();
142
+ // Watch for searchbox/other control changes or refresh requests
143
+ const searchOrRefresh = merge(this.formModel.valueChanges.pipe(skipUntil(this.ready), debounceTime(300)), this.refreshTrigger, this.initTable).pipe(tap(() => {
144
+ //a change to any form control or a refresh should reset the pageInfo to the first page if the table is pageable.
145
+ //(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)
146
+ if (this.pageable) {
147
+ this.pageInfo = TablePaginationComponent.getPagingInfo(1, this.pageSize);
148
+ }
149
+ }));
150
+ const updateResults = merge(searchOrRefresh, this.pageChanged.pipe(
151
+ // Prevent a call to getItems when the pageSize is set during page init and before ready is completed
152
+ skipUntil(this.ready)));
153
+ // Call getItems and watch for errors
154
+ const getData = updateResults.pipe(
155
+ // Pluck the searchModel value out of the formModel
156
+ pluck('searchModel'),
157
+ // Ensure search string is defined
158
+ // Trim and lowercase it to aid case-insensitive searching
159
+ map((searchString) => {
160
+ let search = searchString || '';
161
+ return search.trim().toLowerCase();
162
+ }),
163
+ // Show status overlay
164
+ tap(() => this.status.setStatus('pending', 'Loading')),
165
+ // Call passed function
166
+ switchMap((searchString) =>
167
+ //if the table is pageable, pageInfo will be defined.
168
+ this.getItems(searchString, this.pageInfo)),
169
+ // If passed function fails, show error status
170
+ catchError((err, caught) => {
171
+ this.status.setStatus('error', this.errorService.parseApiError(err));
172
+ // return the caught observable so the subscription doesn't complete
173
+ return caught;
174
+ }), takeUntil(this.destroyed));
175
+ // Handle returned data and notify parent
176
+ getData.subscribe((results) => {
177
+ // Limiting number of results to show if not pageable (if pageable the max number of items in the table
178
+ // can be modified by increasing/decreasing the pageSize.)
179
+ if (!this.pageable) {
180
+ results.items = results.items.slice(0, this.maxItemCount);
181
+ }
182
+ // Need to know this (along with if there's a value in the formModel) to determine what to show in the footer
183
+ this.searchResults = results;
184
+ this.tableCaption = this.getCaption(results);
185
+ this.resultsCount = this.pageable ? this.rowCountPipe.transform(results, this.objectType, undefined, this.pageInfo) :
186
+ this.rowCountPipe.transform(results, this.objectType, this.maxItemCount);
187
+ // Disable searchbox when in no-data state
188
+ if (!results.items.length && !this.searchModel.value) {
189
+ this.searchModel.disable({ emitEvent: false });
190
+ }
191
+ else if (this.searchModel.disabled) {
192
+ // re-enable if it was disabled, but now has items
193
+ this.searchModel.enable({ emitEvent: false });
194
+ }
195
+ this.status.setStatus('hasData');
196
+ // Send the results to the parent component
197
+ this.itemsChange.emit(results);
198
+ });
199
+ // When 'ready' is completed by the host, initialize the table with the current form model values
200
+ this.ready.subscribe({
201
+ complete: () => {
202
+ this.initTable.next(this.formModel.value);
203
+ this.initTable.complete();
204
+ }
205
+ });
206
+ }
207
+ ngOnDestroy() {
208
+ this.destroyed.next();
209
+ this.destroyed.unsubscribe();
210
+ }
211
+ /** Pass along sort to parent component */
212
+ onSortChange(sort) {
213
+ this.sortChange.emit(sort);
214
+ }
215
+ /**
216
+ * When a page changes, store the new pagingInfo and emit the current value of the form to trigger getData.
217
+ */
218
+ onPageChange(pagingInfo) {
219
+ this.status.setStatus('pending', 'Loading');
220
+ this.pageInfo = pagingInfo;
221
+ this.pageChangeEmitter.emit(pagingInfo);
222
+ this.pageChanged.next(this.formModel.value);
223
+ }
224
+ /**
225
+ * Wire up a handler to the `refresh` observable so that when
226
+ * the host page context changes it can force the table to update as well.
227
+ *
228
+ * If the `refresh` observable passes options and the `clearSearch` property
229
+ * is set to true, reset the searchModel and pass an empty string.
230
+ *
231
+ * If `refresh` observable does not pass options or the `clearSearch` property
232
+ * is set to false, pass along the current searchModel Value.
233
+ */
234
+ setUpRefreshTrigger() {
235
+ if (this.refresh) {
236
+ this.refreshTrigger = this.refresh.pipe(map(opts => {
237
+ if (opts && opts.clearSearch) {
238
+ this.searchModel.reset('', { emitEvent: false });
239
+ return { ...this.formModel, searchModel: '' };
240
+ }
241
+ return this.formModel.value;
242
+ }), takeUntil(this.destroyed));
243
+ }
244
+ }
245
+ /** Get text to display in the footer. */
246
+ getCaption(results) {
247
+ if (results.items.length) {
248
+ return '';
249
+ }
250
+ if (this.searchModel.value) {
251
+ return this.translateService.instant(this.noSearchResultsMessage || 'SearchableTable_Default_NoMatches_SC', { searchText: this.searchModel.value });
252
+ }
253
+ return this.translateService.instant(this.noDataMessage || 'SearchableTable_Default_NoData_SC');
254
+ }
255
+ }
256
+ SearchableTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SearchableTableComponent, deps: [{ token: i1.ErrorService }, { token: i2.TranslateService }, { token: i3.RowCountPipe }], target: i0.ɵɵFactoryTarget.Component });
257
+ SearchableTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", 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" }, 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 (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: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{--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"], outputs: ["pageChanged"] }] });
258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: SearchableTableComponent, decorators: [{
259
+ type: Component,
260
+ 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 (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: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{--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"] }]
261
+ }], ctorParameters: function () { return [{ type: i1.ErrorService }, { type: i2.TranslateService }, { type: i3.RowCountPipe }]; }, propDecorators: { id: [{
262
+ type: Input
263
+ }], resizable: [{
264
+ type: Input
265
+ }], sortable: [{
266
+ type: Input
267
+ }], sort: [{
268
+ type: Input
269
+ }], autofocus: [{
270
+ type: Input
271
+ }], tableClasses: [{
272
+ type: Input
273
+ }], sortChange: [{
274
+ type: Output
275
+ }], pageChangeEmitter: [{
276
+ type: Output,
277
+ args: ['pageChange']
278
+ }], searchboxPlaceholder: [{
279
+ type: Input
280
+ }], formModel: [{
281
+ type: Input
282
+ }], noDataMessage: [{
283
+ type: Input
284
+ }], noSearchResultsMessage: [{
285
+ type: Input
286
+ }], ready: [{
287
+ type: Input
288
+ }], getItems: [{
289
+ type: Input
290
+ }], refresh: [{
291
+ type: Input
292
+ }], status: [{
293
+ type: Input
294
+ }], tableLayoutFixed: [{
295
+ type: Input
296
+ }], itemsChange: [{
297
+ type: Output
298
+ }], searchboxTabIndex: [{
299
+ type: Input
300
+ }], maxItemCount: [{
301
+ type: Input
302
+ }], hideSearchControl: [{
303
+ type: Input
304
+ }], hideHeader: [{
305
+ type: Input
306
+ }], objectType: [{
307
+ type: Input
308
+ }], hideFooter: [{
309
+ type: Input
310
+ }], pageable: [{
311
+ type: Input
312
+ }], pageSize: [{
313
+ type: Input
314
+ }], maxTabs: [{
315
+ type: Input
316
+ }], searchboxReadonly: [{
317
+ type: Input
318
+ }], selectionContext: [{
319
+ type: Input
320
+ }], selectionToolbarTemplate: [{
321
+ type: Input
322
+ }], resizableColumns: [{
323
+ type: ContentChildren,
324
+ args: [ResizableColumnComponent, { descendants: true }]
325
+ }], additionalCountText: [{
326
+ type: Input
327
+ }], selectable: [{
328
+ type: Input
329
+ }], customContentTemplate: [{
330
+ type: Input
331
+ }], removeCard: [{
332
+ type: Input
333
+ }], overlayClasses: [{
334
+ type: Input
335
+ }], fillParentHeight: [{
336
+ type: Input
337
+ }] } });
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoYWJsZS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS9zZWFyY2hhYmxlLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9kaXNwbGF5L3RhYmxlL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUF5QyxNQUFNLGVBQWUsQ0FBQztBQUc3SixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFjLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7QUFjcEYsTUFBTSxPQUFPLHdCQUF3QjtJQXVNbkMsWUFDVSxZQUEwQixFQUMxQixnQkFBa0MsRUFDbEMsWUFBMEI7UUFGMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQXhNM0IsT0FBRSxHQUFHLEVBQUUsQ0FBQztRQUNSLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsYUFB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VTtzQkFBbEIsS0FBSztnQkFzQkcsUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFMEQsZ0JBQWdCO3NCQUEvRSxlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFHckQsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBFTVBUWSwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2VUaW1lLCBtYXAsIHBsdWNrLCBza2lwVW50aWwsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvZXJyb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvd0NvdW50UGlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL3Jvdy1jb3VudC5waXBlJztcclxuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gJy4uL3ZpZXctb3ZlcmxheS92aWV3LW92ZXJsYXkuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmVzaXphYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9yZXNpemFibGUtY29sdW1uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBhZ2luZ0luZm8sIFRhYmxlUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtcGFnaW5hdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0IH0gZnJvbSAnLi90YWJsZS1zZWxlY3RhYmxlLXJvdy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZVNvcnQgfSBmcm9tICcuL3RhYmxlLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgdHlwZSBUYWJsZVNlYXJjaFJlc3VsdHMgPSB7IGl0ZW1zOiB1bmtub3duW10sIHRvdGFsSXRlbXM6IG51bWJlciwgdG90YWxJdGVtc0JlZm9yZVBhZ2luZz86IG51bWJlciB9O1xyXG5leHBvcnQgdHlwZSBTZWFyY2hhYmxlVGFibGVSZWZyZXNoT3B0aW9ucyA9IHsgY2xlYXJTZWFyY2g/OiBib29sZWFuIH07XHJcblxyXG50eXBlIFNlYXJjaGFibGVUYWJsZUZvcm1Nb2RlbCA9IHsgc2VhcmNoTW9kZWw/OiBzdHJpbmcgfTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtc2VhcmNoYWJsZS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoYWJsZVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGlkID0gJyc7XHJcbiAgQElucHV0KCkgcmVzaXphYmxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc29ydGFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzb3J0PzogVGFibGVTb3J0O1xyXG4gIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipTZXQgdG8gYSBzcGFjZS1zZXBhcmF0ZWQgc2V0IG9mIHN0cmluZ3MgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGVjLXRhYmxlIGNsYXNzIGF0dHJpYnV0ZVxyXG4gICAqIHRoaXMgYWxsb3dzIGZpbmVyIGNvbnRyb2wgb3ZlciBzdHlsaW5nLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRhYmxlQ2xhc3Nlczogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBFbWl0cyB3aGVuIHRhYmxlIHNvcnQgaGFzIGNoYW5nZWQgKi9cclxuICBAT3V0cHV0KCkgc29ydENoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU29ydD4oKTtcclxuXHJcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHRhYmxlIHBhZ2UgaGFzIGNoYW5nZWQgKi9cclxuICBAT3V0cHV0KCdwYWdlQ2hhbmdlJykgcGFnZUNoYW5nZUVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxQYWdpbmdJbmZvPiA9IG5ldyBFdmVudEVtaXR0ZXI8UGFnaW5nSW5mbz4oKTtcclxuXHJcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgZm9yIHRoZSBzZWFyY2hib3ggKi9cclxuICBASW5wdXQoKSBzZWFyY2hib3hQbGFjZWhvbGRlciA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBGb3JtR3JvdXAgZm9yIHRoZSBzZWFyY2hib3hcclxuICAgKlxyXG4gICAqIFRoZSByZWZlcmVuY2VkIEZvcm1Hcm91cCAqKm11c3QqKiBjb250YWluIGEgRm9ybUNvbnRyb2wgY2FsbGVkICdzZWFyY2hNb2RlbCcuXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGZvcm1Nb2RlbCE6IFVudHlwZWRGb3JtR3JvdXA7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXllZCBpbiBvdmVybGF5IHdoZW4gbm8gZGF0YSBpcyByZXR1cm5lZCAod2l0aG91dCBzZWFyY2hpbmcpLlxyXG4gICAqXHJcbiAgICogRGVmYXVsdHMgdG8gXCJTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob0RhdGFfU0NcIlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob0RhdGFfU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5ZWQgaW4gb3ZlcmxheSB3aGVuIG5vIGRhdGEgaXMgcmV0dXJuZWQgKGFmdGVyIHNlYXJjaGluZykuXHJcbiAgICogRW5zdXJlIHRyYW5zbGF0aW9uIGhhcyBhbiBpbnRlcnBvbGF0aW9uIHBsYWNlaG9sZGVyIGZvciBcInNlYXJjaFRleHRcIi5cclxuICAgKlxyXG4gICAqIERlZmF1bHRzIHRvIFwiU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9NYXRjaGVzX1NDXCJcclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogLy8gNyByZXF1aXJlcyBzaW5nbGUgY3VybHkgYnJhY2VzXHJcbiAgICogTm8gaXRlbXMgZm91bmQgbWF0Y2hpbmcgPHN0cm9uZz57e3NlYXJjaFRleHR9fTwvc3Ryb25nPlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG5vU2VhcmNoUmVzdWx0c01lc3NhZ2U6IHN0cmluZyA9ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0MnO1xyXG5cclxuICAvKipcclxuICAgKiBJbmRpY2F0ZXMgaG9zdGluZyBwYWdlIGlzIHJlYWR5IGZvciB0aGUgdGFibGUgdG8gbG9hZCBkYXRhLlxyXG4gICAqXHJcbiAgICogTmV4dCBhbmQgQ29tcGxldGUgdGhpcyBvYnNlcnZhYmxlIGFmdGVyIGhvc3RpbmcgcGFnZSBoYXMgbWFkZSBhbnkgcHJlbGltaW5hcnlcclxuICAgKiBBUEkgKG9yIG90aGVyIGFzeW5jaHJvbm91cykgY2FsbHMgdG8gbG9hZCBwcmVyZXF1aXNpdGUgZGF0YSB1cG9uIHdoaWNoIHRoZSBjb2RlXHJcbiAgICogaW4gdGhlIGBnZXRJdGVtc2AgZnVuY3Rpb24gZGVwZW5kcy4gIFVzZSBhIGBSZXBsYXlTdWJqZWN0YCB0byBlbnN1cmUgZXZlcnkgY29tcG9uZW50XHJcbiAgICogdGhhdCB1c2VzIHRoaXMgb2JzZXJ2YWJsZSBnZXRzIHRoZSBOZXh0IGFuZCBDb21wbGV0ZSBub3RpZmljYXRpb25zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJlYWR5ITogT2JzZXJ2YWJsZTx2b2lkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogRnVuY3Rpb24gY2FsbGVkIHRvIGdldCBpdGVtcyB0byBkaXNwbGF5IGluIHRoZSB0YWJsZS5cclxuICAgKiBJZiBwYWdlYWJsZSBpcyB0cnVlLCB0aGUgVGFibGVTZWFyY2hSZXN1bHRzIG5lZWQgdG8gaW5jbHVkZSB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nLCB3aGljaCBpcyB0aGVcclxuICAgKiBjb3VudCBvZiBpdGVtcyBiZWZvcmUgeW91J3ZlIGFwcGxpZWQgYW55IHBhZ2luYXRpb24gKGkuZS4gdGhlIHRvdGFsIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbWUgYmFjayBmcm9tIHRoZSBzZWFyY2gpLlxyXG4gICAqXHJcbiAgICogTWFrZSBzdXJlIHRvIGJpbmQgdGhlIHNjb3BlIGluIHRoZSB0ZW1wbGF0ZVxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogW2dldEl0ZW1zXT1cInlvdXJGdW5jdGlvbi5iaW5kKHRoaXMpXCJcclxuICAgKi9cclxuICBASW5wdXQoKSBnZXRJdGVtcyE6IChzZWFyY2g/OiBzdHJpbmcsIHBhZ2VDaGFuZ2VJbmZvPzogUGFnaW5nSW5mbykgPT4gT2JzZXJ2YWJsZTxUYWJsZVNlYXJjaFJlc3VsdHM+O1xyXG5cclxuICAvKiogT2JzZXJ2YWJsZSB0aGF0IHdpbGwgZm9yY2UgdGhlIGdldEl0ZW1zIGZ1bmN0aW9uIHRvIGdldCBjYWxsZWQgYWdhaW4gKi9cclxuICBASW5wdXQoKSByZWZyZXNoPzogT2JzZXJ2YWJsZTxTZWFyY2hhYmxlVGFibGVSZWZyZXNoT3B0aW9ucyB8IHVuZGVmaW5lZD47XHJcblxyXG4gIC8qKiBBbGxvdyB0aGUgaG9zdCBjb21wb25lbnQgdG8gc3VwcGx5IGFuIG92ZXJsYXkgdG8gY29udHJvbCB0aGUgcGVuZGluZyBzdGF0ZSBvZiB0aGUgdGFibGUgKi9cclxuICBASW5wdXQoKSBzdGF0dXM6IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgnaGFzRGF0YScpO1xyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB1bmRlcmx5aW5nIHRhYmxlJ3MgbGF5b3V0IHRvIGZpeGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRhYmxlTGF5b3V0Rml4ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqIEVtaXRzIGl0ZW1zIHJldHVybmVkIGJ5IHRoZSBnZXRJdGVtcyBmdW5jdGlvbiwgYWxvbmcgd2l0aCB0b3RhbCBjb3VudCAqL1xyXG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlU2VhcmNoUmVzdWx0cz4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlU2VhcmNoUmVzdWx0cz4oKTtcclxuXHJcbiAgLyoqIE9wdGlvbmFsIHRhYiBpbmRleCBmb3IgdGhlIHNlYXJjaGJveCAqL1xyXG4gIEBJbnB1dCgpIHNlYXJjaGJveFRhYkluZGV4PzogbnVtYmVyO1xyXG5cclxuICAvKiogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc2hvdyBpbiB0aGUgdGFibGUgKGRlZmF1bHQ6IDEwMCkgKi9cclxuICBASW5wdXQoKSBtYXhJdGVtQ291bnQ6IG51bWJlciA9IDEwMDtcclxuXHJcbiAgLyoqIFNldCB0byB0cnVlIHRvIGhpZGUgc2VhcmNoIGJveCAoZG9lcyBub3QgaGlkZSB0aGUgb3RoZXIgc2VhcmNoYWJsZSB0YWJsZSBjb250cm9scyAqL1xyXG4gIEBJbnB1dCgpIGhpZGVTZWFyY2hDb250cm9sOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBoaWRlIHRoZSBlbnRpcmUgaGVhZGVyICovXHJcbiAgQElucHV0KCkgaGlkZUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogVHlwZSBvZiBvYmplY3QgaW4gdGhlIHRhYmxlLiBEaXNwbGF5ZWQgaW4gZm9vdGVyIChkZWZhdWx0OiAncmVzdWx0cycpKi9cclxuICBASW5wdXQoKSBvYmplY3RUeXBlOiBzdHJpbmcgPSAncmVzdWx0cyc7XHJcblxyXG4gIC8qKiBTZXQgdG8gdHJ1ZSB0byBoaWRlIHRoZSB0YWJsZSBmb290ZXIgKi9cclxuICBASW5wdXQoKSBoaWRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0byB0cnVlIHRvIGVuYWJsZSBwYWdpbmcuIElmIHBhZ2luZyBpcyBlbmFibGVkLCBwYWdlU2l6ZSBtdXN0IGJlIHByb3ZpZGVkLlxyXG4gICAqIGdldEl0ZW1zIHdpbGwgYmUgcGFzc2VkIGJvdGggYSBzZWFyY2ggYW5kIGEgUGFnaW5nSW5mbyBvYmplY3Qgd2hlbiBjYWxsZWQuIEl0IG11c3QgaW5jbHVkZSB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nIGluIHRoZSBUYWJsZVNlYXJjaFJlc3VsdHMgb3V0cHV0LlxyXG4gICAqIEhlcmUgaXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb246IFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogZ2V0SXRlbXMoc2VhcmNoPzogc3RyaW5nLCBwYWdlQ2hhbmdlSW5mbz86IFBhZ2luZ0luZm8pOiBPYnNlcnZhYmxlPFRhYmxlU2VhcmNoUmVzdWx0cz4ge1xyXG4gICAgICBsZXQgcmVzdWx0czogU2ltcGxlSXRlbVtdID0gWy4uLnRoaXMucGFnaW5hdGVkVGFibGVJdGVtc107XHJcbiAgICAgIC8vYXBwbHkgc2VhcmNoXHJcbiAgICAgIGlmKHNlYXJjaCkge1xyXG4gICAgICAgIHJlc3VsdHMgPSB0aGlzLnBhZ2luYXRlZFRhYmxlSXRlbXMuZmlsdGVyKGkgPT4gaS5hLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgfVxyXG4gICAgICAvL2dldCBjb3VudCBiZWZvcmUgYXBwbHlpbmcgcGFnaW5nXHJcbiAgICAgIGxldCBjb3VudEJlZm9yZVBhZ2luZyA9IHJlc3VsdHMubGVuZ3RoO1xyXG4gICAgICAvL2FwcGx5IHBhZ2luZ1xyXG4gICAgICBpZihwYWdlQ2hhbmdlSW5mbykge1xyXG4gICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLnNsaWNlKHBhZ2VDaGFuZ2VJbmZvIS5za2lwLCBwYWdlQ2hhbmdlSW5mbyEuc2tpcCArIHBhZ2VDaGFuZ2VJbmZvIS5wYWdlU2l6ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9mKHsgaXRlbXM6IHJlc3VsdHMsIHRvdGFsSXRlbXM6IHJlc3VsdHMubGVuZ3RoLCB0b3RhbEl0ZW1zQmVmb3JlUGFnaW5nOiBjb3VudEJlZm9yZVBhZ2luZyB9KTtcclxuICAgIH1cclxuICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIE1heCBzaXplIG9mIGEgcGFnZS5cclxuICAgKi9cclxuICBASW5wdXQoKSBwYWdlU2l6ZT86IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAqIE1heGltdW0gbnVtYmVyIG9mIHBhZ2UgdGFicyB0byBzaG93XHJcbiAqL1xyXG4gIEBJbnB1dCgpIG1heFRhYnM/OiBudW1iZXIgPSAxMDtcclxuXHJcbiAgLyoqXHJcbiAgICogTWFrZXMgdGhlIHNlYXJjaGJveCByZWFkb25seSBpZiB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNlYXJjaGJveFJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBQYXNzZWQgdG8gdGhlIGlubmVyIFRhYmxlQ29tcG9uZW50IHRvIGVuYWJsZSByb3cgc2VsZWN0aW9uICovXHJcbiAgQElucHV0KCkgc2VsZWN0aW9uQ29udGV4dD86IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQ7XHJcblxyXG4gIC8qKiBQYXNzZWQgdG8gdGhlIGlubmVyIFRhYmxlQ29tcG9uZW50IHRvIGRpc3BsYXkgYSB0b29sYmFyIHdoZW4gMSBvciBtb3JlIHJvd3MgYXJlIHNlbGVjdGVkLiBSZXF1aXJlcyBgW3NlbGVjdGlvbkNvbnRleHRdYCB0byBiZSBkZWZpbmVkLiAqL1xyXG4gIEBJbnB1dCgpIHNlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgXHJcbiAgQENvbnRlbnRDaGlsZHJlbihSZXNpemFibGVDb2x1bW5Db21wb25lbnQsIHtkZXNjZW5kYW50czogdHJ1ZX0pIHJlc2l6YWJsZUNvbHVtbnMhOiBRdWVyeUxpc3Q8UmVzaXphYmxlQ29sdW1uQ29tcG9uZW50PjtcclxuXHJcbiAgLyoqIE9wdGlvbmFsIHRleHQgdG8gYWRkIHRvIHRoZSByZXN1bHRzIGNvdW50IGluIHRoZSB0YWJsZSBmb290ZXIuIFRoaXMgdGV4dCB3aWxsIGJlIGFkZGVkIGFmdGVyIHRoZSBjb3VudCBhbmQgb2JqZWN0VHlwZS4gKi9cclxuICBASW5wdXQoKSBhZGRpdGlvbmFsQ291bnRUZXh0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqIEVuYWJsZXMgdGFibGUgcm93IHNlbGVjdGlvbiBhbmQgcm93IGhpZ2hsaWdodGluZyBzdHlsZXMgd2hlbiB0cnVlICovXHJcbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipEZWZhdWx0cyB0byB1bmRlZmluZWQuIFNwZWNpZnkgeW91ciBvd24gdGVtcGxhdGUgaWYgYW4gZWMtdGFibGUgd3JhcHBlZCBhcm91bmQgeW91ciB0cmFuc2NsdWRlZCBjb250ZW50IHdvbid0IG1lZXQgeW91ciBuZWVkc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNvbnRlbnRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIC8qKiBXaGVuIHRydWUsIHJlbW92ZXMgdGhlIGNhcmQgc3R5bGVzIGZyb20gdGhlIHRhYmxlIHdyYXBwZXIgKi9cclxuICBASW5wdXQoKSByZW1vdmVDYXJkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBDbGFzc2VzIHRvIGFkZCB0byB0aGUgb3ZlcmxheS9jYXJkIGVsZW1lbnQgKi9cclxuICBASW5wdXQoKSBvdmVybGF5Q2xhc3Nlczogc3RyaW5nID0gJyc7XHJcblxyXG4gIC8qKiBXaGVuIHRydWUgdGhlIG92ZXJsYXkgYW5kIHRhYmxlIHdpbGwgbm90IGhhdmUgZmxleC1zaHJpbmstbWF4IGJ1dCBpbnN0ZWFkIGZsZXgtZ3JvdyAqL1xyXG4gIEBJbnB1dCgpIGZpbGxQYXJlbnRIZWlnaHQ/OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhZ2luZ0luZm8gZm9yIHRoZSBjdXJyZW50IHBhZ2UuXHJcbiAgICovXHJcbiAgcHVibGljIHBhZ2VJbmZvPzogUGFnaW5nSW5mbztcclxuXHJcbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgc2VhcmNoTW9kZWwgKi9cclxuICBwdWJsaWMgZ2V0IHNlYXJjaE1vZGVsKCk6IFVudHlwZWRGb3JtQ29udHJvbCB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtTW9kZWwuY29udHJvbHMuc2VhcmNoTW9kZWwgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGV4dCBkaXNwbGF5ZWQgaW4gdGhlIGZvb3Rlci5cclxuICAgKiBTb21ldGltZXMgYG5vRGF0YU1lc3NhZ2VgLCBzb21ldGltZXMgYG5vU2VhcmNoUmVzdWx0c01lc3NhZ2VgXHJcbiAgICovXHJcbiAgcHVibGljIHRhYmxlQ2FwdGlvbjogc3RyaW5nID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5ub0RhdGFNZXNzYWdlIHx8ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob0RhdGFfU0MnKTtcclxuXHJcbiAgLyoqIGNvdW50IG9mIHJlc3VsdHMgZGlzcGxheWVkIGluIHRoZSB0YWJsZSAqL1xyXG4gIHB1YmxpYyByZXN1bHRzQ291bnQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogSXRlbXMgcmV0dXJuZWQgYnkgdGhlIGdldEl0ZW1zIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHRvdGFsIGNvdW50ICovXHJcbiAgcHVibGljIHNlYXJjaFJlc3VsdHM6IFRhYmxlU2VhcmNoUmVzdWx0cyA9IHsgaXRlbXM6IFtdLCB0b3RhbEl0ZW1zOiAwIH07XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHBhc3NlZCBhbiBpbnB1dCBmb3IgcmVmcmVzaCwgdHJpZ2dlcnMgcmVsb2FkaW5nIGl0ZW1zLlxyXG4gICAqIE90aGVyd2lzZSwgY29tcGxldGVzIGltbWVkaWF0ZWx5ICh3aWxsIG5ldmVyIHRyaWdnZXIgcmVsb2FkKS5cclxuICAgKi9cclxuICBwcml2YXRlIHJlZnJlc2hUcmlnZ2VyOiBPYnNlcnZhYmxlPFNlYXJjaGFibGVUYWJsZUZvcm1Nb2RlbCB8IHVuZGVmaW5lZD4gPSBFTVBUWTtcclxuICBwcml2YXRlIGRlc3Ryb3llZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgcGFnZUNoYW5nZWQ6IFN1YmplY3Q8U2VhcmNoYWJsZVRhYmxlRm9ybU1vZGVsPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8qKiBUcmlnZ2VycyB0aGUgaW5pdGlhbCBsb2FkIG9mIHRoZSB0YWJsZSAqL1xyXG4gIHByaXZhdGUgaW5pdFRhYmxlID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvd0NvdW50UGlwZTogUm93Q291bnRQaXBlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMucGFnZVNpemUgJiYgIWNoYW5nZXMucGFnZVNpemUuZmlyc3RDaGFuZ2UgJiYgdGhpcy5wYWdlYWJsZSkge1xyXG4gICAgICAvLyBJZiB0aGUgcGFnZVNpemUgY2hhbmdlcywgcmVzZXQgdG8gdGhlIGZpcnN0IHBhZ2UgYW5kIHJlZnJlc2guXHJcbiAgICAgIHRoaXMucGFnZUluZm8gPSBUYWJsZVBhZ2luYXRpb25Db21wb25lbnQuZ2V0UGFnaW5nSW5mbygxLCB0aGlzLnBhZ2VTaXplISk7XHJcbiAgICAgIHRoaXMub25QYWdlQ2hhbmdlKHRoaXMucGFnZUluZm8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpO1xyXG4gICAgdGhpcy5zZXRVcFJlZnJlc2hUcmlnZ2VyKCk7XHJcblxyXG4gICAgLy8gV2F0Y2ggZm9yIHNlYXJjaGJveC9vdGhlciBjb250cm9sIGNoYW5nZXMgb3IgcmVmcmVzaCByZXF1ZXN0c1xyXG4gICAgY29uc3Qgc2VhcmNoT3JSZWZyZXNoID0gbWVyZ2UoXHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgIHNraXBVbnRpbCh0aGlzLnJlYWR5KSxcclxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKVxyXG4gICAgICApLFxyXG4gICAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyLFxyXG4gICAgICB0aGlzLmluaXRUYWJsZVxyXG4gICAgKS5waXBlKHRhcCgoKT0+IHtcclxuICAgICAgLy9hIGNoYW5nZSB0byBhbnkgZm9ybSBjb250cm9sIG9yIGEgcmVmcmVzaCBzaG91bGQgcmVzZXQgdGhlIHBhZ2VJbmZvIHRvIHRoZSBmaXJzdCBwYWdlIGlmIHRoZSB0YWJsZSBpcyBwYWdlYWJsZS5cclxuICAgICAgLy8oaWYgd2UgZGlkbnQgcmVzZXQgdGhlIHBhZ2VJbmZvLCB3ZSdkIGhhdmUgdG8gY2FsbCBnZXRJdGVtcyB3aXRoIHRoZSBwcmV2aW91cyBwYWdlSW5mbywgd2hpY2ggbWF5IG5vdCBiZSB2YWxpZCBmb3IgdGhlIG5ldyByZXN1bHRzKVxyXG4gICAgICBpZih0aGlzLnBhZ2VhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlSW5mbyA9IFRhYmxlUGFnaW5hdGlvbkNvbXBvbmVudC5nZXRQYWdpbmdJbmZvKDEsIHRoaXMucGFnZVNpemUhKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IHVwZGF0ZVJlc3VsdHMgPSBtZXJnZShcclxuICAgICAgc2VhcmNoT3JSZWZyZXNoLFxyXG4gICAgICB0aGlzLnBhZ2VDaGFuZ2VkLnBpcGUoXHJcbiAgICAgICAgLy8gUHJldmVudCBhIGNhbGwgdG8gZ2V0SXRlbXMgd2hlbiB0aGUgcGFnZVNpemUgaXMgc2V0IGR1cmluZyBwYWdlIGluaXQgYW5kIGJlZm9yZSByZWFkeSBpcyBjb21wbGV0ZWRcclxuICAgICAgICBza2lwVW50aWwodGhpcy5yZWFkeSlcclxuICAgICAgKVxyXG4gICAgKVxyXG5cclxuICAgIC8vIENhbGwgZ2V0SXRlbXMgYW5kIHdhdGNoIGZvciBlcnJvcnNcclxuICAgIGNvbnN0IGdldERhdGEgPSB1cGRhdGVSZXN1bHRzLnBpcGUoXHJcbiAgICAgIC8vIFBsdWNrIHRoZSBzZWFyY2hNb2RlbCB2YWx1ZSBvdXQgb2YgdGhlIGZvcm1Nb2RlbFxyXG4gICAgICBwbHVjaygnc2VhcmNoTW9kZWwnKSxcclxuXHJcbiAgICAgIC8vIEVuc3VyZSBzZWFyY2ggc3RyaW5nIGlzIGRlZmluZWRcclxuICAgICAgLy8gVHJpbSBhbmQgbG93ZXJjYXNlIGl0IHRvIGFpZCBjYXNlLWluc2Vuc2l0aXZlIHNlYXJjaGluZ1xyXG4gICAgICBtYXAoKHNlYXJjaFN0cmluZz86IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCBzZWFyY2ggPSBzZWFyY2hTdHJpbmcgfHwgJyc7XHJcbiAgICAgICAgcmV0dXJuIHNlYXJjaC50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfSksXHJcblxyXG4gICAgICAvLyBTaG93IHN0YXR1cyBvdmVybGF5XHJcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ3BlbmRpbmcnLCAnTG9hZGluZycpKSxcclxuXHJcbiAgICAgIC8vIENhbGwgcGFzc2VkIGZ1bmN0aW9uXHJcbiAgICAgIHN3aXRjaE1hcCgoc2VhcmNoU3RyaW5nOiBzdHJpbmcpID0+IFxyXG4gICAgICAgIC8vaWYgdGhlIHRhYmxlIGlzIHBhZ2VhYmxlLCBwYWdlSW5mbyB3aWxsIGJlIGRlZmluZWQuXHJcbiAgICAgICAgdGhpcy5nZXRJdGVtcyhzZWFyY2hTdHJpbmcsIHRoaXMucGFnZUluZm8pXHJcbiAgICAgICksXHJcblxyXG4gICAgICAvLyBJZiBwYXNzZWQgZnVuY3Rpb24gZmFpbHMsIHNob3cgZXJyb3Igc3RhdHVzXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVyciwgY2F1Z2h0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGF0dXMuc2V0U3RhdHVzKCdlcnJvcicsIHRoaXMuZXJyb3JTZXJ2aWNlLnBhcnNlQXBpRXJyb3IoZXJyKSk7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRoZSBjYXVnaHQgb2JzZXJ2YWJsZSBzbyB0aGUgc3Vic2NyaXB0aW9uIGRvZXNuJ3QgY29tcGxldGVcclxuICAgICAgICByZXR1cm4gY2F1Z2h0O1xyXG4gICAgICB9KSxcclxuXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEhhbmRsZSByZXR1cm5lZCBkYXRhIGFuZCBub3RpZnkgcGFyZW50XHJcbiAgICBnZXREYXRhLnN1YnNjcmliZSgocmVzdWx0czogVGFibGVTZWFyY2hSZXN1bHRzKSA9PiB7XHJcbiAgICAgIC8vIExpbWl0aW5nIG51bWJlciBvZiByZXN1bHRzIHRvIHNob3cgaWYgbm90IHBhZ2VhYmxlIChpZiBwYWdlYWJsZSB0aGUgbWF4IG51bWJlciBvZiBpdGVtcyBpbiB0aGUgdGFibGVcclxuICAgICAgLy8gY2FuIGJlIG1vZGlmaWVkIGJ5IGluY3JlYXNpbmcvZGVjcmVhc2luZyB0aGUgcGFnZVNpemUuKVxyXG4gICAgICBpZighdGhpcy5wYWdlYWJsZSkge1xyXG4gICAgICAgIHJlc3VsdHMuaXRlbXMgPSByZXN1bHRzLml0ZW1zLnNsaWNlKDAsIHRoaXMubWF4SXRlbUNvdW50KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTmVlZCB0byBrbm93IHRoaXMgKGFsb25nIHdpdGggaWYgdGhlcmUncyBhIHZhbHVlIGluIHRoZSBmb3JtTW9kZWwpIHRvIGRldGVybWluZSB3aGF0IHRvIHNob3cgaW4gdGhlIGZvb3RlclxyXG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSByZXN1bHRzO1xyXG4gICAgXHJcbiAgICAgIHRoaXMudGFibGVDYXB0aW9uID0gdGhpcy5nZXRDYXB0aW9uKHJlc3VsdHMpO1xyXG4gICAgICB0aGlzLnJlc3VsdHNDb3VudCA9IHRoaXMucGFnZWFibGUgPyB0aGlzLnJvd0NvdW50UGlwZS50cmFuc2Zvcm0ocmVzdWx0cywgdGhpcy5vYmplY3RUeXBlLCB1bmRlZmluZWQsIHRoaXMucGFnZUluZm8pOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0NvdW50UGlwZS50cmFuc2Zvcm0ocmVzdWx0cywgdGhpcy5vYmplY3RUeXBlLCB0aGlzLm1heEl0ZW1Db3VudCk7XHJcblxyXG4gICAgICAvLyBEaXNhYmxlIHNlYXJjaGJveCB3aGVuIGluIG5vLWRhdGEgc3RhdGVcclxuICAgICAgaWYgKCFyZXN1bHRzLml0ZW1zLmxlbmd0aCAmJiAhdGhpcy5zZWFyY2hNb2RlbC52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTW9kZWwuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hNb2RlbC5kaXNhYmxlZCkge1xyXG4gICAgICAgIC8vIHJlLWVuYWJsZSBpZiBpdCB3YXMgZGlzYWJsZWQsIGJ1dCBub3cgaGFzIGl0ZW1zXHJcbiAgICAgICAgdGhpcy5zZWFyY2hNb2RlbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0YXR1cy5zZXRTdGF0dXMoJ2hhc0RhdGEnKTtcclxuICAgICAgLy8gU2VuZCB0aGUgcmVzdWx0cyB0byB0aGUgcGFyZW50IGNvbXBvbmVudFxyXG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQocmVzdWx0cyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBXaGVuICdyZWFkeScgaXMgY29tcGxldGVkIGJ5IHRoZSBob3N0LCBpbml0aWFsaXplIHRoZSB0YWJsZSB3aXRoIHRoZSBjdXJyZW50IGZvcm0gbW9kZWwgdmFsdWVzXHJcbiAgICB0aGlzLnJlYWR5LnN1YnNjcmliZSh7XHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbml0VGFibGUubmV4dCh0aGlzLmZvcm1Nb2RlbC52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pbml0VGFibGUuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveWVkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKiogUGFzcyBhbG9uZyBzb3J0IHRvIHBhcmVudCBjb21wb25lbnQgKi9cclxuICBvblNvcnRDaGFuZ2Uoc29ydDogVGFibGVTb3J0KTogdm9pZCB7XHJcbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdChzb3J0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYSBwYWdlIGNoYW5nZXMsIHN0b3JlIHRoZSBuZXcgcGFnaW5nSW5mbyBhbmQgZW1pdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZm9ybSB0byB0cmlnZ2VyIGdldERhdGEuXHJcbiAgICovXHJcbiAgb25QYWdlQ2hhbmdlKHBhZ2luZ0luZm86IFBhZ2luZ0luZm8pIHtcclxuICAgIHRoaXMuc3RhdHVzLnNldFN0YXR1cygncGVuZGluZycsICdMb2FkaW5nJyk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvID0gcGFnaW5nSW5mbztcclxuICAgIHRoaXMucGFnZUNoYW5nZUVtaXR0ZXIuZW1pdChwYWdpbmdJbmZvKTtcclxuICAgIHRoaXMucGFnZUNoYW5nZWQubmV4dCh0aGlzLmZvcm1Nb2RlbC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogV2lyZSB1cCBhIGhhbmRsZXIgdG8gdGhlIGByZWZyZXNoYCBvYnNlcnZhYmxlIHNvIHRoYXQgd2hlblxyXG4gICAqIHRoZSBob3N0IHBhZ2UgY29udGV4dCBjaGFuZ2VzIGl0IGNhbiBmb3JjZSB0aGUgdGFibGUgdG8gdXBkYXRlIGFzIHdlbGwuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgYHJlZnJlc2hgIG9ic2VydmFibGUgcGFzc2VzIG9wdGlvbnMgYW5kIHRoZSBgY2xlYXJTZWFyY2hgIHByb3BlcnR5XHJcbiAgICogaXMgc2V0IHRvIHRydWUsIHJlc2V0IHRoZSBzZWFyY2hNb2RlbCBhbmQgcGFzcyBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgICpcclxuICAgKiBJZiBgcmVmcmVzaGAgb2JzZXJ2YWJsZSBkb2VzIG5vdCBwYXNzIG9wdGlvbnMgb3IgdGhlIGBjbGVhclNlYXJjaGAgcHJvcGVydHlcclxuICAgKiBpcyBzZXQgdG8gZmFsc2UsIHBhc3MgYWxvbmcgdGhlIGN1cnJlbnQgc2VhcmNoTW9kZWwgVmFsdWUuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRVcFJlZnJlc2hUcmlnZ2VyKCkge1xyXG4gICAgaWYgKHRoaXMucmVmcmVzaCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyID0gdGhpcy5yZWZyZXNoLnBpcGUoXHJcbiAgICAgICAgbWFwKG9wdHMgPT4ge1xyXG4gICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5jbGVhclNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGVsLnJlc2V0KCcnLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMuZm9ybU1vZGVsLCBzZWFyY2hNb2RlbDogJycgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1Nb2RlbC52YWx1ZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRleHQgdG8gZGlzcGxheSBpbiB0aGUgZm9vdGVyLiAqL1xyXG4gIHByaXZhdGUgZ2V0Q2FwdGlvbihyZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMpOiBzdHJpbmcge1xyXG4gICAgaWYgKHJlc3VsdHMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hNb2RlbC52YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5ub1NlYXJjaFJlc3VsdHNNZXNzYWdlIHx8ICdTZWFyY2hhYmxlVGFibGVfRGVmYXVsdF9Ob01hdGNoZXNfU0MnLCB7IHNlYXJjaFRleHQ6IHRoaXMuc2VhcmNoTW9kZWwudmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMubm9EYXRhTWVzc2FnZSB8fCAnU2VhcmNoYWJsZVRhYmxlX0RlZmF1bHRfTm9EYXRhX1NDJyk7XHJcbiAgfVxyXG5cclxufSIsIjxoZWFkZXIgKm5nSWY9XCIhaGlkZUhlYWRlclwiXHJcbiAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1zaHJpbmsgYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICA8ZWMtdGV4dGJveCBpZD1cInt7aWR9fV9zZWFyY2hib3hcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWFyY2hDb250cm9sXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cIm1iLTAgZmxleC1ncm93IG1yLTJcIlxyXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybU1vZGVsXT1cInNlYXJjaE1vZGVsXCJcclxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic2VhcmNoYm94VGFiSW5kZXhcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hib3hQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInNlYXJjaGJveFJlYWRvbmx5XCI+PC9lYy10ZXh0Ym94PlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3dcIj5cclxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIi5zZWFyY2hhYmxlLXRhYmxlLWNvbnRyb2xzXCI+PC9uZy1jb250ZW50PlxyXG4gIDwvZGl2PlxyXG48L2hlYWRlcj5cclxuPHNlY3Rpb24gaWQ9XCJ7e2lkfX1fY2FyZFwiXHJcbiAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIHt7b3ZlcmxheUNsYXNzZXN9fVwiXHJcbiAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtdHJhbnNsdWNlbnQnOiBzdGF0dXMuc3RhdHVzICE9PSAnZXJyb3InLCAnaGFzLW1hc2snOiBzdGF0dXMuc3RhdHVzICE9PSAnaGFzRGF0YScsICdjYXJkIG0tMCBiZy1jb250ZW50JzogIWN1c3RvbUNvbnRlbnRUZW1wbGF0ZSAmJiAhcmVtb3ZlQ2FyZH1cIlxyXG4gICAgICAgICBlY092ZXJsYXlcclxuICAgICAgICAgW3N0YXR1c109XCJzdGF0dXMuc3RhdHVzXCJcclxuICAgICAgICAgW21lc3NhZ2VdPVwic3RhdHVzLm1lc3NhZ2VcIlxyXG4gICAgICAgICBbZGlzcGxheUFzTWFza109XCJ0cnVlXCI+XHJcbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLmNhcmQtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxyXG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Db250ZW50VGVtcGxhdGUgfHwgZGVmYXVsdENvbnRlbnRUZW1wbGF0ZVwiPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8IS0tIHRoZSBkZWZhdWx0IHRlbXBsYXRlIGlzIGFuIGVjLXRhYmxlIHdpdGggcHJveGllZC1vdmVyIHNlYXJjaGFibGUgdGFibGUgaW5wdXRzLiBcclxuICAgIElmIHRoYXQgZG9lc24ndCB3b3JrIGZvciB5b3UgdGhlbiB5b3UgY2FuIHNwZWNpZnkgYSBjdXN0b21Db250ZW50VGVtcGxhdGUgdG8gdXNlIGluc3RlYWRcclxuICAgIGFuZCBzdGlsbCByZXRhaW4gYWxsIHRoZSBldmVudCBoYW5kbGluZywgaGVhZGVyLCBmb290ZXIgcGFnaW5hdGlvbiwgZXRjIHN1cHBvcnQgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29udGVudFRlbXBsYXRlPlxyXG4gICAgPGVjLXRhYmxlIGlkPVwie3tpZH19X3RhYmxlXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInt7dGFibGVDbGFzc2VzfX1cIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1maXhlZF09XCJ0YWJsZUxheW91dEZpeGVkXCJcclxuICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGVcIlxyXG4gICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRcIlxyXG4gICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cIm9uU29ydENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXHJcbiAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbnRleHRdPVwic2VsZWN0aW9uQ29udGV4dFwiXHJcbiAgICAgICAgICAgICAgW3NlbGVjdGlvblRvb2xiYXJUZW1wbGF0ZV09XCJzZWxlY3Rpb25Ub29sYmFyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgIFtyZXNpemFibGVDb2x1bW5zXT1cInJlc2l6YWJsZUNvbHVtbnNcIj5cclxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgPC9lYy10YWJsZT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8IS0tIHBhZ2luYXRpb24gZm9vdGVyIHZpc2libGUgaWYgdGFibGUgaXMgcGFnZS1hYmxlIGFuZCB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBwYWdlIG9mIHJlc3VsdHMgLS0+XHJcbiAgPGZvb3RlciAqbmdJZj1cIiFoaWRlRm9vdGVyICYmIHBhZ2VhYmxlICYmIHNlYXJjaFJlc3VsdHMudG90YWxJdGVtc0JlZm9yZVBhZ2luZyEgPiBwYWdlU2l6ZSFcIlxyXG4gICAgICAgICAgY2xhc3M9XCJwYWdpbmF0aW9uLWZvb3RlclwiXHJcbiAgICAgICAgICBbY2xhc3MuYm9yZGVyLXRvcF09XCIhY3VzdG9tQ29udGVudFRlbXBsYXRlXCI+XHJcbiAgICA8ZWMtdGFibGUtcGFnaW5hdGlvbiBpZD1cInt7aWR9fV9wYWdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtY29sb3ItcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJzZWFyY2hSZXN1bHRzLnRvdGFsSXRlbXNCZWZvcmVQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhUYWJzXT1cIm1heFRhYnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VOdW1iZXJdPVwicGFnZUluZm8/LnBhZ2VOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8L2VjLXRhYmxlLXBhZ2luYXRpb24+XHJcbiAgICA8ZGl2IGlkPVwicmVzdWx0c0NvdW50XCJcclxuICAgICAgICAgKm5nSWY9XCJzZWFyY2hSZXN1bHRzPy5pdGVtcz8ubGVuZ3RoXCJcclxuICAgICAgICAgY2xhc3M9XCJtbC1hdXRvIGZvbnQtY29sb3ItaGludCB0ZXh0LXRydW5jYXRlXCIgXHJcbiAgICAgICAgIHRpdGxlPVwie3tyZXN1bHRzQ291bnR9fSB7e2FkZGl0aW9uYWxDb3VudFRleHR9fVwiPnt7cmVzdWx0c0NvdW50fX0ge3thZGRpdGlvbmFsQ291bnRUZXh0fX08L2Rpdj5cclxuICA8L2Zvb3Rlcj5cclxuXHJcbiAgPCEtLSBkZWZhdWx0IGZvb3RlcjogdmlzaWJsZSBpZiBoaWRlRm9vdGVyIGlzIGZhbHNlIGFuZCB0YWJsZSBpcyBub3QgcGFnZS1hYmxlIG9yIHRoZXJlIGFyZSBvbmx5IG9uZSBwYWdlIG9mIHJlc3VsdHMgKGFsd2F5cyBzaG93cyBpZiB0aGVyZSBpcyBhIGNhcHRpb24gdG8gaW5kaWNhdGUgbm8gcmVzdWx0cykgLS0+XHJcbiAgPGZvb3RlciAqbmdJZj1cIighaGlkZUZvb3RlciAmJiAoIXBhZ2VhYmxlIHx8IHNlYXJjaFJlc3VsdHMudG90YWxJdGVtc0JlZm9yZVBhZ2luZyEgPD0gcGFnZVNpemUhKSkgfHwgdGFibGVDYXB0aW9uXCJcclxuICAgICAgICAgIGNsYXNzPVwiY2FwdGlvbi1mb290ZXJcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydoYXMtcmVzdWx0cyc6IHNlYXJjaFJlc3VsdHM/Lml0ZW1zPy5sZW5ndGgsICdib3JkZXItdG9wJzogc2VhcmNoUmVzdWx0cz8uaXRlbXM/Lmxlbmd0aCAmJiAhY3VzdG9tQ29udGVudFRlbXBsYXRlfVwiPlxyXG4gICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhdGFibGVDYXB0aW9uXCJcclxuICAgICAgICAgICAgICAgIHNlbGVjdD1cIi5zZWFyY2hhYmxlLXRhYmxlLWZvb3RlclwiPjwvbmctY29udGVudD5cclxuICAgIDxkaXYgaWQ9XCJ0YWJsZUNhcHRpb25cIlxyXG4gICAgICAgICAqbmdJZj1cInRhYmxlQ2FwdGlvblwiXHJcbiAgICAgICAgIFtpbm5lckhUTUxdPVwidGFibGVDYXB0aW9uXCI+PC9kaXY+XHJcbiAgICA8ZGl2IGlkPVwicmVzdWx0c0NvdW50XCJcclxuICAgICAgICAgKm5nSWY9XCJzZWFyY2hSZXN1bHRzPy5pdGVtcz8ubGVuZ3RoXCJcclxuICAgICAgICAgY2xhc3M9XCJtbC1hdXRvIHRleHQtdHJ1bmNhdGVcIlxyXG4gICAgICAgICB0aXRsZT1cInt7cmVzdWx0c0NvdW50fX0ge3thZGRpdGlvbmFsQ291bnRUZXh0fX1cIj57e3Jlc3VsdHNDb3VudH19IHt7YWRkaXRpb25hbENvdW50VGV4dH19PC9kaXY+XHJcbiAgPC9mb290ZXI+XHJcbjwvc2VjdGlvbj4iXX0=
@@ -0,0 +1,27 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TableDetailRowComponent {
4
+ }
5
+ TableDetailRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TableDetailRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ TableDetailRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", 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"><ng-content></ng-content></div>
10
+ </td>
11
+ `, isInline: true, styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{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-legacy);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"] });
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TableDetailRowComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: '[ecTableDetailRow]', template: `
15
+ <td></td>
16
+ <td [class.has-max-height]="maxHeight" class="table-detail-content {{contentClass}}" [attr.colspan]="contentColSpan">
17
+ <div [style.max-height]="maxHeight"><ng-content></ng-content></div>
18
+ </td>
19
+ `, styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{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-legacy);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"] }]
20
+ }], propDecorators: { contentClass: [{
21
+ type: Input
22
+ }], contentColSpan: [{
23
+ type: Input
24
+ }], maxHeight: [{
25
+ type: Input
26
+ }] } });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGV0YWlsLXJvdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1kZXRhaWwtcm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFZakQsTUFBTSxPQUFPLHVCQUF1Qjs7b0hBQXZCLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDhKQVJ4Qjs7Ozs7R0FLVDsyRkFHVSx1QkFBdUI7a0JBVm5DLFNBQVM7K0JBQ0Usb0JBQW9CLFlBQ3BCOzs7OztHQUtUOzhCQUlRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZURldGFpbFJvd10nLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8dGQ+PC90ZD5cclxuICAgIDx0ZCBbY2xhc3MuaGFzLW1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCIgY2xhc3M9XCJ0YWJsZS1kZXRhaWwtY29udGVudCB7e2NvbnRlbnRDbGFzc319XCIgW2F0dHIuY29sc3Bhbl09XCJjb250ZW50Q29sU3BhblwiPlxyXG4gICAgICA8ZGl2IFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5cclxuICAgIDwvdGQ+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
+ }
37
+ TableLockedColumnComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TableLockedColumnComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
38
+ TableLockedColumnComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", 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: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{background-color:var(--ec-background-color);position:sticky!important;z-index:2!important}:host(th){z-index:3!important}\n"] });
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TableLockedColumnComponent, decorators: [{
40
+ type: Component,
41
+ args: [{ selector: '[ecTableLockedColumn]', template: `<ng-content></ng-content>`, styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}:host{background-color:var(--ec-background-color);position:sticky!important;z-index:2!important}:host(th){z-index:3!important}\n"] }]
42
+ }], ctorParameters: function () { return [{ 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbG9ja2VkLWNvbHVtbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvZGlzcGxheS90YWJsZS90YWJsZS1sb2NrZWQtY29sdW1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQXNELE1BQU0sZUFBZSxDQUFDOztBQU9sSCxNQUFNLE9BQU8sMEJBQTBCO0lBZ0JyQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUxsQyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUdwQixlQUFVLEdBQUcsS0FBSyxDQUFDO0lBRW1CLENBQUM7SUFFdkMsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUM1RCxNQUFNLElBQUksS0FBSyxDQUFDLHlOQUF5TixDQUFDLENBQUM7U0FDNU87UUFFRCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQywrTkFBK04sQ0FBQyxDQUFDO1NBQ2xQO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDbkYsTUFBTSxJQUFJLEtBQUssQ0FBQyxrSEFBa0gsQ0FBQyxDQUFDO1NBQ3JJO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1NBQ2pEO2FBQU07WUFDTCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO1NBQ2hEO0lBQ0gsQ0FBQzs7dUhBaERVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLHFUQUgzQiwyQkFBMkI7MkZBRzFCLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx1QkFBdUIsWUFDdkIsMkJBQTJCO2lHQUtQLE9BQU87c0JBQXBDLEtBQUs7dUJBQUMscUJBQXFCO2dCQUc1QixJQUFJO3NCQURILFdBQVc7dUJBQUMsZUFBZTtnQkFJNUIsS0FBSztzQkFESixXQUFXO3VCQUFDLGdCQUFnQjtnQkFJN0IsV0FBVztzQkFEVixXQUFXO3VCQUFDLG9CQUFvQjtnQkFJakMsVUFBVTtzQkFEVCxXQUFXO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkluaXQsIEVsZW1lbnRSZWYsIEhvc3QsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZUxvY2tlZENvbHVtbl0nLFxyXG4gIHRlbXBsYXRlOiBgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtbG9ja2VkLWNvbHVtbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZUxvY2tlZENvbHVtbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCdlY1RhYmxlTG9ja2VkQ29sdW1uJykgb3B0aW9ucyE6IHsgYm9yZGVyOiBib29sZWFuLCBsZWZ0PzogbnVtYmVyLCByaWdodD86IG51bWJlciB9O1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLmxlZnQucHgnKVxyXG4gIGxlZnQ/OiBudW1iZXI7XHJcblxyXG4gIEBIb3N0QmluZGluZygnc3R5bGUucmlnaHQucHgnKVxyXG4gIHJpZ2h0PzogbnVtYmVyO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJvcmRlci1yaWdodCcpXHJcbiAgYm9yZGVyUmlnaHQgPSBmYWxzZTtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5ib3JkZXItbGVmdCcpXHJcbiAgYm9yZGVyTGVmdCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnaXMtcmVzaXphYmxlJykpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbG9jayB0YWJsZSBjb2x1bW4gYmVjYXVzZSBpdCB3YXMgYWxzbyByZXNpemFibGUuIFJlc2l6YWJsZSB0YWJsZSBjb2x1bW5zIGNhbm5vdCBjdXJyZW50bHkgYmUgbG9ja2VkLiBSZW1vdmUgdGhlICdpcy1yZXNpemFibGUnIGNsYXNzIGZyb20gVEhzIG9mIHRhYmxlIGNvbHVtbXMgdGhhdCBoYXZlIHRoZSBbZWNUYWJsZUxvY2tlZENvbHVtbl0gY29tcG9uZW50LmApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2NvbHNwYW4nKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NrIHRhYmxlIGNvbHVtbiBiZWNhdXNlIGl0IGhhZCBhICdjb2xzcGFuJy4gTG9ja2VkIGNvbHVtbnMgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IFRIcyBvciBURHMgd2l0aCBhICdjb2xzcGFuJy4gUmVtb3ZlIHRoZSAnY29sc3BhbicgYXR0cmlidXRlIGZyb20gdGFibGUgY29sdW1ucyB0aGF0IGhhdmUgdGhlIFtlY1RhYmxlTG9ja2VkQ29sdW1uXSBjb21wb25lbnQuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbkFuZEJvcmRlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25BbmRCb3JkZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25BbmRCb3JkZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5sZWZ0ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdGhpcy5vcHRpb25zLnJpZ2h0ID09PSAnbnVtYmVyJykge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2NrIHRhYmxlIGNvbHVtbiBiZWNhdXNlIGl0IGhhZCBhIHZhbHVlIGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0LiBPbmx5IGxlZnQgb3IgcmlnaHQgY2FuIGhhdmUgYSB2YWx1ZS5gKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5sZWZ0ID09PSAnbnVtYmVyJykge1xyXG4gICAgICB0aGlzLmxlZnQgPSB0aGlzLm9wdGlvbnMubGVmdDtcclxuICAgICAgdGhpcy5ib3JkZXJSaWdodCA9IHRoaXMub3B0aW9ucy5ib3JkZXIgfHwgZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5vcHRpb25zLnJpZ2h0O1xyXG4gICAgICB0aGlzLmJvcmRlckxlZnQgPSB0aGlzLm9wdGlvbnMuYm9yZGVyIHx8IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class TableMasterHeaderRowComponent {
4
+ }
5
+ TableMasterHeaderRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TableMasterHeaderRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ TableMasterHeaderRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: TableMasterHeaderRowComponent, selector: "[ecTableMasterHeaderRow]", ngImport: i0, template: `<th></th><ng-content></ng-content>`, isInline: true, styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}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"] });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TableMasterHeaderRowComponent, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: '[ecTableMasterHeaderRow]', template: `<th></th><ng-content></ng-content>`, styles: [":root{--ec-font-size-icon: 1rem;--ec-color-icon: rgba(26, 26, 35, .66)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}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"] }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWFzdGVyLWhlYWRlci1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2Rpc3BsYXkvdGFibGUvdGFibGUtbWFzdGVyLWhlYWRlci1yb3cuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzFDLE1BQU0sT0FBTyw2QkFBNkI7OzBIQUE3Qiw2QkFBNkI7OEdBQTdCLDZCQUE2QixnRUFIOUIsb0NBQW9DOzJGQUduQyw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsMEJBQTBCLFlBQzFCLG9DQUFvQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdbZWNUYWJsZU1hc3RlckhlYWRlclJvd10nLFxyXG4gIHRlbXBsYXRlOiBgPHRoPjwvdGg+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PmAsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtbWFzdGVyLWhlYWRlci1yb3cuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVNYXN0ZXJIZWFkZXJSb3dDb21wb25lbnQge31cclxuIl19