@c8y/ngx-components 1021.11.1 → 1021.21.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 (434) hide show
  1. package/alarms/alarms-date-filter.component.d.ts +34 -0
  2. package/alarms/alarms-date-filter.component.d.ts.map +1 -0
  3. package/alarms/alarms-filter.component.d.ts +2 -1
  4. package/alarms/alarms-filter.component.d.ts.map +1 -1
  5. package/alarms/alarms-list.component.d.ts +2 -17
  6. package/alarms/alarms-list.component.d.ts.map +1 -1
  7. package/alarms/alarms-view.service.d.ts +5 -2
  8. package/alarms/alarms-view.service.d.ts.map +1 -1
  9. package/alarms/alarms.component.d.ts +3 -1
  10. package/alarms/alarms.component.d.ts.map +1 -1
  11. package/alarms/alarms.model.d.ts +47 -1
  12. package/alarms/alarms.model.d.ts.map +1 -1
  13. package/alarms/alarms.module.d.ts +15 -13
  14. package/alarms/alarms.module.d.ts.map +1 -1
  15. package/branding/shared/data/store-branding.service.d.ts +5 -0
  16. package/branding/shared/data/store-branding.service.d.ts.map +1 -1
  17. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  18. package/context-dashboard/context-dashboard.model.d.ts +1 -0
  19. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  20. package/context-dashboard/context-dashboard.service.d.ts +7 -5
  21. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  22. package/context-dashboard/dashboard-detail.component.d.ts +4 -7
  23. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  24. package/context-dashboard/dashboard-detail.service.d.ts +4 -4
  25. package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
  26. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
  27. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
  28. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
  29. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
  30. package/core/action-bar/action-bar-item.component.d.ts +1 -1
  31. package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
  32. package/core/action-bar/action-bar.module.d.ts +6 -6
  33. package/core/action-bar/action-bar.module.d.ts.map +1 -1
  34. package/core/bootstrap/bootstrap.component.d.ts +3 -1
  35. package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
  36. package/core/common/aggregation/aggregation.model.d.ts +39 -0
  37. package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
  38. package/core/common/aggregation/aggregation.service.d.ts +17 -0
  39. package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
  40. package/core/common/index.d.ts +4 -0
  41. package/core/common/index.d.ts.map +1 -1
  42. package/core/common/inter-app.service.d.ts +48 -0
  43. package/core/common/inter-app.service.d.ts.map +1 -0
  44. package/core/common/interval-based-reload.abstract.d.ts +120 -0
  45. package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
  46. package/core/dashboard/dashboard.module.d.ts +26 -20
  47. package/core/dashboard/dashboard.module.d.ts.map +1 -1
  48. package/core/dashboard/index.d.ts +3 -0
  49. package/core/dashboard/index.d.ts.map +1 -1
  50. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
  51. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
  52. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
  53. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
  54. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
  55. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
  56. package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
  57. package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
  58. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
  59. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
  60. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
  61. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
  62. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
  63. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
  64. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
  65. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
  66. package/core/dashboard/widget-change-event.model.d.ts +1 -1
  67. package/core/dashboard/widget-change-event.model.d.ts.map +1 -1
  68. package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
  69. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  70. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
  71. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
  72. package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts +2 -1
  73. package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts.map +1 -1
  74. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
  75. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
  76. package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
  77. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +12 -8
  78. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  79. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +7 -26
  80. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  81. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  82. package/core/header/header.module.d.ts +18 -18
  83. package/core/header/header.module.d.ts.map +1 -1
  84. package/core/header/title/title.component.d.ts +1 -1
  85. package/core/header/title/title.component.d.ts.map +1 -1
  86. package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
  87. package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
  88. package/core/i18n/i18n.module.d.ts +0 -4
  89. package/core/i18n/i18n.module.d.ts.map +1 -1
  90. package/core/i18n/index.d.ts +2 -1
  91. package/core/i18n/index.d.ts.map +1 -1
  92. package/core/i18n/translation-loader.service.d.ts +50 -0
  93. package/core/i18n/translation-loader.service.d.ts.map +1 -0
  94. package/core/i18n/translation-utils.d.ts +14 -0
  95. package/core/i18n/translation-utils.d.ts.map +1 -0
  96. package/core/plugins/plugins-resolve.service.d.ts +7 -10
  97. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  98. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
  99. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
  100. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
  101. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  102. package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
  103. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  104. package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
  105. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
  106. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
  107. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
  108. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
  109. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
  110. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
  111. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
  112. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
  113. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
  114. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
  115. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
  116. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
  117. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
  118. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
  119. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
  120. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
  121. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
  122. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
  123. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
  124. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
  125. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
  126. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
  127. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
  128. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
  129. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
  130. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
  131. package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
  132. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
  133. package/datapoints-export-selector/index.d.ts +15 -0
  134. package/datapoints-export-selector/index.d.ts.map +1 -0
  135. package/device-list/device-list.module.d.ts +4 -2
  136. package/device-list/device-list.module.d.ts.map +1 -1
  137. package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +4 -4
  138. package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +3 -3
  139. package/esm2022/alarms/alarms-date-filter.component.mjs +139 -0
  140. package/esm2022/alarms/alarms-filter.component.mjs +11 -5
  141. package/esm2022/alarms/alarms-list.component.mjs +5 -16
  142. package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
  143. package/esm2022/alarms/alarms-view.service.mjs +16 -2
  144. package/esm2022/alarms/alarms.component.mjs +12 -6
  145. package/esm2022/alarms/alarms.model.mjs +17 -1
  146. package/esm2022/alarms/alarms.module.mjs +11 -4
  147. package/esm2022/branding/shared/data/store-branding.service.mjs +24 -1
  148. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +3 -1
  149. package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
  150. package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
  151. package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
  152. package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
  153. package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
  154. package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
  155. package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
  156. package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
  157. package/esm2022/core/action-bar/action-bar.component.mjs +3 -3
  158. package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
  159. package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
  160. package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
  161. package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
  162. package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
  163. package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
  164. package/esm2022/core/common/index.mjs +5 -1
  165. package/esm2022/core/common/inter-app.service.mjs +76 -0
  166. package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
  167. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  168. package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
  169. package/esm2022/core/dashboard/dashboard.module.mjs +22 -4
  170. package/esm2022/core/dashboard/index.mjs +4 -1
  171. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
  172. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
  173. package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
  174. package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
  175. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
  176. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
  177. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
  178. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
  179. package/esm2022/core/dashboard/widget-change-event.model.mjs +1 -1
  180. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
  181. package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
  182. package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
  183. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-helper.service.mjs +3 -2
  184. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
  185. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
  186. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -36
  187. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -72
  188. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +9 -3
  189. package/esm2022/core/header/header.module.mjs +7 -5
  190. package/esm2022/core/header/title/title.component.mjs +3 -3
  191. package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
  192. package/esm2022/core/i18n/i18n.module.mjs +7 -14
  193. package/esm2022/core/i18n/index.mjs +3 -2
  194. package/esm2022/core/i18n/translate.parser.mjs +2 -2
  195. package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
  196. package/esm2022/core/i18n/translation-utils.mjs +24 -0
  197. package/esm2022/core/list-display-switch/list-display-switch.component.mjs +3 -3
  198. package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
  199. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
  200. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
  201. package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
  202. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  203. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  204. package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
  205. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
  206. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
  207. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
  208. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
  209. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
  210. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
  211. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
  212. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
  213. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
  214. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
  215. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
  216. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
  217. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
  218. package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
  219. package/esm2022/datapoints-export-selector/index.mjs +15 -0
  220. package/esm2022/device-list/add-smart-group.component.mjs +4 -3
  221. package/esm2022/device-list/device-list.module.mjs +22 -4
  222. package/esm2022/interval-picker/c8y-ngx-components-interval-picker.mjs +5 -0
  223. package/esm2022/interval-picker/index.mjs +3 -0
  224. package/esm2022/interval-picker/interval-picker.component.mjs +68 -0
  225. package/esm2022/interval-picker/interval-picker.model.mjs +47 -0
  226. package/esm2022/map/cluster-map.component.mjs +41 -13
  227. package/esm2022/map/map-status.component.mjs +6 -5
  228. package/esm2022/map/map.component.mjs +9 -5
  229. package/esm2022/map/map.model.mjs +1 -1
  230. package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
  231. package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
  232. package/esm2022/translation-editor/data/index.mjs +2 -0
  233. package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
  234. package/esm2022/translation-editor/index.mjs +10 -0
  235. package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
  236. package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
  237. package/esm2022/translation-editor/lazy/index.mjs +2 -0
  238. package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
  239. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
  240. package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
  241. package/esm2022/widgets/cockpit/index.mjs +4 -2
  242. package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
  243. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
  244. package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
  245. package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
  246. package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
  247. package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
  248. package/esm2022/widgets/definitions/index.mjs +2 -1
  249. package/esm2022/widgets/definitions/map/index.mjs +4 -2
  250. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
  251. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
  252. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
  253. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
  254. package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
  255. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
  256. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
  257. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
  258. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
  259. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
  260. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
  261. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
  262. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
  263. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
  264. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
  265. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
  266. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
  267. package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
  268. package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
  269. package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
  270. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
  271. package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
  272. package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
  273. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +5 -5
  274. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  275. package/fesm2022/c8y-ngx-components-alarms.mjs +189 -31
  276. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  277. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +23 -0
  278. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  279. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -0
  280. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  281. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
  282. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  283. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
  284. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  285. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
  286. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
  287. package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
  288. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  289. package/fesm2022/c8y-ngx-components-interval-picker.mjs +120 -0
  290. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -0
  291. package/fesm2022/c8y-ngx-components-map.mjs +52 -19
  292. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  293. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
  294. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
  295. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
  296. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
  297. package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
  298. package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
  299. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
  300. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  301. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
  302. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  303. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
  304. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  305. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
  306. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  307. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
  308. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  309. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
  310. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
  311. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
  312. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  313. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  314. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  315. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
  316. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  317. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
  318. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
  319. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
  320. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  321. package/fesm2022/c8y-ngx-components.mjs +5093 -4369
  322. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  323. package/interval-picker/c8y-ngx-components-interval-picker.d.ts.map +1 -0
  324. package/interval-picker/index.d.ts +3 -0
  325. package/interval-picker/index.d.ts.map +1 -0
  326. package/{core/dashboard/wiget-time-context/interval-picker → interval-picker}/interval-picker.component.d.ts +10 -2
  327. package/interval-picker/interval-picker.component.d.ts.map +1 -0
  328. package/interval-picker/interval-picker.model.d.ts +15 -0
  329. package/interval-picker/interval-picker.model.d.ts.map +1 -0
  330. package/locales/de.po +289 -18
  331. package/locales/en.po +12 -0
  332. package/locales/en_US.po +3 -0
  333. package/locales/es.po +253 -18
  334. package/locales/fr.po +253 -18
  335. package/locales/ja_JP.po +282 -18
  336. package/locales/locales.pot +266 -21
  337. package/locales/nl.po +253 -18
  338. package/locales/pl.po +253 -18
  339. package/locales/pt_BR.po +253 -18
  340. package/map/cluster-map.component.d.ts +8 -3
  341. package/map/cluster-map.component.d.ts.map +1 -1
  342. package/map/map-status.component.d.ts +0 -3
  343. package/map/map-status.component.d.ts.map +1 -1
  344. package/map/map.component.d.ts +4 -2
  345. package/map/map.component.d.ts.map +1 -1
  346. package/map/map.model.d.ts +2 -1
  347. package/map/map.model.d.ts.map +1 -1
  348. package/package.json +1 -1
  349. package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
  350. package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
  351. package/translation-editor/data/index.d.ts +2 -0
  352. package/translation-editor/data/index.d.ts.map +1 -0
  353. package/translation-editor/data/translation-store.service.d.ts +61 -0
  354. package/translation-editor/data/translation-store.service.d.ts.map +1 -0
  355. package/translation-editor/index.d.ts +2 -0
  356. package/translation-editor/index.d.ts.map +1 -0
  357. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
  358. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
  359. package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
  360. package/translation-editor/lazy/index.d.ts +2 -0
  361. package/translation-editor/lazy/index.d.ts.map +1 -0
  362. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
  363. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
  364. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
  365. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
  366. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
  367. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
  368. package/widgets/cockpit/index.d.ts +13 -0
  369. package/widgets/cockpit/index.d.ts.map +1 -1
  370. package/widgets/cockpit-exports/index.d.ts +6 -0
  371. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  372. package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
  373. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  374. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
  375. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  376. package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
  377. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  378. package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
  379. package/widgets/definitions/datapoints-table/index.d.ts +14 -0
  380. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
  381. package/widgets/definitions/index.d.ts +1 -0
  382. package/widgets/definitions/index.d.ts.map +1 -1
  383. package/widgets/definitions/map/index.d.ts +2 -1
  384. package/widgets/definitions/map/index.d.ts.map +1 -1
  385. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
  386. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  387. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
  388. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  389. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
  390. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  391. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
  392. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  393. package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
  394. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
  395. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
  396. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
  397. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
  398. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
  399. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
  400. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
  401. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
  402. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
  403. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
  404. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
  405. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
  406. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
  407. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
  408. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
  409. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
  410. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
  411. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
  412. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
  413. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
  414. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
  415. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
  416. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
  417. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
  418. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
  419. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
  420. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
  421. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
  422. package/widgets/implementations/datapoints-table/index.d.ts +10 -0
  423. package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
  424. package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
  425. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  426. package/widgets/implementations/map/map-widget.component.d.ts +8 -3
  427. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
  428. package/widgets/implementations/map/map-widget.model.d.ts +4 -3
  429. package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
  430. package/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.d.ts.map +0 -1
  431. package/core/i18n/translate.loader.d.ts +0 -31
  432. package/core/i18n/translate.loader.d.ts.map +0 -1
  433. package/esm2022/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.mjs +0 -55
  434. package/esm2022/core/i18n/translate.loader.mjs +0 -71
@@ -0,0 +1,124 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { AGGREGATION_VALUES } from '@c8y/ngx-components';
3
+ import { TIME_RANGE_INTERVAL_UNITS_VALUES } from '@c8y/ngx-components/datapoints-export-selector';
4
+ import { INTERVALS } from '@c8y/ngx-components/interval-picker';
5
+ import * as i0 from "@angular/core";
6
+ export class DatapointsTableConfigService {
7
+ /**
8
+ * Determines the interval between two dates.
9
+ *
10
+ * @param dateFrom - The starting date in ISO 8601 string format.
11
+ * @param dateTo - The ending date in ISO 8601 string format.
12
+ * @returns The time range interval unit.
13
+ */
14
+ // TODO same method is in datapoints export component. Consider moving it to a shared service, or reuse it here
15
+ // when DPT will be integrating with MTM-59689.
16
+ // Integration task: MTM-60221
17
+ // tests are already added in MTM-60217
18
+ determineInterval(dateFrom, dateTo) {
19
+ const from = new Date(dateFrom);
20
+ const to = new Date(dateTo);
21
+ const differenceInMilliseconds = to.getTime() - from.getTime();
22
+ const [minutes, hours, days, weeks, months, custom] = INTERVALS;
23
+ const intervals = [
24
+ { value: minutes.timespanInMs, id: minutes.id }, // milliseconds in one minute
25
+ { value: hours.timespanInMs, id: hours.id }, // milliseconds in one hour
26
+ { value: days.timespanInMs, id: days.id }, // milliseconds in one day
27
+ { value: weeks.timespanInMs, id: weeks.id }, // milliseconds in one week
28
+ { value: months.timespanInMs, id: months.id } // approximation for milliseconds in one month
29
+ ];
30
+ const interval = intervals.find(interval => differenceInMilliseconds <= interval.value);
31
+ return interval ? interval.id : custom.id;
32
+ }
33
+ /**
34
+ * Updates the disabled state of aggregation options based on the current value of the time interval form control.
35
+ *
36
+ * This method:
37
+ * - Retrieves the current date range from the form controls.
38
+ * - Determines the current time interval based on the date range.
39
+ * - Sets the disabled state for each aggregation option based on predefined conditions.
40
+ *
41
+ * The disabled state is stored in the `disabledAggregationOptions` object,
42
+ * where the key is the aggregation value and the value is a boolean indicating whether the option should be disabled.
43
+ *
44
+ * The `disabledConditions` object defines the conditions under which each aggregation option should be disabled.
45
+ *
46
+ * @param dateFrom - The starting date of the range.
47
+ * @param dateTo - The ending date of the range.
48
+ * @param aggregationValuesArr - An array of aggregation options.
49
+ * @returns An object containing the disabled state of each aggregation option.
50
+ */
51
+ // TODO similar method is in datapoints export component. Consider moving it to a shared service when DPT will be integrating with MTM-59689.
52
+ // Integration task: MTM-60221
53
+ // tests are already added in MTM-60217
54
+ updateDisabledStateOfAggregationOptionEntries(dateFrom, dateTo, aggregationValuesArr) {
55
+ const currentInterval = this.determineInterval(dateFrom, dateTo);
56
+ const disabledConditions = {
57
+ [AGGREGATION_VALUES.daily]: [
58
+ TIME_RANGE_INTERVAL_UNITS_VALUES.minutes,
59
+ TIME_RANGE_INTERVAL_UNITS_VALUES.hours,
60
+ TIME_RANGE_INTERVAL_UNITS_VALUES.days
61
+ ],
62
+ [AGGREGATION_VALUES.hourly]: [
63
+ TIME_RANGE_INTERVAL_UNITS_VALUES.minutes,
64
+ TIME_RANGE_INTERVAL_UNITS_VALUES.hours
65
+ ],
66
+ [AGGREGATION_VALUES.minutely]: [TIME_RANGE_INTERVAL_UNITS_VALUES.minutes]
67
+ };
68
+ const disabledAggregationOptions = {};
69
+ for (const aggregationValue of aggregationValuesArr) {
70
+ disabledAggregationOptions[aggregationValue] =
71
+ disabledConditions[aggregationValue]?.includes(currentInterval) ?? false;
72
+ }
73
+ return disabledAggregationOptions;
74
+ }
75
+ /**
76
+ * Determines the new aggregation value based on the current value and disabled options.
77
+ *
78
+ * Goal is to switch to the next available aggregation option if the current one is disabled.
79
+ * - If the current option is disabled, sets the control to the first available (non-disabled) option based on the following order:
80
+ * - If the current value is `DAILY`, it switches to `HOURLY` if it's not disabled, otherwise to `MINUTELY` if `HOURLY` is also disabled.
81
+ * - If the current value is `HOURLY`, it switches to `MINUTELY` if it's not disabled.
82
+ * - If all options are disabled, it sets the value to `NONE`.
83
+ *
84
+ * @param currentValue - The current aggregation option.
85
+ * @param disabledOptions - An object containing disabled options.
86
+ * @returns The new aggregation option.
87
+ */
88
+ determineNewAggregationValue(currentValue, disabledOptions) {
89
+ const { daily, hourly, minutely, none } = AGGREGATION_VALUES;
90
+ if (!disabledOptions[currentValue]) {
91
+ return currentValue; // Return the current value if it's not disabled
92
+ }
93
+ if (currentValue === daily) {
94
+ return !disabledOptions[hourly] ? hourly : !disabledOptions[minutely] ? minutely : none;
95
+ }
96
+ if (currentValue === hourly) {
97
+ return !disabledOptions[minutely] ? minutely : none;
98
+ }
99
+ return none; // Fallback to 'none' if all else fails
100
+ }
101
+ /**
102
+ * Determines the aggregation value based on the provided interval.
103
+ *
104
+ * @param interval - The time range interval.
105
+ * @returns The corresponding aggregation value.
106
+ */
107
+ determineAggregationValue(interval) {
108
+ const aggregationMap = {
109
+ [TIME_RANGE_INTERVAL_UNITS_VALUES.minutes]: AGGREGATION_VALUES.none,
110
+ [TIME_RANGE_INTERVAL_UNITS_VALUES.hours]: AGGREGATION_VALUES.minutely,
111
+ [TIME_RANGE_INTERVAL_UNITS_VALUES.days]: AGGREGATION_VALUES.hourly
112
+ };
113
+ return aggregationMap[interval] || AGGREGATION_VALUES.daily;
114
+ }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableConfigService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
116
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableConfigService, providedIn: 'root' }); }
117
+ }
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsTableConfigService, decorators: [{
119
+ type: Injectable,
120
+ args: [{
121
+ providedIn: 'root'
122
+ }]
123
+ }] });
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy10YWJsZS1jb25maWcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtdGFibGUvZGF0YXBvaW50cy10YWJsZS1jb25maWcvZGF0YXBvaW50cy10YWJsZS1jb25maWcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxrQkFBa0IsRUFHbkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsZ0NBQWdDLEVBRWpDLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOztBQUtoRSxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDOzs7Ozs7T0FNRztJQUNILCtHQUErRztJQUMvRywrQ0FBK0M7SUFDL0MsOEJBQThCO0lBQzlCLHVDQUF1QztJQUN2QyxpQkFBaUIsQ0FBQyxRQUFnQixFQUFFLE1BQWM7UUFDaEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRS9ELE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUVoRSxNQUFNLFNBQVMsR0FBRztZQUNoQixFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsNkJBQTZCO1lB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QXVDO0lBQ3RELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlCQUF5QixDQUFDLFFBQTJCO1FBQ25ELE1BQU0sY0FBYyxHQUFHO1lBQ3JCLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSTtZQUNuRSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFFBQVE7WUFDckUsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO1NBQ25FLENBQUM7UUFFRixPQUFPLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7SUFDOUQsQ0FBQzs4R0FuSVUsNEJBQTRCO2tIQUE1Qiw0QkFBNEIsY0FGM0IsTUFBTTs7MkZBRVAsNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFHR1JFR0FUSU9OX1ZBTFVFUyxcbiAgQWdncmVnYXRpb25PcHRpb24sXG4gIEFnZ3JlZ2F0aW9uT3B0aW9uU3RhdHVzXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMsXG4gIFRpbWVSYW5nZUludGVydmFsXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGF0YXBvaW50cy1leHBvcnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgSU5URVJWQUxTIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pbnRlcnZhbC1waWNrZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRzVGFibGVDb25maWdTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIERldGVybWluZXMgdGhlIGludGVydmFsIGJldHdlZW4gdHdvIGRhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0ZUZyb20gLSBUaGUgc3RhcnRpbmcgZGF0ZSBpbiBJU08gODYwMSBzdHJpbmcgZm9ybWF0LlxuICAgKiBAcGFyYW0gZGF0ZVRvIC0gVGhlIGVuZGluZyBkYXRlIGluIElTTyA4NjAxIHN0cmluZyBmb3JtYXQuXG4gICAqIEByZXR1cm5zIFRoZSB0aW1lIHJhbmdlIGludGVydmFsIHVuaXQuXG4gICAqL1xuICAvLyBUT0RPIHNhbWUgbWV0aG9kIGlzIGluIGRhdGFwb2ludHMgZXhwb3J0IGNvbXBvbmVudC4gQ29uc2lkZXIgbW92aW5nIGl0IHRvIGEgc2hhcmVkIHNlcnZpY2UsIG9yIHJldXNlIGl0IGhlcmVcbiAgLy8gd2hlbiBEUFQgd2lsbCBiZSBpbnRlZ3JhdGluZyB3aXRoIE1UTS01OTY4OS5cbiAgLy8gSW50ZWdyYXRpb24gdGFzazogTVRNLTYwMjIxXG4gIC8vIHRlc3RzIGFyZSBhbHJlYWR5IGFkZGVkIGluIE1UTS02MDIxN1xuICBkZXRlcm1pbmVJbnRlcnZhbChkYXRlRnJvbTogc3RyaW5nLCBkYXRlVG86IHN0cmluZyk6IFRpbWVSYW5nZUludGVydmFsIHtcbiAgICBjb25zdCBmcm9tID0gbmV3IERhdGUoZGF0ZUZyb20pO1xuICAgIGNvbnN0IHRvID0gbmV3IERhdGUoZGF0ZVRvKTtcbiAgICBjb25zdCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgPSB0by5nZXRUaW1lKCkgLSBmcm9tLmdldFRpbWUoKTtcblxuICAgIGNvbnN0IFttaW51dGVzLCBob3VycywgZGF5cywgd2Vla3MsIG1vbnRocywgY3VzdG9tXSA9IElOVEVSVkFMUztcblxuICAgIGNvbnN0IGludGVydmFscyA9IFtcbiAgICAgIHsgdmFsdWU6IG1pbnV0ZXMudGltZXNwYW5Jbk1zLCBpZDogbWludXRlcy5pZCB9LCAvLyBtaWxsaXNlY29uZHMgaW4gb25lIG1pbnV0ZVxuICAgICAgeyB2YWx1ZTogaG91cnMudGltZXNwYW5Jbk1zLCBpZDogaG91cnMuaWQgfSwgLy8gbWlsbGlzZWNvbmRzIGluIG9uZSBob3VyXG4gICAgICB7IHZhbHVlOiBkYXlzLnRpbWVzcGFuSW5NcywgaWQ6IGRheXMuaWQgfSwgLy8gbWlsbGlzZWNvbmRzIGluIG9uZSBkYXlcbiAgICAgIHsgdmFsdWU6IHdlZWtzLnRpbWVzcGFuSW5NcywgaWQ6IHdlZWtzLmlkIH0sIC8vIG1pbGxpc2Vjb25kcyBpbiBvbmUgd2Vla1xuICAgICAgeyB2YWx1ZTogbW9udGhzLnRpbWVzcGFuSW5NcywgaWQ6IG1vbnRocy5pZCB9IC8vIGFwcHJveGltYXRpb24gZm9yIG1pbGxpc2Vjb25kcyBpbiBvbmUgbW9udGhcbiAgICBdO1xuXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBpbnRlcnZhbHMuZmluZChpbnRlcnZhbCA9PiBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgPD0gaW50ZXJ2YWwudmFsdWUpO1xuXG4gICAgcmV0dXJuIGludGVydmFsID8gaW50ZXJ2YWwuaWQgOiBjdXN0b20uaWQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgYWdncmVnYXRpb24gb3B0aW9ucyBiYXNlZCBvbiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgdGltZSBpbnRlcnZhbCBmb3JtIGNvbnRyb2wuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kOlxuICAgKiAtIFJldHJpZXZlcyB0aGUgY3VycmVudCBkYXRlIHJhbmdlIGZyb20gdGhlIGZvcm0gY29udHJvbHMuXG4gICAqIC0gRGV0ZXJtaW5lcyB0aGUgY3VycmVudCB0aW1lIGludGVydmFsIGJhc2VkIG9uIHRoZSBkYXRlIHJhbmdlLlxuICAgKiAtIFNldHMgdGhlIGRpc2FibGVkIHN0YXRlIGZvciBlYWNoIGFnZ3JlZ2F0aW9uIG9wdGlvbiBiYXNlZCBvbiBwcmVkZWZpbmVkIGNvbmRpdGlvbnMuXG4gICAqXG4gICAqIFRoZSBkaXNhYmxlZCBzdGF0ZSBpcyBzdG9yZWQgaW4gdGhlIGBkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9uc2Agb2JqZWN0LFxuICAgKiB3aGVyZSB0aGUga2V5IGlzIHRoZSBhZ2dyZWdhdGlvbiB2YWx1ZSBhbmQgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG9wdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAqXG4gICAqIFRoZSBgZGlzYWJsZWRDb25kaXRpb25zYCBvYmplY3QgZGVmaW5lcyB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBlYWNoIGFnZ3JlZ2F0aW9uIG9wdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRlRnJvbSAtIFRoZSBzdGFydGluZyBkYXRlIG9mIHRoZSByYW5nZS5cbiAgICogQHBhcmFtIGRhdGVUbyAtIFRoZSBlbmRpbmcgZGF0ZSBvZiB0aGUgcmFuZ2UuXG4gICAqIEBwYXJhbSBhZ2dyZWdhdGlvblZhbHVlc0FyciAtIEFuIGFycmF5IG9mIGFnZ3JlZ2F0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiBlYWNoIGFnZ3JlZ2F0aW9uIG9wdGlvbi5cbiAgICovXG4gIC8vIFRPRE8gc2ltaWxhciBtZXRob2QgaXMgaW4gZGF0YXBvaW50cyBleHBvcnQgY29tcG9uZW50LiBDb25zaWRlciBtb3ZpbmcgaXQgdG8gYSBzaGFyZWQgc2VydmljZSB3aGVuIERQVCB3aWxsIGJlIGludGVncmF0aW5nIHdpdGggTVRNLTU5Njg5LlxuICAvLyBJbnRlZ3JhdGlvbiB0YXNrOiBNVE0tNjAyMjFcbiAgLy8gdGVzdHMgYXJlIGFscmVhZHkgYWRkZWQgaW4gTVRNLTYwMjE3XG4gIHVwZGF0ZURpc2FibGVkU3RhdGVPZkFnZ3JlZ2F0aW9uT3B0aW9uRW50cmllcyhcbiAgICBkYXRlRnJvbTogc3RyaW5nLFxuICAgIGRhdGVUbzogc3RyaW5nLFxuICAgIGFnZ3JlZ2F0aW9uVmFsdWVzQXJyOiByZWFkb25seSBBZ2dyZWdhdGlvbk9wdGlvbltdXG4gICk6IEFnZ3JlZ2F0aW9uT3B0aW9uU3RhdHVzIHtcbiAgICBjb25zdCBjdXJyZW50SW50ZXJ2YWwgPSB0aGlzLmRldGVybWluZUludGVydmFsKGRhdGVGcm9tLCBkYXRlVG8pO1xuXG4gICAgY29uc3QgZGlzYWJsZWRDb25kaXRpb25zID0ge1xuICAgICAgW0FHR1JFR0FUSU9OX1ZBTFVFUy5kYWlseV06IFtcbiAgICAgICAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMubWludXRlcyxcbiAgICAgICAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuaG91cnMsXG4gICAgICAgIFRJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLmRheXNcbiAgICAgIF0sXG4gICAgICBbQUdHUkVHQVRJT05fVkFMVUVTLmhvdXJseV06IFtcbiAgICAgICAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMubWludXRlcyxcbiAgICAgICAgVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuaG91cnNcbiAgICAgIF0sXG4gICAgICBbQUdHUkVHQVRJT05fVkFMVUVTLm1pbnV0ZWx5XTogW1RJTUVfUkFOR0VfSU5URVJWQUxfVU5JVFNfVkFMVUVTLm1pbnV0ZXNdXG4gICAgfTtcblxuICAgIGNvbnN0IGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGFnZ3JlZ2F0aW9uVmFsdWUgb2YgYWdncmVnYXRpb25WYWx1ZXNBcnIpIHtcbiAgICAgIGRpc2FibGVkQWdncmVnYXRpb25PcHRpb25zW2FnZ3JlZ2F0aW9uVmFsdWVdID1cbiAgICAgICAgZGlzYWJsZWRDb25kaXRpb25zW2FnZ3JlZ2F0aW9uVmFsdWVdPy5pbmNsdWRlcyhjdXJyZW50SW50ZXJ2YWwpID8/IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBkaXNhYmxlZEFnZ3JlZ2F0aW9uT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBuZXcgYWdncmVnYXRpb24gdmFsdWUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUgYW5kIGRpc2FibGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEdvYWwgaXMgdG8gc3dpdGNoIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBhZ2dyZWdhdGlvbiBvcHRpb24gaWYgdGhlIGN1cnJlbnQgb25lIGlzIGRpc2FibGVkLlxuICAgKiAtIElmIHRoZSBjdXJyZW50IG9wdGlvbiBpcyBkaXNhYmxlZCwgc2V0cyB0aGUgY29udHJvbCB0byB0aGUgZmlyc3QgYXZhaWxhYmxlIChub24tZGlzYWJsZWQpIG9wdGlvbiBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIG9yZGVyOlxuICAgKiAgIC0gSWYgdGhlIGN1cnJlbnQgdmFsdWUgaXMgYERBSUxZYCwgaXQgc3dpdGNoZXMgdG8gYEhPVVJMWWAgaWYgaXQncyBub3QgZGlzYWJsZWQsIG90aGVyd2lzZSB0byBgTUlOVVRFTFlgIGlmIGBIT1VSTFlgIGlzIGFsc28gZGlzYWJsZWQuXG4gICAqICAgLSBJZiB0aGUgY3VycmVudCB2YWx1ZSBpcyBgSE9VUkxZYCwgaXQgc3dpdGNoZXMgdG8gYE1JTlVURUxZYCBpZiBpdCdzIG5vdCBkaXNhYmxlZC5cbiAgICogICAtIElmIGFsbCBvcHRpb25zIGFyZSBkaXNhYmxlZCwgaXQgc2V0cyB0aGUgdmFsdWUgdG8gYE5PTkVgLlxuICAgKlxuICAgKiBAcGFyYW0gY3VycmVudFZhbHVlIC0gVGhlIGN1cnJlbnQgYWdncmVnYXRpb24gb3B0aW9uLlxuICAgKiBAcGFyYW0gZGlzYWJsZWRPcHRpb25zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGlzYWJsZWQgb3B0aW9ucy5cbiAgICogQHJldHVybnMgVGhlIG5ldyBhZ2dyZWdhdGlvbiBvcHRpb24uXG4gICAqL1xuICBkZXRlcm1pbmVOZXdBZ2dyZWdhdGlvblZhbHVlKFxuICAgIGN1cnJlbnRWYWx1ZTogQWdncmVnYXRpb25PcHRpb24sXG4gICAgZGlzYWJsZWRPcHRpb25zOiBBZ2dyZWdhdGlvbk9wdGlvblN0YXR1c1xuICApOiBBZ2dyZWdhdGlvbk9wdGlvbiB7XG4gICAgY29uc3QgeyBkYWlseSwgaG91cmx5LCBtaW51dGVseSwgbm9uZSB9ID0gQUdHUkVHQVRJT05fVkFMVUVTO1xuXG4gICAgaWYgKCFkaXNhYmxlZE9wdGlvbnNbY3VycmVudFZhbHVlXSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTsgLy8gUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIGlmIGl0J3Mgbm90IGRpc2FibGVkXG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZSA9PT0gZGFpbHkpIHtcbiAgICAgIHJldHVybiAhZGlzYWJsZWRPcHRpb25zW2hvdXJseV0gPyBob3VybHkgOiAhZGlzYWJsZWRPcHRpb25zW21pbnV0ZWx5XSA/IG1pbnV0ZWx5IDogbm9uZTtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudFZhbHVlID09PSBob3VybHkpIHtcbiAgICAgIHJldHVybiAhZGlzYWJsZWRPcHRpb25zW21pbnV0ZWx5XSA/IG1pbnV0ZWx5IDogbm9uZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9uZTsgLy8gRmFsbGJhY2sgdG8gJ25vbmUnIGlmIGFsbCBlbHNlIGZhaWxzXG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgYWdncmVnYXRpb24gdmFsdWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGludGVydmFsLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJ2YWwgLSBUaGUgdGltZSByYW5nZSBpbnRlcnZhbC5cbiAgICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgYWdncmVnYXRpb24gdmFsdWUuXG4gICAqL1xuICBkZXRlcm1pbmVBZ2dyZWdhdGlvblZhbHVlKGludGVydmFsOiBUaW1lUmFuZ2VJbnRlcnZhbCk6IEFnZ3JlZ2F0aW9uT3B0aW9uIHtcbiAgICBjb25zdCBhZ2dyZWdhdGlvbk1hcCA9IHtcbiAgICAgIFtUSU1FX1JBTkdFX0lOVEVSVkFMX1VOSVRTX1ZBTFVFUy5taW51dGVzXTogQUdHUkVHQVRJT05fVkFMVUVTLm5vbmUsXG4gICAgICBbVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuaG91cnNdOiBBR0dSRUdBVElPTl9WQUxVRVMubWludXRlbHksXG4gICAgICBbVElNRV9SQU5HRV9JTlRFUlZBTF9VTklUU19WQUxVRVMuZGF5c106IEFHR1JFR0FUSU9OX1ZBTFVFUy5ob3VybHlcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFnZ3JlZ2F0aW9uTWFwW2ludGVydmFsXSB8fCBBR0dSRUdBVElPTl9WQUxVRVMuZGFpbHk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,191 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { aggregationType as AggregationTypeEnum } from '@c8y/client';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * A pipe that adjusts the aggregated time range based on the aggregation type.
6
+ *
7
+ * ```html
8
+ * '9:00' | adjustAggregatedTimeRange: config.aggregation (e.g.:HOURLY)
9
+ * ```
10
+ * The output will be '9:00-10:00'.
11
+ */
12
+ export class AdjustAggregatedTimeRangePipe {
13
+ /**
14
+ * Transforms the input time based on the aggregation type.
15
+ * @param inputTime The input time string.
16
+ * @param aggregationType The type of aggregation (optional).
17
+ * @returns The transformed time string.
18
+ */
19
+ transform(inputTime, aggregationType) {
20
+ if (!aggregationType) {
21
+ return inputTime;
22
+ }
23
+ if (aggregationType === AggregationTypeEnum.DAILY) {
24
+ return '';
25
+ }
26
+ const date = this.createDateFromInput(inputTime);
27
+ const isTwelveHoursFormat = this.isTwelveHoursFormat(inputTime);
28
+ switch (aggregationType) {
29
+ case AggregationTypeEnum.HOURLY:
30
+ return this.getHourlyTimeRange(date, isTwelveHoursFormat);
31
+ case AggregationTypeEnum.MINUTELY:
32
+ return this.getMinutelyTimeRange(date, isTwelveHoursFormat);
33
+ default:
34
+ throw new Error('Unsupported aggregation type');
35
+ }
36
+ }
37
+ /**
38
+ * Creates a date object from the input time string.
39
+ * @param inputTime The input time string.
40
+ * @returns The created Date object.
41
+ */
42
+ createDateFromInput(inputTime) {
43
+ const defaultDate = '1970-01-01 ';
44
+ const isPM = /PM/i.test(inputTime);
45
+ const cleanedTime = inputTime.replace(/AM|PM/i, '').trim();
46
+ this.validateTimeFormat(cleanedTime, inputTime);
47
+ const dateTimeString = `${defaultDate}${cleanedTime}`;
48
+ const date = new Date(dateTimeString);
49
+ if (isNaN(date.getTime())) {
50
+ throw new Error('Invalid input time');
51
+ }
52
+ return this.adjustForPMTime(date, isPM);
53
+ }
54
+ /**
55
+ * Validates if the time string matches the required format and has valid values.
56
+ * @param time The time string to validate.
57
+ * @param originalInput The original input string (including AM/PM if present).
58
+ * @throws Error if the time format is invalid or values are out of range.
59
+ */
60
+ validateTimeFormat(time, originalInput) {
61
+ const parts = time.split(':');
62
+ this.validateTimeParts(parts);
63
+ const [hoursStr, minutesStr, secondsStr] = parts;
64
+ this.validateTimeDigits(hoursStr, minutesStr, secondsStr);
65
+ const { hours, minutes, seconds } = this.parseTimeComponents(hoursStr, minutesStr, secondsStr);
66
+ this.validateTimeRanges(hours, minutes, seconds);
67
+ this.validateTimeFormat24Hour(hours, originalInput);
68
+ }
69
+ validateTimeParts(parts) {
70
+ if (parts.length < 2 || parts.length > 3) {
71
+ throw new Error('Invalid input time');
72
+ }
73
+ }
74
+ validateTimeDigits(hoursStr, minutesStr, secondsStr) {
75
+ if (!this.isValidNumberString(hoursStr) ||
76
+ !this.isValidNumberString(minutesStr) ||
77
+ (secondsStr !== undefined && !this.isValidNumberString(secondsStr))) {
78
+ throw new Error('Invalid input time');
79
+ }
80
+ }
81
+ parseTimeComponents(hoursStr, minutesStr, secondsStr) {
82
+ return {
83
+ hours: Number(hoursStr),
84
+ minutes: Number(minutesStr),
85
+ seconds: secondsStr ? Number(secondsStr) : 0
86
+ };
87
+ }
88
+ validateTimeRanges(hours, minutes, seconds) {
89
+ if (hours > 23 || hours < 0 || minutes > 59 || minutes < 0 || seconds > 59 || seconds < 0) {
90
+ throw new Error('Invalid input time');
91
+ }
92
+ }
93
+ validateTimeFormat24Hour(hours, originalInput) {
94
+ if (hours > 12 && this.hasAmPm(originalInput)) {
95
+ throw new Error('Invalid input time');
96
+ }
97
+ }
98
+ /**
99
+ * Checks if string contains only digits and is 1-2 characters long.
100
+ * @param value String to check
101
+ * @returns boolean indicating if string is valid
102
+ */
103
+ isValidNumberString(value) {
104
+ return (value.length > 0 &&
105
+ value.length <= 2 &&
106
+ value.split('').every(char => char >= '0' && char <= '9'));
107
+ }
108
+ /**
109
+ * Checks if the input time has AM/PM markers.
110
+ * @param input The input time string to check.
111
+ * @returns boolean indicating if the input contains AM/PM.
112
+ */
113
+ hasAmPm(input) {
114
+ return /AM|PM/i.test(input);
115
+ }
116
+ /**
117
+ * Adjusts the date for PM times by adding 12 hours when necessary.
118
+ * @param date The date object to adjust.
119
+ * @param isPM Boolean indicating if the time is PM.
120
+ * @returns The adjusted Date object.
121
+ */
122
+ adjustForPMTime(date, isPM) {
123
+ const hours = date.getHours();
124
+ if (isPM && hours < 12) {
125
+ date.setHours(hours + 12);
126
+ }
127
+ else if (!isPM && hours === 12) {
128
+ date.setHours(0);
129
+ }
130
+ return date;
131
+ }
132
+ /**
133
+ * Checks if the input time is in twelve hours format.
134
+ * @param inputTime The input time string.
135
+ * @returns True if the input time is in twelve hours format, false otherwise.
136
+ */
137
+ isTwelveHoursFormat(inputTime) {
138
+ return /AM|PM/i.test(inputTime);
139
+ }
140
+ /**
141
+ * Gets the hourly time range for the given date.
142
+ * @param date The date object.
143
+ * @param twelveHoursFormat Indicates whether to use twelve hours format.
144
+ * @returns The hourly time range string.
145
+ */
146
+ getHourlyTimeRange(date, twelveHoursFormat) {
147
+ const nextHour = new Date(date.getTime());
148
+ nextHour.setHours(date.getHours() + 1);
149
+ return `${this.formatTime(date, twelveHoursFormat, true)}-${this.formatTime(nextHour, twelveHoursFormat, true)}`;
150
+ }
151
+ /**
152
+ * Gets the minutely time range for the given date.
153
+ * @param date The date object.
154
+ * @param twelveHoursFormat Indicates whether to use twelve hours format.
155
+ * @returns The minutely time range string.
156
+ */
157
+ getMinutelyTimeRange(date, twelveHoursFormat) {
158
+ const nextMinute = new Date(date.getTime());
159
+ nextMinute.setMinutes(date.getMinutes() + 1);
160
+ return `${this.formatTime(date, twelveHoursFormat, false)}-${this.formatTime(nextMinute, twelveHoursFormat, false)}`;
161
+ }
162
+ /**
163
+ * Formats the given date into a time string.
164
+ * @param date The date to format.
165
+ * @param usePeriod Indicates whether to include the period (AM/PM) in the formatted time.
166
+ * @param useHourOnly Indicates whether to include only the hour part in the formatted time.
167
+ * @returns The formatted time string.
168
+ */
169
+ formatTime(date, usePeriod, useHourOnly) {
170
+ const hours = date.getHours();
171
+ const minutes = date.getMinutes().toString().padStart(2, '0');
172
+ if (usePeriod) {
173
+ const period = hours >= 12 ? 'PM' : 'AM';
174
+ const formattedHours = hours % 12 === 0 ? 12 : hours % 12;
175
+ return `${formattedHours}:${useHourOnly ? '00' : minutes} ${period}`;
176
+ }
177
+ else {
178
+ return `${hours.toString().padStart(2, '0')}:${useHourOnly ? '00' : minutes}`;
179
+ }
180
+ }
181
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AdjustAggregatedTimeRangePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
182
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: AdjustAggregatedTimeRangePipe, isStandalone: true, name: "adjustAggregatedTimeRange" }); }
183
+ }
184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AdjustAggregatedTimeRangePipe, decorators: [{
185
+ type: Pipe,
186
+ args: [{
187
+ name: 'adjustAggregatedTimeRange',
188
+ standalone: true
189
+ }]
190
+ }] });
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRqdXN0LWFnZ3JlZ2F0ZWQtdGltZS1yYW5nZS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLXZpZXcvYWRqdXN0LWFnZ3JlZ2F0ZWQtdGltZS1yYW5nZS5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLElBQUksbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBR3JFOzs7Ozs7O0dBT0c7QUFLSCxNQUFNLE9BQU8sNkJBQTZCO0lBQ3hDOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLFNBQWlCLEVBQUUsZUFBbUM7UUFDOUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxJQUFJLGVBQWUsS0FBSyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFaEUsUUFBUSxlQUFlLEVBQUUsQ0FBQztZQUN4QixLQUFLLG1CQUFtQixDQUFDLE1BQU07Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1lBQzVELEtBQUssbUJBQW1CLENBQUMsUUFBUTtnQkFDL0IsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDOUQ7Z0JBQ0UsTUFBTSxJQUFJLEtBQUss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LEVBQUUsU0FBa0IsRUFBRSxXQUFvQjtRQUNyRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pDLE1BQU0sY0FBYyxHQUFHLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDMUQsT0FBTyxHQUFHLGNBQWMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQ3ZFLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoRixDQUFDO0lBQ0gsQ0FBQzs4R0FqTVUsNkJBQTZCOzRHQUE3Qiw2QkFBNkI7OzJGQUE3Qiw2QkFBNkI7a0JBSnpDLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLDJCQUEyQjtvQkFDakMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYWdncmVnYXRpb25UeXBlIGFzIEFnZ3JlZ2F0aW9uVHlwZUVudW0gfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbk9wdGlvbiB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuXG4vKipcbiAqIEEgcGlwZSB0aGF0IGFkanVzdHMgdGhlIGFnZ3JlZ2F0ZWQgdGltZSByYW5nZSBiYXNlZCBvbiB0aGUgYWdncmVnYXRpb24gdHlwZS5cbiAqXG4gKiBgYGBodG1sXG4gKiAnOTowMCcgfCBhZGp1c3RBZ2dyZWdhdGVkVGltZVJhbmdlOiBjb25maWcuYWdncmVnYXRpb24gKGUuZy46SE9VUkxZKVxuICogYGBgXG4gKiBUaGUgb3V0cHV0IHdpbGwgYmUgJzk6MDAtMTA6MDAnLlxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdhZGp1c3RBZ2dyZWdhdGVkVGltZVJhbmdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBBZGp1c3RBZ2dyZWdhdGVkVGltZVJhbmdlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgdGltZSBiYXNlZCBvbiB0aGUgYWdncmVnYXRpb24gdHlwZS5cbiAgICogQHBhcmFtIGlucHV0VGltZSBUaGUgaW5wdXQgdGltZSBzdHJpbmcuXG4gICAqIEBwYXJhbSBhZ2dyZWdhdGlvblR5cGUgVGhlIHR5cGUgb2YgYWdncmVnYXRpb24gKG9wdGlvbmFsKS5cbiAgICogQHJldHVybnMgVGhlIHRyYW5zZm9ybWVkIHRpbWUgc3RyaW5nLlxuICAgKi9cbiAgdHJhbnNmb3JtKGlucHV0VGltZTogc3RyaW5nLCBhZ2dyZWdhdGlvblR5cGU/OiBBZ2dyZWdhdGlvbk9wdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKCFhZ2dyZWdhdGlvblR5cGUpIHtcbiAgICAgIHJldHVybiBpbnB1dFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKGFnZ3JlZ2F0aW9uVHlwZSA9PT0gQWdncmVnYXRpb25UeXBlRW51bS5EQUlMWSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGUgPSB0aGlzLmNyZWF0ZURhdGVGcm9tSW5wdXQoaW5wdXRUaW1lKTtcbiAgICBjb25zdCBpc1R3ZWx2ZUhvdXJzRm9ybWF0ID0gdGhpcy5pc1R3ZWx2ZUhvdXJzRm9ybWF0KGlucHV0VGltZSk7XG5cbiAgICBzd2l0Y2ggKGFnZ3JlZ2F0aW9uVHlwZSkge1xuICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGVFbnVtLkhPVVJMWTpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SG91cmx5VGltZVJhbmdlKGRhdGUsIGlzVHdlbHZlSG91cnNGb3JtYXQpO1xuICAgICAgY2FzZSBBZ2dyZWdhdGlvblR5cGVFbnVtLk1JTlVURUxZOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNaW51dGVseVRpbWVSYW5nZShkYXRlLCBpc1R3ZWx2ZUhvdXJzRm9ybWF0KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgYWdncmVnYXRpb24gdHlwZScpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGF0ZSBvYmplY3QgZnJvbSB0aGUgaW5wdXQgdGltZSBzdHJpbmcuXG4gICAqIEBwYXJhbSBpbnB1dFRpbWUgVGhlIGlucHV0IHRpbWUgc3RyaW5nLlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBEYXRlIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRGF0ZUZyb21JbnB1dChpbnB1dFRpbWU6IHN0cmluZyk6IERhdGUge1xuICAgIGNvbnN0IGRlZmF1bHREYXRlID0gJzE5NzAtMDEtMDEgJztcbiAgICBjb25zdCBpc1BNID0gL1BNL2kudGVzdChpbnB1dFRpbWUpO1xuICAgIGNvbnN0IGNsZWFuZWRUaW1lID0gaW5wdXRUaW1lLnJlcGxhY2UoL0FNfFBNL2ksICcnKS50cmltKCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlVGltZUZvcm1hdChjbGVhbmVkVGltZSwgaW5wdXRUaW1lKTtcblxuICAgIGNvbnN0IGRhdGVUaW1lU3RyaW5nID0gYCR7ZGVmYXVsdERhdGV9JHtjbGVhbmVkVGltZX1gO1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlVGltZVN0cmluZyk7XG5cbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQgdGltZScpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkanVzdEZvclBNVGltZShkYXRlLCBpc1BNKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgaWYgdGhlIHRpbWUgc3RyaW5nIG1hdGNoZXMgdGhlIHJlcXVpcmVkIGZvcm1hdCBhbmQgaGFzIHZhbGlkIHZhbHVlcy5cbiAgICogQHBhcmFtIHRpbWUgVGhlIHRpbWUgc3RyaW5nIHRvIHZhbGlkYXRlLlxuICAgKiBAcGFyYW0gb3JpZ2luYWxJbnB1dCBUaGUgb3JpZ2luYWwgaW5wdXQgc3RyaW5nIChpbmNsdWRpbmcgQU0vUE0gaWYgcHJlc2VudCkuXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHRpbWUgZm9ybWF0IGlzIGludmFsaWQgb3IgdmFsdWVzIGFyZSBvdXQgb2YgcmFuZ2UuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlVGltZUZvcm1hdCh0aW1lOiBzdHJpbmcsIG9yaWdpbmFsSW5wdXQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHBhcnRzID0gdGltZS5zcGxpdCgnOicpO1xuICAgIHRoaXMudmFsaWRhdGVUaW1lUGFydHMocGFydHMpO1xuXG4gICAgY29uc3QgW2hvdXJzU3RyLCBtaW51dGVzU3RyLCBzZWNvbmRzU3RyXSA9IHBhcnRzO1xuICAgIHRoaXMudmFsaWRhdGVUaW1lRGlnaXRzKGhvdXJzU3RyLCBtaW51dGVzU3RyLCBzZWNvbmRzU3RyKTtcblxuICAgIGNvbnN0IHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfSA9IHRoaXMucGFyc2VUaW1lQ29tcG9uZW50cyhob3Vyc1N0ciwgbWludXRlc1N0ciwgc2Vjb25kc1N0cik7XG4gICAgdGhpcy52YWxpZGF0ZVRpbWVSYW5nZXMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgIHRoaXMudmFsaWRhdGVUaW1lRm9ybWF0MjRIb3VyKGhvdXJzLCBvcmlnaW5hbElucHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVUaW1lUGFydHMocGFydHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDIgfHwgcGFydHMubGVuZ3RoID4gMykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRpbWUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVGltZURpZ2l0cyhob3Vyc1N0cjogc3RyaW5nLCBtaW51dGVzU3RyOiBzdHJpbmcsIHNlY29uZHNTdHI/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5pc1ZhbGlkTnVtYmVyU3RyaW5nKGhvdXJzU3RyKSB8fFxuICAgICAgIXRoaXMuaXNWYWxpZE51bWJlclN0cmluZyhtaW51dGVzU3RyKSB8fFxuICAgICAgKHNlY29uZHNTdHIgIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1ZhbGlkTnVtYmVyU3RyaW5nKHNlY29uZHNTdHIpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRpbWUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVGltZUNvbXBvbmVudHMoaG91cnNTdHI6IHN0cmluZywgbWludXRlc1N0cjogc3RyaW5nLCBzZWNvbmRzU3RyPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdXJzOiBOdW1iZXIoaG91cnNTdHIpLFxuICAgICAgbWludXRlczogTnVtYmVyKG1pbnV0ZXNTdHIpLFxuICAgICAgc2Vjb25kczogc2Vjb25kc1N0ciA/IE51bWJlcihzZWNvbmRzU3RyKSA6IDBcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRpbWVSYW5nZXMoaG91cnM6IG51bWJlciwgbWludXRlczogbnVtYmVyLCBzZWNvbmRzOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoaG91cnMgPiAyMyB8fCBob3VycyA8IDAgfHwgbWludXRlcyA+IDU5IHx8IG1pbnV0ZXMgPCAwIHx8IHNlY29uZHMgPiA1OSB8fCBzZWNvbmRzIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRpbWUnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlVGltZUZvcm1hdDI0SG91cihob3VyczogbnVtYmVyLCBvcmlnaW5hbElucHV0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoaG91cnMgPiAxMiAmJiB0aGlzLmhhc0FtUG0ob3JpZ2luYWxJbnB1dCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0aW1lJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBzdHJpbmcgY29udGFpbnMgb25seSBkaWdpdHMgYW5kIGlzIDEtMiBjaGFyYWN0ZXJzIGxvbmcuXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gY2hlY2tcbiAgICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHN0cmluZyBpcyB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBpc1ZhbGlkTnVtYmVyU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdmFsdWUubGVuZ3RoID4gMCAmJlxuICAgICAgdmFsdWUubGVuZ3RoIDw9IDIgJiZcbiAgICAgIHZhbHVlLnNwbGl0KCcnKS5ldmVyeShjaGFyID0+IGNoYXIgPj0gJzAnICYmIGNoYXIgPD0gJzknKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBpbnB1dCB0aW1lIGhhcyBBTS9QTSBtYXJrZXJzLlxuICAgKiBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHRpbWUgc3RyaW5nIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGlucHV0IGNvbnRhaW5zIEFNL1BNLlxuICAgKi9cbiAgcHJpdmF0ZSBoYXNBbVBtKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL0FNfFBNL2kudGVzdChpbnB1dCk7XG4gIH1cblxuICAvKipcbiAgICogQWRqdXN0cyB0aGUgZGF0ZSBmb3IgUE0gdGltZXMgYnkgYWRkaW5nIDEyIGhvdXJzIHdoZW4gbmVjZXNzYXJ5LlxuICAgKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSBvYmplY3QgdG8gYWRqdXN0LlxuICAgKiBAcGFyYW0gaXNQTSBCb29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRpbWUgaXMgUE0uXG4gICAqIEByZXR1cm5zIFRoZSBhZGp1c3RlZCBEYXRlIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgYWRqdXN0Rm9yUE1UaW1lKGRhdGU6IERhdGUsIGlzUE06IGJvb2xlYW4pOiBEYXRlIHtcbiAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTtcbiAgICBpZiAoaXNQTSAmJiBob3VycyA8IDEyKSB7XG4gICAgICBkYXRlLnNldEhvdXJzKGhvdXJzICsgMTIpO1xuICAgIH0gZWxzZSBpZiAoIWlzUE0gJiYgaG91cnMgPT09IDEyKSB7XG4gICAgICBkYXRlLnNldEhvdXJzKDApO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGlucHV0IHRpbWUgaXMgaW4gdHdlbHZlIGhvdXJzIGZvcm1hdC5cbiAgICogQHBhcmFtIGlucHV0VGltZSBUaGUgaW5wdXQgdGltZSBzdHJpbmcuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGlucHV0IHRpbWUgaXMgaW4gdHdlbHZlIGhvdXJzIGZvcm1hdCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1R3ZWx2ZUhvdXJzRm9ybWF0KGlucHV0VGltZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9BTXxQTS9pLnRlc3QoaW5wdXRUaW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBob3VybHkgdGltZSByYW5nZSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gICAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIG9iamVjdC5cbiAgICogQHBhcmFtIHR3ZWx2ZUhvdXJzRm9ybWF0IEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSB0d2VsdmUgaG91cnMgZm9ybWF0LlxuICAgKiBAcmV0dXJucyBUaGUgaG91cmx5IHRpbWUgcmFuZ2Ugc3RyaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIb3VybHlUaW1lUmFuZ2UoZGF0ZTogRGF0ZSwgdHdlbHZlSG91cnNGb3JtYXQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IG5leHRIb3VyID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgIG5leHRIb3VyLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIDEpO1xuICAgIHJldHVybiBgJHt0aGlzLmZvcm1hdFRpbWUoZGF0ZSwgdHdlbHZlSG91cnNGb3JtYXQsIHRydWUpfS0ke3RoaXMuZm9ybWF0VGltZShuZXh0SG91ciwgdHdlbHZlSG91cnNGb3JtYXQsIHRydWUpfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWludXRlbHkgdGltZSByYW5nZSBmb3IgdGhlIGdpdmVuIGRhdGUuXG4gICAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIG9iamVjdC5cbiAgICogQHBhcmFtIHR3ZWx2ZUhvdXJzRm9ybWF0IEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSB0d2VsdmUgaG91cnMgZm9ybWF0LlxuICAgKiBAcmV0dXJucyBUaGUgbWludXRlbHkgdGltZSByYW5nZSBzdHJpbmcuXG4gICAqL1xuICBwcml2YXRlIGdldE1pbnV0ZWx5VGltZVJhbmdlKGRhdGU6IERhdGUsIHR3ZWx2ZUhvdXJzRm9ybWF0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBuZXh0TWludXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgIG5leHRNaW51dGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICAgIHJldHVybiBgJHt0aGlzLmZvcm1hdFRpbWUoZGF0ZSwgdHdlbHZlSG91cnNGb3JtYXQsIGZhbHNlKX0tJHt0aGlzLmZvcm1hdFRpbWUobmV4dE1pbnV0ZSwgdHdlbHZlSG91cnNGb3JtYXQsIGZhbHNlKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgdGhlIGdpdmVuIGRhdGUgaW50byBhIHRpbWUgc3RyaW5nLlxuICAgKiBAcGFyYW0gZGF0ZSBUaGUgZGF0ZSB0byBmb3JtYXQuXG4gICAqIEBwYXJhbSB1c2VQZXJpb2QgSW5kaWNhdGVzIHdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgcGVyaW9kIChBTS9QTSkgaW4gdGhlIGZvcm1hdHRlZCB0aW1lLlxuICAgKiBAcGFyYW0gdXNlSG91ck9ubHkgSW5kaWNhdGVzIHdoZXRoZXIgdG8gaW5jbHVkZSBvbmx5IHRoZSBob3VyIHBhcnQgaW4gdGhlIGZvcm1hdHRlZCB0aW1lLlxuICAgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHRpbWUgc3RyaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRUaW1lKGRhdGU6IERhdGUsIHVzZVBlcmlvZDogYm9vbGVhbiwgdXNlSG91ck9ubHk6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgaWYgKHVzZVBlcmlvZCkge1xuICAgICAgY29uc3QgcGVyaW9kID0gaG91cnMgPj0gMTIgPyAnUE0nIDogJ0FNJztcbiAgICAgIGNvbnN0IGZvcm1hdHRlZEhvdXJzID0gaG91cnMgJSAxMiA9PT0gMCA/IDEyIDogaG91cnMgJSAxMjtcbiAgICAgIHJldHVybiBgJHtmb3JtYXR0ZWRIb3Vyc306JHt1c2VIb3VyT25seSA/ICcwMCcgOiBtaW51dGVzfSAke3BlcmlvZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7aG91cnMudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke3VzZUhvdXJPbmx5ID8gJzAwJyA6IG1pbnV0ZXN9YDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,36 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Applies CSS classes based on the value's range.
5
+ */
6
+ export class ApplyRangeClassPipe {
7
+ /**
8
+ * Transforms the input value based on the specified ranges.
9
+ *
10
+ * @param value - Initial value used to determine the CSS class.
11
+ * @param ranges - An object containing the min and max range values for yellow and red colors.
12
+ * @returns The CSS class to be applied.
13
+ */
14
+ transform(value, ranges) {
15
+ if (value == null) {
16
+ return;
17
+ }
18
+ if (value >= ranges.yellowRangeMin && value < ranges.yellowRangeMax) {
19
+ return 'text-warning';
20
+ }
21
+ else if (value >= ranges.redRangeMin && value <= ranges.redRangeMax) {
22
+ return 'text-danger';
23
+ }
24
+ return 'default';
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplyRangeClassPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
27
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: ApplyRangeClassPipe, isStandalone: true, name: "applyRangeClass" }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ApplyRangeClassPipe, decorators: [{
30
+ type: Pipe,
31
+ args: [{
32
+ name: 'applyRangeClass',
33
+ standalone: true
34
+ }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktcmFuZ2UtY2xhc3MucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3dpZGdldHMvaW1wbGVtZW50YXRpb25zL2RhdGFwb2ludHMtdGFibGUvZGF0YXBvaW50cy10YWJsZS12aWV3L2FwcGx5LXJhbmdlLWNsYXNzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBR3BEOztHQUVHO0FBS0gsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qjs7Ozs7O09BTUc7SUFDSCxTQUFTLENBQUMsS0FBYSxFQUFFLE1BQTRCO1FBQ25ELElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BFLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEUsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7OEdBbkJVLG1CQUFtQjs0R0FBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUovQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxpQkFBaUI7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbG9yUmFuZ2VCb3VuZGFyaWVzIH0gZnJvbSAnLi4vZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwnO1xuXG4vKipcbiAqIEFwcGxpZXMgQ1NTIGNsYXNzZXMgYmFzZWQgb24gdGhlIHZhbHVlJ3MgcmFuZ2UuXG4gKi9cbkBQaXBlKHtcbiAgbmFtZTogJ2FwcGx5UmFuZ2VDbGFzcycsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQXBwbHlSYW5nZUNsYXNzUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgaW5wdXQgdmFsdWUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEluaXRpYWwgdmFsdWUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIENTUyBjbGFzcy5cbiAgICogQHBhcmFtIHJhbmdlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBtaW4gYW5kIG1heCByYW5nZSB2YWx1ZXMgZm9yIHllbGxvdyBhbmQgcmVkIGNvbG9ycy5cbiAgICogQHJldHVybnMgVGhlIENTUyBjbGFzcyB0byBiZSBhcHBsaWVkLlxuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBudW1iZXIsIHJhbmdlczogQ29sb3JSYW5nZUJvdW5kYXJpZXMpOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID49IHJhbmdlcy55ZWxsb3dSYW5nZU1pbiAmJiB2YWx1ZSA8IHJhbmdlcy55ZWxsb3dSYW5nZU1heCkge1xuICAgICAgcmV0dXJuICd0ZXh0LXdhcm5pbmcnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gcmFuZ2VzLnJlZFJhbmdlTWluICYmIHZhbHVlIDw9IHJhbmdlcy5yZWRSYW5nZU1heCkge1xuICAgICAgcmV0dXJuICd0ZXh0LWRhbmdlcic7XG4gICAgfVxuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,45 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ import { RENDER_TYPES_LABELS } from '../datapoints-table-widget.model';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@ngx-translate/core";
6
+ /**
7
+ * Creates a column header title message.
8
+ *
9
+ * ```html
10
+ * title="{{ header | columnTitle }}"
11
+ * ```
12
+ * The output will be e.g.: 'c8y_Temperature → T [T] (Area)'.
13
+ */
14
+ export class ColumnTitlePipe {
15
+ constructor(translateService) {
16
+ this.translateService = translateService;
17
+ }
18
+ /**
19
+ * Transforms the column header into a formatted string with label and optionally unit and render type.
20
+ *
21
+ * @param columnHeader - The column header object.
22
+ * @returns The formatted string with label, unit, and render type.
23
+ */
24
+ transform(columnHeader) {
25
+ const label = columnHeader.label.trim();
26
+ const unit = columnHeader.unit ? `[${columnHeader.unit.trim()}]` : '';
27
+ const renderType = columnHeader.renderType
28
+ ? this.translateService.instant(RENDER_TYPES_LABELS[columnHeader.renderType])
29
+ : '';
30
+ if (!renderType) {
31
+ return `${label} ${unit}`.trim();
32
+ }
33
+ return `${label} ${unit} (${renderType})`.trim();
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ColumnTitlePipe, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
36
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: ColumnTitlePipe, isStandalone: true, name: "columnTitle" }); }
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ColumnTitlePipe, decorators: [{
39
+ type: Pipe,
40
+ args: [{
41
+ name: 'columnTitle',
42
+ standalone: true
43
+ }]
44
+ }], ctorParameters: () => [{ type: i1.TranslateService }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXRpdGxlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi93aWRnZXRzL2ltcGxlbWVudGF0aW9ucy9kYXRhcG9pbnRzLXRhYmxlL2RhdGFwb2ludHMtdGFibGUtdmlldy9jb2x1bW4tdGl0bGUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQXFCLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7OztBQUUxRjs7Ozs7OztHQU9HO0FBS0gsTUFBTSxPQUFPLGVBQWU7SUFDMUIsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRTFEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFDLFlBQStCO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEMsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVTtZQUN4QyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDN0UsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixPQUFPLEdBQUcsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLEdBQUcsS0FBSyxJQUFJLElBQUksS0FBSyxVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuRCxDQUFDOzhHQXJCVSxlQUFlOzRHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBSjNCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGFBQWE7b0JBQ25CLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uSGVhZGVyLCBSRU5ERVJfVFlQRVNfTEFCRUxTIH0gZnJvbSAnLi4vZGF0YXBvaW50cy10YWJsZS13aWRnZXQubW9kZWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb2x1bW4gaGVhZGVyIHRpdGxlIG1lc3NhZ2UuXG4gKlxuICogYGBgaHRtbFxuICogdGl0bGU9XCJ7eyBoZWFkZXIgfCBjb2x1bW5UaXRsZSB9fVwiXG4gKiBgYGBcbiAqIFRoZSBvdXRwdXQgd2lsbCBiZSBlLmcuOiAnYzh5X1RlbXBlcmF0dXJlIOKGkiBUIFtUXSAoQXJlYSknLlxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdjb2x1bW5UaXRsZScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgQ29sdW1uVGl0bGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cblxuICAvKipcbiAgICogVHJhbnNmb3JtcyB0aGUgY29sdW1uIGhlYWRlciBpbnRvIGEgZm9ybWF0dGVkIHN0cmluZyB3aXRoIGxhYmVsIGFuZCBvcHRpb25hbGx5IHVuaXQgYW5kIHJlbmRlciB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gY29sdW1uSGVhZGVyIC0gVGhlIGNvbHVtbiBoZWFkZXIgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIHN0cmluZyB3aXRoIGxhYmVsLCB1bml0LCBhbmQgcmVuZGVyIHR5cGUuXG4gICAqL1xuICB0cmFuc2Zvcm0oY29sdW1uSGVhZGVyOiBUYWJsZUNvbHVtbkhlYWRlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbGFiZWwgPSBjb2x1bW5IZWFkZXIubGFiZWwudHJpbSgpO1xuICAgIGNvbnN0IHVuaXQgPSBjb2x1bW5IZWFkZXIudW5pdCA/IGBbJHtjb2x1bW5IZWFkZXIudW5pdC50cmltKCl9XWAgOiAnJztcbiAgICBjb25zdCByZW5kZXJUeXBlID0gY29sdW1uSGVhZGVyLnJlbmRlclR5cGVcbiAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoUkVOREVSX1RZUEVTX0xBQkVMU1tjb2x1bW5IZWFkZXIucmVuZGVyVHlwZV0pXG4gICAgICA6ICcnO1xuXG4gICAgaWYgKCFyZW5kZXJUeXBlKSB7XG4gICAgICByZXR1cm4gYCR7bGFiZWx9ICR7dW5pdH1gLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7bGFiZWx9ICR7dW5pdH0gKCR7cmVuZGVyVHlwZX0pYC50cmltKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,116 @@
1
+ import { ChangeDetectorRef, Component, EventEmitter, Injector, Input, Output, ViewChild } from '@angular/core';
2
+ import { CommonModule, CountdownIntervalComponent, CountdownIntervalModule, IntervalBasedReload, ListGroupModule, gettext } from '@c8y/ngx-components';
3
+ import { TranslateService } from '@ngx-translate/core';
4
+ import { TooltipModule } from 'ngx-bootstrap/tooltip';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@ngx-translate/core";
7
+ import * as i2 from "@c8y/ngx-components";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "ngx-bootstrap/tooltip";
10
+ export class DatapointsReloadComponent extends IntervalBasedReload {
11
+ constructor(cdRef, injector, translateService) {
12
+ super();
13
+ this.cdRef = cdRef;
14
+ this.injector = injector;
15
+ this.translateService = translateService;
16
+ /**
17
+ * @inheritdoc
18
+ */
19
+ this.onCountdownEnded = new EventEmitter();
20
+ /**
21
+ * @inheritdoc
22
+ */
23
+ this.manuallyDisabledCountdown = false;
24
+ }
25
+ ngOnChanges(changes) {
26
+ if (this.isDisabled && this.isAutoRefreshEnabled) {
27
+ this.isIntervalRefreshToggleOn = false;
28
+ this.disableCountdown();
29
+ return;
30
+ }
31
+ if (this.isExportModalOpen && this.canDisableCountdownWhenModalIsOpen()) {
32
+ this.isIntervalRefreshToggleOn = !this.isIntervalRefreshToggleOn;
33
+ this.disableCountdown();
34
+ }
35
+ else {
36
+ if (this.canStartCountdown(changes)) {
37
+ this.isIntervalRefreshToggleOn = true;
38
+ this.startCountdown(this.injector);
39
+ }
40
+ if (this.canHandleScrolling()) {
41
+ this.handleScrolling();
42
+ }
43
+ }
44
+ }
45
+ /**
46
+ * @inheritdoc
47
+ */
48
+ countdownEnded() {
49
+ /**
50
+ * @inheritdoc
51
+ */
52
+ this.autoRefreshList();
53
+ }
54
+ reload() {
55
+ /**
56
+ * @inheritdoc
57
+ */
58
+ this.autoRefreshList();
59
+ }
60
+ /**
61
+ * @inheritdoc
62
+ */
63
+ enableCountdown() {
64
+ this.hideCountdown = false;
65
+ // Prevents the countdown from getting stuck on an initial value.
66
+ this.cdRef.detectChanges();
67
+ this.startCountdown(this.injector);
68
+ }
69
+ /**
70
+ * @inheritdoc
71
+ */
72
+ updateCountdownButtonTooltipText() {
73
+ this.toggleCountdownButtonTooltipText = this.isIntervalRefreshToggleOn
74
+ ? this.translateService.instant(gettext('Disable auto refresh'))
75
+ : this.translateService.instant(gettext('Enable auto refresh'));
76
+ }
77
+ canStartCountdown(changes) {
78
+ const { isAutoRefreshEnabled, refreshInterval } = changes;
79
+ return ((isAutoRefreshEnabled || refreshInterval) &&
80
+ (this.isAutoRefreshEnabled || !!this.refreshInterval));
81
+ }
82
+ canHandleScrolling() {
83
+ return !this.manuallyDisabledCountdown && this.isAutoRefreshEnabled;
84
+ }
85
+ canDisableCountdownWhenModalIsOpen() {
86
+ return (this.isAutoRefreshEnabled &&
87
+ !!this.refreshInterval &&
88
+ !this.manuallyDisabledCountdown &&
89
+ !this.isScrolling &&
90
+ !this.hideCountdown);
91
+ }
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsReloadComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
93
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: DatapointsReloadComponent, isStandalone: true, selector: "c8y-datapoints-reload", inputs: { isAutoRefreshEnabled: "isAutoRefreshEnabled", isDisabled: "isDisabled", isLoading: "isLoading", isScrolling: "isScrolling", isExportModalOpen: "isExportModalOpen", refreshInterval: "refreshInterval" }, outputs: { onCountdownEnded: "onCountdownEnded" }, viewQueries: [{ propertyName: "countdownIntervalComponent", first: true, predicate: CountdownIntervalComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"d-flex a-i-center p-t-4 p-b-4\">\n <label\n class=\"m-b-0 m-r-8 text-label-small text-truncate flex-no-shrink\"\n title=\" {{ 'Auto refresh' | translate }}\"\n *ngIf=\"refreshInterval && isAutoRefreshEnabled\"\n >\n {{ 'Auto refresh' | translate }}\n </label>\n <div class=\"input-group\">\n <label\n class=\"toggle-countdown\"\n [class.toggle-countdown-disabled]=\"isDisabled\"\n [attr.aria-label]=\"toggleCountdownButtonTooltipText\"\n [tooltip]=\"toggleCountdownButtonTooltipText\"\n placement=\"bottom\"\n *ngIf=\"refreshInterval && isAutoRefreshEnabled\"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"500\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isIntervalRefreshToggleOn\"\n [disabled]=\"isDisabled\"\n data-cy=\"c8y-data-points-table-widget--interval-toggle-button\"\n (click)=\"onToggleCountdownButtonState($event)\"\n />\n\n <c8y-countdown-interval\n *ngIf=\"isIntervalRefreshToggleOn\"\n [countdownInterval]=\"refreshInterval\"\n (countdownEnded)=\"countdownEnded()\"\n ></c8y-countdown-interval>\n <i\n c8yIcon=\"pause\"\n *ngIf=\"!isIntervalRefreshToggleOn\"\n ></i>\n </label>\n\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Refresh' | translate\"\n [tooltip]=\"'Refresh' | translate\"\n placement=\"bottom\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"500\"\n [disabled]=\"isLoading()\"\n (click)=\"reload()\"\n data-cy=\"c8y-data-points-table-widget--reload-button\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading() }\"\n ></i>\n </button>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: CountdownIntervalModule }, { kind: "component", type: i2.CountdownIntervalComponent, selector: "c8y-countdown-interval", inputs: ["countdownInterval"], outputs: ["countdownEnded"] }, { kind: "ngmodule", type: ListGroupModule }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }] }); }
94
+ }
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: DatapointsReloadComponent, decorators: [{
96
+ type: Component,
97
+ args: [{ selector: 'c8y-datapoints-reload', standalone: true, imports: [CommonModule, CountdownIntervalModule, ListGroupModule, TooltipModule], template: "<div class=\"d-flex a-i-center p-t-4 p-b-4\">\n <label\n class=\"m-b-0 m-r-8 text-label-small text-truncate flex-no-shrink\"\n title=\" {{ 'Auto refresh' | translate }}\"\n *ngIf=\"refreshInterval && isAutoRefreshEnabled\"\n >\n {{ 'Auto refresh' | translate }}\n </label>\n <div class=\"input-group\">\n <label\n class=\"toggle-countdown\"\n [class.toggle-countdown-disabled]=\"isDisabled\"\n [attr.aria-label]=\"toggleCountdownButtonTooltipText\"\n [tooltip]=\"toggleCountdownButtonTooltipText\"\n placement=\"bottom\"\n *ngIf=\"refreshInterval && isAutoRefreshEnabled\"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"500\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isIntervalRefreshToggleOn\"\n [disabled]=\"isDisabled\"\n data-cy=\"c8y-data-points-table-widget--interval-toggle-button\"\n (click)=\"onToggleCountdownButtonState($event)\"\n />\n\n <c8y-countdown-interval\n *ngIf=\"isIntervalRefreshToggleOn\"\n [countdownInterval]=\"refreshInterval\"\n (countdownEnded)=\"countdownEnded()\"\n ></c8y-countdown-interval>\n <i\n c8yIcon=\"pause\"\n *ngIf=\"!isIntervalRefreshToggleOn\"\n ></i>\n </label>\n\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Refresh' | translate\"\n [tooltip]=\"'Refresh' | translate\"\n placement=\"bottom\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [container]=\"'body'\"\n [delay]=\"500\"\n [disabled]=\"isLoading()\"\n (click)=\"reload()\"\n data-cy=\"c8y-data-points-table-widget--reload-button\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading() }\"\n ></i>\n </button>\n </div>\n </div>\n</div>\n" }]
98
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: i1.TranslateService }], propDecorators: { countdownIntervalComponent: [{
99
+ type: ViewChild,
100
+ args: [CountdownIntervalComponent, { static: false }]
101
+ }], isAutoRefreshEnabled: [{
102
+ type: Input
103
+ }], isDisabled: [{
104
+ type: Input
105
+ }], isLoading: [{
106
+ type: Input
107
+ }], isScrolling: [{
108
+ type: Input
109
+ }], isExportModalOpen: [{
110
+ type: Input
111
+ }], refreshInterval: [{
112
+ type: Input
113
+ }], onCountdownEnded: [{
114
+ type: Output
115
+ }] } });
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50cy1yZWxvYWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLXZpZXcvZGF0YXBvaW50cy1yZWxvYWQvZGF0YXBvaW50cy1yZWxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vd2lkZ2V0cy9pbXBsZW1lbnRhdGlvbnMvZGF0YXBvaW50cy10YWJsZS9kYXRhcG9pbnRzLXRhYmxlLXZpZXcvZGF0YXBvaW50cy1yZWxvYWQvZGF0YXBvaW50cy1yZWxvYWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBRUwsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsWUFBWSxFQUNaLDBCQUEwQixFQUMxQix1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQVF0RCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsbUJBQW1CO0lBd0NoRSxZQUNVLEtBQXdCLEVBQ3hCLFFBQWtCLEVBQ2xCLGdCQUFrQztRQUUxQyxLQUFLLEVBQUUsQ0FBQztRQUpBLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXRCNUM7O1dBRUc7UUFDTyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFB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RSx1QkFBdUIsY0FFckIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLHVCQUF1QixFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUM7NElBSWhGLDBCQUEwQjtzQkFEekIsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSy9DLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBSUcsZUFBZTtzQkFBdkIsS0FBSztnQkFJSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpZ25hbCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29tbW9uTW9kdWxlLFxuICBDb3VudGRvd25JbnRlcnZhbENvbXBvbmVudCxcbiAgQ291bnRkb3duSW50ZXJ2YWxNb2R1bGUsXG4gIEludGVydmFsQmFzZWRSZWxvYWQsXG4gIExpc3RHcm91cE1vZHVsZSxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YXBvaW50cy1yZWxvYWQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YXBvaW50cy1yZWxvYWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDb3VudGRvd25JbnRlcnZhbE1vZHVsZSwgTGlzdEdyb3VwTW9kdWxlLCBUb29sdGlwTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhcG9pbnRzUmVsb2FkQ29tcG9uZW50IGV4dGVuZHMgSW50ZXJ2YWxCYXNlZFJlbG9hZCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBjb3VudGRvd25JbnRlcnZhbENvbXBvbmVudDogQ291bnRkb3duSW50ZXJ2YWxDb21wb25lbnQ7XG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgQElucHV0KCkgaXNBdXRvUmVmcmVzaEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmc6IFNpZ25hbDxib29sZWFuPjtcblxuICBASW5wdXQoKSBpc1Njcm9sbGluZzogYm9vbGVhbjtcblxuICBASW5wdXQoKSBpc0V4cG9ydE1vZGFsT3BlbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBASW5wdXQoKSByZWZyZXNoSW50ZXJ2YWw6IG51bWJlcjtcbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBAT3V0cHV0KCkgb25Db3VudGRvd25FbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBpc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uOiBib29sZWFuO1xuXG4gIHRvZ2dsZUNvdW50ZG93bkJ1dHRvblRvb2x0aXBUZXh0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgcHJvdGVjdGVkIG1hbnVhbGx5RGlzYWJsZWRDb3VudGRvd24gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBwcm90ZWN0ZWQgaGlkZUNvdW50ZG93bjogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVkICYmIHRoaXMuaXNBdXRvUmVmcmVzaEVuYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kaXNhYmxlQ291bnRkb3duKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gJiYgdGhpcy5jYW5EaXNhYmxlQ291bnRkb3duV2hlbk1vZGFsSXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuaXNJbnRlcnZhbFJlZnJlc2hUb2dnbGVPbiA9ICF0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT247XG4gICAgICB0aGlzLmRpc2FibGVDb3VudGRvd24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuY2FuU3RhcnRDb3VudGRvd24oY2hhbmdlcykpIHtcbiAgICAgICAgdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGFydENvdW50ZG93bih0aGlzLmluamVjdG9yKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2FuSGFuZGxlU2Nyb2xsaW5nKCkpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTY3JvbGxpbmcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGNvdW50ZG93bkVuZGVkKCk6IHZvaWQge1xuICAgIC8qKlxuICAgICAqIEBpbmhlcml0ZG9jXG4gICAgICovXG4gICAgdGhpcy5hdXRvUmVmcmVzaExpc3QoKTtcbiAgfVxuXG4gIHJlbG9hZCgpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBAaW5oZXJpdGRvY1xuICAgICAqL1xuICAgIHRoaXMuYXV0b1JlZnJlc2hMaXN0KCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGVuYWJsZUNvdW50ZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVDb3VudGRvd24gPSBmYWxzZTtcbiAgICAvLyBQcmV2ZW50cyB0aGUgY291bnRkb3duIGZyb20gZ2V0dGluZyBzdHVjayBvbiBhbiBpbml0aWFsIHZhbHVlLlxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc3RhcnRDb3VudGRvd24odGhpcy5pbmplY3Rvcik7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dCgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZUNvdW50ZG93bkJ1dHRvblRvb2x0aXBUZXh0ID0gdGhpcy5pc0ludGVydmFsUmVmcmVzaFRvZ2dsZU9uXG4gICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0Rpc2FibGUgYXV0byByZWZyZXNoJykpXG4gICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ0VuYWJsZSBhdXRvIHJlZnJlc2gnKSk7XG4gIH1cblxuICBwcml2YXRlIGNhblN0YXJ0Q291bnRkb3duKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGlzQXV0b1JlZnJlc2hFbmFibGVkLCByZWZyZXNoSW50ZXJ2YWwgfSA9IGNoYW5nZXM7XG4gICAgcmV0dXJuIChcbiAgICAgIChpc0F1dG9SZWZyZXNoRW5hYmxlZCB8fCByZWZyZXNoSW50ZXJ2YWwpICYmXG4gICAgICAodGhpcy5pc0F1dG9SZWZyZXNoRW5hYmxlZCB8fCAhIXRoaXMucmVmcmVzaEludGVydmFsKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNhbkhhbmRsZVNjcm9sbGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubWFudWFsbHlEaXNhYmxlZENvdW50ZG93biAmJiB0aGlzLmlzQXV0b1JlZnJlc2hFbmFibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjYW5EaXNhYmxlQ291bnRkb3duV2hlbk1vZGFsSXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzQXV0b1JlZnJlc2hFbmFibGVkICYmXG4gICAgICAhIXRoaXMucmVmcmVzaEludGVydmFsICYmXG4gICAgICAhdGhpcy5tYW51YWxseURpc2FibGVkQ291bnRkb3duICYmXG4gICAgICAhdGhpcy5pc1Njcm9sbGluZyAmJlxuICAgICAgIXRoaXMuaGlkZUNvdW50ZG93blxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlciBwLXQtNCBwLWItNFwiPlxuICA8bGFiZWxcbiAgICBjbGFzcz1cIm0tYi0wIG0tci04IHRleHQtbGFiZWwtc21hbGwgdGV4dC10cnVuY2F0ZSBmbGV4LW5vLXNocmlua1wiXG4gICAgdGl0bGU9XCIge3sgJ0F1dG8gcmVmcmVzaCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICpuZ0lmPVwicmVmcmVzaEludGVydmFsICYmIGlzQXV0b1JlZnJlc2hFbmFibGVkXCJcbiAgPlxuICAgIHt7ICdBdXRvIHJlZnJlc2gnIHwgdHJhbnNsYXRlIH19XG4gIDwvbGFiZWw+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgIDxsYWJlbFxuICAgICAgY2xhc3M9XCJ0b2dnbGUtY291bnRkb3duXCJcbiAgICAgIFtjbGFzcy50b2dnbGUtY291bnRkb3duLWRpc2FibGVkXT1cImlzRGlzYWJsZWRcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0b2dnbGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dFwiXG4gICAgICBbdG9vbHRpcF09XCJ0b2dnbGVDb3VudGRvd25CdXR0b25Ub29sdGlwVGV4dFwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgKm5nSWY9XCJyZWZyZXNoSW50ZXJ2YWwgJiYgaXNBdXRvUmVmcmVzaEVuYWJsZWRcIlxuICAgICAgW2FkYXB0aXZlUG9zaXRpb25dPVwiZmFsc2VcIlxuICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgW2RlbGF5XT1cIjUwMFwiXG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIFtjaGVja2VkXT1cImlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT25cIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlZFwiXG4gICAgICAgIGRhdGEtY3k9XCJjOHktZGF0YS1wb2ludHMtdGFibGUtd2lkZ2V0LS1pbnRlcnZhbC10b2dnbGUtYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlQ291bnRkb3duQnV0dG9uU3RhdGUoJGV2ZW50KVwiXG4gICAgICAvPlxuXG4gICAgICA8Yzh5LWNvdW50ZG93bi1pbnRlcnZhbFxuICAgICAgICAqbmdJZj1cImlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT25cIlxuICAgICAgICBbY291bnRkb3duSW50ZXJ2YWxdPVwicmVmcmVzaEludGVydmFsXCJcbiAgICAgICAgKGNvdW50ZG93bkVuZGVkKT1cImNvdW50ZG93bkVuZGVkKClcIlxuICAgICAgPjwvYzh5LWNvdW50ZG93bi1pbnRlcnZhbD5cbiAgICAgIDxpXG4gICAgICAgIGM4eUljb249XCJwYXVzZVwiXG4gICAgICAgICpuZ0lmPVwiIWlzSW50ZXJ2YWxSZWZyZXNoVG9nZ2xlT25cIlxuICAgICAgPjwvaT5cbiAgICA8L2xhYmVsPlxuXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0blwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlZnJlc2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW3Rvb2x0aXBdPVwiJ1JlZnJlc2gnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIFthZGFwdGl2ZVBvc2l0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgICBbZGVsYXldPVwiNTAwXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCJcbiAgICAgICAgKGNsaWNrKT1cInJlbG9hZCgpXCJcbiAgICAgICAgZGF0YS1jeT1cImM4eS1kYXRhLXBvaW50cy10YWJsZS13aWRnZXQtLXJlbG9hZC1idXR0b25cIlxuICAgICAgPlxuICAgICAgICA8aVxuICAgICAgICAgIGM4eUljb249XCJyZWZyZXNoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpY29uLXNwaW4nOiBpc0xvYWRpbmcoKSB9XCJcbiAgICAgICAgPjwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19