@energycap/components 0.41.1-ECAP-27592-angular-17.20241223-1652 → 0.41.1-ECAP-26841-date-input-features.20250106-0847

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