@c8y/ngx-components 1022.35.1 → 1022.44.3

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 (920) hide show
  1. package/actility-device-registration/actility-device-registration.component.d.ts.map +1 -1
  2. package/actility-device-registration/actility-device-registration.service.d.ts.map +1 -1
  3. package/alarms/alarm-details.component.d.ts.map +1 -1
  4. package/alarms/alarm-info.component.d.ts.map +1 -1
  5. package/alarms/alarm-severity-to-icon-class.pipe.d.ts +9 -0
  6. package/alarms/alarm-severity-to-icon-class.pipe.d.ts.map +1 -0
  7. package/alarms/alarms-icon.component.d.ts.map +1 -1
  8. package/alarms/alarms-interval-refresh.component.d.ts.map +1 -1
  9. package/alarms/alarms-list.component.d.ts.map +1 -1
  10. package/alarms/alarms-view.service.d.ts.map +1 -1
  11. package/alarms/alarms.component.d.ts.map +1 -1
  12. package/alarms/alarms.helper.d.ts.map +1 -1
  13. package/alarms/alarms.model.d.ts.map +1 -1
  14. package/alarms/cockpit/index.d.ts.map +1 -1
  15. package/alarms/devicemanagement/index.d.ts.map +1 -1
  16. package/alarms/index.d.ts +1 -0
  17. package/alarms/index.d.ts.map +1 -1
  18. package/asset-properties/asset-properties.model.d.ts +77 -1
  19. package/asset-properties/asset-properties.model.d.ts.map +1 -1
  20. package/asset-properties/asset-properties.service.d.ts +17 -0
  21. package/asset-properties/asset-properties.service.d.ts.map +1 -1
  22. package/asset-properties/asset-property-list/asset-property-collapse-button-title.pipe.d.ts +14 -0
  23. package/asset-properties/asset-property-list/asset-property-collapse-button-title.pipe.d.ts.map +1 -0
  24. package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts +2 -1
  25. package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts.map +1 -1
  26. package/asset-properties/asset-property-list/asset-property-list.component.d.ts +52 -13
  27. package/asset-properties/asset-property-list/asset-property-list.component.d.ts.map +1 -1
  28. package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts +7 -3
  29. package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts.map +1 -1
  30. package/asset-properties/asset-property-list/tree-data-source.d.ts +1 -0
  31. package/asset-properties/asset-property-list/tree-data-source.d.ts.map +1 -1
  32. package/asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.d.ts.map +1 -1
  33. package/asset-properties/computed-properties-config/computed-properties-config.component.d.ts +39 -0
  34. package/asset-properties/computed-properties-config/computed-properties-config.component.d.ts.map +1 -0
  35. package/asset-properties/computed-properties.service.d.ts +27 -0
  36. package/asset-properties/computed-properties.service.d.ts.map +1 -0
  37. package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts +11 -6
  38. package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts.map +1 -1
  39. package/asset-properties/custom-properties-drawer.service.d.ts +2 -1
  40. package/asset-properties/custom-properties-drawer.service.d.ts.map +1 -1
  41. package/asset-properties/index.d.ts +1 -0
  42. package/asset-properties/index.d.ts.map +1 -1
  43. package/assets-navigator/asset-node.d.ts.map +1 -1
  44. package/assets-navigator/asset-node.service.d.ts.map +1 -1
  45. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
  46. package/assets-navigator/asset-selector/asset-selector.model.d.ts +1 -2
  47. package/assets-navigator/asset-selector/asset-selector.model.d.ts.map +1 -1
  48. package/assets-navigator/asset-selector/miller-view.component.d.ts +17 -5
  49. package/assets-navigator/asset-selector/miller-view.component.d.ts.map +1 -1
  50. package/assets-navigator/asset-selector/unassigned-devices-node.d.ts.map +1 -1
  51. package/assets-navigator/load-more-node.d.ts.map +1 -1
  52. package/auth-configuration/basic-settings/login-settings.component.d.ts.map +1 -1
  53. package/auth-configuration/basic-settings/session-configuration.component.d.ts.map +1 -1
  54. package/auth-configuration/factories/navigation.factory.d.ts.map +1 -1
  55. package/auth-configuration/factories/tabs.factory.d.ts.map +1 -1
  56. package/auth-configuration/sso-configuration/sso-configuration.component.d.ts.map +1 -1
  57. package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.d.ts.map +1 -1
  58. package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
  59. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
  60. package/binary-file-download/binary-file-download.service.d.ts.map +1 -1
  61. package/bookmarks/bookmarks.component.d.ts.map +1 -1
  62. package/bookmarks/bookmarks.service.d.ts.map +1 -1
  63. package/bookmarks/edit-bookmarks/edit-bookmarks.component.d.ts.map +1 -1
  64. package/branding/dark-theme/dark-theme-tab.factory.d.ts.map +1 -1
  65. package/branding/extra-css-branding-editor/extra-css-branding-editor-tab.factory.d.ts.map +1 -1
  66. package/branding/plain-branding-editor/plain-branding-editor-tab.factory.d.ts.map +1 -1
  67. package/branding/shared/lazy/branding-form/branding-form.component.d.ts.map +1 -1
  68. package/branding/shared/lazy/branding-import-modal/branding-import-modal.component.d.ts.map +1 -1
  69. package/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.d.ts.map +1 -1
  70. package/cockpit-config/cockpit-config.guard.d.ts.map +1 -1
  71. package/cockpit-config/cockpit-configuration.component.d.ts.map +1 -1
  72. package/computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.d.ts +8 -0
  73. package/computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.d.ts.map +1 -0
  74. package/computed-asset-properties/alarm-count/alarm-count-config.component.d.ts +26 -0
  75. package/computed-asset-properties/alarm-count/alarm-count-config.component.d.ts.map +1 -0
  76. package/computed-asset-properties/alarm-count/alarm-count-today-computed-property.d.ts +8 -0
  77. package/computed-asset-properties/alarm-count/alarm-count-today-computed-property.d.ts.map +1 -0
  78. package/computed-asset-properties/alarm-count/alarm-count-value.d.ts +17 -0
  79. package/computed-asset-properties/alarm-count/alarm-count-value.d.ts.map +1 -0
  80. package/computed-asset-properties/alarm-count/alarm-count.model.d.ts +6 -0
  81. package/computed-asset-properties/alarm-count/alarm-count.model.d.ts.map +1 -0
  82. package/computed-asset-properties/c8y-ngx-components-computed-asset-properties.d.ts.map +1 -0
  83. package/computed-asset-properties/child-count/child-assets-count-computed-property.d.ts +14 -0
  84. package/computed-asset-properties/child-count/child-assets-count-computed-property.d.ts.map +1 -0
  85. package/computed-asset-properties/child-count/child-count-value.d.ts +14 -0
  86. package/computed-asset-properties/child-count/child-count-value.d.ts.map +1 -0
  87. package/computed-asset-properties/child-count/child-devices-count-computed-property.d.ts +14 -0
  88. package/computed-asset-properties/child-count/child-devices-count-computed-property.d.ts.map +1 -0
  89. package/computed-asset-properties/common/realtime-value-base.d.ts +32 -0
  90. package/computed-asset-properties/common/realtime-value-base.d.ts.map +1 -0
  91. package/computed-asset-properties/common/realtime-value-handler.d.ts +19 -0
  92. package/computed-asset-properties/common/realtime-value-handler.d.ts.map +1 -0
  93. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.d.ts +7 -0
  94. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.d.ts.map +1 -0
  95. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.d.ts +21 -0
  96. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.d.ts.map +1 -0
  97. package/computed-asset-properties/configuration-snapshot/configuration-snapshot.model.d.ts +8 -0
  98. package/computed-asset-properties/configuration-snapshot/configuration-snapshot.model.d.ts.map +1 -0
  99. package/computed-asset-properties/event-count/event-count-3-months.d.ts +8 -0
  100. package/computed-asset-properties/event-count/event-count-3-months.d.ts.map +1 -0
  101. package/computed-asset-properties/event-count/event-count-config.component.d.ts +18 -0
  102. package/computed-asset-properties/event-count/event-count-config.component.d.ts.map +1 -0
  103. package/computed-asset-properties/event-count/event-count-today.d.ts +8 -0
  104. package/computed-asset-properties/event-count/event-count-today.d.ts.map +1 -0
  105. package/computed-asset-properties/event-count/event-count-value.d.ts +17 -0
  106. package/computed-asset-properties/event-count/event-count-value.d.ts.map +1 -0
  107. package/computed-asset-properties/event-count/event-count.model.d.ts +4 -0
  108. package/computed-asset-properties/event-count/event-count.model.d.ts.map +1 -0
  109. package/computed-asset-properties/index.d.ts +3 -0
  110. package/computed-asset-properties/index.d.ts.map +1 -0
  111. package/computed-asset-properties/last-device-message/last-device-message-computed-property.d.ts +3 -0
  112. package/computed-asset-properties/last-device-message/last-device-message-computed-property.d.ts.map +1 -0
  113. package/computed-asset-properties/last-device-message/last-device-message-value.d.ts +13 -0
  114. package/computed-asset-properties/last-device-message/last-device-message-value.d.ts.map +1 -0
  115. package/computed-asset-properties/last-measurement/last-measurement-computed-property.d.ts +8 -0
  116. package/computed-asset-properties/last-measurement/last-measurement-computed-property.d.ts.map +1 -0
  117. package/computed-asset-properties/last-measurement/last-measurement-config.component.d.ts +48 -0
  118. package/computed-asset-properties/last-measurement/last-measurement-config.component.d.ts.map +1 -0
  119. package/computed-asset-properties/last-measurement/last-measurement-value.d.ts +13 -0
  120. package/computed-asset-properties/last-measurement/last-measurement-value.d.ts.map +1 -0
  121. package/computed-asset-properties/last-measurement/last-measurement.model.d.ts +28 -0
  122. package/computed-asset-properties/last-measurement/last-measurement.model.d.ts.map +1 -0
  123. package/computed-asset-properties/strategies/alarm-count-strategy.d.ts +17 -0
  124. package/computed-asset-properties/strategies/alarm-count-strategy.d.ts.map +1 -0
  125. package/computed-asset-properties/strategies/child-count-strategy.d.ts +14 -0
  126. package/computed-asset-properties/strategies/child-count-strategy.d.ts.map +1 -0
  127. package/computed-asset-properties/strategies/count-strategy-base.d.ts +12 -0
  128. package/computed-asset-properties/strategies/count-strategy-base.d.ts.map +1 -0
  129. package/computed-asset-properties/strategies/event-count-strategy.d.ts +16 -0
  130. package/computed-asset-properties/strategies/event-count-strategy.d.ts.map +1 -0
  131. package/computed-asset-properties/strategies/last-device-message-strategy.d.ts +20 -0
  132. package/computed-asset-properties/strategies/last-device-message-strategy.d.ts.map +1 -0
  133. package/computed-asset-properties/strategies/last-measurement-strategy.d.ts +16 -0
  134. package/computed-asset-properties/strategies/last-measurement-strategy.d.ts.map +1 -0
  135. package/connectivity/abstract-connectivity-node.factory.d.ts.map +1 -1
  136. package/connectivity/actility/actility-tab.factory.d.ts.map +1 -1
  137. package/connectivity/sigfox/sigfox-tab.factory.d.ts.map +1 -1
  138. package/connectivity/sim/sim.module.d.ts.map +1 -1
  139. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.component.d.ts.map +1 -1
  140. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.model.d.ts.map +1 -1
  141. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.module.d.ts.map +1 -1
  142. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  143. package/context-dashboard/context-dashboard.model.d.ts +16 -0
  144. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  145. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  146. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  147. package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
  148. package/context-dashboard/dashboard-details-tabs.factory.d.ts.map +1 -1
  149. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
  150. package/context-dashboard/dashboard-settings/dashboard-version-history.component.d.ts.map +1 -1
  151. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
  152. package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts.map +1 -1
  153. package/context-dashboard/device-info-dashboard/device-info-dashboard.module.d.ts.map +1 -1
  154. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.d.ts.map +1 -1
  155. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.d.ts.map +1 -1
  156. package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
  157. package/context-dashboard/widget-config/appearance-settings.component.d.ts.map +1 -1
  158. package/context-dashboard/widget-config.service.d.ts +11 -1
  159. package/context-dashboard/widget-config.service.d.ts.map +1 -1
  160. package/core/action/action.service.d.ts +1 -1
  161. package/core/action-bar/action-bar.service.d.ts +1 -1
  162. package/core/authentication/simplified-auth.service.d.ts +1 -1
  163. package/core/authentication/simplified-auth.service.d.ts.map +1 -1
  164. package/core/breadcrumb/breadcrumb.service.d.ts +1 -1
  165. package/core/common/extension-hooks.d.ts.map +1 -1
  166. package/core/common/options.service.d.ts +1 -1
  167. package/core/common/service-registry.service.d.ts +1 -1
  168. package/core/common/ui-state.service.d.ts +7 -7
  169. package/core/common/ui-state.service.d.ts.map +1 -1
  170. package/core/common/user-preferences/user-preferences.service.d.ts +4 -4
  171. package/core/common/user-preferences/user-preferences.service.d.ts.map +1 -1
  172. package/core/dashboard/widgets-dashboard.component.d.ts +1 -1
  173. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  174. package/core/data-grid/action-controls-extension.service.d.ts +1 -1
  175. package/core/data-grid/filter-chip/filter-mapper.factory.d.ts +1 -1
  176. package/core/date-picker/date-picker.component.d.ts.map +1 -1
  177. package/core/docs/docs.models.d.ts +1 -1
  178. package/core/docs/docs.module.d.ts +1 -1
  179. package/core/docs/help-and-support-outlet/help-and-support-outlet.module.d.ts +1 -1
  180. package/core/docs/legal-notices-outlet/legal-notices-outlet.module.d.ts +1 -1
  181. package/core/docs/support-outlet/support-outlet.component.d.ts +4 -3
  182. package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
  183. package/core/docs/support-outlet/support-outlet.module.d.ts +1 -1
  184. package/core/drawer/drawer.service.d.ts +1 -1
  185. package/core/dynamic-component/dynamic-component.model.d.ts +18 -4
  186. package/core/dynamic-component/dynamic-component.model.d.ts.map +1 -1
  187. package/core/dynamic-forms/i18n/translate.extension.d.ts.map +1 -1
  188. package/core/feedback-form/feedback-form.component.d.ts +27 -0
  189. package/core/feedback-form/feedback-form.component.d.ts.map +1 -0
  190. package/core/feedback-form/feedback-form.model.d.ts +6 -0
  191. package/core/feedback-form/feedback-form.model.d.ts.map +1 -0
  192. package/core/feedback-form/index.d.ts +2 -0
  193. package/core/feedback-form/index.d.ts.map +1 -0
  194. package/core/i18n/gettext.d.ts +4 -1
  195. package/core/i18n/gettext.d.ts.map +1 -1
  196. package/core/i18n/pattern-messages.data.d.ts +61 -0
  197. package/core/i18n/pattern-messages.data.d.ts.map +1 -1
  198. package/core/i18n/patterns-message.hook.d.ts +1 -1
  199. package/core/index.d.ts +1 -0
  200. package/core/index.d.ts.map +1 -1
  201. package/core/modal/modal.service.d.ts +0 -1
  202. package/core/modal/modal.service.d.ts.map +1 -1
  203. package/core/navigator/navigator-bottom/navigator-bottom.module.d.ts +1 -1
  204. package/core/navigator/navigator-top/navigator-top.module.d.ts +1 -1
  205. package/core/navigator/navigator.module.d.ts +1 -1
  206. package/core/navigator/navigator.service.d.ts +1 -1
  207. package/core/plugins/index.d.ts +1 -0
  208. package/core/plugins/index.d.ts.map +1 -1
  209. package/core/plugins/plugins-injection-token.d.ts +14 -0
  210. package/core/plugins/plugins-injection-token.d.ts.map +1 -0
  211. package/core/plugins/plugins-loader.service.d.ts +7 -21
  212. package/core/plugins/plugins-loader.service.d.ts.map +1 -1
  213. package/core/plugins/plugins-resolve.service.d.ts +1 -0
  214. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  215. package/core/preview-feature/preview-feature.component.d.ts.map +1 -1
  216. package/core/preview-feature/preview-feature.service.d.ts +1 -1
  217. package/core/provider-configuration/provider-configuration-hook.d.ts +1 -1
  218. package/core/query-param-handler/index.d.ts +1 -1
  219. package/core/query-param-handler/query-param-bottom-drawer.service.d.ts +1 -1
  220. package/core/query-param-handler/query-param-handler.service.d.ts +1 -1
  221. package/core/query-param-handler/query-param-modal-handler.service.d.ts +1 -1
  222. package/core/router/router.service.d.ts +1 -1
  223. package/core/search/search.service.d.ts +1 -1
  224. package/core/stepper/stepper.service.d.ts +1 -1
  225. package/core/tabs/tab.component.d.ts +2 -2
  226. package/core/tabs/tab.component.d.ts.map +1 -1
  227. package/core/tabs/tab.model.d.ts +2 -2
  228. package/core/tabs/tab.model.d.ts.map +1 -1
  229. package/core/tabs/tabs.service.d.ts +1 -1
  230. package/core/tabs/tabs.service.d.ts.map +1 -1
  231. package/core/ui-settings/ui-settings.module.d.ts +1 -1
  232. package/core/user/change-current-user-password.service.d.ts +10 -0
  233. package/core/user/change-current-user-password.service.d.ts.map +1 -0
  234. package/core/user/index.d.ts +1 -0
  235. package/core/user/index.d.ts.map +1 -1
  236. package/core/user/user-details-drawer/user-details-drawer.module.d.ts +1 -1
  237. package/core/user/user-menu.service.d.ts +1 -1
  238. package/core/user/user.module.d.ts +1 -1
  239. package/core/version/version.model.d.ts +1 -1
  240. package/core/version/version.module.d.ts +1 -1
  241. package/core/wizard/wizard.model.d.ts +1 -1
  242. package/dashboard-details-advanced-tab/advanced-tab.factory.d.ts.map +1 -1
  243. package/dashboard-details-advanced-tab/assign-widget-assets/assign-widget-asset-modal.component.d.ts.map +1 -1
  244. package/dashboard-details-advanced-tab/dashboard-json-editor/dashboard-json-editor.component.d.ts.map +1 -1
  245. package/dashboard-details-advanced-tab/dashboard-json-editor/import-export-widgets.service.d.ts.map +1 -1
  246. package/dashboard-manager/dashboard-manager-tabs.factory.d.ts.map +1 -1
  247. package/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
  248. package/dashboard-manager/devicemanagement/index.d.ts +1 -1
  249. package/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.d.ts.map +1 -1
  250. package/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.d.ts.map +1 -1
  251. package/dashboard-manager/type-dashboards-list/device-type-value.grid-column.d.ts.map +1 -1
  252. package/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
  253. package/data-grid-columns/asset-type/asset-type-grid-column.d.ts.map +1 -1
  254. package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
  255. package/datapoint-explorer/datapoint-explorer-navigation-factory.d.ts.map +1 -1
  256. package/datapoint-explorer/devicemanagement/index.d.ts +3 -0
  257. package/datapoint-explorer/devicemanagement/index.d.ts.map +1 -1
  258. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts +4 -2
  259. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -1
  260. package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts.map +1 -1
  261. package/datapoint-explorer/view/datapoint-explorer.model.d.ts +1 -0
  262. package/datapoint-explorer/view/datapoint-explorer.model.d.ts.map +1 -1
  263. package/datapoint-explorer/view/index.d.ts +3 -0
  264. package/datapoint-explorer/view/index.d.ts.map +1 -1
  265. package/datapoint-explorer/view/send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component.d.ts.map +1 -1
  266. package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts.map +1 -1
  267. package/datapoint-library/datapoint-library.module.d.ts.map +1 -1
  268. package/datapoint-library/details/datapoint-library-details.component.d.ts +1 -2
  269. package/datapoint-library/details/datapoint-library-details.component.d.ts.map +1 -1
  270. package/datapoint-library/list/datapoint-library-list.component.d.ts.map +1 -1
  271. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
  272. package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts.map +1 -1
  273. package/datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.d.ts.map +1 -1
  274. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
  275. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -1
  276. 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 -1
  277. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -1
  278. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
  279. package/default-subscriptions/default-subscriptions-navigation.factory.d.ts.map +1 -1
  280. package/default-subscriptions/default-subscriptions.component.d.ts.map +1 -1
  281. package/device-grid/columns/alarms.cell-renderer.component.d.ts.map +1 -1
  282. package/device-grid/columns/alarms.device-grid-column.d.ts.map +1 -1
  283. package/device-grid/columns/group.device-grid-column.d.ts.map +1 -1
  284. package/device-grid/columns/imei.device-grid-column.d.ts.map +1 -1
  285. package/device-grid/columns/model.device-grid-column.d.ts.map +1 -1
  286. package/device-grid/columns/name.device-grid-column.d.ts.map +1 -1
  287. package/device-grid/columns/registration-date.device-grid-column.d.ts.map +1 -1
  288. package/device-grid/columns/serial-number.device-grid-column.d.ts.map +1 -1
  289. package/device-grid/columns/status.device-grid-column.d.ts.map +1 -1
  290. package/device-grid/columns/system-id.device-grid-column.d.ts.map +1 -1
  291. package/device-grid/columns/type.device-grid-column.d.ts.map +1 -1
  292. package/device-grid/device-grid.component.d.ts.map +1 -1
  293. package/device-grid/device-grid.service.d.ts.map +1 -1
  294. package/device-list/add-smart-group.component.d.ts.map +1 -1
  295. package/device-list/device-list-navigation.factory.d.ts.map +1 -1
  296. package/device-list/devices.breadcrumb-factory.d.ts.map +1 -1
  297. package/device-map/device-map-navigation.factory.d.ts.map +1 -1
  298. package/device-profile/add-device-profile.component.d.ts.map +1 -1
  299. package/device-profile/device-profile-list.component.d.ts.map +1 -1
  300. package/device-profile/device-profile-navigation.factory.d.ts.map +1 -1
  301. package/device-profile/device-profile.component.d.ts.map +1 -1
  302. package/device-profile/device-profile.service.d.ts.map +1 -1
  303. package/device-profile/device-tab-profile/device-tab-profile.component.d.ts.map +1 -1
  304. package/device-profile/select-configuration-modal.component.d.ts.map +1 -1
  305. package/device-protocols/device-protocols.guard.d.ts.map +1 -1
  306. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -1
  307. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
  308. package/device-shell/device-shell.module.d.ts.map +1 -1
  309. package/device-shell/shared/device-shell.service.d.ts.map +1 -1
  310. package/device-shell/shell/shell.component.d.ts.map +1 -1
  311. package/diagnostics/diagnostics.module.d.ts.map +1 -1
  312. package/diagnostics/diagnostics.service.d.ts.map +1 -1
  313. package/echart/services/echarts-options.service.d.ts +2 -3
  314. package/echart/services/echarts-options.service.d.ts.map +1 -1
  315. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  316. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  317. package/ecosystem/application-plugins/apps-to-update-remotes-select.component.d.ts.map +1 -1
  318. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -1
  319. package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
  320. package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -1
  321. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
  322. package/ecosystem/application-properties/application-properties.component.d.ts.map +1 -1
  323. package/ecosystem/application-properties/subscription-modal/subscription-modal.component.d.ts.map +1 -1
  324. package/ecosystem/ecosystem-tabs.factory.d.ts.map +1 -1
  325. package/ecosystem/license-confirm/license-confirm-modal.component.d.ts.map +1 -1
  326. package/ecosystem/license-confirm/license-view.component.d.ts.map +1 -1
  327. package/ecosystem/microservices/add-microservice.component.d.ts.map +1 -1
  328. package/ecosystem/packages/add-package.component.d.ts.map +1 -1
  329. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
  330. package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
  331. package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts.map +1 -1
  332. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  333. package/ecosystem/plugin-setup-stepper/plugin-setup-stepper.module.d.ts.map +1 -1
  334. package/ecosystem/shared/add-application.component.d.ts.map +1 -1
  335. package/ecosystem/shared/application-card.component.d.ts.map +1 -1
  336. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -1
  337. package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
  338. package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
  339. package/ecosystem/shared/package-availability.service.d.ts.map +1 -1
  340. package/ecosystem/shared/package-version-select/package-version-select.component.d.ts.map +1 -1
  341. package/ecosystem/shared/upload-archive.component.d.ts.map +1 -1
  342. package/editor/editor.component.d.ts +15 -0
  343. package/editor/editor.component.d.ts.map +1 -1
  344. package/exports/index.d.ts +1 -1
  345. package/exports/index.d.ts.map +1 -1
  346. package/exports/list/exports-grid.service.d.ts.map +1 -1
  347. package/exports/list/exports-list/exports-list.component.d.ts.map +1 -1
  348. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +2 -1
  349. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
  350. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +8 -7
  351. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  352. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +2 -1
  353. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
  354. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +2 -1
  355. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
  356. package/fesm2022/c8y-ngx-components-alarms.mjs +40 -2
  357. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  358. package/fesm2022/c8y-ngx-components-asset-properties.mjs +608 -97
  359. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  360. package/fesm2022/c8y-ngx-components-asset-property-grid.component-CRnyUbyz.mjs.map +1 -1
  361. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +70 -23
  362. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  363. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -1
  364. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  365. package/fesm2022/c8y-ngx-components-binary-file-download.mjs +2 -1
  366. package/fesm2022/c8y-ngx-components-binary-file-download.mjs.map +1 -1
  367. package/fesm2022/c8y-ngx-components-bookmarks.mjs +2 -1
  368. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  369. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +2 -1
  370. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs.map +1 -1
  371. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +3 -3
  372. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs.map +1 -1
  373. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +2 -1
  374. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs.map +1 -1
  375. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +22 -12
  376. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  377. package/fesm2022/c8y-ngx-components-child-devices.mjs +2 -1
  378. package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
  379. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +2 -1
  380. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  381. package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BOpIFCYh.mjs +68 -0
  382. package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BOpIFCYh.mjs.map +1 -0
  383. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-D8otkLI8.mjs +73 -0
  384. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-D8otkLI8.mjs.map +1 -0
  385. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-AVm6qa9k.mjs +44 -0
  386. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-AVm6qa9k.mjs.map +1 -0
  387. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CtUoKGuU.mjs +91 -0
  388. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CtUoKGuU.mjs.map +1 -0
  389. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +643 -0
  390. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs.map +1 -0
  391. package/fesm2022/c8y-ngx-components-connectivity.mjs +2 -1
  392. package/fesm2022/c8y-ngx-components-connectivity.mjs.map +1 -1
  393. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +2 -1
  394. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
  395. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BkcNSexF.mjs} +3 -2
  396. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BkcNSexF.mjs.map +1 -0
  397. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-D9W68e7h.mjs} +3 -2
  398. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-version-history.component-D9W68e7h.mjs.map +1 -0
  399. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +43 -10
  400. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  401. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CwfVxTSx.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0lATUjO.mjs} +12 -8
  402. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0lATUjO.mjs.map +1 -0
  403. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +4 -3
  404. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs.map +1 -1
  405. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +2 -1
  406. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  407. package/fesm2022/c8y-ngx-components-data-broker.mjs +2 -1
  408. package/fesm2022/c8y-ngx-components-data-broker.mjs.map +1 -1
  409. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +2 -1
  410. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
  411. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +2 -1
  412. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
  413. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +38 -9
  414. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -1
  415. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +58 -53
  416. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  417. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +2 -1
  418. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
  419. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +2 -1
  420. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
  421. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +2 -1
  422. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
  423. package/fesm2022/c8y-ngx-components-datapoint-library.mjs +2 -1
  424. package/fesm2022/c8y-ngx-components-datapoint-library.mjs.map +1 -1
  425. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -1
  426. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  427. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +2 -1
  428. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  429. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +2 -1
  430. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
  431. package/fesm2022/c8y-ngx-components-device-grid.mjs +3 -3
  432. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  433. package/fesm2022/c8y-ngx-components-device-list.mjs +2 -1
  434. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  435. package/fesm2022/c8y-ngx-components-device-map.mjs +2 -1
  436. package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
  437. package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -1
  438. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  439. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -2
  440. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
  441. package/fesm2022/c8y-ngx-components-device-protocols.mjs +2 -1
  442. package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
  443. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +2 -1
  444. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  445. package/fesm2022/c8y-ngx-components-device-shell.mjs +2 -1
  446. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  447. package/fesm2022/c8y-ngx-components-diagnostics.mjs +2 -1
  448. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  449. package/fesm2022/c8y-ngx-components-echart.mjs +6 -8
  450. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  451. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +2 -1
  452. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  453. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +2 -1
  454. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
  455. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +2 -1
  456. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs.map +1 -1
  457. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -1
  458. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  459. package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -1
  460. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  461. package/fesm2022/c8y-ngx-components-editor.mjs +15 -0
  462. package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
  463. package/fesm2022/c8y-ngx-components-events.mjs +1 -1
  464. package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
  465. package/fesm2022/c8y-ngx-components-exports-list.mjs +2 -1
  466. package/fesm2022/c8y-ngx-components-exports-list.mjs.map +1 -1
  467. package/fesm2022/c8y-ngx-components-exports.mjs +2 -1
  468. package/fesm2022/c8y-ngx-components-exports.mjs.map +1 -1
  469. package/fesm2022/c8y-ngx-components-file-preview.mjs +2 -1
  470. package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
  471. package/fesm2022/c8y-ngx-components-files-repository.mjs +2 -1
  472. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  473. package/fesm2022/c8y-ngx-components-icon-selector.mjs +2 -1
  474. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  475. package/fesm2022/c8y-ngx-components-location.mjs +2 -1
  476. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  477. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +2 -1
  478. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
  479. package/fesm2022/c8y-ngx-components-map.mjs +2 -1
  480. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  481. package/fesm2022/c8y-ngx-components-messaging-management.mjs +2 -1
  482. package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
  483. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +2 -1
  484. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  485. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +2 -1
  486. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  487. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +2 -1
  488. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
  489. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +2 -1
  490. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  491. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +2 -1
  492. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
  493. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +2 -1
  494. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs.map +1 -1
  495. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +2 -1
  496. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
  497. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +2 -1
  498. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  499. package/fesm2022/c8y-ngx-components-operations-shared.mjs +2 -1
  500. package/fesm2022/c8y-ngx-components-operations-shared.mjs.map +1 -1
  501. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +4 -4
  502. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  503. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +4 -4
  504. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  505. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +4 -4
  506. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  507. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +4 -4
  508. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  509. package/fesm2022/c8y-ngx-components-operations.mjs +2 -1
  510. package/fesm2022/c8y-ngx-components-operations.mjs.map +1 -1
  511. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +2 -1
  512. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs.map +1 -1
  513. package/fesm2022/c8y-ngx-components-platform-configuration.mjs +2 -1
  514. package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
  515. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -1
  516. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  517. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs +1 -1
  518. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs.map +1 -1
  519. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +2 -1
  520. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  521. package/fesm2022/c8y-ngx-components-register-device.mjs +2 -1
  522. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  523. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +3 -3
  524. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  525. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +2 -1
  526. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -1
  527. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +2 -1
  528. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
  529. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +2 -1
  530. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -1
  531. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +2 -1
  532. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -1
  533. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +3 -3
  534. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
  535. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +2 -1
  536. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -1
  537. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +2 -1
  538. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  539. package/fesm2022/c8y-ngx-components-replace-device.mjs +2 -1
  540. package/fesm2022/c8y-ngx-components-replace-device.mjs.map +1 -1
  541. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +2 -1
  542. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  543. package/fesm2022/c8y-ngx-components-reports.mjs +2 -1
  544. package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
  545. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -1
  546. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  547. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -1
  548. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  549. package/fesm2022/c8y-ngx-components-repository-shared.mjs +3 -2
  550. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  551. package/fesm2022/c8y-ngx-components-repository-software.mjs +2 -1
  552. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  553. package/fesm2022/c8y-ngx-components-search.mjs +2 -1
  554. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  555. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +2 -1
  556. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
  557. package/fesm2022/c8y-ngx-components-sensor-phone.mjs +3 -2
  558. package/fesm2022/c8y-ngx-components-sensor-phone.mjs.map +1 -1
  559. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +2 -1
  560. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs.map +1 -1
  561. package/fesm2022/c8y-ngx-components-services-shared.mjs +1 -1
  562. package/fesm2022/c8y-ngx-components-services-shared.mjs.map +1 -1
  563. package/fesm2022/c8y-ngx-components-services.mjs +2 -1
  564. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  565. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +2 -1
  566. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
  567. package/fesm2022/c8y-ngx-components-sms-gateway.mjs +3 -2
  568. package/fesm2022/c8y-ngx-components-sms-gateway.mjs.map +1 -1
  569. package/fesm2022/c8y-ngx-components-sub-assets.mjs +2 -1
  570. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  571. package/fesm2022/c8y-ngx-components-tenants.mjs +37 -37
  572. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  573. package/fesm2022/c8y-ngx-components-tracking.mjs +2 -1
  574. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  575. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +5 -5
  576. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  577. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +2 -1
  578. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  579. package/fesm2022/c8y-ngx-components-upgrade.mjs +10 -3
  580. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  581. package/fesm2022/c8y-ngx-components-user-roles.mjs +2 -1
  582. package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
  583. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +2 -1
  584. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  585. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +2 -1
  586. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  587. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +2 -1
  588. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  589. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs +2 -1
  590. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs.map +1 -1
  591. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +2 -1
  592. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -1
  593. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs +2 -1
  594. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs.map +1 -1
  595. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs +2 -1
  596. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs.map +1 -1
  597. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +2 -1
  598. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
  599. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +2 -1
  600. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
  601. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs +2 -1
  602. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs.map +1 -1
  603. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs +1 -1
  604. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
  605. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs +2 -1
  606. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs.map +1 -1
  607. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +3 -3
  608. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
  609. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs +3 -6
  610. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs.map +1 -1
  611. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +2 -1
  612. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
  613. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +2 -1
  614. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  615. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs +2 -1
  616. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs.map +1 -1
  617. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +2 -1
  618. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  619. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +2 -2
  620. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
  621. package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs +2 -1
  622. package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs.map +1 -1
  623. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +2 -1
  624. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -1
  625. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs +2 -1
  626. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs.map +1 -1
  627. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs +2 -1
  628. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs.map +1 -1
  629. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -1
  630. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  631. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +2 -1
  632. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -1
  633. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +9 -6
  634. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
  635. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
  636. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  637. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +2 -1
  638. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
  639. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +2 -1
  640. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
  641. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +2 -1
  642. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
  643. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +13 -8
  644. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  645. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +2 -1
  646. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  647. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +2 -1
  648. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  649. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -1
  650. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  651. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +2 -1
  652. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  653. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +2 -1
  654. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  655. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +2 -1
  656. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  657. package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs +3 -10
  658. package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs.map +1 -1
  659. package/fesm2022/c8y-ngx-components.mjs +692 -504
  660. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  661. package/file-preview/file-preview.component.d.ts.map +1 -1
  662. package/files-repository/files-repository-navigation.factory.d.ts.map +1 -1
  663. package/files-repository/files-repository-upload.component.d.ts.map +1 -1
  664. package/files-repository/files-repository.component.d.ts.map +1 -1
  665. package/files-repository/files-repository.service.d.ts +1 -2
  666. package/files-repository/files-repository.service.d.ts.map +1 -1
  667. package/icon-selector/icon-selector-modal/icon-selector-modal.component.d.ts.map +1 -1
  668. package/icon-selector/icon-selector.component.d.ts.map +1 -1
  669. package/locales/de.po +105 -12
  670. package/locales/es.po +105 -12
  671. package/locales/fr.po +105 -12
  672. package/locales/ja_JP.po +99 -12
  673. package/locales/ko.po +104 -12
  674. package/locales/locales.pot +97 -12
  675. package/locales/nl.po +105 -12
  676. package/locales/pl.po +105 -12
  677. package/locales/pt_BR.po +105 -12
  678. package/locales/zh_CN.po +104 -12
  679. package/locales/zh_TW.po +104 -12
  680. package/location/location-tab.factory.d.ts.map +1 -1
  681. package/location/location.component.d.ts.map +1 -1
  682. package/loriot-device-registration/loriot-device-registration.component.d.ts.map +1 -1
  683. package/loriot-device-registration/loriot-provider.service.d.ts.map +1 -1
  684. package/map/map.component.d.ts.map +1 -1
  685. package/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.d.ts.map +1 -1
  686. package/messaging-management/messaging/shared/usage/usage.component.d.ts.map +1 -1
  687. package/messaging-management/messaging/topic/topic-list-view.component.d.ts.map +1 -1
  688. package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.d.ts.map +1 -1
  689. package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.d.ts.map +1 -1
  690. package/messaging-management/messaging/topic/topics-data-grid.service.d.ts.map +1 -1
  691. package/messaging-management/navigator/messaging-navigator-factory.d.ts.map +1 -1
  692. package/messaging-management/navigator/topic-details-tab.factory.d.ts.map +1 -1
  693. package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts.map +1 -1
  694. package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts.map +1 -1
  695. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  696. package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts.map +1 -1
  697. package/operations/bulk-single-operations-list/single-operation-item.component.d.ts.map +1 -1
  698. package/operations/bulk-single-operations-list/single-operations-list.component.d.ts.map +1 -1
  699. package/operations/factories/bulk-operations-tab.factory.d.ts.map +1 -1
  700. package/operations/grid-columns/creation-time.grid-column.d.ts.map +1 -1
  701. package/operations/grid-columns/device.grid-column.d.ts.map +1 -1
  702. package/operations/grid-columns/failure-reason.grid-column.d.ts.map +1 -1
  703. package/operations/grid-columns/status.grid-column.d.ts.map +1 -1
  704. package/operations/operations-list/device-control.feature.d.ts.map +1 -1
  705. package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
  706. package/operations/operations-list/operations-list.component.d.ts.map +1 -1
  707. package/operations/operations-list/single-operations-tab.factory.d.ts.map +1 -1
  708. package/operations/operations-list-item-details/operation-details-tabs.component.d.ts.map +1 -1
  709. package/operations/shared/nav.factory.d.ts.map +1 -1
  710. package/operations/shared/operations.service.d.ts.map +1 -1
  711. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts.map +1 -1
  712. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts.map +1 -1
  713. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts.map +1 -1
  714. package/operations/stepper-bulk-type-software/select-software-step.component.d.ts.map +1 -1
  715. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts.map +1 -1
  716. package/package.json +1 -1
  717. package/pending-mo-request/pending-mo-request-interceptor.d.ts.map +1 -1
  718. package/pending-mo-request/pending-mo-request.service.d.ts.map +1 -1
  719. package/platform-configuration/platform-configuration-form-provider.service.d.ts.map +1 -1
  720. package/protocol-lpwan/lpwan-protocol.module.d.ts.map +1 -1
  721. package/protocol-lpwan/lpwan-set-connections.component.d.ts.map +1 -1
  722. package/protocol-lpwan/lpwan-set-device-protocol.component.d.ts.map +1 -1
  723. package/protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.d.ts.map +1 -1
  724. package/protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.d.ts.map +1 -1
  725. package/protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.d.ts.map +1 -1
  726. package/protocol-lpwan/multiple-lns-connectors/no-connections-found.component.d.ts.map +1 -1
  727. package/protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.d.ts.map +1 -1
  728. package/protocol-opcua/opcua-address-space.component.d.ts.map +1 -1
  729. package/protocol-opcua/opcua-device-protocol-detail.component.d.ts.map +1 -1
  730. package/protocol-opcua/opcua-server-config.component.d.ts.map +1 -1
  731. package/protocol-opcua/opcua-servers.component.d.ts.map +1 -1
  732. package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
  733. package/register-device/device-registration-view.component.d.ts.map +1 -1
  734. package/register-device/extensible/base-extensible-device-registration.service.d.ts.map +1 -1
  735. package/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.d.ts.map +1 -1
  736. package/register-device/extensible/bulk/extensible-bulk-device-registration.service.d.ts.map +1 -1
  737. package/register-device/extensible/single/extensible-device-registration-modal.component.d.ts.map +1 -1
  738. package/register-device/extensible/single/extensible-device-registration-stepper.component.d.ts.map +1 -1
  739. package/register-device/extensible/single/extensible-device-registration.service.d.ts.map +1 -1
  740. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  741. package/register-device/register-device-navigation.factory.d.ts.map +1 -1
  742. package/register-device/register-device.service.d.ts.map +1 -1
  743. package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -1
  744. package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -1
  745. package/remote-access/passthrough/index.d.ts +1 -1
  746. package/remote-access/passthrough/index.d.ts.map +1 -1
  747. package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -1
  748. package/remote-access/ssh/index.d.ts.map +1 -1
  749. package/remote-access/telnet/index.d.ts.map +1 -1
  750. package/remote-access/vnc/index.d.ts.map +1 -1
  751. package/replace-device/replace-device-grid-action.factory.d.ts.map +1 -1
  752. package/replace-device/replace-device-wizard/replace-device-wizard.component.d.ts.map +1 -1
  753. package/replace-device/replace-device-wizard/replace-device-wizard.service.d.ts.map +1 -1
  754. package/replace-device/replace-device.service.d.ts.map +1 -1
  755. package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
  756. package/report-dashboard/report-dashboard-navigation.factory.d.ts.map +1 -1
  757. package/reports/export-schedules.component.d.ts.map +1 -1
  758. package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts.map +1 -1
  759. package/repository/configuration/device-tab/save-to-repository.component.d.ts.map +1 -1
  760. package/repository/configuration/device-tab/text-based-configuration.component.d.ts.map +1 -1
  761. package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
  762. package/repository/configuration/list/configuration-list.component.d.ts.map +1 -1
  763. package/repository/configuration/list/configuration-repository-navigation-factory.d.ts.map +1 -1
  764. package/repository/firmware/device-tab/firmware-device-tab.component.d.ts.map +1 -1
  765. package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts.map +1 -1
  766. package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
  767. package/repository/firmware/list/add-firmware-patch-modal.component.d.ts.map +1 -1
  768. package/repository/firmware/list/firmware-details.component.d.ts.map +1 -1
  769. package/repository/firmware/list/firmware-list.component.d.ts.map +1 -1
  770. package/repository/firmware/list/firmware-repository-navigation-factory.d.ts.map +1 -1
  771. package/repository/shared/columns/description.grid-column.d.ts.map +1 -1
  772. package/repository/shared/columns/device-type.grid-column.d.ts.map +1 -1
  773. package/repository/shared/columns/file.grid-column.d.ts.map +1 -1
  774. package/repository/shared/columns/name.grid-column.d.ts.map +1 -1
  775. package/repository/shared/columns/type.filtering-form-renderer.component.d.ts.map +1 -1
  776. package/repository/shared/columns/type.grid-column.d.ts.map +1 -1
  777. package/repository/shared/columns/versions.grid-column.d.ts.map +1 -1
  778. package/repository/shared/repository.service.d.ts.map +1 -1
  779. package/repository/shared/select-modal/repository-select-modal.component.d.ts +1 -1
  780. package/repository/shared/select-modal/repository-select-modal.component.d.ts.map +1 -1
  781. package/repository/shared/software-type/software-type.component.d.ts.map +1 -1
  782. package/repository/software/device-tab/installed-software.component.d.ts.map +1 -1
  783. package/repository/software/device-tab/software-repository-device-tab.module.d.ts.map +1 -1
  784. package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
  785. package/repository/software/list/software-details.component.d.ts.map +1 -1
  786. package/repository/software/list/software-list.component.d.ts.map +1 -1
  787. package/repository/software/list/software-repository-navigation-factory.d.ts.map +1 -1
  788. package/search/columns/asset-type-search-grid-column.d.ts.map +1 -1
  789. package/search/search-grid.component.d.ts.map +1 -1
  790. package/search/search-results.component.d.ts.map +1 -1
  791. package/sensor-phone/connect-smartphone.factory.d.ts.map +1 -1
  792. package/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.d.ts.map +1 -1
  793. package/sensor-phone/sensor-phone-modal/sensor-phone.service.d.ts.map +1 -1
  794. package/services/service-command-tab/service-command.feature.d.ts.map +1 -1
  795. package/services/services-device-tab/columns/last-updated-date.device-grid-column.d.ts.map +1 -1
  796. package/services/services-device-tab/columns/name.grid-column.d.ts.map +1 -1
  797. package/services/services-device-tab/columns/service-type.grid-column.d.ts.map +1 -1
  798. package/services/services-device-tab/columns/status.grid-column.d.ts.map +1 -1
  799. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  800. package/services/services-device-tab/services-device-tab.module.d.ts.map +1 -1
  801. package/services/services-device-tab/services.breadcrumb-factory.d.ts.map +1 -1
  802. package/services/shared/service-command.service.d.ts.map +1 -1
  803. package/services/status-options/status-options.model.d.ts.map +1 -1
  804. package/sigfox-device-registration/sigfox-device-registration.component.d.ts.map +1 -1
  805. package/sigfox-device-registration/sigfox-provider.service.d.ts.map +1 -1
  806. package/sms-gateway/sms-gateway.module.d.ts.map +1 -1
  807. package/sub-assets/add-group/add-group.component.d.ts.map +1 -1
  808. package/sub-assets/asset-properties-item.component.d.ts.map +1 -1
  809. package/sub-assets/asset-properties.component.d.ts.map +1 -1
  810. package/sub-assets/assign-devices/assign-child-devices.component.d.ts.map +1 -1
  811. package/sub-assets/assign-devices/assign-devices.component.d.ts.map +1 -1
  812. package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts.map +1 -1
  813. package/sub-assets/group-info.component.d.ts.map +1 -1
  814. package/sub-assets/sub-assets-grid.component.d.ts.map +1 -1
  815. package/sub-assets/sub-assets.module.d.ts.map +1 -1
  816. package/sub-assets/sub-assets.service.d.ts.map +1 -1
  817. package/sub-assets/unassign-assets-modal/unassign-modal.component.d.ts.map +1 -1
  818. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -1
  819. package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -1
  820. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -1
  821. package/tenants/tenant-list/creation-time.filtering-form-renderer.component.d.ts.map +1 -1
  822. package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
  823. package/tenants/tenants-navigation.factory.d.ts.map +1 -1
  824. package/tenants/tenants.module.d.ts.map +1 -1
  825. package/tracking/tracking.feature.d.ts.map +1 -1
  826. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -1
  827. package/trusted-certificates/crl/crl-check-settings.component.d.ts.map +1 -1
  828. package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
  829. package/trusted-certificates/factories/tabs.factory.d.ts.map +1 -1
  830. package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts.map +1 -1
  831. package/trusted-certificates/list/add-trusted-certificate.component.d.ts.map +1 -1
  832. package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
  833. package/upgrade/auth-bridge.service.d.ts.map +1 -1
  834. package/upgrade/bridge.service.d.ts.map +1 -1
  835. package/upgrade/ng1/downgraded.services.d.ts +1 -0
  836. package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
  837. package/upgrade/ng1/index.d.ts.map +1 -1
  838. package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts.map +1 -1
  839. package/widgets/cockpit/index.d.ts +4 -4
  840. package/widgets/definitions/alarms/alarm-list/index.d.ts +1 -1
  841. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  842. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +1 -1
  843. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  844. package/widgets/definitions/alarms/recent-alarms/index.d.ts +1 -1
  845. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  846. package/widgets/definitions/applications/index.d.ts +1 -1
  847. package/widgets/definitions/applications/index.d.ts.map +1 -1
  848. package/widgets/definitions/asset-notes/index.d.ts +1 -1
  849. package/widgets/definitions/asset-notes/index.d.ts.map +1 -1
  850. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts +1 -1
  851. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts.map +1 -1
  852. package/widgets/definitions/cockpit-welcome/index.d.ts +1 -1
  853. package/widgets/definitions/cockpit-welcome/index.d.ts.map +1 -1
  854. package/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.d.ts.map +1 -1
  855. package/widgets/definitions/datapoints-graph/index.d.ts +1 -1
  856. package/widgets/definitions/datapoints-table/index.d.ts +1 -1
  857. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
  858. package/widgets/definitions/device-control-message/index.d.ts +1 -1
  859. package/widgets/definitions/device-control-message/index.d.ts.map +1 -1
  860. package/widgets/definitions/help-and-service/index.d.ts +1 -1
  861. package/widgets/definitions/help-and-service/index.d.ts.map +1 -1
  862. package/widgets/definitions/html-widget/html-widget.factory.d.ts.map +1 -1
  863. package/widgets/definitions/html-widget/index.d.ts +1 -1
  864. package/widgets/definitions/image/index.d.ts +5 -3
  865. package/widgets/definitions/image/index.d.ts.map +1 -1
  866. package/widgets/definitions/info-gauge/index.d.ts +2 -3
  867. package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
  868. package/widgets/definitions/kpi/index.d.ts +1 -1
  869. package/widgets/definitions/kpi/index.d.ts.map +1 -1
  870. package/widgets/definitions/linear-gauge/index.d.ts +1 -1
  871. package/widgets/definitions/linear-gauge/index.d.ts.map +1 -1
  872. package/widgets/definitions/map/index.d.ts +1 -1
  873. package/widgets/definitions/map/index.d.ts.map +1 -1
  874. package/widgets/definitions/markdown/index.d.ts +5 -3
  875. package/widgets/definitions/markdown/index.d.ts.map +1 -1
  876. package/widgets/definitions/quick-links/index.d.ts +1 -1
  877. package/widgets/definitions/quick-links/index.d.ts.map +1 -1
  878. package/widgets/definitions/radial-gauge/index.d.ts +1 -1
  879. package/widgets/definitions/radial-gauge/index.d.ts.map +1 -1
  880. package/widgets/definitions/silo/index.d.ts +1 -1
  881. package/widgets/definitions/silo/index.d.ts.map +1 -1
  882. package/widgets/definitions/three-d-rotation/index.d.ts +1 -1
  883. package/widgets/definitions/three-d-rotation/index.d.ts.map +1 -1
  884. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  885. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  886. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  887. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  888. package/widgets/implementations/cockpit-welcome/welcome.component.d.ts +3 -2
  889. package/widgets/implementations/cockpit-welcome/welcome.component.d.ts.map +1 -1
  890. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
  891. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -1
  892. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
  893. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -1
  894. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -1
  895. package/widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.d.ts.map +1 -1
  896. package/widgets/implementations/device-management-welcome/welcome.component.d.ts.map +1 -1
  897. package/widgets/implementations/help-and-service-widget/help-and-service-view/help-and-service-view.component.d.ts.map +1 -1
  898. package/widgets/implementations/html-widget/advanced-settings/advanced-settings.component.d.ts.map +1 -1
  899. package/widgets/implementations/html-widget/html-widget-config.service.d.ts.map +1 -1
  900. package/widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.d.ts +5 -3
  901. package/widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.d.ts.map +1 -1
  902. package/widgets/implementations/image/image-widget-config/image-widget-config.component.d.ts.map +1 -1
  903. package/widgets/implementations/image/image-widget.service.d.ts +1 -2
  904. package/widgets/implementations/image/image-widget.service.d.ts.map +1 -1
  905. package/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.d.ts.map +1 -1
  906. package/widgets/implementations/linear-gauge/linear-gauge-widget-view/linear-gauge-widget-view.component.d.ts.map +1 -1
  907. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  908. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
  909. package/widgets/implementations/markdown/markdown-widget-config/markdown-widget-config.component.d.ts.map +1 -1
  910. package/widgets/implementations/markdown/markdown-widget.service.d.ts.map +1 -1
  911. package/widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config.component.d.ts.map +1 -1
  912. package/widgets/import-export-config/config-target-export.d.ts +3 -1
  913. package/widgets/import-export-config/config-target-export.d.ts.map +1 -1
  914. package/widgets/import-export-config/config-target-import.d.ts +3 -1
  915. package/widgets/import-export-config/config-target-import.d.ts.map +1 -1
  916. package/widgets/import-export-config/device-import-export.d.ts +3 -1
  917. package/widgets/import-export-config/device-import-export.d.ts.map +1 -1
  918. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs.map +0 -1
  919. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs.map +0 -1
  920. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CwfVxTSx.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-echart.mjs","sources":["../../echart/models/datapoints-graph-widget.model.ts","../../echart/models/chart.model.ts","../../echart/models/svg-icons.model.ts","../../echart/services/y-axis.service.ts","../../echart/services/chart-types.service.ts","../../echart/services/echarts-options.service.ts","../../echart/services/chart-realtime.service.ts","../../echart/chart-alerts/chart-alerts.component.ts","../../echart/chart-alerts/chart-alerts.component.html","../../echart/services/chart-events.service.ts","../../echart/services/chart-alarms.service.ts","../../echart/services/chart-helpers.service.ts","../../echart/select-aggregated-datapoint/select-aggregated-datapoint.component.ts","../../echart/select-aggregated-datapoint/select-aggregated-datapoint.component.html","../../echart/charts.component.ts","../../echart/charts.component.html","../../echart/c8y-ngx-components-echart.ts"],"sourcesContent":["import {\n AXIS_TYPES,\n CHART_LINE_TYPES,\n CHART_RENDER_TYPES,\n KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { DateTimeContext } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { aggregationType, AlarmStatusType, IMeasurement, ISeries, Severity } from '@c8y/client';\nimport type { BarSeriesOption, LineSeriesOption, ScatterSeriesOption } from 'echarts';\nimport { AlarmDetails, EventDetails } from '@c8y/ngx-components/alarm-event-selector';\nimport { TooltipFormatterCallback } from 'echarts/types/src/util/types';\nimport { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\n\nexport type DatapointsGraphKPIDetails = KPIDetails & {\n lineType?: DatapointLineType;\n renderType?: DatapointChartRenderType;\n};\n\nexport type DatapointsGraphWidgetConfig = {\n activeAlarmTypesOutOfRange?: string[];\n aggregation?: aggregationType | null;\n aggregatedDatapoint?: DatapointsGraphKPIDetails;\n alarmsEventsConfigs?: AlarmOrEventExtended[];\n datapoints?: DatapointsGraphKPIDetails[] | null;\n date?: DateTimeContext;\n dateFrom?: Date | null;\n dateTo?: Date | null;\n displayAggregationSelection?: boolean | null;\n displayDateSelection?: boolean | null;\n displayMarkedLine?: boolean;\n displayMarkedPoint?: boolean;\n interval?: Interval['id'] | null;\n mergeMatchingDatapoints?: boolean;\n forceMergeDatapoints?: boolean;\n realtime?: boolean | null;\n showLabelAndUnit?: boolean;\n showSlider?: boolean | null;\n sliderChange?: boolean | null;\n widgetInstanceGlobalTimeContext?: boolean | null;\n xAxisSplitLines?: boolean | null;\n yAxisSplitLines?: boolean | null;\n numberOfDecimalPlaces?: number;\n};\n\nexport type GraphDisplayOptions = {\n displayMarkedLine: boolean;\n displayMarkedPoint: boolean;\n mergeMatchingDatapoints: boolean;\n forceMergeDatapoints: boolean;\n showLabelAndUnit: boolean;\n showSlider: boolean;\n showOnlyAlarmsOrEvents?: boolean;\n numberOfDecimalPlaces?: number;\n sliderPositionMode?: 'compact' | 'default';\n};\n\nexport type AlarmDetailsExtended = AlarmDetails & {\n __hidden?: boolean;\n __severity?: SeverityType[];\n __status?: AlarmStatusType[];\n};\n\nexport type EventDetailsExtended = EventDetails & {\n __hidden?: boolean;\n};\n\n/**\n * @description: Extended AlarmOrEvent type which includes properties from the incoming alarms/events. This interface can be used when the expected data can be either events or alarms.\n */\nexport type AlarmOrEventExtended = AlarmDetailsExtended | EventDetailsExtended;\n\nexport type DatapointsGraphWidgetTimeProps = Partial<\n Pick<DatapointsGraphWidgetConfig, 'interval' | 'dateFrom' | 'dateTo' | 'aggregation' | 'realtime'>\n>;\n\nexport enum DATE_SELECTION_EXTENDED {\n CONFIG = 'config',\n DASHBOARD_CONTEXT = 'dashboard_context'\n}\n\ntype DatapointApiValues = ISeries['values'];\nexport interface DpWithValues extends DatapointsGraphKPIDetails {\n values: DatapointApiValues;\n}\n\ntype DataPointValues = {\n min: number;\n max: number;\n};\nexport type DpValuesItem = {\n time: number;\n values: DataPointValues[];\n};\n\nexport interface MarkPointData {\n coord: [string, number | DataPointValues | null];\n name: string;\n itemType: string;\n itemStyle: { color: string };\n symbol?: string; // Symbol to display for the mark point (reference to ICONS_MAP)\n symbolSize?: number;\n}\n\nexport interface MarkLineData {\n xAxis: string | undefined;\n itemType: string;\n label: {\n show: boolean;\n formatter: TooltipFormatterCallback<TopLevelFormatterParams> | string;\n };\n itemStyle: { color: string };\n}\n\nexport interface TimeContextProps {\n temporaryUserSelectedFromDate?: string;\n temporaryUserSelectedToDate?: string;\n currentDateContextFromDate?: string;\n currentDateContextToDate?: string;\n realtime?: boolean;\n currentDateContextInterval?: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'custom';\n aggregation?: aggregationType | null;\n}\n\nexport type DatapointLineType = (typeof CHART_LINE_TYPES)[number]['val'];\nexport type EchartsSeriesOptions = LineSeriesOption | ScatterSeriesOption | BarSeriesOption;\n\nexport type DatapointAxisType = (typeof AXIS_TYPES)[number]['val'];\n\nexport type DatapointChartRenderType = (typeof CHART_RENDER_TYPES)[number]['val'];\n\nexport const REALTIME_TEXTS = {\n ACTIVE: gettext('Realtime active'),\n INACTIVE: gettext('Realtime inactive')\n} as const;\n\nexport const PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH = {\n EVENTS: {\n DATA_EXPLORER_AND_GRAPH: 'data-explorer-and-graph'\n },\n COMPONENTS: {\n DATA_EXPLORER_DETAILS: 'data-explorer-details'\n },\n ACTIONS: {\n DATA_EXPLORER_CONFIG_INIT: 'data-explorer-config-init',\n DATA_EXPLORER_CONFIG_CHANGE: 'data-explorer-config-change',\n DATA_GRAPH_WIDGET_CONFIG: 'data-graph-widget-config'\n }\n};\n\nexport type DateString = string;\nexport type SeriesValue = [DateString, number];\n\nexport type DatapointRealtimeMeasurements = {\n measurement: IMeasurement;\n datapoint: DatapointsGraphKPIDetails;\n};\n\nexport type YAxisOptions = {\n showSplitLines: boolean;\n mergeMatchingDatapoints: boolean;\n forceMergeDatapoints: boolean;\n showLabelAndUnit: boolean;\n};\n\nexport interface SeriesDatapointInfo {\n datapointId?: string;\n datapointLabel?: string;\n datapointUnit?: string;\n}\n\nexport const SEVERITY_LABELS = {\n CRITICAL: gettext('Critical`alarm`') as 'CRITICAL',\n MAJOR: gettext('Major`alarm`') as 'MAJOR',\n MINOR: gettext('Minor`alarm`') as 'MINOR',\n WARNING: gettext('Warning`alarm`') as 'WARNING'\n} as const;\n\nexport type SeverityType = keyof typeof Severity;\n","import { ECBasicOption, TooltipFormatterCallback } from 'echarts/types/src/util/types';\nimport { MarkLineData, MarkPointData, SeriesValue } from './datapoints-graph-widget.model';\nimport { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';\n\n/**\n * @param typeOfSeries is used for formatter to distinguish between events/alarms series\n * @param isDpTemplateSelected is used to distinguish if the series have a specific dp template selected. E.g. for case when a device has 2 measurements and 2 series are created for each measurement\n * @param id is used to distinguish between series\n * @param data is used to store the data for the series\n * @param itemStyle is used to set the color of the series\n */\ninterface ModifiedCustomSeriesOptions extends echarts.EChartsOption {\n typeOfSeries?: 'alarm' | 'event' | null;\n isDpTemplateSelected?: boolean;\n id: string;\n data: SeriesValue[];\n itemStyle: { color: string };\n}\n\nexport interface customSeriesMarkLineData {\n data: MarkLineData[];\n}\n\nexport interface customSeriesMarkPointData {\n data: MarkPointData[];\n}\n\nexport type CustomSeriesOptions = Omit<ModifiedCustomSeriesOptions, 'tooltip'>;\nexport interface EchartsCustomOptions extends ECBasicOption {\n tooltip: {\n formatter: TooltipFormatterCallback<TopLevelFormatterParams> | string;\n }[];\n}\n\nexport interface MeasurementSeries {\n min: number | null;\n max: number | null;\n}\n\nexport enum CHART_VIEW_CONTEXT {\n WIDGET_VIEW = 'widget_view',\n WIDGET_CONFIG = 'widget_config',\n DATAPOINT_EXPLORER = 'datapoint_explorer'\n}\n","enum ICONS {\n ALARM = 'path://M18.375 15.8462L20.4423 17.9135V18.9231H4V17.9135L6.06731 15.8462V10.75C6.06731 9.14744 6.47596 7.75321 7.29327 6.56731C8.11058 5.38141 9.24038 4.61218 10.6827 4.25962V3.53846C10.6827 3.12179 10.8269 2.76122 11.1154 2.45673C11.4038 2.15224 11.7724 2 12.2212 2C12.6699 2 13.0385 2.15224 13.3269 2.45673C13.6154 2.76122 13.7596 3.12179 13.7596 3.53846V4.25962C15.2019 4.61218 16.3317 5.38141 17.149 6.56731C17.9663 7.75321 18.375 9.14744 18.375 10.75V15.8462ZM12.2212 22C11.6442 22 11.1554 21.8077 10.7548 21.4231C10.3542 21.0385 10.1538 20.5577 10.1538 19.9808H14.2885C14.2885 20.5256 14.0801 20.9984 13.6635 21.399C13.2468 21.7997 12.766 22 12.2212 22Z',\n EVENT = 'path://M97.3013 63L128.939 95.1315C79.296 134.335 47.7653 191.526 47.7653 255.276C47.7653 319.027 79.296 376.218 128.917 415.421L97.28 447.574C37.76 400.552 0 331.93 0 255.276C0 178.622 37.76 110.001 97.3013 63ZM414.72 63C474.24 110.001 512 178.622 512 255.276C512 331.93 474.24 400.552 414.72 447.574L383.083 415.421C432.704 376.218 464.235 319.027 464.235 255.276C464.235 191.526 432.704 134.335 383.083 95.1315L414.72 63ZM160.405 127.092L192 159.181C162.24 182.681 143.317 217.013 143.317 255.276C143.317 293.539 162.219 327.871 192 351.372L160.405 383.461C120.725 352.119 95.552 306.379 95.552 255.276C95.552 204.174 120.725 158.433 160.405 127.092ZM351.595 127.092C391.296 158.433 416.448 204.174 416.448 255.276C416.448 306.379 391.275 352.119 351.595 383.461L320 351.372C349.781 327.871 368.683 293.539 368.683 255.276C368.683 217.013 349.781 182.703 320 159.181L351.595 127.092ZM256 192.722C291.505 192.722 320.287 221.504 320.287 257.009C320.287 292.514 291.505 321.296 256 321.296C220.495 321.296 191.713 292.514 191.713 257.009C191.713 221.504 220.495 192.722 256 192.722Z',\n ACKNOWLEDGED = 'path://M10.4795 2H13.4807V4.18054C14.1215 4.35248 14.7155 4.61821 15.2626 4.97773C15.8097 5.35287 16.2864 5.79836 16.6928 6.31419C17.0993 6.81438 17.4119 7.3771 17.6307 8.00234C17.8652 8.62759 17.9824 9.29191 17.9824 9.99531V13.7702L16.9742 12.762V12.7855L9.72919 5.54045C9.74482 5.54045 9.75264 5.54045 9.75264 5.54045L9.00234 4.79015C9.22118 4.64947 9.45565 4.53224 9.70574 4.43845C9.95584 4.34467 10.2138 4.25869 10.4795 4.18054V2ZM4.4068 3.03165L21.4291 20.0305L19.9988 21.4373L17.5604 18.9988H13.6917C13.7855 19.1551 13.8558 19.3193 13.9027 19.4912C13.9496 19.6475 13.973 19.8195 13.973 20.007C13.973 20.5541 13.7776 21.0231 13.3869 21.4138C12.9961 21.8046 12.5272 22 11.9801 22C11.4174 22 10.9406 21.8046 10.5498 21.4138C10.159 21.0231 9.96366 20.5541 9.96366 20.007C9.96366 19.8195 9.9871 19.6475 10.034 19.4912C10.0809 19.3193 10.1512 19.1551 10.245 18.9988H3.96131V17.9906L5.97773 15.9977V9.99531C5.97773 9.60453 6.00899 9.22939 6.07151 8.86987C6.14967 8.51036 6.25127 8.15866 6.37632 7.81477L3 4.43845L4.4068 3.03165Z',\n CLEARED = 'path://M9.09375 19.5977C9.09375 20.2617 9.32812 20.8281 9.79688 21.2969C10.2786 21.7656 10.8516 22 11.5156 22C12.1927 22 12.7656 21.7656 13.2344 21.2969C13.7161 20.8281 13.957 20.2617 13.957 19.5977H9.09375ZM16.8672 10.418C16.3203 10.5091 15.7995 10.6784 15.3047 10.9258C14.8229 11.1732 14.3867 11.4922 13.9961 11.8828C13.5013 12.3776 13.1172 12.944 12.8438 13.582C12.5833 14.2201 12.4531 14.8841 12.4531 15.5742C12.4531 16.0299 12.5052 16.4727 12.6094 16.9023C12.7266 17.332 12.8958 17.7422 13.1172 18.1328H3V16.375C4.04167 16.0495 4.74479 15.3919 5.10938 14.4023C5.47396 13.4128 5.76693 12.3385 5.98828 11.1797C6.20964 10.0208 6.48958 8.88802 6.82812 7.78125C7.16667 6.6875 7.83724 5.85417 8.83984 5.28125C9.11328 5.125 9.32812 4.91667 9.48438 4.65625C9.64062 4.38281 9.71875 4.08984 9.71875 3.77734C9.71875 3.28255 9.88802 2.86589 10.2266 2.52734C10.5781 2.17578 11.0013 2 11.4961 2C11.9909 2 12.4076 2.17578 12.7461 2.52734C13.0977 2.86589 13.2734 3.28255 13.2734 3.77734C13.2734 4.08984 13.3516 4.38281 13.5078 4.65625C13.6771 4.91667 13.8984 5.125 14.1719 5.28125C15.0443 5.78906 15.6562 6.51172 16.0078 7.44922C16.3724 8.38672 16.6589 9.3763 16.8672 10.418ZM11.4961 4.48047C11.6914 4.48047 11.8607 4.41536 12.0039 4.28516C12.1471 4.14193 12.2188 3.97266 12.2188 3.77734C12.2188 3.56901 12.1471 3.39974 12.0039 3.26953C11.8607 3.1263 11.6914 3.05469 11.4961 3.05469C11.3008 3.05469 11.1315 3.1263 10.9883 3.26953C10.8451 3.39974 10.7734 3.56901 10.7734 3.77734C10.7734 3.97266 10.8451 4.14193 10.9883 4.28516C11.1315 4.41536 11.3008 4.48047 11.4961 4.48047ZM16.9062 17.6055L19.9922 14.5195L19.2305 13.7773L16.9062 16.1016L15.8906 15.0859L15.1289 15.8477L16.9062 17.6055ZM17.5312 11.8633C18.5599 11.8633 19.4388 12.2279 20.168 12.957C20.8971 13.6862 21.2617 14.5651 21.2617 15.5938C21.2617 16.6224 20.8971 17.5013 20.168 18.2305C19.4388 18.9596 18.5599 19.3242 17.5312 19.3242C16.5026 19.3242 15.6237 18.9596 14.8945 18.2305C14.1654 17.5013 13.8008 16.6224 13.8008 15.5938C13.8008 14.5651 14.1654 13.6862 14.8945 12.957C15.6237 12.2279 16.5026 11.8633 17.5312 11.8633Z',\n MINOR = 'path://M21.9787 11.9894L11.9894 22L2 11.9894L11.9894 2L21.9787 11.9894ZM12.9052 16.5474V14.7157H11.0735V16.5474H12.9052ZM12.9052 12.9052V7.45261H11.0735V12.9052H12.9052Z',\n MAJOR = 'path://M12.8936 13.8936V10.234H11.1064V13.8936H12.8936ZM12.8936 17.5106V15.6809H11.1064V17.5106H12.8936ZM2 20.234L12 3L22 20.234H2Z',\n CRITICAL = 'path://M12.0117 22C10.6362 22 9.3388 21.7343 8.11958 21.2028C6.90035 20.687 5.83744 19.9758 4.93083 19.0692C4.02423 18.1626 3.31301 17.0996 2.79719 15.8804C2.26573 14.6768 2 13.3794 2 11.9883C2 10.6127 2.26573 9.31536 2.79719 8.09613C3.31301 6.89254 4.02423 5.83744 4.93083 4.93083C5.83744 4.02423 6.90035 3.3052 8.11958 2.77374C9.3388 2.25791 10.6362 2 12.0117 2C13.3873 2 14.6846 2.25791 15.9039 2.77374C17.1231 3.3052 18.186 4.02423 19.0926 4.93083C19.9992 5.83744 20.7104 6.89254 21.2263 8.09613C21.7577 9.31536 22.0234 10.6127 22.0234 11.9883C22.0234 13.3794 21.7577 14.6768 21.2263 15.8804C20.7104 17.0996 19.9992 18.1626 19.0926 19.0692C18.186 19.9758 17.1231 20.687 15.9039 21.2028C14.6846 21.7343 13.3873 22 12.0117 22ZM13.0199 6.99414H11.0035V12.9965H13.0199V6.99414ZM13.0199 14.9894H11.0035V17.0059H13.0199V14.9894Z',\n WARNING = 'path://M12 2C13.3772 2 14.6761 2.25822 15.8967 2.77465C17.1174 3.29108 18.1815 4.00313 19.0892 4.9108C19.9969 5.81847 20.7089 6.88263 21.2254 8.10329C21.7418 9.32394 22 10.6228 22 12C22 13.3772 21.7418 14.6761 21.2254 15.8967C20.7089 17.1174 19.9969 18.1815 19.0892 19.0892C18.1815 19.9969 17.1174 20.7089 15.8967 21.2254C14.6761 21.7418 13.3772 22 12 22C10.6228 22 9.32394 21.7418 8.10329 21.2254C6.88263 20.7089 5.81847 19.9969 4.9108 19.0892C4.00313 18.1815 3.29108 17.1174 2.77465 15.8967C2.25822 14.6761 2 13.3772 2 12C2 10.6228 2.25822 9.32394 2.77465 8.10329C3.29108 6.88263 4.00313 5.81847 4.9108 4.9108C5.81847 4.00313 6.88263 3.29108 8.10329 2.77465C9.32394 2.25822 10.6228 2 12 2Z'\n}\n\nexport const ICONS_MAP = {\n ALARM: ICONS.ALARM,\n EVENT: ICONS.EVENT,\n ACKNOWLEDGED: ICONS.ACKNOWLEDGED,\n CLEARED: ICONS.CLEARED,\n MINOR: ICONS.MINOR,\n MAJOR: ICONS.MAJOR,\n CRITICAL: ICONS.CRITICAL,\n WARNING: ICONS.WARNING\n};\n","import { Injectable } from '@angular/core';\nimport { DatapointAxisType, DpWithValues, YAxisOptions } from '../models';\nimport type { YAXisOption } from 'echarts/types/src/coord/cartesian/AxisModel';\nimport { AppStateService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class YAxisService {\n Y_AXIS_OFFSET = 48;\n private intlNumberFormatCompliantLocale: string;\n\n constructor(private appStateService: AppStateService) {\n this.intlNumberFormatCompliantLocale = this.appStateService.state.lang.replace('_', '-');\n }\n\n getYAxis(\n datapointsWithValues: DpWithValues[],\n YAxisOptions: YAxisOptions\n ): YAXisOption[] | YAXisOption {\n const YAxisPlacement: Map<DpWithValues, { position: DatapointAxisType; offset: number }> =\n this.getYAxisPlacement(datapointsWithValues);\n\n if (YAxisOptions.forceMergeDatapoints) {\n const firstDp = datapointsWithValues[0];\n const unit = firstDp?.unit ? `[${firstDp.unit}]` : '';\n return {\n name: unit,\n nameLocation: 'middle',\n nameGap: 25,\n type: 'value',\n animation: true,\n axisLabel: {\n fontSize: 10,\n show: true\n },\n axisLine: {\n show: true,\n lineStyle: {\n color: '#6f7079'\n },\n onZero: false\n },\n splitLine: {\n show: YAxisOptions.showSplitLines\n },\n axisTick: {\n show: true\n },\n axisPointer: {\n show: false,\n label: {\n show: false\n }\n }\n };\n }\n const matchingDpSet = new Set<DpWithValues>();\n const firstOccurrence = new Set<DpWithValues>();\n\n return datapointsWithValues.map((dp, index) => {\n const isDefined = (value: number | undefined) => value !== null && value !== undefined;\n const isMatchingDp = (dp1: DpWithValues, dp2: DpWithValues) =>\n dp1.min === dp2.min &&\n dp1.max === dp2.max &&\n isDefined(dp1.min) &&\n isDefined(dp1.max) &&\n isDefined(dp2.min) &&\n isDefined(dp2.max);\n\n const matchingDpRange = datapointsWithValues.some(\n (dp2, index2) => isMatchingDp(dp, dp2) && index2 < index\n );\n\n const anyMatchingDp = datapointsWithValues.some(\n (dp2, index2) => isMatchingDp(dp, dp2) && index2 !== index\n );\n\n if (\n anyMatchingDp &&\n !matchingDpRange &&\n YAxisOptions.mergeMatchingDatapoints &&\n !firstOccurrence.has(dp)\n ) {\n firstOccurrence.add(dp);\n }\n\n if (firstOccurrence.has(dp)) {\n datapointsWithValues.forEach(dp2 => {\n if (isMatchingDp(dp, dp2)) {\n matchingDpSet.add(dp2);\n }\n });\n }\n\n return {\n name: YAxisOptions.showLabelAndUnit\n ? YAxisOptions.mergeMatchingDatapoints\n ? firstOccurrence.has(dp)\n ? Array.from(matchingDpSet)\n .map(dp => `{${dp.__target?.id}|${dp.unit}}`)\n .join(' /')\n : matchingDpRange\n ? ''\n : `${dp.label} [${dp.unit}]`\n : `${dp.label} [${dp.unit}]`\n : '',\n nameLocation: 'middle',\n nameGap: 25,\n nameTextStyle: {\n // add rich text to support multiple colors for different dp units\n rich: {\n ...Array.from(matchingDpSet).reduce((acc, dp) => {\n const accKey = `${dp.__target?.id}`;\n acc[accKey] = {\n color: dp.color\n };\n return acc;\n }, {})\n }\n },\n type: 'value',\n animation: true,\n axisLine: {\n show: matchingDpRange && YAxisOptions.mergeMatchingDatapoints ? false : true,\n lineStyle: {\n color: firstOccurrence.has(dp) ? '#6f7079' : dp.color\n },\n onZero: false\n },\n axisLabel: {\n fontSize: 10,\n show: !matchingDpRange || !YAxisOptions.mergeMatchingDatapoints,\n formatter: val => {\n if (dp.min != undefined && dp.max != undefined) {\n const range = dp.max - dp.min;\n const decimalPlaces = this.getDecimalPlaces(range);\n return val.toFixed(decimalPlaces);\n }\n\n return new Intl.NumberFormat(this.intlNumberFormatCompliantLocale, {\n notation: 'compact',\n compactDisplay: 'short'\n }).format(val);\n }\n },\n splitLine: {\n show: YAxisOptions.showSplitLines && !matchingDpRange,\n lineStyle: { color: dp.color, opacity: 0.4, type: 'dashed' }\n },\n position: YAxisPlacement.get(dp)?.position,\n offset: YAxisPlacement.get(dp)?.offset,\n axisTick: {\n show: !matchingDpRange || !YAxisOptions.mergeMatchingDatapoints\n },\n axisPointer: {\n show: false,\n label: {\n show: false\n }\n },\n ...(dp.min && { min: dp.min }),\n ...(dp.max && { max: dp.max })\n };\n });\n }\n\n private getDecimalPlaces(num: number): number {\n const numStr = num.toString();\n const decimalIndex = numStr.indexOf('.');\n if (decimalIndex === -1) {\n return 0;\n }\n return numStr.length - decimalIndex - 1;\n }\n\n private getYAxisPlacement(\n datapointsWithValues: DpWithValues[]\n ): Map<DpWithValues, { position: DatapointAxisType; offset: number }> {\n const YAxisPositions = new Map<DpWithValues, { position: DatapointAxisType }>();\n\n datapointsWithValues.forEach(dp => {\n const position = this.getYAxisPosition(dp, datapointsWithValues);\n YAxisPositions.set(dp, { position });\n });\n\n const dpLeft = datapointsWithValues.filter(dp => YAxisPositions.get(dp).position === 'left');\n const dpRight = datapointsWithValues.filter(dp => YAxisPositions.get(dp).position === 'right');\n\n const YAxisPlacement = new Map<DpWithValues, { position: DatapointAxisType; offset: number }>();\n YAxisPositions.forEach(({ position }, key) => {\n const offset = (position === 'left' ? dpLeft : dpRight).indexOf(key) * this.Y_AXIS_OFFSET;\n YAxisPlacement.set(key, { position: position, offset });\n });\n\n return YAxisPlacement;\n }\n\n private getYAxisPosition(\n datapoint: DatapointAxisType,\n datapointsWithValues: DpWithValues[]\n ): DatapointAxisType {\n if (datapoint.yAxisType) {\n return datapoint.yAxisType;\n }\n const currentIndex = datapointsWithValues.indexOf(datapoint);\n const otherIndexLeft = datapointsWithValues.findIndex(\n dp => dp !== datapoint && (!dp.yAxisType || dp.yAxisType === 'left')\n );\n if (otherIndexLeft > -1 && otherIndexLeft < currentIndex) {\n return 'right';\n } else {\n return 'left';\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DatapointChartRenderType, DpWithValues, EchartsSeriesOptions } from '../models';\nimport type { BarSeriesOption, LineSeriesOption } from 'echarts';\n\nfunction assertUnreachable(_: never): never {\n throw new Error('Case unreachable.');\n}\n\n@Injectable()\nexport class ChartTypesService {\n private RENDER_TYPE_SYMBOL: Record<\n Exclude<DatapointChartRenderType, 'area'>,\n Partial<LineSeriesOption>\n > = {\n min: { symbol: 'triangle', symbolRotate: 0 },\n max: { symbol: 'triangle', symbolRotate: 180 }\n };\n getSeriesOptions(\n { lineType, color }: DpWithValues,\n isMinMaxChart = false,\n renderType: DatapointChartRenderType\n ): EchartsSeriesOptions {\n switch (lineType) {\n case 'points':\n return this.pointsSeriesOption(color, isMinMaxChart, renderType);\n case 'linePoints':\n return this.linePointsSeriesOption(color, isMinMaxChart, renderType);\n case 'bars':\n return this.barsSeriesOption(color, isMinMaxChart, renderType);\n case 'step-before':\n return this.stepBeforeSeriesOption(color, isMinMaxChart, renderType);\n case 'step-after':\n return this.stepAfterSeriesOption(color, isMinMaxChart, renderType);\n case 'line':\n case undefined:\n return this.lineSeriesOption(color, isMinMaxChart, renderType);\n }\n return assertUnreachable(lineType);\n }\n\n private pointsSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n const baseOption = this.linePointsSeriesOption(color, isMinMaxChart, renderType);\n return {\n ...baseOption,\n lineStyle: { opacity: 0 }\n };\n }\n\n private lineSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n let baseOption: LineSeriesOption = {\n type: 'line',\n lineStyle: {\n color: color,\n width: 1,\n type: 'solid'\n },\n itemStyle: {\n color: color\n },\n emphasis: {\n scale: 1.2,\n itemStyle: {\n color: color\n }\n },\n showSymbol: false,\n symbolSize: 4 // symbol is visible on hover\n };\n if (isMinMaxChart) {\n baseOption = {\n ...baseOption,\n ...this.RENDER_TYPE_SYMBOL[renderType],\n symbolSize: 8\n };\n }\n return baseOption;\n }\n\n private linePointsSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n const baseOption = this.lineSeriesOption(color, isMinMaxChart, renderType);\n return {\n ...baseOption,\n showSymbol: true\n };\n }\n\n private barsSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): BarSeriesOption {\n const baseOption: BarSeriesOption = {\n type: 'bar',\n barMinWidth: 1,\n barMaxWidth: 20,\n itemStyle: {\n color\n }\n };\n if (isMinMaxChart) {\n baseOption.itemStyle.opacity = renderType === 'max' ? 0.6 : 1.0;\n }\n return baseOption;\n }\n\n private stepBeforeSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n const baseOption = this.lineSeriesOption(color, isMinMaxChart, renderType);\n return { ...baseOption, step: 'start' };\n }\n\n private stepAfterSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n const baseOption = this.lineSeriesOption(color, isMinMaxChart, renderType);\n return { ...baseOption, step: 'end' };\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Injectable } from '@angular/core';\nimport { AppStateService, DatePipe } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type { EChartsOption, SeriesOption, ECharts } from 'echarts';\nimport {\n DatapointChartRenderType,\n DpWithValues,\n DateString,\n DpValuesItem,\n MarkLineData,\n MarkPointData,\n SeriesDatapointInfo,\n SeriesValue,\n GraphDisplayOptions\n} from '../models';\nimport { YAxisService } from './y-axis.service';\nimport { ChartTypesService } from './chart-types.service';\nimport type { CallbackDataParams, TooltipFormatterCallback } from 'echarts/types/src/util/types';\nimport type { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';\nimport { AlarmStatus, IAlarm, IEvent, SeverityType } from '@c8y/client';\nimport { ICONS_MAP } from '../models/svg-icons.model';\nimport { CustomSeriesOptions } from '../models/chart.model';\nimport { Router } from '@angular/router';\nimport { AlarmSeverityToIconPipe, AlarmSeverityToLabelPipe } from '@c8y/ngx-components/alarms';\nimport { Interval, INTERVALS } from '@c8y/ngx-components/interval-picker';\nimport { TranslateService } from '@ngx-translate/core';\n\ntype TooltipPositionCallback = (\n point: [number, number], // position of mouse in chart [X, Y]; 0,0 is top left corner\n _: any, // tooltip data\n dom: HTMLElement | unknown, // tooltip element\n __: any, // valid only when mouse is on graphic elements; not relevant in our case\n size: {\n contentSize: [number, number]; // size of tooltip\n viewSize: [number, number]; // size of the chart\n } | null // size of chart\n) => Partial<Record<'top' | 'bottom' | 'left' | 'right', number>>;\n\nconst INDEX_HTML = '/index.html';\n\n@Injectable()\nexport class EchartsOptionsService {\n echartsInstance: ECharts | undefined;\n private TOOLTIP_WIDTH = 300;\n private tooltipPositionCallback: TooltipPositionCallback | undefined;\n\n constructor(\n private datePipe: DatePipe,\n private yAxisService: YAxisService,\n private chartTypesService: ChartTypesService,\n private severityIconPipe: AlarmSeverityToIconPipe,\n private severityLabelPipe: AlarmSeverityToLabelPipe,\n private translate: TranslateService,\n private router: Router,\n private appState: AppStateService\n ) {}\n\n getChartOptions(\n datapointsWithValues: DpWithValues[],\n timeRange: { dateFrom: string; dateTo: string; interval: Interval['id'] },\n showSplitLines: { YAxis: boolean; XAxis: boolean },\n events: IEvent[],\n alarms: IAlarm[],\n displayOptions: GraphDisplayOptions,\n selectedTimeRange?: { dateFrom: string; dateTo: string; interval: Interval['id'] } | null,\n aggregatedDatapoint?: DpWithValues,\n sliderZoomUsed = false\n ): EChartsOption {\n const yAxis = this.yAxisService.getYAxis(datapointsWithValues, {\n showSplitLines: showSplitLines.YAxis,\n mergeMatchingDatapoints: displayOptions.mergeMatchingDatapoints,\n forceMergeDatapoints: displayOptions.forceMergeDatapoints,\n showLabelAndUnit: displayOptions.showLabelAndUnit\n });\n const leftAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'left') : [];\n const gridLeft = leftAxis.length ? leftAxis.length * this.yAxisService.Y_AXIS_OFFSET : 32;\n const rightAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'right') : [];\n const gridRight = rightAxis.length ? rightAxis.length * this.yAxisService.Y_AXIS_OFFSET : 16;\n const currentUser = this.appState.currentUser?.getValue();\n const selectedLanguage = currentUser?.customProperties?.['c8y_UserPreference-language'] || 'en';\n let intervalInMs = this.calculateExtendedIntervalInMs(\n selectedTimeRange?.interval || timeRange.interval || 'hours',\n selectedTimeRange || timeRange\n );\n if (sliderZoomUsed) {\n intervalInMs = this.calculateExtendedIntervalInMs(timeRange.interval || 'hours', timeRange);\n }\n if (displayOptions.showOnlyAlarmsOrEvents) {\n return {\n xAxis: {\n min: timeRange.dateFrom,\n max: timeRange.dateTo,\n type: 'time'\n },\n yAxis: {\n show: false\n },\n tooltip: {\n trigger: 'axis',\n // intended empty for now. Later we can add a tooltip for more info on the hovered alarm/event\n formatter: () => ''\n },\n series: this.createAlarmEventTypeSeries(alarms, events)\n };\n }\n return {\n grid: {\n containLabel: true, // axis labels are taken into account to calculate graph grid\n left: gridLeft,\n top: 16,\n right: gridRight,\n bottom: 68\n },\n dataZoom: [\n {\n type: 'inside',\n // TODO: use 'none' only when this bug is fixed https://github.com/apache/echarts/issues/17858\n filterMode: datapointsWithValues.some(dp => dp.lineType === 'bars') ? 'filter' : 'none',\n zoomOnMouseWheel: true,\n startValue: selectedTimeRange\n ? selectedTimeRange.dateFrom.valueOf()\n : timeRange.dateFrom.valueOf(),\n endValue: selectedTimeRange\n ? selectedTimeRange.dateTo.valueOf()\n : timeRange.dateTo.valueOf()\n },\n {\n type: 'slider',\n show: displayOptions.showSlider,\n bottom: 8,\n realtime: false,\n left: displayOptions.sliderPositionMode === 'compact' ? '64px' : '64px',\n right: displayOptions.sliderPositionMode === 'compact' ? '172px' : '64px',\n labelFormatter(_value, valueStr) {\n const locale = selectedLanguage.replace('_', '-');\n const date = new Date(valueStr);\n\n const datePart = new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'short',\n day: '2-digit'\n }).format(date);\n\n const timePart = new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n }).format(date);\n\n return `${datePart}\\n${timePart}`;\n },\n textStyle: {\n fontSize: 9,\n lineHeight: 14\n }\n }\n ], // on realtime, 'none' will cause extending chart line to left edge of the chart\n animation: false,\n toolbox: {\n show: true,\n itemSize: 0, // toolbox is needed for zooming in action, but we provide our own buttons\n feature: {\n dataZoom: {\n yAxisIndex: 'none'\n }\n }\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'cross',\n snap: true\n },\n backgroundColor: 'var(--c8y-root-component-background-default)',\n borderColor: 'var(--c8y-root-component-border-color)',\n formatter: this.getTooltipFormatter(displayOptions),\n appendToBody: true,\n position: this.tooltipPosition(),\n transitionDuration: 0\n },\n legend: {\n show: false\n },\n xAxis: {\n min: aggregatedDatapoint\n ? Object.keys(aggregatedDatapoint.values)\n .map(date => new Date(date).valueOf())\n .sort((a, b) => a - b)[0]\n : new Date(timeRange.dateFrom).valueOf() - intervalInMs,\n max: timeRange.dateTo,\n type: 'time',\n animation: false,\n axisPointer: {\n label: {\n show: false\n }\n },\n axisLine: {\n // align X axis to 0 of Y axis of datapoint with lineType 'bars'\n onZeroAxisIndex: datapointsWithValues.findIndex(dp => dp.lineType === 'bars')\n },\n axisLabel: {\n hideOverlap: true,\n borderWidth: 2, // as there is no margin for labels spacing, transparent border is a workaround\n borderColor: 'transparent',\n formatter: value => {\n const date = new Date(value);\n const locale = selectedLanguage.replace('_', '-');\n\n const isStartOfMinute = date.getSeconds() === 0;\n const isStartOfDay =\n date.getHours() === 0 && date.getMinutes() === 0 && date.getSeconds() === 0;\n const isStartOfYear = date.getMonth() === 0 && date.getDate() === 1 && isStartOfDay;\n\n let options: Intl.DateTimeFormatOptions;\n\n // Case 1: Tick is start of year\n // Shows only the year, e.g. \"2025\"\n if (isStartOfYear) {\n options = { year: 'numeric' };\n }\n\n // Case 2: Tick is start of day\n // Shows abbreviated month and day, e.g. \"Jan 13\"\n else if (isStartOfDay) {\n options = { month: 'short', day: 'numeric' };\n }\n // Case 3: Tick is start of minute\n // Shows hour and minute, e.g. \"14:30\" (format depends on locale)\n else if (isStartOfMinute) {\n options = { hour: 'numeric', minute: '2-digit' };\n }\n // Case 4: Interval is 1 minute or less\n // Shows seconds, e.g. \":45\"\n else {\n options = { second: '2-digit' };\n }\n\n return new Intl.DateTimeFormat(locale, options).format(date);\n }\n },\n splitLine: {\n show: showSplitLines.XAxis,\n lineStyle: { opacity: 0.8, type: 'dashed', width: 2 }\n }\n },\n yAxis,\n series: [\n this.getAggregatedSeries(aggregatedDatapoint || null, displayOptions),\n ...this.getChartSeries(datapointsWithValues, events, alarms, displayOptions)\n ]\n };\n }\n\n calculateExtendedIntervalInMs(interval: Interval['id'], selectedTimeRange): number {\n let intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs;\n\n switch (interval) {\n case 'minutes':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 60;\n break;\n case 'hours':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 24;\n break;\n case 'days':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 28;\n break;\n case 'weeks':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 12;\n break;\n case 'months':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 12;\n break;\n case 'custom':\n intervalInMs =\n (new Date(selectedTimeRange.dateTo).valueOf() -\n new Date(selectedTimeRange.dateFrom).valueOf()) *\n 12;\n break;\n default:\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs;\n break;\n }\n\n return intervalInMs;\n }\n\n getAggregatedSeries(\n aggregatedDatapoint: DpWithValues,\n displayOptions: GraphDisplayOptions\n ): SeriesOption {\n const series: SeriesOption[] = [];\n const renderType: DatapointChartRenderType = aggregatedDatapoint?.renderType || 'min';\n const idx = 0;\n\n if (renderType === 'area') {\n series.push(\n this.getSingleSeries(aggregatedDatapoint, 'min', idx, true, displayOptions, 'aggr')\n );\n series.push(\n this.getSingleSeries(aggregatedDatapoint, 'max', idx, true, displayOptions, 'aggr')\n );\n } else {\n series.push(\n this.getSingleSeries(aggregatedDatapoint, renderType, idx, false, displayOptions, 'aggr')\n );\n }\n\n series.forEach((s: any) => {\n s.datapointId = 'aggregated';\n s.typeOfSeries = 'fake';\n s.itemStyle = {\n ...s.itemStyle,\n opacity: 0\n };\n s.lineStyle = {\n ...s.lineStyle,\n opacity: 0\n };\n });\n\n return series[0];\n }\n\n /**\n * This method is used to get the series for alarms and events.\n * @param dp - The data point.\n * @param renderType - The render type.\n * @param isMinMaxChart - If the chart is min max chart.\n * @param items - All alarms or events which should be displayed on the chart.\n * @param itemType - The item type.\n * @param id - The id of the device\n */\n getAlarmOrEventSeries(\n dp: DpWithValues,\n renderType: DatapointChartRenderType,\n isMinMaxChart = false,\n items: IAlarm[] | IEvent[] = [],\n itemType: 'alarm' | 'event' = 'alarm',\n displayOptions: GraphDisplayOptions = {\n displayMarkedLine: true,\n displayMarkedPoint: true,\n mergeMatchingDatapoints: false,\n forceMergeDatapoints: false,\n showLabelAndUnit: false,\n showSlider: false\n },\n id?: string | number,\n idx?: number,\n realtime?: boolean\n ): CustomSeriesOptions[] {\n if (!items.length) {\n return [];\n }\n\n if (!displayOptions.displayMarkedLine && !displayOptions.displayMarkedPoint) {\n return [];\n }\n\n //filter items that are not __hidden\n const filteredItems: IAlarm[] | IEvent[] = items.filter(item => !item['__hidden']);\n const itemsByType = this.groupByType(filteredItems, 'type');\n const isAlarm = itemType === 'alarm';\n\n return Object.entries(itemsByType).flatMap(\n ([type, itemsOfType]: [string, (IAlarm | IEvent)[]]) => {\n // Main series data\n const mainData = itemsOfType.map(item => [item.creationTime, null, 'markLineFlag']);\n // Is a specific datapoint template selected for this alarm/event type?\n let isDpTemplateSelected = false;\n\n // MarkPoint data\n const markPointData = itemsOfType.reduce<MarkPointData[]>((acc, item) => {\n isDpTemplateSelected =\n item['selectedDatapoint'] &&\n dp['__target'] &&\n item['selectedDatapoint']['fragment'] === dp['fragment'] &&\n item['selectedDatapoint']['series'] === dp['series'] &&\n item['selectedDatapoint']['target'] === dp['__target']['id'];\n if (dp.__target?.id === item.source.id) {\n const isCleared = isAlarm && item.status === AlarmStatus.CLEARED;\n const isEvent = !isAlarm;\n return acc.concat(this.createMarkPoint(item, dp, isCleared, isEvent, realtime));\n } else {\n if (!item.creationTime) {\n return [];\n }\n return acc.concat([\n {\n coord: [item.creationTime, null],\n name: item.type,\n itemType: item.type,\n itemStyle: { color: item['color'] }\n }\n ]);\n }\n }, []);\n\n // Construct series with markPoint\n const seriesWithMarkPoint = {\n id: `${type}/${dp.__target?.id}+${id ? id : ''}-markPoint`,\n name: `${type}-markPoint`,\n typeOfSeries: itemType,\n data: mainData,\n isDpTemplateSelected,\n position: 'bottom',\n silent: true,\n markPoint: {\n showSymbol: true,\n symbolKeepAspect: true,\n data: markPointData\n },\n yAxisIndex: idx,\n ...this.chartTypesService.getSeriesOptions(dp, isMinMaxChart, renderType)\n };\n\n const markLineData = this.createMarkLine(itemsOfType, itemType);\n\n // Construct series with markLine\n const seriesWithMarkLine = {\n id: `${type}/${dp.__target?.id}+${id ? id : ''}-markLine`,\n name: `${type}-markLine`,\n typeOfSeries: itemType,\n isDpTemplateSelected,\n data: mainData,\n markLine: {\n showSymbol: false,\n symbol: ['none', 'none'], // no symbol at the start/end of the line\n data: markLineData\n },\n ...this.chartTypesService.getSeriesOptions(dp, isMinMaxChart, renderType)\n };\n\n //depending on the options return only the required series\n if (displayOptions.displayMarkedLine && displayOptions.displayMarkedPoint) {\n return [seriesWithMarkLine, seriesWithMarkPoint];\n } else if (displayOptions.displayMarkedLine) {\n return [seriesWithMarkLine];\n } else if (displayOptions.displayMarkedPoint) {\n return [seriesWithMarkPoint];\n } else {\n return null;\n }\n }\n ) as CustomSeriesOptions[];\n }\n\n /**\n * This method is used to get tooltip formatter for alarms and events.\n * @param tooltipParams - The tooltip parameters.\n * @param params - The parameters data.\n * @param allEvents - All events.\n * @param allAlarms - All alarms.\n * @returns The formatted string for the tooltip.\n */\n getTooltipFormatterForAlarmAndEvents(\n tooltipParams: CallbackDataParams,\n params: { data: { itemType: string } },\n allEvents: IEvent[],\n allAlarms: IAlarm[],\n displayOptions: GraphDisplayOptions\n ): string {\n if (!Array.isArray(tooltipParams)) {\n return '';\n }\n const XAxisValue: string = tooltipParams[0].data[0];\n const YAxisReadings: string[] = [];\n const allSeries = this.echartsInstance?.getOption()['series'] as CustomSeriesOptions[];\n\n // filter out alarm and event series\n const allDataPointSeries = allSeries.filter(\n series => series['typeOfSeries'] !== 'alarm' && series['typeOfSeries'] !== 'event'\n );\n\n this.processSeries(allDataPointSeries, XAxisValue, YAxisReadings, displayOptions);\n\n // find event and alarm of the same type as the hovered markedLine or markedPoint\n const event = allEvents.find(e => e.type === params.data.itemType);\n const alarm = allAlarms.find(a => a.type === params.data.itemType);\n\n let value = '';\n if (event) {\n value = this.processEvent(event, XAxisValue);\n }\n\n if (alarm) {\n this.processAlarm(alarm).then(alarmVal => {\n value = alarmVal;\n YAxisReadings.push(value);\n const options = this.echartsInstance?.getOption() as EChartsOption;\n if (!options.tooltip || !Array.isArray(options.tooltip)) {\n return;\n }\n const updatedOptions: Partial<SeriesOption> = {\n tooltip: options['tooltip'][0]\n };\n\n if (!updatedOptions.tooltip) {\n return;\n }\n updatedOptions.tooltip.formatter = `<div style=\"width: ${this.TOOLTIP_WIDTH}px\">${YAxisReadings.join('')}</div>`;\n updatedOptions.tooltip.transitionDuration = 0;\n updatedOptions.tooltip.position = this.tooltipPosition();\n this.echartsInstance?.setOption(updatedOptions);\n return;\n });\n }\n YAxisReadings.push(value);\n\n return `<div style=\"width: 300px\">${YAxisReadings.join('')}</div>`;\n }\n\n /**\n * Creates the series for alarms and events by their type.\n * @param alarms - The list of alarms.\n * @param events - The list of events.\n * @returns The series options for the chart.\n */\n createAlarmEventTypeSeries(alarms: IAlarm[], events: IEvent[]): SeriesOption[] {\n const series: SeriesOption[] = [];\n let yValue = 10;\n\n // Group alarms and events by type\n const alarmTypes = Array.from(new Set(alarms.map(a => a.type)));\n const eventTypes = Array.from(new Set(events.map(e => e.type)));\n\n // Alarms by type\n for (const type of alarmTypes) {\n const alarmsOfType = alarms.filter(a => a.type === type);\n // Background circle series\n series.push({\n type: 'scatter',\n name: `${type}-circle`,\n data: alarmsOfType.map(a => [a.creationTime, yValue]),\n symbol: 'circle',\n symbolSize: 24,\n itemStyle: {\n color: alarmsOfType[0]?.color || '#EE6666'\n },\n z: 2\n });\n\n // Foreground icon series\n series.push({\n type: 'scatter',\n name: `${type}-icon`,\n data: alarmsOfType.map(a => {\n const isCleared = a.status === AlarmStatus.CLEARED;\n return {\n value: [isCleared ? a.lastUpdated : a.creationTime, yValue],\n itemStyle: { color: 'white' },\n symbol: isCleared ? ICONS_MAP.CLEARED : ICONS_MAP[a.severity as SeverityType],\n symbolSize: 16\n };\n }),\n z: 3\n });\n\n // If alarm is cleared, also show the cleared icon at lastUpdated\n alarmsOfType.forEach(a => {\n if (a.status === AlarmStatus.CLEARED && a.lastUpdated !== a.creationTime) {\n series.push({\n type: 'scatter',\n name: `${type}-cleared-circle`,\n data: [[a.lastUpdated, yValue]],\n symbol: 'circle',\n symbolSize: 24,\n itemStyle: {\n color: a.color || '#EE6666'\n },\n z: 2\n });\n series.push({\n type: 'scatter',\n name: `${type}-cleared-icon`,\n data: [\n {\n value: [a.lastUpdated, yValue],\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP.CLEARED,\n symbolSize: 16\n }\n ],\n z: 3\n });\n }\n });\n\n yValue += 10;\n }\n\n // Events by type\n for (const type of eventTypes) {\n const eventsOfType = events.filter(e => e.type === type);\n // Background circle series\n series.push({\n type: 'scatter',\n name: `${type}-circle`,\n data: eventsOfType.map(e => [e.creationTime, yValue]),\n symbol: 'circle',\n symbolSize: 24,\n itemStyle: {\n color: eventsOfType[0]?.color || '#6f6cd0'\n },\n z: 2\n });\n\n // Foreground icon series\n series.push({\n type: 'scatter',\n name: `${type}-icon`,\n data: eventsOfType.map(e => ({\n value: [e.creationTime, yValue],\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP.EVENT,\n symbolSize: 16\n })),\n z: 3\n });\n\n yValue += 10;\n }\n\n return series;\n }\n\n private tooltipPosition(): TooltipPositionCallback {\n let lastPositionOfTooltip: Partial<Record<'top' | 'bottom' | 'left' | 'right', number>> = {};\n if (this.tooltipPositionCallback) {\n return this.tooltipPositionCallback;\n }\n\n this.tooltipPositionCallback = (\n point: [number, number], // position of mouse in chart [X, Y]; 0,0 is top left corner\n _: any, // tooltip data\n dom: HTMLElement | unknown, // tooltip element\n __: any,\n size: {\n contentSize: [number, number]; // size of tooltip\n viewSize: [number, number];\n } | null // size of chart\n ) => {\n const offset = 10;\n const [mouseX, mouseY] = point;\n const chartWidth = size?.viewSize[0] || 0;\n const chartHeight = size?.viewSize[1] || 0;\n const tooltipWidth = size?.contentSize[0] || 0;\n const tooltipHeight = size?.contentSize[1] || 0;\n const tooltipRect = (dom as HTMLElement)?.getBoundingClientRect();\n const tooltipOverflowsBottomEdge = tooltipRect.bottom > window.innerHeight;\n\n const tooltipOverflowsRightEdge = tooltipRect.right > window.innerWidth;\n\n const tooltipWouldOverflowBottomEdgeOnPositionChange =\n !lastPositionOfTooltip.top &&\n tooltipRect.bottom + 2 * offset + tooltipHeight > window.innerHeight;\n\n const tooltipWouldOverflowRightEdgeOnPositionChange =\n !lastPositionOfTooltip.left &&\n tooltipRect.right + 2 * offset + tooltipWidth > window.innerWidth;\n\n let verticalPosition: { top: number } | { bottom: number } = {\n top: mouseY + offset\n };\n let horizontalPosition: { left: number } | { right: number } = {\n left: mouseX + offset\n };\n\n if (tooltipOverflowsBottomEdge || tooltipWouldOverflowBottomEdgeOnPositionChange) {\n verticalPosition = {\n bottom: chartHeight - mouseY + offset\n };\n }\n if (tooltipOverflowsRightEdge || tooltipWouldOverflowRightEdgeOnPositionChange) {\n horizontalPosition = {\n right: chartWidth - mouseX + offset\n };\n }\n\n lastPositionOfTooltip = {\n ...verticalPosition,\n ...horizontalPosition\n };\n return lastPositionOfTooltip;\n };\n return this.tooltipPositionCallback;\n }\n\n /**\n * This method is used to add the data point info to the tooltip.\n * @param allDataPointSeries - All the data point series.\n * @param XAxisValue - The X Axis value.\n * @param YAxisReadings - The Y Axis readings.\n */\n private processSeries(\n allDataPointSeries: CustomSeriesOptions[],\n XAxisValue: string,\n YAxisReadings: string[],\n displayOptions: GraphDisplayOptions\n ): void {\n allDataPointSeries.forEach((series: any) => {\n if (series.datapointId === 'aggregated') {\n return;\n }\n let value = '';\n if (series.id.endsWith('/min')) {\n value = this.processMinSeries(series, allDataPointSeries, XAxisValue, displayOptions);\n } else if (!series.id.endsWith('/max')) {\n value = this.processRegularSeries(series, XAxisValue, displayOptions);\n }\n\n if (value) {\n YAxisReadings.push(\n `<div class=\"d-flex a-i-center p-b-8 text-default\"><span class='dlt-c8y-icon-circle m-r-4' style='color: ${series.itemStyle.color};'></span>` + // color circle\n `<strong>${series.datapointLabel}</strong></div>` + // name\n `${value}` // single value or min-max range\n );\n }\n });\n }\n\n /**\n * This method is used to process the min series.\n * @param series - The series.\n * @param allDataPointSeries - All the data point series.\n * @param XAxisValue - The X Axis value.\n * @returns The processed value.\n */\n private processMinSeries(\n series: any,\n allDataPointSeries: CustomSeriesOptions[],\n XAxisValue: string,\n displayOptions: GraphDisplayOptions\n ): string {\n const minValue = this.findValueForExactOrEarlierTimestamp(series.data, XAxisValue);\n if (!minValue) {\n return '';\n }\n const maxSeries = allDataPointSeries.find(s => s['id'] === series.id.replace('/min', '/max'));\n const maxValue = this.findValueForExactOrEarlierTimestamp(\n maxSeries?.['data'] as SeriesValue[],\n XAxisValue\n );\n return (\n `<div class=\"d-flex a-i-center separator-top p-t-8 p-b-8 text-default\"><label class=\"text-12 m-r-8 m-b-0\">${this.datePipe.transform(minValue[0])}</label>` +\n `<span class=\"m-l-auto text-12\">${minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'} — ${maxValue?.[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +\n (series.datapointUnit ? ` ${series.datapointUnit}` : '') +\n `</span></div>`\n );\n }\n\n /**\n * This method is used to process the regular series.\n * @param series - The series.\n * @param XAxisValue - The X Axis value.\n * @returns The processed value.\n */\n private processRegularSeries(\n series: any,\n XAxisValue: string,\n displayOptions: GraphDisplayOptions\n ): string {\n const seriesValue = this.findValueForExactOrEarlierTimestamp(series.data, XAxisValue);\n if (!seriesValue) {\n return '';\n }\n return (\n `<div class=\"d-flex a-i-center p-t-8 p-b-8 separator-top text-default\">` +\n `<label class=\"m-b-0 m-r-8 text-12\">${this.datePipe.transform(\n seriesValue[0]\n )}</label><span class=\"m-l-auto text-12\">` +\n `${seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +\n (series.datapointUnit ? ` ${series.datapointUnit}` : '') +\n `</span></div>`\n );\n }\n\n /**\n * This method is used to process the event tooltip.\n * @param event - The event object.\n * @returns The processed value.\n */\n private processEvent(event: IEvent, XAxisValue: string): string {\n let value = `<ul class=\"list-unstyled small separator-top text-default\">`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"small m-b-0 m-r-8\">${this.translate.instant(gettext('Event type'))}</label><code class=\"m-l-auto\" style=\"display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px; -webkit-line-clamp: 2;\" title=\"${event.type}\">${event.type}</code></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"small m-b-0 m-r-8\">${this.translate.instant(gettext('Event text'))}</label><span class=\"m-l-auto\" style=\"display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px; -webkit-line-clamp: 5;\" title=\"${event.text}\">${event.text}</span></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"small m-b-0 m-r-8\">${this.translate.instant(gettext('Event time'))}</label><span class=\"m-l-auto\">${this.datePipe.transform(XAxisValue)}<span></li>`;\n value += `</ul>`;\n return value;\n }\n\n /**\n * This method is used to process the alarm tooltip.\n * @param alarm - The alarm object.\n * @returns The processed value.\n */\n private async processAlarm(alarm: IAlarm): Promise<string> {\n let value = `<ul class=\"list-unstyled small separator-top text-default m-0\">`;\n value += `<li class=\"p-t-4 p-b-4 d-flex a-i-center separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Alarm severity'))}</label>`;\n value += `<span class=\"small d-inline-flex a-i-center gap-4 m-l-auto\"><i class=\"stroked-icon icon-14 status dlt-c8y-icon-${this.severityIconPipe.transform(alarm.severity)} ${alarm.severity.toLowerCase()}\" > </i> ${this.severityLabelPipe.transform(alarm.severity)} </span></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Alarm type'))}</label><span class=\"small m-l-auto\"><code>${alarm.type}</code></span></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Message'))}</label><span class=\"small m-l-auto\" style=\"display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px;\" title=\"${this.translate.instant(alarm.text)}\">${this.translate.instant(alarm.text)}</span></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Last updated'))}</label><span class=\"small m-l-auto\">${this.datePipe.transform(alarm['lastUpdated'])}</span></li>`;\n const exists = await this.alarmRouteExists();\n if (exists) {\n const currentUrl = window.location.href;\n const baseUrlIndex = currentUrl.indexOf(INDEX_HTML);\n const baseUrl = currentUrl.substring(0, baseUrlIndex + INDEX_HTML.length);\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Open details'))}</label><span class=\"small m-l-auto\"><a href=\"${baseUrl}#/alarms/${alarm.id}/details?showCleared=true\">${this.translate.instant(gettext('Alarm details'))}</a></span></li>`;\n }\n value += `<li class=\"p-t-4 p-b-4 d-flex text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Alarm count'))}</label><span class=\"small m-l-auto\"><span class=\"badge badge-info\">${alarm.count}</span></span></li>`;\n value += `</ul>`;\n return value;\n }\n\n private async alarmRouteExists(): Promise<boolean> {\n const exists = this.router.config.some(route => {\n return `${route.path}` === 'alarms';\n });\n return exists;\n }\n\n private getChartSeries(\n datapointsWithValues: DpWithValues[],\n events: IEvent[],\n alarms: IAlarm[],\n displayOptions: GraphDisplayOptions\n ): CustomSeriesOptions[] | SeriesOption[] {\n const series: SeriesOption[] = [];\n let eventSeries: CustomSeriesOptions[] = [];\n let alarmSeries: CustomSeriesOptions[] = [];\n datapointsWithValues.forEach((dp, idx) => {\n const renderType: DatapointChartRenderType = dp.renderType || 'min';\n if (renderType === 'area') {\n series.push(this.getSingleSeries(dp, 'min', idx, true, displayOptions));\n series.push(this.getSingleSeries(dp, 'max', idx, true, displayOptions));\n } else {\n series.push(this.getSingleSeries(dp, renderType, idx, false, displayOptions));\n }\n\n const newEventSeries = this.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n events,\n 'event',\n displayOptions,\n null,\n idx\n );\n const newAlarmSeries = this.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n alarms,\n 'alarm',\n displayOptions,\n null,\n idx\n );\n eventSeries = [...eventSeries, ...newEventSeries];\n alarmSeries = [...alarmSeries, ...newAlarmSeries];\n });\n const deduplicateFilterCallback = (\n obj1: CustomSeriesOptions,\n i: number,\n arr: SeriesOption[]\n ): obj1 is CustomSeriesOptions => {\n const duplicates = arr.filter(obj2 => obj1['id'] === obj2['id'] && i !== arr.indexOf(obj2));\n\n if (duplicates.length > 0) {\n return obj1['isDpTemplateSelected'] as boolean;\n }\n\n return true;\n };\n\n const deduplicateFilterCallbackFallback = (\n obj1: SeriesOption,\n i: number,\n arr: SeriesOption[]\n ): obj1 is SeriesOption => arr.findIndex(obj2 => obj2['id'] === obj1['id']) === i;\n\n let deduplicatedEvents = eventSeries.filter(deduplicateFilterCallback);\n let deduplicatedAlarms = alarmSeries.filter(deduplicateFilterCallback);\n if (deduplicatedAlarms.length === 0) {\n deduplicatedAlarms = alarmSeries.filter(deduplicateFilterCallbackFallback);\n }\n if (deduplicatedEvents.length === 0) {\n deduplicatedEvents = eventSeries.filter(deduplicateFilterCallbackFallback);\n }\n return [...series, ...deduplicatedEvents, ...deduplicatedAlarms];\n }\n\n private groupByType(\n items: IAlarm[] | IEvent[],\n typeField: string\n ): Record<string, IAlarm[] | IEvent[]> {\n return items.reduce((grouped, item) => {\n (grouped[item[typeField]] = grouped[item[typeField]] || []).push(item);\n return grouped;\n }, {} as any);\n }\n\n /**\n * This method interpolates between two data points. The goal is to place the markPoint on the chart in the right place.\n * @param dpValuesArray array of data points\n * @param targetTime time of the alarm or event\n * @returns interpolated data point\n */\n private interpolateBetweenTwoDps(\n dpValuesArray: DpValuesItem[],\n targetTime: number\n ): DpValuesItem {\n let maxValue: number;\n let minValue: number;\n return dpValuesArray.reduce((acc, curr, idx, arr) => {\n if (new Date(curr.time).getTime() <= targetTime) {\n if (idx === arr.length - 1) {\n return {\n time: targetTime,\n values: [{ min: minValue, max: maxValue }]\n };\n }\n const nextDp = arr[idx + 1];\n if (new Date(nextDp.time).getTime() >= targetTime) {\n const timeDiff = new Date(nextDp.time).getTime() - new Date(curr.time).getTime();\n const targetTimeDiff = targetTime - new Date(curr.time).getTime();\n const minValueDiff = nextDp.values[0]?.min - curr.values[0]?.min;\n const maxValueDiff = nextDp.values[0]?.max - curr.values[0]?.max;\n minValue = curr.values[0]?.min + (minValueDiff * targetTimeDiff) / timeDiff;\n maxValue = curr.values[0]?.max + (maxValueDiff * targetTimeDiff) / timeDiff;\n return {\n time: targetTime,\n values: [{ min: minValue, max: maxValue }]\n };\n }\n }\n return acc;\n });\n }\n\n private getClosestDpValueToTargetTime(\n dpValuesArray: DpValuesItem[],\n targetTime: number\n ): DpValuesItem {\n return dpValuesArray.reduce((prev, curr) =>\n //should take the value closest to the target time, for realtime the current time would always change\n Math.abs(new Date(curr.time).getTime() - targetTime) <\n Math.abs(new Date(prev.time).getTime() - targetTime)\n ? curr\n : prev\n );\n }\n\n /**\n * This method creates a markPoint on the chart which represents the icon of the alarm or event.\n * @param item Single alarm or event\n * @param dp Data point\n * @param isCleared If the alarm is cleared in case of alarm\n * @param isEvent If the item is an event\n * @param realtime If the chart is in realtime mode\n * @returns MarkPointDataItemOption[]\n */\n private createMarkPoint(\n item: IAlarm | IEvent,\n dp: DpWithValues,\n isCleared: boolean,\n isEvent: boolean,\n realtime: boolean\n ): MarkPointData[] {\n // check if dp.values object is empty\n if (!item.creationTime || Object.keys(dp.values).length === 0) {\n return [];\n }\n\n const dpValuesArray: DpValuesItem[] = Object.entries(dp.values).map(([time, values]) => ({\n time: new Date(time).getTime(),\n values\n }));\n const creationTime = new Date(item.creationTime).getTime();\n const lastUpdatedTime = new Date(item['lastUpdated']).getTime();\n\n let coordCreationTime: any;\n let coordLastUpdatedTime: any;\n\n if (realtime) {\n const lastValue = dpValuesArray[dpValuesArray.length - 1];\n coordCreationTime = [\n item.creationTime,\n lastValue?.values[0]?.min ?? lastValue?.values[1] ?? null\n ];\n coordLastUpdatedTime = [\n item['lastUpdated'],\n lastValue?.values[0]?.min ?? lastValue?.values[1] ?? null\n ];\n } else {\n const closestDpValue = this.interpolateBetweenTwoDps(dpValuesArray, creationTime);\n const dpValuesForNewAlarms = this.getClosestDpValueToTargetTime(dpValuesArray, creationTime);\n const closestDpValueLastUpdated = this.interpolateBetweenTwoDps(\n dpValuesArray,\n lastUpdatedTime\n );\n const dpValuesForNewAlarmsLastUpdated = this.getClosestDpValueToTargetTime(\n dpValuesArray,\n lastUpdatedTime\n );\n\n coordCreationTime = [\n item.creationTime,\n closestDpValue?.values[0]?.min ??\n closestDpValue?.values[1] ??\n dpValuesForNewAlarms?.values[0]?.min ??\n dpValuesForNewAlarms?.values[1] ??\n null\n ];\n coordLastUpdatedTime = [\n item['lastUpdated'],\n closestDpValueLastUpdated?.values[0]?.min ??\n closestDpValueLastUpdated?.values[1] ??\n dpValuesForNewAlarmsLastUpdated?.values[0]?.min ??\n dpValuesForNewAlarmsLastUpdated?.values[1] ??\n null\n ];\n }\n\n if (isEvent) {\n return [\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP.EVENT,\n symbolSize: 16\n }\n ];\n }\n\n return isCleared\n ? [\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP[item.severity as SeverityType],\n symbolSize: 16\n },\n {\n coord: coordLastUpdatedTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordLastUpdatedTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP.CLEARED,\n symbolSize: 16\n }\n ]\n : [\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP[item.severity as SeverityType],\n symbolSize: 16\n },\n {\n coord: coordLastUpdatedTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordLastUpdatedTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP[item.severity as SeverityType],\n symbolSize: 16\n }\n ];\n }\n\n /**\n * This method creates a markLine on the chart which represents the line between every alarm or event on the chart.\n * @param items Array of alarms or events\n * @returns MarkLineDataItemOptionBase[]\n */\n private createMarkLine<T extends IAlarm | IEvent>(\n items: T[],\n itemType: 'alarm' | 'event'\n ): MarkLineData[] {\n return items.reduce<MarkLineData[]>((acc, item) => {\n if (!item.creationTime) {\n return acc;\n }\n if (itemType === 'event') {\n return acc.concat([\n {\n xAxis: item.time,\n itemType: item.type,\n label: { show: false, formatter: () => item.type },\n itemStyle: { color: item['color'] }\n }\n ]);\n }\n if (item.creationTime === item['lastUpdated']) {\n return acc.concat([\n {\n xAxis: item.creationTime,\n itemType: item.type,\n label: { show: false, formatter: () => item.type },\n itemStyle: { color: item['color'] }\n }\n ]);\n } else {\n return acc.concat([\n {\n xAxis: item.creationTime,\n itemType: item.type,\n label: { show: false, formatter: () => item.type },\n itemStyle: { color: item['color'] }\n },\n {\n xAxis: item['lastUpdated'],\n itemType: item.type,\n label: { show: false, formatter: () => item.type },\n itemStyle: { color: item['color'] }\n }\n ]);\n }\n }, []);\n }\n\n private getSingleSeries(\n dp: DpWithValues,\n renderType: Exclude<DatapointChartRenderType, 'area'>,\n idx: number,\n isMinMaxChart = false,\n displayOptions: GraphDisplayOptions,\n seriesType = ''\n ): SeriesOption & SeriesDatapointInfo {\n const datapointId = dp.__target?.id + dp.fragment + dp.series;\n return {\n datapointId,\n datapointUnit: dp.unit || '',\n // 'id' property is needed as 'seriesId' in tooltip formatter\n id: isMinMaxChart\n ? `${datapointId}/${renderType}${seriesType}`\n : `${datapointId}${seriesType}`,\n name: `${dp.label} (${dp.__target?.['name']})`,\n // datapointLabel used to proper display of tooltip\n datapointLabel: dp.label || '',\n data: Object.entries(dp.values).map(([dateString, values]) => {\n return [dateString, values[0][renderType]];\n }),\n ...(displayOptions.forceMergeDatapoints ? {} : { yAxisIndex: idx }),\n ...this.chartTypesService.getSeriesOptions(dp, isMinMaxChart, renderType)\n };\n }\n\n /**\n * This method creates a general tooltip formatter for the chart.\n * @returns TooltipFormatterCallback<TopLevelFormatterParams>\n */\n private getTooltipFormatter(\n displayOptions: GraphDisplayOptions\n ): TooltipFormatterCallback<TopLevelFormatterParams> {\n return params => {\n if (!Array.isArray(params) || !params[0]?.data) {\n return null;\n }\n const data = params[0].data as [string, ...any[]];\n const XAxisValue: string = data[0];\n const YAxisReadings: string[] = [];\n const allSeries = this.echartsInstance?.getOption()['series'] as CustomSeriesOptions[];\n\n const allDataPointSeries = allSeries.filter(\n series =>\n series['typeOfSeries'] !== 'alarm' &&\n series['typeOfSeries'] !== 'event' &&\n series['typeOfSeries'] !== 'fake'\n );\n\n allDataPointSeries.forEach((series: CustomSeriesOptions) => {\n let value: string;\n const id = series['id'] as string;\n if (id.endsWith('/min')) {\n const minValue = this.findValueForExactOrEarlierTimestamp(\n series['data'] as SeriesValue[],\n XAxisValue\n );\n if (!minValue) {\n return;\n }\n const maxSeries = allDataPointSeries.find(s => s['id'] === id.replace('/min', '/max'));\n if (!maxSeries) {\n return;\n }\n const maxValue = this.findValueForExactOrEarlierTimestamp(\n maxSeries['data'] as SeriesValue[],\n XAxisValue\n );\n if (maxValue === null) {\n return;\n }\n value =\n `<div class=\"d-flex a-i-center separator-top text-default p-t-8 p-b-8\">` +\n `<label class=\"text-12 m-r-8 m-b-0\">${this.datePipe.transform(minValue[0])}</label>` +\n `<div class=\"m-l-auto text-12\" >${minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'} — ${maxValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +\n (series['datapointUnit'] ? ` ${series['datapointUnit']}` : '') +\n `</div></div>`;\n } else if (id.endsWith('/max')) {\n // do nothing, value is handled in 'min' case\n return;\n } else {\n const seriesValue = this.findValueForExactOrEarlierTimestamp(\n series['data'] as SeriesValue[],\n XAxisValue\n );\n if (!seriesValue) {\n return;\n }\n value =\n `<div class=\"d-flex a-i-center separator-top text-default p-t-8 p-b-8\">` +\n `<label class=\"text-12 m-r-8 m-b-0\">${this.datePipe.transform(seriesValue[0])}</label>` +\n `<div class=\"m-l-auto text-12\" >${seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +\n (series['datapointUnit'] ? ` ${series['datapointUnit']}` : '') +\n `</div></div>`;\n }\n\n const itemStyle = series['itemStyle'] as { color: string };\n\n YAxisReadings.push(\n `<div class=\"d-flex a-i-center p-b-8 text-default\"><span class='dlt-c8y-icon-circle m-r-4' style='color: ${itemStyle.color}'></span>` + // color circle\n `<strong>${series['datapointLabel']} </strong></div>` + // name\n `${value}` // single value or min-max range\n );\n });\n\n return `<div inner-e-cbg-component style=\"width: ${this.TOOLTIP_WIDTH}px\">${YAxisReadings.join('')}</div>`;\n };\n }\n\n private findValueForExactOrEarlierTimestamp(\n values: SeriesValue[],\n timestampString: DateString\n ): SeriesValue | null {\n const timestamp = new Date(timestampString).valueOf();\n return values.reduce((acc: SeriesValue | null, curr: SeriesValue) => {\n if (new Date(curr[0]).valueOf() <= timestamp) {\n if (\n acc === null ||\n Math.abs(new Date(curr[0]).valueOf() - timestamp) <\n Math.abs(new Date(acc[0]).valueOf() - timestamp)\n ) {\n return curr;\n }\n }\n return acc;\n }, null);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { from, interval, merge, Observable, Subscription } from 'rxjs';\nimport { IAlarm, IEvent, IMeasurement } from '@c8y/client';\nimport { buffer, map, mergeMap, tap, throttleTime } from 'rxjs/operators';\nimport {\n AlarmOrEventExtended,\n DatapointChartRenderType,\n DatapointRealtimeMeasurements,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n GraphDisplayOptions,\n DpWithValues,\n SeriesValue\n} from '../models';\nimport {\n AlarmRealtimeService,\n EventRealtimeService,\n MeasurementRealtimeService,\n RealtimeMessage\n} from '@c8y/ngx-components';\nimport type { ECharts, SeriesOption } from 'echarts';\nimport { EchartsOptionsService } from './echarts-options.service';\nimport { CustomSeriesOptions } from '../models/chart.model';\n\ntype Milliseconds = number;\n\n@Injectable()\nexport class ChartRealtimeService {\n private INTERVAL: Milliseconds = 1000;\n private MIN_REALTIME_TIMEOUT: Milliseconds = 250;\n private MAX_REALTIME_TIMEOUT: Milliseconds = 5_000;\n private realtimeSubscriptionMeasurements!: Subscription;\n private realtimeSubscriptionAlarmsEvents!: Subscription;\n private realtimeIntervalSubscription!: Subscription;\n private echartsInstance: ECharts | undefined;\n private currentTimeRange: { dateFrom: Date; dateTo: Date } | undefined;\n private lastMeasurements: Map<string, DatapointRealtimeMeasurements> = new Map();\n private pendingAlarmsOrEvents: Map<string, IAlarm | IEvent> = new Map();\n private currentAlarms: IAlarm[] = [];\n private currentEvents: IEvent[] = [];\n\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n private alarmRealtimeService: AlarmRealtimeService,\n private eventRealtimeService: EventRealtimeService,\n private echartsOptionsService: EchartsOptionsService\n ) {}\n\n startRealtime(\n echartsInstance: ECharts,\n datapoints: DatapointsGraphKPIDetails[],\n timeRange: { dateFrom: string; dateTo: string },\n datapointOutOfSyncCallback: (dp: DatapointsGraphKPIDetails) => void,\n timeRangeChangedCallback: (\n timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n ) => void,\n alarmOrEventConfig: AlarmOrEventExtended[] = [],\n displayOptions: GraphDisplayOptions,\n alarms?: IAlarm[],\n events?: IEvent[]\n ) {\n this.echartsInstance = echartsInstance;\n this.currentTimeRange = {\n dateFrom: new Date(timeRange.dateFrom),\n dateTo: new Date(timeRange.dateTo)\n };\n\n const activeAlarmsOrEvents = alarmOrEventConfig.filter(\n alarmOrEvent => alarmOrEvent.__active && !alarmOrEvent.__hidden\n );\n const uniqueAlarmOrEventTargets = Array.from(\n new Set(activeAlarmsOrEvents.map(aOrE => aOrE.__target.id))\n );\n\n if (displayOptions.showOnlyAlarmsOrEvents) {\n this.currentAlarms = alarms ? [...alarms] : [];\n this.currentEvents = events ? [...events] : [];\n\n // Subscribe to realtime alarms/events\n const allAlarmsAndEvents$: Observable<IAlarm | IEvent> = from(uniqueAlarmOrEventTargets).pipe(\n mergeMap(targetId => {\n const alarmsRealtime$: Observable<RealtimeMessage<IAlarm>> =\n this.alarmRealtimeService.onAll$(targetId);\n const eventsRealtime$: Observable<RealtimeMessage<IEvent>> =\n this.eventRealtimeService.onAll$(targetId);\n return merge(alarmsRealtime$, eventsRealtime$).pipe(\n map(realtimeMessage => realtimeMessage.data as IAlarm | IEvent)\n );\n })\n );\n\n this.realtimeSubscriptionAlarmsEvents = allAlarmsAndEvents$.subscribe(alarmOrEvent => {\n if (!alarmOrEvent) return;\n if ('severity' in alarmOrEvent) {\n // Alarm\n if (!this.currentAlarms.some(a => a.id === alarmOrEvent.id)) {\n this.currentAlarms.push(alarmOrEvent as IAlarm);\n }\n } else {\n // Event\n if (!this.currentEvents.some(e => e.id === alarmOrEvent.id)) {\n this.currentEvents.push(alarmOrEvent as IEvent);\n }\n }\n this.updateAlarmsEventsChartRealtime();\n });\n\n const updateThrottleTime: Milliseconds = this.getRealtimeUpdateThrottleTime({\n dateFrom: this.currentTimeRange!.dateFrom.toISOString(),\n dateTo: this.currentTimeRange!.dateTo.toISOString()\n });\n\n this.realtimeIntervalSubscription = interval(this.INTERVAL)\n .pipe(\n tap(() => {\n const windowSize =\n this.currentTimeRange!.dateTo.valueOf() - this.currentTimeRange!.dateFrom.valueOf();\n const now = Date.now();\n this.currentTimeRange = {\n dateFrom: new Date(now - windowSize),\n dateTo: new Date(now)\n };\n timeRangeChangedCallback(this.currentTimeRange);\n this.updateAlarmsEventsChartRealtime();\n }),\n throttleTime(updateThrottleTime)\n )\n .subscribe();\n\n return;\n }\n\n const allAlarmsAndEvents$: Observable<IAlarm | IEvent> = from(uniqueAlarmOrEventTargets).pipe(\n mergeMap(targetId => {\n const alarmsRealtime$: Observable<RealtimeMessage<IAlarm>> =\n this.alarmRealtimeService.onAll$(targetId);\n const eventsRealtime$: Observable<RealtimeMessage<IEvent>> =\n this.eventRealtimeService.onAll$(targetId);\n return merge(alarmsRealtime$, eventsRealtime$).pipe(\n map(realtimeMessage => realtimeMessage.data as IAlarm | IEvent)\n );\n })\n );\n\n const measurementsForDatapoints: Observable<DatapointRealtimeMeasurements>[] = datapoints.map(\n dp => {\n const source$: Observable<IMeasurement> =\n this.measurementRealtime.onCreateOfSpecificMeasurement$(\n dp.fragment,\n dp.series,\n dp.__target?.id\n );\n return source$.pipe(map((measurement: IMeasurement) => ({ datapoint: dp, measurement })));\n }\n );\n const updateThrottleTime: Milliseconds = this.getRealtimeUpdateThrottleTime(timeRange);\n const measurement$ = merge(...measurementsForDatapoints);\n const bufferReset$ = merge(\n measurement$.pipe(throttleTime(updateThrottleTime)),\n interval(this.INTERVAL).pipe(\n tap(() => {\n this.currentTimeRange = {\n dateFrom: new Date((this.currentTimeRange?.dateFrom?.valueOf() || 0) + this.INTERVAL),\n dateTo: new Date((this.currentTimeRange?.dateTo?.valueOf() || 0) + this.INTERVAL)\n };\n timeRangeChangedCallback(this.currentTimeRange);\n }),\n throttleTime(updateThrottleTime)\n )\n ).pipe(throttleTime(this.MIN_REALTIME_TIMEOUT));\n\n this.realtimeSubscriptionMeasurements = measurement$\n .pipe(buffer(bufferReset$))\n .subscribe(measurements => {\n const alarmsOrEvents = Array.from(this.pendingAlarmsOrEvents.values());\n this.pendingAlarmsOrEvents.clear();\n\n if (alarmsOrEvents.length) {\n alarmsOrEvents.forEach(alarmOrEvent => {\n this.updateChartInstance(\n measurements,\n alarmOrEvent,\n displayOptions,\n datapointOutOfSyncCallback\n );\n });\n } else {\n this.updateChartInstance(measurements, null, displayOptions, datapointOutOfSyncCallback);\n }\n\n // Store the last measurements\n measurements.forEach(measurement => {\n this.lastMeasurements.set(measurement.datapoint.fragment, measurement);\n });\n });\n\n this.realtimeSubscriptionAlarmsEvents = allAlarmsAndEvents$\n .pipe(\n map(alarmOrEvent => {\n const foundAlarmOrEvent = activeAlarmsOrEvents.find(\n aOrE => aOrE.filters.type === alarmOrEvent.type\n );\n if (foundAlarmOrEvent) {\n alarmOrEvent['color'] = foundAlarmOrEvent.color;\n alarmOrEvent['selectedDatapoint'] = foundAlarmOrEvent.selectedDatapoint;\n const key = String(alarmOrEvent.id || alarmOrEvent.creationTime);\n this.pendingAlarmsOrEvents.set(key, alarmOrEvent);\n }\n return null;\n })\n )\n .subscribe();\n }\n\n stopRealtime() {\n this.realtimeSubscriptionMeasurements?.unsubscribe();\n this.realtimeSubscriptionAlarmsEvents?.unsubscribe();\n this.realtimeIntervalSubscription?.unsubscribe();\n }\n\n /**\n * Updates the chart with the current alarms and events data. Only used when no active datapoints are selected.\n */\n private updateAlarmsEventsChartRealtime() {\n const series = this.echartsOptionsService.createAlarmEventTypeSeries(\n this.currentAlarms,\n this.currentEvents\n );\n this.echartsInstance?.setOption({\n series,\n xAxis: {\n min: this.currentTimeRange?.dateFrom,\n max: this.currentTimeRange?.dateTo\n },\n dataZoom: [\n {\n type: 'inside',\n startValue: this.currentTimeRange?.dateFrom?.valueOf(),\n endValue: this.currentTimeRange?.dateTo?.valueOf()\n }\n ]\n });\n }\n\n private removeValuesBeforeTimeRange(series: SeriesOption): SeriesValue[] {\n const firstValidValueByDateIndex = (series.data as SeriesValue[]).findIndex(\n ([dateString, _]) => {\n return new Date(dateString) >= (this.currentTimeRange?.dateFrom || new Date());\n }\n );\n if (firstValidValueByDateIndex > 1) {\n // we need one value before dateFrom for chart lines to be extended to the left edge of the graph\n series.data = (series.data as SeriesValue[]).slice(firstValidValueByDateIndex - 1);\n }\n return series.data as SeriesValue[];\n }\n\n private getRealtimeUpdateThrottleTime(timeRange: {\n dateFrom: string;\n dateTo: string;\n }): Milliseconds {\n const timeRangeInMs =\n new Date(timeRange.dateTo).valueOf() - new Date(timeRange.dateFrom).valueOf();\n const calculatedThrottleTime = Math.round(timeRangeInMs / 1000);\n if (calculatedThrottleTime < this.MIN_REALTIME_TIMEOUT) {\n return this.MIN_REALTIME_TIMEOUT;\n } else if (calculatedThrottleTime > this.MAX_REALTIME_TIMEOUT) {\n return this.MAX_REALTIME_TIMEOUT;\n }\n return calculatedThrottleTime;\n }\n\n private updateChartInstance(\n receivedMeasurements: DatapointRealtimeMeasurements[],\n alarmOrEvent: IAlarm | IEvent | null,\n displayOptions: GraphDisplayOptions,\n datapointOutOfSyncCallback: (dp: DatapointsGraphKPIDetails) => void\n ) {\n const isEvent = (item: IAlarm | IEvent): item is IEvent => !('severity' in item);\n const isAlarm = (item: IAlarm | IEvent): item is IAlarm => 'severity' in item;\n\n const seriesDataToUpdate = new Map<DatapointsGraphKPIDetails, IMeasurement[]>();\n\n receivedMeasurements.forEach(({ datapoint, measurement }) => {\n if (!seriesDataToUpdate.has(datapoint)) {\n seriesDataToUpdate.set(datapoint, []);\n }\n seriesDataToUpdate.get(datapoint)?.push(measurement);\n });\n\n let allDataSeries = this.echartsInstance?.getOption()['series'] as CustomSeriesOptions[];\n\n seriesDataToUpdate.forEach((measurements, datapoint) => {\n const newValues: SeriesValue[] = measurements.map(m => [\n m.time as string,\n m[datapoint.fragment][datapoint.series].value\n ]);\n const datapointId = datapoint.__target?.id + datapoint.fragment + datapoint.series;\n const seriesMatchingDatapoint = allDataSeries.find(s => s['datapointId'] === datapointId);\n if (!seriesMatchingDatapoint) {\n return;\n }\n const seriesDataToUpdate = seriesMatchingDatapoint['data'] as SeriesValue[];\n seriesDataToUpdate.push(...newValues);\n\n seriesMatchingDatapoint['data'] = this.removeValuesBeforeTimeRange(seriesMatchingDatapoint);\n\n if (alarmOrEvent) {\n const renderType: DatapointChartRenderType = datapoint.renderType || 'min';\n const dp: DpWithValues = {\n ...datapoint,\n values: seriesMatchingDatapoint['data'] as {\n [date: string]: { min: number; max: number }[];\n }\n };\n\n if (isEvent(alarmOrEvent)) {\n // if event series with the same id already exists, return\n const eventExists = allDataSeries.some(series =>\n (series['data'] as string[][]).some(\n data => data[0] === (alarmOrEvent as IEvent).creationTime\n )\n );\n if (eventExists) {\n return;\n }\n const newEventSeries = this.echartsOptionsService.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n [alarmOrEvent],\n 'event',\n displayOptions,\n alarmOrEvent.creationTime,\n null,\n true\n );\n allDataSeries.push(...newEventSeries);\n } else if (isAlarm(alarmOrEvent)) {\n const alarmExists = allDataSeries.some((series: CustomSeriesOptions) => {\n const seriesData = series['data'] as SeriesValue[];\n return seriesData.some(\n (data: SeriesValue) => data[0] === (alarmOrEvent as IEvent).creationTime\n );\n });\n if (alarmExists) {\n const alarmSeries = allDataSeries.filter((series: CustomSeriesOptions) => {\n const seriesData = series['data'] as SeriesValue[];\n return seriesData.some(\n (data: SeriesValue) => data[0] === (alarmOrEvent as IAlarm).creationTime\n );\n });\n // remove all matching alarm series which are in the array\n alarmSeries.forEach(series => {\n allDataSeries = allDataSeries.filter(s => s['id'] !== series['id']);\n });\n\n const newAlarmSeries = this.echartsOptionsService.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n [alarmOrEvent],\n 'alarm',\n displayOptions,\n (alarmOrEvent as IAlarm).creationTime,\n null,\n true\n );\n allDataSeries.push(...newAlarmSeries);\n } else {\n const newAlarmSeries = this.echartsOptionsService.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n [alarmOrEvent],\n 'alarm',\n displayOptions,\n (alarmOrEvent as IEvent).id,\n null,\n true\n );\n allDataSeries.push(...newAlarmSeries);\n }\n }\n }\n\n this.checkForValuesAfterTimeRange(\n seriesMatchingDatapoint['data'] as SeriesValue[],\n datapoint,\n datapointOutOfSyncCallback\n );\n });\n\n this.echartsInstance?.setOption({\n dataZoom: [\n {\n type: 'inside',\n startValue: this.currentTimeRange?.dateFrom.valueOf(),\n endValue: this.currentTimeRange?.dateTo.valueOf()\n }\n ],\n xAxis: {\n max: this.currentTimeRange?.dateTo\n },\n series: allDataSeries\n });\n }\n\n private checkForValuesAfterTimeRange(\n data: SeriesValue[],\n datapoint: DatapointsGraphKPIDetails,\n datapointOutOfSyncCallback: (dp: DatapointsGraphKPIDetails) => void\n ) {\n const now = new Date();\n const valueAfterNowExists = data.some(([dateString, _]: SeriesValue) => {\n return new Date(dateString).valueOf() > now.valueOf();\n });\n if (valueAfterNowExists) {\n datapointOutOfSyncCallback(datapoint);\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule, DynamicComponentAlertAggregator } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-chart-alerts',\n templateUrl: './chart-alerts.component.html',\n standalone: true,\n imports: [CommonModule]\n})\nexport class ChartAlertsComponent {\n @Input() alerts: DynamicComponentAlertAggregator;\n}\n","<div\n class=\"overlay-center-vertically d-col p-16 p-r-24 p-l-24\"\n *ngIf=\"alerts?.anyAlertExists$ | async\"\n>\n <ng-container *ngFor=\"let alertGroup of alerts?.alertGroups\">\n <div\n class=\"alert\"\n role=\"alert\"\n *ngIf=\"alertGroup.value.alerts.length\"\n [ngClass]=\"'alert-' + alertGroup.type\"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\"\n >\n <span aria-hidden=\"true\">×</span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n <p *ngFor=\"let alertItem of alertGroup.value.alerts\">\n {{ alertItem.text | translate }}\n </p>\n <label\n class=\"c8y-checkbox m-t-16\"\n title=\"{{ 'Don\\'t show again' | translate }}\"\n >\n <input\n type=\"checkbox\"\n #dismissPermanently\n />\n <span></span>\n <span>{{ \"Don't show again\" | translate }}</span>\n </label>\n </div>\n </ng-container>\n</div>\n","import { Injectable } from '@angular/core';\nimport { EventService, IEvent, IFetchOptions } from '@c8y/client';\nimport { EventDetails } from '@c8y/ngx-components/alarm-event-selector';\n\n@Injectable()\nexport class ChartEventsService {\n constructor(private eventService: EventService) {}\n\n /**\n * List events for the given event details.\n * @param params Additonal fetchOptions\n * @param events List of event types with details like color, target, etc.\n * @returns List of events for the given event details\n */\n async listEvents(params?: any, events?: EventDetails[]): Promise<IEvent[]> {\n if (!events) {\n return [];\n }\n const promises = events.map(event => {\n const fetchOptions: IFetchOptions = {\n source: event.__target.id,\n type: event.filters.type,\n withTotalPages: true,\n pageSize: 1000,\n ...params\n };\n return this.eventService.list(fetchOptions).then(result => {\n result.data.forEach(iEvent => {\n iEvent['color'] = event.color;\n iEvent['selectedDatapoint'] = event.selectedDatapoint;\n });\n return result.data;\n });\n });\n const result = await Promise.all(promises);\n return result.flat();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AlarmService, IAlarm, IFetchOptions } from '@c8y/client';\nimport { AlarmDetailsExtended } from '../models';\n\n@Injectable()\nexport class ChartAlarmsService {\n constructor(private alarmService: AlarmService) {}\n\n /**\n * List alarms for the given alarm details.\n * @param params Additonal fetchOptions\n * @param alarms List of alarm types with details like color, target, etc.\n * @returns List of alarms for the given alarm details\n */\n async listAlarms(params?: any, alarms?: AlarmDetailsExtended[]): Promise<IAlarm[]> {\n if (!alarms) {\n return [];\n }\n const promises = alarms.map(alarm => {\n if (alarm.__severity && alarm.__severity?.length > 0) {\n const severities = alarm.__severity.join(',');\n params = {\n ...params,\n severity: severities\n };\n }\n if (alarm.__status && alarm.__status?.length > 0) {\n const statuses = alarm.__status.join(',');\n params = {\n ...params,\n status: statuses\n };\n }\n const fetchOptions: IFetchOptions = {\n source: alarm.__target.id,\n type: alarm.filters.type,\n withTotalPages: true,\n pageSize: 1000,\n ...params\n };\n return this.alarmService.list(fetchOptions).then(result => {\n result.data.forEach(iAlarm => {\n iAlarm['color'] = alarm.color;\n iAlarm['selectedDatapoint'] = alarm.selectedDatapoint;\n });\n return result.data;\n });\n });\n const result = await Promise.all(promises);\n return result.flat();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SelectedDatapoint } from '@c8y/ngx-components/alarm-event-selector';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatapointsGraphWidgetConfig } from '../models';\n\n@Injectable()\nexport class ChartHelpersService {\n /**\n * Cleans the widget configuration which will be sent to Gainsight by removing unnecessary properties.\n * @param config The widget configuration to clean.\n * @returns The cleaned widget configuration.\n */\n getConfigSummaryForGainsight(config: DatapointsGraphWidgetConfig) {\n return {\n datapointCount: config.datapoints?.length ?? 0,\n alarmsEventsCount: config.alarmsEventsConfigs?.length ?? 0,\n interval: config.interval,\n forceMergeDatapoints: config.forceMergeDatapoints,\n mergeMatchingDatapoints: config.mergeMatchingDatapoints,\n showSlider: config.showSlider,\n widgetInstanceGlobalTimeContext: config.widgetInstanceGlobalTimeContext,\n dateFrom: config.dateFrom,\n dateTo: config.dateTo\n };\n }\n\n findMatchingDatapoint(\n datapoints: KPIDetails[],\n selected: KPIDetails | SelectedDatapoint | null\n ): KPIDetails | undefined {\n if (!selected) return undefined;\n\n return datapoints.find(\n dp =>\n this.getTargetId(dp) === this.getTargetId(selected) &&\n dp.fragment === selected.fragment &&\n dp.series === selected.series\n );\n }\n\n private getTargetId(obj: any): string | undefined {\n return obj?.__target?.id ?? obj?.target;\n }\n}\n","import { NgForOf, NgIf } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n inject\n} from '@angular/core';\nimport { FormsModule, C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { SelectedDatapoint } from '@c8y/ngx-components/alarm-event-selector';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { ChartHelpersService } from '../services/chart-helpers.service';\n\n@Component({\n selector: 'c8y-select-aggregated-datapoint',\n templateUrl: './select-aggregated-datapoint.component.html',\n host: {\n class: 'd-contents'\n },\n standalone: true,\n imports: [\n FormsModule,\n C8yTranslatePipe,\n PopoverModule,\n TooltipModule,\n BsDropdownModule,\n A11yModule,\n IconDirective,\n NgIf,\n NgForOf\n ]\n})\nexport class SelectAggregatedDatapointComponent implements OnChanges {\n @Input() activeDatapoints: KPIDetails[] = [];\n @Input() value: KPIDetails | null = null;\n @Output() valueChange = new EventEmitter<SelectedDatapoint>();\n\n private readonly chartHelpersService = inject(ChartHelpersService);\n\n selectedDatapointLabel = gettext('Select data point') as string;\n selectedDatapointColor = '';\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['value'] || changes['activeDatapoints']) {\n this.updateSelectedDatapointInfo();\n }\n }\n\n changeDatapointSelection(datapoint: KPIDetails) {\n const trimmedDatapoint: SelectedDatapoint = {\n target: datapoint.__target.id as string,\n fragment: datapoint.fragment,\n series: datapoint.series\n };\n this.valueChange.emit(trimmedDatapoint);\n }\n\n private updateSelectedDatapointInfo() {\n if (!this.value) {\n return;\n }\n\n const found = this.chartHelpersService.findMatchingDatapoint(this.activeDatapoints, this.value);\n\n if (this.value && !found) {\n this.selectedDatapointLabel = this.value.label || '';\n this.selectedDatapointColor = this.value.color || '';\n return;\n }\n\n this.selectedDatapointLabel = found?.label || '';\n this.selectedDatapointColor = found?.color || '';\n }\n}\n","<div\n class=\"dropdown dropup\"\n dropdown\n #datapointDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointDropdown.isOpen\"\n *ngIf=\"activeDatapoints?.length > 0\"\n>\n <ng-template #selectedDatapoint>\n <div class=\"text-left\">\n <strong>{{ selectedDatapointLabel }}</strong>\n <br />\n {{ 'Click to change' | translate }}\n </div>\n </ng-template>\n <button\n class=\"btn btn-default d-flex a-i-center dropdown-toggle c8y-dropdown\"\n title=\"{{'Select a data point to view its aggregated values in the time slider.' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <span\n [style.background-color]=\"selectedDatapointColor\"\n style=\"display: inline-block; width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"caret\"></span>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n <li *ngFor=\"let datapoint of activeDatapoints\">\n <button\n class=\"p-r-8\"\n type=\"button\"\n (click)=\"changeDatapointSelection(datapoint)\"\n >\n <span\n class=\"d-inline-block m-r-4\"\n [style.background-color]=\"datapoint?.color\"\n style=\"width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"text-truncate\" style=\"max-width:220px!important\" title=\"{{ datapoint?.label || `${datapoint?.fragment}-${datapoint?.series}` }}\">\n {{ datapoint?.label || `${datapoint?.fragment}-${datapoint?.series}` }}\n </span>\n <span\n class=\"m-l-auto flex-no-shrink\"\n *ngIf=\"\n datapoint.__target.id === value?.__target.id &&\n datapoint.fragment === value?.fragment &&\n datapoint.series === value?.series\n \"\n >\n <i\n class=\"text-success h4\"\n [c8yIcon]=\"'check'\"\n ></i>\n </span>\n </button>\n </li>\n </ul>\n</div>\n<button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select a data point to view its aggregated values in the time slider.' | translate\n }}\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n></button>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport type { ECharts, EChartsOption, SeriesOption } from 'echarts';\nimport {\n AlarmDetailsExtended,\n AlarmOrEventExtended,\n CHART_VIEW_CONTEXT,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DpWithValues,\n EventDetailsExtended,\n MarkLineData,\n SeriesDatapointInfo\n} from './models';\nimport { BehaviorSubject, defer, forkJoin, lastValueFrom, Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\nimport {\n AlarmRealtimeService,\n CoreModule,\n DismissAlertStrategy,\n DynamicComponentAlert,\n DynamicComponentAlertAggregator,\n EventRealtimeService,\n MeasurementRealtimeService,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { EchartsOptionsService } from './services/echarts-options.service';\nimport { ChartRealtimeService } from './services/chart-realtime.service';\nimport type {\n CallbackDataParams,\n ECActionEvent,\n TooltipFormatterCallback\n} from 'echarts/types/src/util/types';\nimport { ChartTypesService } from './services/chart-types.service';\nimport { CommonModule } from '@angular/common';\nimport { NGX_ECHARTS_CONFIG, NgxEchartsModule } from 'ngx-echarts';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { YAxisService } from './services/y-axis.service';\nimport { ChartAlertsComponent } from './chart-alerts/chart-alerts.component';\nimport { aggregationType, AlarmStatus, IAlarm, IEvent, MeasurementService } from '@c8y/client';\nimport { ChartEventsService } from './services/chart-events.service';\nimport { ChartAlarmsService } from './services/chart-alarms.service';\nimport { EchartsCustomOptions } from './models/chart.model';\nimport { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';\nimport {\n AlarmSeverityToIconPipe,\n AlarmSeverityToLabelPipe,\n AlarmsModule\n} from '@c8y/ngx-components/alarms';\nimport { Interval, INTERVALS } from '@c8y/ngx-components/interval-picker';\nimport { SelectAggregatedDatapointComponent } from './select-aggregated-datapoint/select-aggregated-datapoint.component';\nimport { SelectedDatapoint } from '@c8y/ngx-components/alarm-event-selector';\n\n@Component({\n selector: 'c8y-charts',\n templateUrl: './charts.component.html',\n providers: [\n { provide: NGX_ECHARTS_CONFIG, useFactory: () => ({ echarts: () => import('echarts') }) },\n ChartRealtimeService,\n MeasurementRealtimeService,\n AlarmRealtimeService,\n EventRealtimeService,\n ChartTypesService,\n EchartsOptionsService,\n YAxisService,\n AlarmSeverityToIconPipe,\n AlarmSeverityToLabelPipe\n ],\n standalone: true,\n imports: [\n CommonModule,\n CoreModule,\n NgxEchartsModule,\n TooltipModule,\n PopoverModule,\n ChartAlertsComponent,\n AlarmsModule,\n SelectAggregatedDatapointComponent\n ]\n})\nexport class ChartsComponent implements OnChanges, OnInit, OnDestroy {\n chartOption$: Observable<EChartsOption>;\n echartsInstance!: ECharts;\n showLoadMore = false;\n alarms: IAlarm[] = [];\n events: IEvent[] = [];\n sliderZoomUsed = false;\n activeDatapoints: DatapointsGraphKPIDetails[] = [];\n @Input() config!: DatapointsGraphWidgetConfig;\n @Input() alerts!: DynamicComponentAlertAggregator;\n @Input() chartViewContext: CHART_VIEW_CONTEXT;\n @Output() configChangeOnZoomOut = new EventEmitter<{\n dateFrom: Date;\n dateTo: Date;\n interval?: Interval['id'];\n }>();\n @Output() timeRangeChangeOnRealtime = new EventEmitter<\n Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n >();\n @Output() datapointOutOfSync = new EventEmitter<DatapointsGraphKPIDetails>();\n @Output() updateAlarmsAndEvents = new EventEmitter<AlarmOrEventExtended[]>();\n @Output() isMarkedAreaEnabled = new EventEmitter<boolean>();\n @Output() updateActiveDatapoints = new EventEmitter<DatapointsGraphKPIDetails[]>();\n @Output() updateAggregatedSliderDatapoint = new EventEmitter<SelectedDatapoint | null>();\n @ViewChild('chart') chart: ElementRef;\n CHART_VIEW_CONTEXT = CHART_VIEW_CONTEXT;\n private configChangedSubject = new BehaviorSubject<void | null>(null);\n\n private readonly measurementService = inject(MeasurementService);\n private readonly echartsOptionsService = inject(EchartsOptionsService);\n private readonly chartRealtimeService = inject(ChartRealtimeService);\n private readonly chartEventsService = inject(ChartEventsService);\n private readonly chartAlarmsService = inject(ChartAlarmsService);\n private readonly widgetTimeContextDateRangeService = inject(WidgetTimeContextDateRangeService);\n private loadedTimeRange: { dateFrom: string; dateTo: string } | null = null;\n\n constructor() {\n this.chartOption$ = this.configChangedSubject.pipe(\n switchMap(() => this.loadAlarmsAndEvents()),\n switchMap(() => this.fetchSeriesForDatapoints$()),\n switchMap((datapointsWithValues: DpWithValues[]) => {\n if (datapointsWithValues.length === 0 && this.config.alarmsEventsConfigs?.length === 0) {\n this.echartsInstance?.clear();\n this.showLoadMore = false;\n return of(this.getDefaultChartOptions());\n }\n this.loadedTimeRange = { ...this.getTimeRange() };\n return this.getChartOptions(datapointsWithValues);\n }),\n tap(v => {\n if (v['empty']) {\n return;\n }\n this.chartRealtimeService.stopRealtime();\n this.startRealtimeIfPossible();\n\n if (this.echartsInstance) {\n /**\n * * Set the chart options\n * First parameter is the options to set\n * Second parameter is a boolean to indicate that the chart should be re-rendered as we do not want to merge.\n * Third parameter is a boolean to indicate that we want to lazy load the chart.\n */\n this.echartsInstance.setOption(v, true, true);\n const options = this.echartsInstance.getOption();\n const dataZoom = options['dataZoom'][0];\n if (dataZoom?.start !== 0) {\n this.showLoadMore = false;\n }\n }\n this.sliderZoomUsed = false;\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const currentTimeRange = this.getTimeRange();\n // Old aggregation supported NONE for aggregation in the configuration.\n // for backward compatibility replacing NONE with null\n if (changes.config && (this.config.aggregation as any) === 'NONE') {\n this.config.aggregation = null;\n }\n // Check if the current time range is within the loaded time range to avoid unnecessary updates\n if (\n this.loadedTimeRange &&\n new Date(currentTimeRange.dateFrom) >= new Date(this.loadedTimeRange.dateFrom) &&\n new Date(currentTimeRange.dateTo) <= new Date(this.loadedTimeRange.dateTo) &&\n changes.config.previousValue?.dateFrom !== changes.config.currentValue.dateFrom &&\n changes.config.previousValue?.dateTo !== changes.config.currentValue.dateTo\n ) {\n return;\n }\n this.configChangedSubject.next();\n }\n\n ngOnInit() {\n if (this.alerts) {\n this.alerts.setAlertGroupDismissStrategy(\n 'warning',\n DismissAlertStrategy.TEMPORARY_OR_PERMANENT\n );\n }\n }\n\n ngOnDestroy() {\n this.chartRealtimeService.stopRealtime();\n }\n\n onChartInit(ec: ECharts) {\n this.echartsInstance = ec;\n this.echartsOptionsService.echartsInstance = this.echartsInstance;\n this.startRealtimeIfPossible();\n\n const dataZoomHandler = (evt: ECActionEvent) => {\n if (evt.batch?.[0]?.start === 0 || evt['start'] === 0) {\n this.showLoadMore = true;\n }\n\n const options = this.echartsInstance.getOption();\n const dataZoom = options['dataZoom'][0];\n this.sliderZoomUsed = true;\n this.configChangeOnZoomOut.emit({\n dateFrom: new Date(dataZoom['startValue']),\n dateTo: new Date(dataZoom['endValue']),\n interval: 'custom'\n });\n this.echartsInstance.setOption(options);\n this.chartRealtimeService.stopRealtime();\n };\n\n const debouncedDataZoomHandler = this.config.realtime\n ? dataZoomHandler\n : this.debounce(dataZoomHandler, 1000);\n\n this.echartsInstance.on('dataZoom', debouncedDataZoomHandler);\n this.echartsInstance.on('click', this.onChartClick.bind(this));\n\n let originalFormatter:\n | TooltipFormatterCallback<TopLevelFormatterParams>\n | string\n | null\n | undefined = null;\n\n this.echartsInstance.on('mouseover', (params: any) => {\n if (params?.componentType !== 'markLine' && params?.componentType !== 'markPoint') {\n return;\n }\n\n const options = this.echartsInstance.getOption() as EChartsOption;\n if (!options.tooltip || !Array.isArray(options.tooltip) || !options.tooltip[0]) {\n return;\n }\n originalFormatter = originalFormatter ?? options['tooltip'][0].formatter;\n\n const updatedOptions: Partial<SeriesOption> = { tooltip: options['tooltip'][0] };\n\n if (!updatedOptions.tooltip) {\n return;\n }\n updatedOptions.tooltip.formatter = (tooltipParams: CallbackDataParams) => {\n return this.echartsOptionsService.getTooltipFormatterForAlarmAndEvents(\n tooltipParams,\n params,\n this.events,\n this.alarms,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,\n forceMergeDatapoints: this.config.forceMergeDatapoints || false,\n showLabelAndUnit: this.config.showLabelAndUnit || false,\n showSlider: this.config.showSlider || false,\n numberOfDecimalPlaces: this.config.numberOfDecimalPlaces ?? 2\n }\n );\n };\n\n this.echartsInstance.setOption(updatedOptions);\n });\n\n this.echartsInstance.on('mouseout', () => {\n const options = this.echartsInstance.getOption() as EchartsCustomOptions;\n if (originalFormatter) {\n options['tooltip'][0].formatter = originalFormatter;\n this.echartsInstance.setOption(options);\n }\n });\n }\n\n onChartClick(params: { data: { itemType: string } }): void {\n const options = this.echartsInstance.getOption();\n if (!this.isAlarmOrEventClick(params)) {\n this.echartsInstance.setOption({\n tooltip: { triggerOn: 'mousemove' },\n series: [{ markArea: { data: [] }, markLine: { data: [] } }]\n });\n return;\n }\n\n const clickedAlarms = this.alarms.filter(alarm => alarm.type === params.data.itemType);\n const clickedEvents = this.events.filter(event => event.type === params.data.itemType);\n\n if (clickedEvents.length > 0) {\n const updatedOptions = {\n tooltip: {\n enterable: true,\n triggerOn: 'click'\n }\n };\n\n this.echartsInstance.setOption(updatedOptions);\n return;\n }\n\n this.isMarkedAreaEnabled.emit(this.hasMarkArea(options));\n const updatedOptions = !this.hasMarkArea(options)\n ? {\n tooltip: { enterable: true, triggerOn: 'click' },\n series: [\n {\n markArea: { label: { show: false }, data: this.getMarkedAreaData(clickedAlarms) },\n markLine: {\n showSymbol: true,\n symbol: ['none', 'none'],\n data: this.getMarkedLineData(clickedAlarms)\n }\n }\n ]\n }\n : // if markArea already exists, remove it and remove lastUpdated from markLine\n {\n tooltip: { triggerOn: 'mousemove' },\n series: [{ markArea: { data: [] }, markLine: { data: [] } }]\n };\n\n this.echartsInstance.setOption(updatedOptions);\n }\n\n isAlarmOrEventClick(params: any): boolean {\n return (\n this.alarms.some(alarm => alarm.type === params.data.itemType) ||\n this.events.some(event => event.type === params.data.itemType)\n );\n }\n\n hasMarkArea(options: any): boolean {\n return options?.series?.[0]?.markArea?.data?.length > 0;\n }\n\n saveAsImage(): void {\n this.echartsInstance.setOption({ legend: { show: true } });\n const url = this.echartsInstance.getDataURL({\n pixelRatio: 2,\n backgroundColor: '#fff',\n type: 'png'\n });\n const link = document.createElement('a');\n link.href = url;\n link.download = 'datapoints-graph-screenshot';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n this.echartsInstance.setOption({ legend: { show: false } });\n }\n\n loadMoreData(): void {\n const currentTimeRangeInMs = this.echartsOptionsService.calculateExtendedIntervalInMs(\n this.config.interval || 'custom',\n {\n dateTo: this.widgetTimeContextDateRangeService.initialTimeRange().dateTo,\n dateFrom: this.widgetTimeContextDateRangeService.initialTimeRange().dateFrom\n }\n );\n this.widgetTimeContextDateRangeService.updateInitialTimeRange({\n dateFrom: new Date(\n new Date(this.widgetTimeContextDateRangeService.initialTimeRange().dateFrom).valueOf() -\n currentTimeRangeInMs / 4\n ).toISOString(),\n dateTo: this.widgetTimeContextDateRangeService.initialTimeRange().dateTo,\n interval: 'custom'\n });\n const options = this.echartsInstance.getOption();\n const dataZoom = options['dataZoom'][0];\n this.configChangeOnZoomOut.emit({\n dateFrom: new Date(dataZoom['startValue']),\n dateTo: new Date(dataZoom['endValue']),\n interval: 'custom'\n });\n this.showLoadMore = false;\n }\n\n debounce<T extends (...args: any[]) => void>(\n func: T,\n wait: number\n ): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n }\n\n /**\n * Toggles the visibility of a series in the chart based on the provided datapoint.\n * @param datapoint - The datapoint to toggle visibility for.\n */\n toggleDatapointSeriesVisibility(datapoint: DatapointsGraphKPIDetails): void {\n const series = this.echartsInstance.getOption().series as (SeriesOption &\n SeriesDatapointInfo)[];\n const seriesToUpdate = series.find(\n s => s.datapointId === `${datapoint.__target?.id}${datapoint.fragment}${datapoint.series}`\n );\n if (seriesToUpdate) {\n this.echartsInstance.dispatchAction({\n type: 'legendToggleSelect',\n name: seriesToUpdate.name\n });\n }\n }\n\n /**\n * Toggles the visibility of a series in the chart based on the provided alarm or event.\n * @param alarmOrEvent - The alarm or event to toggle visibility for.\n */\n toggleAlarmEventSeriesVisibility(\n alarmOrEvent: AlarmDetailsExtended | EventDetailsExtended\n ): void {\n const series = this.echartsInstance.getOption().series as (SeriesOption &\n SeriesDatapointInfo)[];\n const seriesToUpdate = series.filter(\n s =>\n s.name === `${alarmOrEvent.label}-markPoint` || s.name === `${alarmOrEvent.label}-markLine`\n );\n if (seriesToUpdate) {\n seriesToUpdate.forEach(s => {\n this.echartsInstance.dispatchAction({\n type: 'legendToggleSelect',\n name: s.name\n });\n });\n }\n }\n\n private getDefaultChartOptions(): EChartsOption {\n return {\n title: {\n text: gettext('No data available.'),\n left: 'center',\n top: 'center',\n textStyle: { fontSize: 30 }\n },\n empty: true,\n xAxis: { type: 'category', data: [] },\n yAxis: { type: 'value' },\n series: []\n };\n }\n\n private getMarkedAreaData(clickedAlarms: IAlarm[]) {\n const timeRange = this.getTimeRange();\n const clearedAlarmColor = 'rgba(221,255,221,1.00)';\n const activeAlarmColor = 'rgba(255, 173, 177, 0.4)';\n\n return clickedAlarms.map(clickedAlarm => {\n return [\n {\n name: clickedAlarm.type,\n xAxis: clickedAlarm.creationTime,\n itemStyle: {\n color:\n clickedAlarm.status === AlarmStatus.CLEARED ? clearedAlarmColor : activeAlarmColor\n }\n },\n {\n xAxis:\n clickedAlarm['lastUpdated'] === clickedAlarm.creationTime ||\n clickedAlarm.status !== AlarmStatus.CLEARED\n ? timeRange.dateTo\n : clickedAlarm['lastUpdated']\n }\n ];\n });\n }\n\n private getMarkedLineData(clickedAlarms: IAlarm[]) {\n return clickedAlarms.reduce<MarkLineData[]>((acc, alarm) => {\n const isClickedAlarmCleared = alarm.status === AlarmStatus.CLEARED;\n if (isClickedAlarmCleared) {\n return acc.concat([\n {\n xAxis: alarm.creationTime,\n itemType: alarm.type,\n label: { show: false, formatter: () => alarm.type },\n itemStyle: { color: alarm['color'] }\n },\n {\n xAxis: alarm['lastUpdated'],\n itemType: alarm.type,\n label: { show: false, formatter: () => alarm.type },\n itemStyle: { color: alarm['color'] }\n }\n ]);\n }\n return acc.concat([\n {\n xAxis: alarm.creationTime,\n itemType: alarm.type,\n label: { show: false, formatter: () => alarm.type },\n itemStyle: { color: alarm['color'] }\n }\n ]);\n }, []);\n }\n\n private async loadAlarmsAndEvents(customTimeRange?: {\n dateFrom: string;\n dateTo: string;\n }): Promise<void> {\n const timeRange = this.getTimeRange();\n const updatedTimeRange = {\n lastUpdatedFrom: customTimeRange ? customTimeRange.dateFrom : timeRange.dateFrom,\n createdTo: customTimeRange ? customTimeRange.dateTo : timeRange.dateTo\n };\n if (!this.config.alarmsEventsConfigs) return;\n const visibleAlarmsOrEvents = this.config.alarmsEventsConfigs?.filter(\n alarmOrEvent => !alarmOrEvent.__hidden && alarmOrEvent.__active\n );\n const alarms = visibleAlarmsOrEvents?.filter(\n alarmOrEvent => alarmOrEvent.timelineType === 'ALARM'\n ) as AlarmDetailsExtended[];\n const events = visibleAlarmsOrEvents?.filter(\n alarmOrEvent => alarmOrEvent.timelineType === 'EVENT'\n ) as EventDetailsExtended[];\n\n const [listedEvents, listedAlarms] = await Promise.all([\n this.chartEventsService.listEvents(updatedTimeRange, events),\n this.chartAlarmsService.listAlarms(updatedTimeRange, alarms)\n ]);\n\n this.events = listedEvents;\n this.alarms = listedAlarms;\n await this.addActiveAlarms(alarms);\n\n this.updateAlarmsAndEvents.emit(this.config.alarmsEventsConfigs);\n }\n\n private startRealtimeIfPossible(): void {\n this.activeDatapoints = this.config?.datapoints?.filter(dp => dp.__active);\n if (\n (this.activeDatapoints || this.config.alarmsEventsConfigs?.length > 0) &&\n this.config.realtime &&\n this.echartsInstance\n ) {\n const showOnlyAlarmsOrEvents =\n this.config.alarmsEventsConfigs?.length > 0 && this.activeDatapoints?.length === 0;\n this.chartRealtimeService.startRealtime(\n this.echartsInstance,\n this.activeDatapoints,\n this.getTimeRange(),\n dp => this.datapointOutOfSync.emit(dp),\n timeRange => this.timeRangeChangeOnRealtime.emit(timeRange),\n this.config.alarmsEventsConfigs,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,\n forceMergeDatapoints: this.config.forceMergeDatapoints || false,\n showLabelAndUnit: this.config.showLabelAndUnit || false,\n showSlider: this.config.showSlider || false,\n showOnlyAlarmsOrEvents\n },\n this.alarms,\n this.events\n );\n }\n }\n\n /*\n This method should check and add active alarms from the begining of time to the alarm array\n */\n private async addActiveAlarms(alarms: AlarmDetailsExtended[]): Promise<void> {\n const timeRange = this.getTimeRange();\n const params = {\n dateFrom: '1970-01-01T01:00:00+01:00',\n dateTo: timeRange.dateTo,\n status: AlarmStatus.ACTIVE\n };\n\n const activeAlarms = await this.chartAlarmsService.listAlarms(params, alarms);\n this.config.activeAlarmTypesOutOfRange = [];\n // iterate through the activeAlarms and check if the alarm is in the alarms array, if not update the config.activeAlarmTypesOutOfRange prop\n activeAlarms.forEach(activeAlarm => {\n const alarmType = activeAlarm.type;\n const alarm = this.alarms.find(alarm => alarm.type === alarmType);\n if (!alarm && this.config.activeAlarmTypesOutOfRange) {\n this.config.activeAlarmTypesOutOfRange.push(alarmType);\n }\n });\n }\n\n private async getChartOptions(datapointsWithValues: DpWithValues[]): Promise<EChartsOption> {\n const timeRange = { ...this.getTimeRange(), interval: this.config.interval };\n const sliderPositionMode = this.getSliderPositionMode();\n if (\n (!this.activeDatapoints || this.activeDatapoints.length === 0) &&\n this.config.alarmsEventsConfigs?.length > 0\n ) {\n return this.echartsOptionsService.getChartOptions(\n datapointsWithValues,\n timeRange,\n {\n YAxis: this.config.yAxisSplitLines || false,\n XAxis: this.config.xAxisSplitLines || false\n },\n this.events,\n this.alarms,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: false,\n forceMergeDatapoints: false,\n showLabelAndUnit: false,\n showSlider: false,\n showOnlyAlarmsOrEvents: true\n }\n );\n }\n if (!this.widgetTimeContextDateRangeService.initialTimeRange()) {\n const extendedDateFrom = new Date(\n new Date(timeRange.dateFrom).valueOf() -\n this.echartsOptionsService.calculateExtendedIntervalInMs(\n this.config.interval || 'custom',\n {\n dateFrom: timeRange.dateFrom,\n dateTo: timeRange.dateTo\n }\n )\n ).toISOString();\n\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(timeRange);\n const aggregatedDatapoints = await lastValueFrom(\n this.fetchAggregatedSeriesForSelectedDatapoint$(\n {\n dateFrom: extendedDateFrom,\n dateTo: timeRange.dateTo\n },\n this.config.aggregatedDatapoint\n )\n );\n return this.echartsOptionsService.getChartOptions(\n datapointsWithValues,\n timeRange,\n {\n YAxis: this.config.yAxisSplitLines || false,\n XAxis: this.config.xAxisSplitLines || false\n },\n this.events,\n this.alarms,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,\n forceMergeDatapoints: this.config.forceMergeDatapoints || false,\n showLabelAndUnit: this.config.showLabelAndUnit || false,\n showSlider: this.config.showSlider || false,\n numberOfDecimalPlaces: this.config.numberOfDecimalPlaces ?? 2,\n sliderPositionMode\n },\n undefined,\n aggregatedDatapoints\n );\n } else {\n const initialDateFromValue = new Date(\n this.widgetTimeContextDateRangeService.initialTimeRange().dateFrom\n ).valueOf();\n const calculateInitialIntervalInMs = this.echartsOptionsService.calculateExtendedIntervalInMs(\n this.widgetTimeContextDateRangeService.initialTimeRange().interval || 'custom',\n {\n dateFrom: this.widgetTimeContextDateRangeService.initialTimeRange().dateFrom,\n dateTo: this.widgetTimeContextDateRangeService.initialTimeRange().dateTo\n }\n );\n // The extended date from is the initial date from (which was selected by the user) minus the calculated interval in milliseconds (this is the extended range for the slider).\n // This extended date from is used to fetch the aggregated datapoints for the slider.\n const initialExtendedDateFrom = new Date(\n initialDateFromValue - calculateInitialIntervalInMs\n ).toISOString();\n\n const aggregatedDatapoints = await lastValueFrom(\n this.fetchAggregatedSeriesForSelectedDatapoint$(\n {\n dateFrom: initialExtendedDateFrom,\n dateTo: new Date(\n this.widgetTimeContextDateRangeService.initialTimeRange().dateTo\n ).toISOString()\n },\n this.config.aggregatedDatapoint\n )\n );\n return this.echartsOptionsService.getChartOptions(\n datapointsWithValues,\n this.widgetTimeContextDateRangeService.initialTimeRange(),\n {\n YAxis: this.config.yAxisSplitLines || false,\n XAxis: this.config.xAxisSplitLines || false\n },\n this.events,\n this.alarms,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,\n forceMergeDatapoints: this.config.forceMergeDatapoints || false,\n showLabelAndUnit: this.config.showLabelAndUnit || false,\n showSlider: this.config.showSlider || false,\n numberOfDecimalPlaces: this.config.numberOfDecimalPlaces ?? 2,\n sliderPositionMode\n },\n timeRange,\n aggregatedDatapoints,\n true\n );\n }\n }\n\n private fetchSeriesForDatapoints$(): Observable<DpWithValues[]> {\n this.activeDatapoints = this.config?.datapoints?.filter(dp => dp.__active);\n if (!this.activeDatapoints || this.activeDatapoints.length === 0) {\n this.updateActiveDatapoints.emit([]);\n return of([]);\n }\n this.updateActiveDatapoints.emit(this.activeDatapoints);\n const datapointsWithValuesRequests: Observable<DpWithValues>[] = [];\n const timeRange = this.getTimeRange(60_000);\n for (const dp of this.activeDatapoints) {\n const request = defer(() =>\n this.measurementService.listSeries({\n revert: true,\n ...timeRange,\n source: dp.__target?.id || '',\n series: [`${dp.fragment}.${dp.series}`],\n ...(this.config.aggregation && {\n aggregationType: this.config.aggregation\n })\n })\n ).pipe(\n map(res => {\n const values = res.data.values;\n if (res.data.truncated && this.config.dateFrom) {\n values[new Date(this.config.dateFrom).toISOString()] = [{ min: null, max: null }];\n } else {\n if (this.alerts) {\n this.alerts.clear();\n }\n }\n return { ...dp, values, truncated: res.data.truncated };\n })\n );\n\n datapointsWithValuesRequests.push(request);\n }\n return forkJoin(datapointsWithValuesRequests).pipe(\n tap((dpsWithValues: DpWithValues[]) => {\n if (dpsWithValues.some(dp => dp['truncated'])) {\n this.addTruncatedDataAlert();\n }\n })\n );\n }\n\n private fetchAggregatedSeriesForSelectedDatapoint$(\n customTimeRange: {\n dateFrom: string;\n dateTo: string;\n },\n aggregatedDatapoint: DatapointsGraphKPIDetails\n ) {\n const timeRange = this.getTimeRange(60_000);\n aggregatedDatapoint = aggregatedDatapoint\n ? aggregatedDatapoint\n : this.config?.datapoints?.filter(dp => dp.__active)[0];\n\n const request = defer(() =>\n this.measurementService.listSeries({\n ...(customTimeRange ? customTimeRange : timeRange),\n source: aggregatedDatapoint?.target || aggregatedDatapoint.__target?.id || '',\n series: [`${aggregatedDatapoint.fragment}.${aggregatedDatapoint.series}`],\n ...(this.config.aggregation || customTimeRange\n ? {\n aggregationType: this.getAggregationTypeForTimeRange()\n }\n : {})\n })\n ).pipe(\n map(res => {\n const values = res.data.values;\n if (res.data.truncated && this.config.dateFrom) {\n values[new Date(this.config.dateFrom).toISOString()] = [{ min: null, max: null }];\n }\n return { ...aggregatedDatapoint, values, truncated: res.data.truncated };\n })\n );\n\n return request.pipe(\n tap((dpsWithValues: DpWithValues) => {\n if (dpsWithValues['truncated']) {\n this.addTruncatedDataAlert();\n }\n })\n );\n }\n\n private getAggregationTypeForTimeRange() {\n const interval = this.widgetTimeContextDateRangeService.initialTimeRange().interval;\n switch (interval) {\n case 'minutes':\n return aggregationType.MINUTELY;\n case 'hours':\n return aggregationType.HOURLY;\n case 'days':\n return aggregationType.DAILY;\n case 'weeks':\n return aggregationType.DAILY;\n case 'months':\n return aggregationType.DAILY;\n case 'custom':\n return aggregationType.HOURLY;\n }\n }\n\n private getSliderPositionMode(): 'compact' | 'default' {\n if (\n (this.chartViewContext === CHART_VIEW_CONTEXT.DATAPOINT_EXPLORER ||\n this.chartViewContext === CHART_VIEW_CONTEXT.WIDGET_CONFIG) &&\n this.activeDatapoints.length > 1\n ) {\n return 'compact';\n }\n return 'default';\n }\n\n private addTruncatedDataAlert(): void {\n if (this.alerts?.alertGroups.find(a => a.type === 'warning')?.value?.alerts?.length) {\n return;\n }\n const alert = new DynamicComponentAlert({\n type: 'warning',\n text: gettext('Truncated data. Change aggregation or select shorter date range.')\n });\n\n this.alerts?.addAlerts(alert);\n }\n\n private getTimeRange(additionalPadding?: number): { dateFrom: string; dateTo: string } {\n let timeRange: { dateFrom: Date; dateTo: Date };\n if (\n this.config.widgetInstanceGlobalTimeContext ||\n (this.config.interval === 'custom' && !this.config.realtime)\n ) {\n timeRange = {\n dateFrom: new Date(this.config.dateFrom as Date),\n dateTo: new Date(this.config.dateTo as Date)\n };\n } else {\n let timeRangeInMs = 0;\n if (this.config.interval && this.config.interval !== 'custom') {\n timeRangeInMs = INTERVALS.find(i => i.id === this.config.interval)?.timespanInMs || 0;\n } else if (this.config.realtime) {\n timeRangeInMs =\n new Date(this.config.dateTo as Date).valueOf() -\n new Date(this.config.dateFrom as Date).valueOf();\n }\n const now = new Date();\n timeRange = { dateFrom: new Date(now.valueOf() - timeRangeInMs), dateTo: now };\n }\n if (additionalPadding) {\n timeRange.dateFrom = new Date(timeRange.dateFrom.valueOf() - additionalPadding);\n timeRange.dateTo = new Date(timeRange.dateTo.valueOf() + additionalPadding);\n }\n return { dateFrom: timeRange.dateFrom.toISOString(), dateTo: timeRange.dateTo.toISOString() };\n }\n}\n","<div class=\"p-relative fit-h chart-container\">\n <div\n class=\"fit-w fit-h\"\n #chart\n echarts\n [options]=\"chartOption$ | async\"\n (chartInit)=\"onChartInit($event)\"\n ></div>\n\n <c8y-chart-alerts [alerts]=\"alerts\"></c8y-chart-alerts>\n\n <div\n class=\"chart-load-more\"\n *ngIf=\"showLoadMore\"\n >\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"loadMoreData()\"\n >\n <i c8yIcon=\"restore\"></i>\n {{ 'Load more' | translate }}\n </button>\n </div>\n\n <div\n class=\"e-charts--aggregated-datapoint\"\n *ngIf=\"\n activeDatapoints.length > 1 &&\n config?.showSlider &&\n chartViewContext !== CHART_VIEW_CONTEXT.WIDGET_VIEW\n \"\n >\n <c8y-select-aggregated-datapoint\n [value]=\"config?.aggregatedDatapoint || activeDatapoints[0]\"\n (valueChange)=\"updateAggregatedSliderDatapoint.emit($event)\"\n [activeDatapoints]=\"activeDatapoints\"\n ></c8y-select-aggregated-datapoint>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.YAxisService","i3.ChartTypesService","i2.EchartsOptionsService","i1","CommonModule","i3"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-echart.mjs","sources":["../../echart/models/datapoints-graph-widget.model.ts","../../echart/models/chart.model.ts","../../echart/models/svg-icons.model.ts","../../echart/services/y-axis.service.ts","../../echart/services/chart-types.service.ts","../../echart/services/echarts-options.service.ts","../../echart/services/chart-realtime.service.ts","../../echart/chart-alerts/chart-alerts.component.ts","../../echart/chart-alerts/chart-alerts.component.html","../../echart/services/chart-events.service.ts","../../echart/services/chart-alarms.service.ts","../../echart/services/chart-helpers.service.ts","../../echart/select-aggregated-datapoint/select-aggregated-datapoint.component.ts","../../echart/select-aggregated-datapoint/select-aggregated-datapoint.component.html","../../echart/charts.component.ts","../../echart/charts.component.html","../../echart/c8y-ngx-components-echart.ts"],"sourcesContent":["import {\n AXIS_TYPES,\n CHART_LINE_TYPES,\n CHART_RENDER_TYPES,\n KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { DateTimeContext } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { aggregationType, AlarmStatusType, IMeasurement, ISeries, Severity } from '@c8y/client';\nimport type { BarSeriesOption, LineSeriesOption, ScatterSeriesOption } from 'echarts';\nimport { AlarmDetails, EventDetails } from '@c8y/ngx-components/alarm-event-selector';\nimport { TooltipFormatterCallback } from 'echarts/types/src/util/types';\nimport { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\n\nexport type DatapointsGraphKPIDetails = KPIDetails & {\n lineType?: DatapointLineType;\n renderType?: DatapointChartRenderType;\n};\n\nexport type DatapointsGraphWidgetConfig = {\n activeAlarmTypesOutOfRange?: string[];\n aggregation?: aggregationType | null;\n aggregatedDatapoint?: DatapointsGraphKPIDetails;\n alarmsEventsConfigs?: AlarmOrEventExtended[];\n datapoints?: DatapointsGraphKPIDetails[] | null;\n date?: DateTimeContext;\n dateFrom?: Date | null;\n dateTo?: Date | null;\n displayAggregationSelection?: boolean | null;\n displayDateSelection?: boolean | null;\n displayMarkedLine?: boolean;\n displayMarkedPoint?: boolean;\n interval?: Interval['id'] | null;\n mergeMatchingDatapoints?: boolean;\n forceMergeDatapoints?: boolean;\n realtime?: boolean | null;\n showLabelAndUnit?: boolean;\n showSlider?: boolean | null;\n sliderChange?: boolean | null;\n widgetInstanceGlobalTimeContext?: boolean | null;\n xAxisSplitLines?: boolean | null;\n yAxisSplitLines?: boolean | null;\n numberOfDecimalPlaces?: number;\n};\n\nexport type GraphDisplayOptions = {\n displayMarkedLine: boolean;\n displayMarkedPoint: boolean;\n mergeMatchingDatapoints: boolean;\n forceMergeDatapoints: boolean;\n showLabelAndUnit: boolean;\n showSlider: boolean;\n showOnlyAlarmsOrEvents?: boolean;\n numberOfDecimalPlaces?: number;\n sliderPositionMode?: 'compact' | 'default';\n};\n\nexport type AlarmDetailsExtended = AlarmDetails & {\n __hidden?: boolean;\n __severity?: SeverityType[];\n __status?: AlarmStatusType[];\n};\n\nexport type EventDetailsExtended = EventDetails & {\n __hidden?: boolean;\n};\n\n/**\n * @description: Extended AlarmOrEvent type which includes properties from the incoming alarms/events. This interface can be used when the expected data can be either events or alarms.\n */\nexport type AlarmOrEventExtended = AlarmDetailsExtended | EventDetailsExtended;\n\nexport type DatapointsGraphWidgetTimeProps = Partial<\n Pick<DatapointsGraphWidgetConfig, 'interval' | 'dateFrom' | 'dateTo' | 'aggregation' | 'realtime'>\n>;\n\nexport enum DATE_SELECTION_EXTENDED {\n CONFIG = 'config',\n DASHBOARD_CONTEXT = 'dashboard_context'\n}\n\ntype DatapointApiValues = ISeries['values'];\nexport interface DpWithValues extends DatapointsGraphKPIDetails {\n values: DatapointApiValues;\n}\n\ntype DataPointValues = {\n min: number;\n max: number;\n};\nexport type DpValuesItem = {\n time: number;\n values: DataPointValues[];\n};\n\nexport interface MarkPointData {\n coord: [string, number | DataPointValues | null];\n name: string;\n itemType: string;\n itemStyle: { color: string };\n symbol?: string; // Symbol to display for the mark point (reference to ICONS_MAP)\n symbolSize?: number;\n}\n\nexport interface MarkLineData {\n xAxis: string | undefined;\n itemType: string;\n label: {\n show: boolean;\n formatter: TooltipFormatterCallback<TopLevelFormatterParams> | string;\n };\n itemStyle: { color: string };\n}\n\nexport interface TimeContextProps {\n temporaryUserSelectedFromDate?: string;\n temporaryUserSelectedToDate?: string;\n currentDateContextFromDate?: string;\n currentDateContextToDate?: string;\n realtime?: boolean;\n currentDateContextInterval?: 'minutes' | 'hours' | 'days' | 'weeks' | 'months' | 'custom';\n aggregation?: aggregationType | null;\n}\n\nexport type DatapointLineType = (typeof CHART_LINE_TYPES)[number]['val'];\nexport type EchartsSeriesOptions = LineSeriesOption | ScatterSeriesOption | BarSeriesOption;\n\nexport type DatapointAxisType = (typeof AXIS_TYPES)[number]['val'];\n\nexport type DatapointChartRenderType = (typeof CHART_RENDER_TYPES)[number]['val'];\n\nexport const REALTIME_TEXTS = {\n ACTIVE: gettext('Realtime active'),\n INACTIVE: gettext('Realtime inactive')\n} as const;\n\nexport const PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH = {\n EVENTS: {\n DATA_EXPLORER_AND_GRAPH: 'data-explorer-and-graph'\n },\n COMPONENTS: {\n DATA_EXPLORER_DETAILS: 'data-explorer-details'\n },\n ACTIONS: {\n DATA_EXPLORER_CONFIG_INIT: 'data-explorer-config-init',\n DATA_EXPLORER_CONFIG_CHANGE: 'data-explorer-config-change',\n DATA_GRAPH_WIDGET_CONFIG: 'data-graph-widget-config'\n }\n};\n\nexport type DateString = string;\nexport type SeriesValue = [DateString, number];\n\nexport type DatapointRealtimeMeasurements = {\n measurement: IMeasurement;\n datapoint: DatapointsGraphKPIDetails;\n};\n\nexport type YAxisOptions = {\n showSplitLines: boolean;\n mergeMatchingDatapoints: boolean;\n forceMergeDatapoints: boolean;\n showLabelAndUnit: boolean;\n};\n\nexport interface SeriesDatapointInfo {\n datapointId?: string;\n datapointLabel?: string;\n datapointUnit?: string;\n}\n\nexport const SEVERITY_LABELS = {\n CRITICAL: gettext('Critical`alarm`') as 'CRITICAL',\n MAJOR: gettext('Major`alarm`') as 'MAJOR',\n MINOR: gettext('Minor`alarm`') as 'MINOR',\n WARNING: gettext('Warning`alarm`') as 'WARNING'\n} as const;\n\nexport type SeverityType = keyof typeof Severity;\n","import { ECBasicOption, TooltipFormatterCallback } from 'echarts/types/src/util/types';\nimport { MarkLineData, MarkPointData, SeriesValue } from './datapoints-graph-widget.model';\nimport { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';\n\n/**\n * @param typeOfSeries is used for formatter to distinguish between events/alarms series\n * @param isDpTemplateSelected is used to distinguish if the series have a specific dp template selected. E.g. for case when a device has 2 measurements and 2 series are created for each measurement\n * @param id is used to distinguish between series\n * @param data is used to store the data for the series\n * @param itemStyle is used to set the color of the series\n */\ninterface ModifiedCustomSeriesOptions extends echarts.EChartsOption {\n typeOfSeries?: 'alarm' | 'event' | null;\n isDpTemplateSelected?: boolean;\n id: string;\n data: SeriesValue[];\n itemStyle: { color: string };\n}\n\nexport interface customSeriesMarkLineData {\n data: MarkLineData[];\n}\n\nexport interface customSeriesMarkPointData {\n data: MarkPointData[];\n}\n\nexport type CustomSeriesOptions = Omit<ModifiedCustomSeriesOptions, 'tooltip'>;\nexport interface EchartsCustomOptions extends ECBasicOption {\n tooltip: {\n formatter: TooltipFormatterCallback<TopLevelFormatterParams> | string;\n }[];\n}\n\nexport interface MeasurementSeries {\n min: number | null;\n max: number | null;\n}\n\nexport enum CHART_VIEW_CONTEXT {\n WIDGET_VIEW = 'widget_view',\n WIDGET_CONFIG = 'widget_config',\n DATAPOINT_EXPLORER = 'datapoint_explorer'\n}\n","enum ICONS {\n ALARM = 'path://M18.375 15.8462L20.4423 17.9135V18.9231H4V17.9135L6.06731 15.8462V10.75C6.06731 9.14744 6.47596 7.75321 7.29327 6.56731C8.11058 5.38141 9.24038 4.61218 10.6827 4.25962V3.53846C10.6827 3.12179 10.8269 2.76122 11.1154 2.45673C11.4038 2.15224 11.7724 2 12.2212 2C12.6699 2 13.0385 2.15224 13.3269 2.45673C13.6154 2.76122 13.7596 3.12179 13.7596 3.53846V4.25962C15.2019 4.61218 16.3317 5.38141 17.149 6.56731C17.9663 7.75321 18.375 9.14744 18.375 10.75V15.8462ZM12.2212 22C11.6442 22 11.1554 21.8077 10.7548 21.4231C10.3542 21.0385 10.1538 20.5577 10.1538 19.9808H14.2885C14.2885 20.5256 14.0801 20.9984 13.6635 21.399C13.2468 21.7997 12.766 22 12.2212 22Z',\n EVENT = 'path://M97.3013 63L128.939 95.1315C79.296 134.335 47.7653 191.526 47.7653 255.276C47.7653 319.027 79.296 376.218 128.917 415.421L97.28 447.574C37.76 400.552 0 331.93 0 255.276C0 178.622 37.76 110.001 97.3013 63ZM414.72 63C474.24 110.001 512 178.622 512 255.276C512 331.93 474.24 400.552 414.72 447.574L383.083 415.421C432.704 376.218 464.235 319.027 464.235 255.276C464.235 191.526 432.704 134.335 383.083 95.1315L414.72 63ZM160.405 127.092L192 159.181C162.24 182.681 143.317 217.013 143.317 255.276C143.317 293.539 162.219 327.871 192 351.372L160.405 383.461C120.725 352.119 95.552 306.379 95.552 255.276C95.552 204.174 120.725 158.433 160.405 127.092ZM351.595 127.092C391.296 158.433 416.448 204.174 416.448 255.276C416.448 306.379 391.275 352.119 351.595 383.461L320 351.372C349.781 327.871 368.683 293.539 368.683 255.276C368.683 217.013 349.781 182.703 320 159.181L351.595 127.092ZM256 192.722C291.505 192.722 320.287 221.504 320.287 257.009C320.287 292.514 291.505 321.296 256 321.296C220.495 321.296 191.713 292.514 191.713 257.009C191.713 221.504 220.495 192.722 256 192.722Z',\n ACKNOWLEDGED = 'path://M10.4795 2H13.4807V4.18054C14.1215 4.35248 14.7155 4.61821 15.2626 4.97773C15.8097 5.35287 16.2864 5.79836 16.6928 6.31419C17.0993 6.81438 17.4119 7.3771 17.6307 8.00234C17.8652 8.62759 17.9824 9.29191 17.9824 9.99531V13.7702L16.9742 12.762V12.7855L9.72919 5.54045C9.74482 5.54045 9.75264 5.54045 9.75264 5.54045L9.00234 4.79015C9.22118 4.64947 9.45565 4.53224 9.70574 4.43845C9.95584 4.34467 10.2138 4.25869 10.4795 4.18054V2ZM4.4068 3.03165L21.4291 20.0305L19.9988 21.4373L17.5604 18.9988H13.6917C13.7855 19.1551 13.8558 19.3193 13.9027 19.4912C13.9496 19.6475 13.973 19.8195 13.973 20.007C13.973 20.5541 13.7776 21.0231 13.3869 21.4138C12.9961 21.8046 12.5272 22 11.9801 22C11.4174 22 10.9406 21.8046 10.5498 21.4138C10.159 21.0231 9.96366 20.5541 9.96366 20.007C9.96366 19.8195 9.9871 19.6475 10.034 19.4912C10.0809 19.3193 10.1512 19.1551 10.245 18.9988H3.96131V17.9906L5.97773 15.9977V9.99531C5.97773 9.60453 6.00899 9.22939 6.07151 8.86987C6.14967 8.51036 6.25127 8.15866 6.37632 7.81477L3 4.43845L4.4068 3.03165Z',\n CLEARED = 'path://M9.09375 19.5977C9.09375 20.2617 9.32812 20.8281 9.79688 21.2969C10.2786 21.7656 10.8516 22 11.5156 22C12.1927 22 12.7656 21.7656 13.2344 21.2969C13.7161 20.8281 13.957 20.2617 13.957 19.5977H9.09375ZM16.8672 10.418C16.3203 10.5091 15.7995 10.6784 15.3047 10.9258C14.8229 11.1732 14.3867 11.4922 13.9961 11.8828C13.5013 12.3776 13.1172 12.944 12.8438 13.582C12.5833 14.2201 12.4531 14.8841 12.4531 15.5742C12.4531 16.0299 12.5052 16.4727 12.6094 16.9023C12.7266 17.332 12.8958 17.7422 13.1172 18.1328H3V16.375C4.04167 16.0495 4.74479 15.3919 5.10938 14.4023C5.47396 13.4128 5.76693 12.3385 5.98828 11.1797C6.20964 10.0208 6.48958 8.88802 6.82812 7.78125C7.16667 6.6875 7.83724 5.85417 8.83984 5.28125C9.11328 5.125 9.32812 4.91667 9.48438 4.65625C9.64062 4.38281 9.71875 4.08984 9.71875 3.77734C9.71875 3.28255 9.88802 2.86589 10.2266 2.52734C10.5781 2.17578 11.0013 2 11.4961 2C11.9909 2 12.4076 2.17578 12.7461 2.52734C13.0977 2.86589 13.2734 3.28255 13.2734 3.77734C13.2734 4.08984 13.3516 4.38281 13.5078 4.65625C13.6771 4.91667 13.8984 5.125 14.1719 5.28125C15.0443 5.78906 15.6562 6.51172 16.0078 7.44922C16.3724 8.38672 16.6589 9.3763 16.8672 10.418ZM11.4961 4.48047C11.6914 4.48047 11.8607 4.41536 12.0039 4.28516C12.1471 4.14193 12.2188 3.97266 12.2188 3.77734C12.2188 3.56901 12.1471 3.39974 12.0039 3.26953C11.8607 3.1263 11.6914 3.05469 11.4961 3.05469C11.3008 3.05469 11.1315 3.1263 10.9883 3.26953C10.8451 3.39974 10.7734 3.56901 10.7734 3.77734C10.7734 3.97266 10.8451 4.14193 10.9883 4.28516C11.1315 4.41536 11.3008 4.48047 11.4961 4.48047ZM16.9062 17.6055L19.9922 14.5195L19.2305 13.7773L16.9062 16.1016L15.8906 15.0859L15.1289 15.8477L16.9062 17.6055ZM17.5312 11.8633C18.5599 11.8633 19.4388 12.2279 20.168 12.957C20.8971 13.6862 21.2617 14.5651 21.2617 15.5938C21.2617 16.6224 20.8971 17.5013 20.168 18.2305C19.4388 18.9596 18.5599 19.3242 17.5312 19.3242C16.5026 19.3242 15.6237 18.9596 14.8945 18.2305C14.1654 17.5013 13.8008 16.6224 13.8008 15.5938C13.8008 14.5651 14.1654 13.6862 14.8945 12.957C15.6237 12.2279 16.5026 11.8633 17.5312 11.8633Z',\n MINOR = 'path://M21.9787 11.9894L11.9894 22L2 11.9894L11.9894 2L21.9787 11.9894ZM12.9052 16.5474V14.7157H11.0735V16.5474H12.9052ZM12.9052 12.9052V7.45261H11.0735V12.9052H12.9052Z',\n MAJOR = 'path://M12.8936 13.8936V10.234H11.1064V13.8936H12.8936ZM12.8936 17.5106V15.6809H11.1064V17.5106H12.8936ZM2 20.234L12 3L22 20.234H2Z',\n CRITICAL = 'path://M12.0117 22C10.6362 22 9.3388 21.7343 8.11958 21.2028C6.90035 20.687 5.83744 19.9758 4.93083 19.0692C4.02423 18.1626 3.31301 17.0996 2.79719 15.8804C2.26573 14.6768 2 13.3794 2 11.9883C2 10.6127 2.26573 9.31536 2.79719 8.09613C3.31301 6.89254 4.02423 5.83744 4.93083 4.93083C5.83744 4.02423 6.90035 3.3052 8.11958 2.77374C9.3388 2.25791 10.6362 2 12.0117 2C13.3873 2 14.6846 2.25791 15.9039 2.77374C17.1231 3.3052 18.186 4.02423 19.0926 4.93083C19.9992 5.83744 20.7104 6.89254 21.2263 8.09613C21.7577 9.31536 22.0234 10.6127 22.0234 11.9883C22.0234 13.3794 21.7577 14.6768 21.2263 15.8804C20.7104 17.0996 19.9992 18.1626 19.0926 19.0692C18.186 19.9758 17.1231 20.687 15.9039 21.2028C14.6846 21.7343 13.3873 22 12.0117 22ZM13.0199 6.99414H11.0035V12.9965H13.0199V6.99414ZM13.0199 14.9894H11.0035V17.0059H13.0199V14.9894Z',\n WARNING = 'path://M12 2C13.3772 2 14.6761 2.25822 15.8967 2.77465C17.1174 3.29108 18.1815 4.00313 19.0892 4.9108C19.9969 5.81847 20.7089 6.88263 21.2254 8.10329C21.7418 9.32394 22 10.6228 22 12C22 13.3772 21.7418 14.6761 21.2254 15.8967C20.7089 17.1174 19.9969 18.1815 19.0892 19.0892C18.1815 19.9969 17.1174 20.7089 15.8967 21.2254C14.6761 21.7418 13.3772 22 12 22C10.6228 22 9.32394 21.7418 8.10329 21.2254C6.88263 20.7089 5.81847 19.9969 4.9108 19.0892C4.00313 18.1815 3.29108 17.1174 2.77465 15.8967C2.25822 14.6761 2 13.3772 2 12C2 10.6228 2.25822 9.32394 2.77465 8.10329C3.29108 6.88263 4.00313 5.81847 4.9108 4.9108C5.81847 4.00313 6.88263 3.29108 8.10329 2.77465C9.32394 2.25822 10.6228 2 12 2Z'\n}\n\nexport const ICONS_MAP = {\n ALARM: ICONS.ALARM,\n EVENT: ICONS.EVENT,\n ACKNOWLEDGED: ICONS.ACKNOWLEDGED,\n CLEARED: ICONS.CLEARED,\n MINOR: ICONS.MINOR,\n MAJOR: ICONS.MAJOR,\n CRITICAL: ICONS.CRITICAL,\n WARNING: ICONS.WARNING\n};\n","import { Injectable } from '@angular/core';\nimport { DatapointAxisType, DpWithValues, YAxisOptions } from '../models';\nimport type { YAXisOption } from 'echarts/types/src/coord/cartesian/AxisModel';\nimport { AppStateService } from '@c8y/ngx-components';\n\n@Injectable()\nexport class YAxisService {\n Y_AXIS_OFFSET = 48;\n private intlNumberFormatCompliantLocale: string;\n\n constructor(private appStateService: AppStateService) {\n this.intlNumberFormatCompliantLocale = this.appStateService.state.lang.replace('_', '-');\n }\n\n getYAxis(\n datapointsWithValues: DpWithValues[],\n YAxisOptions: YAxisOptions\n ): YAXisOption[] | YAXisOption {\n const YAxisPlacement: Map<DpWithValues, { position: DatapointAxisType; offset: number }> =\n this.getYAxisPlacement(datapointsWithValues);\n\n if (YAxisOptions.forceMergeDatapoints) {\n const firstDp = datapointsWithValues[0];\n const unit = firstDp?.unit ? `[${firstDp.unit}]` : '';\n return {\n name: unit,\n nameLocation: 'middle',\n nameGap: 25,\n type: 'value',\n animation: true,\n axisLabel: {\n fontSize: 10,\n show: true\n },\n axisLine: {\n show: true,\n lineStyle: {\n color: '#6f7079'\n },\n onZero: false\n },\n splitLine: {\n show: YAxisOptions.showSplitLines\n },\n axisTick: {\n show: true\n },\n axisPointer: {\n show: false,\n label: {\n show: false\n }\n }\n };\n }\n const matchingDpSet = new Set<DpWithValues>();\n const firstOccurrence = new Set<DpWithValues>();\n\n return datapointsWithValues.map((dp, index) => {\n const isDefined = (value: number | undefined) => value !== null && value !== undefined;\n const isMatchingDp = (dp1: DpWithValues, dp2: DpWithValues) =>\n dp1.min === dp2.min &&\n dp1.max === dp2.max &&\n isDefined(dp1.min) &&\n isDefined(dp1.max) &&\n isDefined(dp2.min) &&\n isDefined(dp2.max);\n\n const matchingDpRange = datapointsWithValues.some(\n (dp2, index2) => isMatchingDp(dp, dp2) && index2 < index\n );\n\n const anyMatchingDp = datapointsWithValues.some(\n (dp2, index2) => isMatchingDp(dp, dp2) && index2 !== index\n );\n\n if (\n anyMatchingDp &&\n !matchingDpRange &&\n YAxisOptions.mergeMatchingDatapoints &&\n !firstOccurrence.has(dp)\n ) {\n firstOccurrence.add(dp);\n }\n\n if (firstOccurrence.has(dp)) {\n datapointsWithValues.forEach(dp2 => {\n if (isMatchingDp(dp, dp2)) {\n matchingDpSet.add(dp2);\n }\n });\n }\n\n return {\n name: YAxisOptions.showLabelAndUnit\n ? YAxisOptions.mergeMatchingDatapoints\n ? firstOccurrence.has(dp)\n ? Array.from(matchingDpSet)\n .map(dp => `{${dp.__target?.id}|${dp.unit}}`)\n .join(' /')\n : matchingDpRange\n ? ''\n : `${dp.label} [${dp.unit}]`\n : `${dp.label} [${dp.unit}]`\n : '',\n nameLocation: 'middle',\n nameGap: 25,\n nameTextStyle: {\n // add rich text to support multiple colors for different dp units\n rich: {\n ...Array.from(matchingDpSet).reduce((acc, dp) => {\n const accKey = `${dp.__target?.id}`;\n acc[accKey] = {\n color: dp.color\n };\n return acc;\n }, {})\n }\n },\n type: 'value',\n animation: true,\n axisLine: {\n show: matchingDpRange && YAxisOptions.mergeMatchingDatapoints ? false : true,\n lineStyle: {\n color: firstOccurrence.has(dp) ? '#6f7079' : dp.color\n },\n onZero: false\n },\n axisLabel: {\n fontSize: 10,\n show: !matchingDpRange || !YAxisOptions.mergeMatchingDatapoints,\n formatter: val => {\n if (dp.min != undefined && dp.max != undefined) {\n const range = dp.max - dp.min;\n const decimalPlaces = this.getDecimalPlaces(range);\n return val.toFixed(decimalPlaces);\n }\n\n return new Intl.NumberFormat(this.intlNumberFormatCompliantLocale, {\n notation: 'compact',\n compactDisplay: 'short'\n }).format(val);\n }\n },\n splitLine: {\n show: YAxisOptions.showSplitLines && !matchingDpRange,\n lineStyle: { color: dp.color, opacity: 0.4, type: 'dashed' }\n },\n position: YAxisPlacement.get(dp)?.position,\n offset: YAxisPlacement.get(dp)?.offset,\n axisTick: {\n show: !matchingDpRange || !YAxisOptions.mergeMatchingDatapoints\n },\n axisPointer: {\n show: false,\n label: {\n show: false\n }\n },\n ...(dp.min && { min: dp.min }),\n ...(dp.max && { max: dp.max })\n };\n });\n }\n\n private getDecimalPlaces(num: number): number {\n const numStr = num.toString();\n const decimalIndex = numStr.indexOf('.');\n if (decimalIndex === -1) {\n return 0;\n }\n return numStr.length - decimalIndex - 1;\n }\n\n private getYAxisPlacement(\n datapointsWithValues: DpWithValues[]\n ): Map<DpWithValues, { position: DatapointAxisType; offset: number }> {\n const YAxisPositions = new Map<DpWithValues, { position: DatapointAxisType }>();\n\n datapointsWithValues.forEach(dp => {\n const position = this.getYAxisPosition(dp, datapointsWithValues);\n YAxisPositions.set(dp, { position });\n });\n\n const dpLeft = datapointsWithValues.filter(dp => YAxisPositions.get(dp).position === 'left');\n const dpRight = datapointsWithValues.filter(dp => YAxisPositions.get(dp).position === 'right');\n\n const YAxisPlacement = new Map<DpWithValues, { position: DatapointAxisType; offset: number }>();\n YAxisPositions.forEach(({ position }, key) => {\n const offset = (position === 'left' ? dpLeft : dpRight).indexOf(key) * this.Y_AXIS_OFFSET;\n YAxisPlacement.set(key, { position: position, offset });\n });\n\n return YAxisPlacement;\n }\n\n private getYAxisPosition(\n datapoint: DatapointAxisType,\n datapointsWithValues: DpWithValues[]\n ): DatapointAxisType {\n if (datapoint.yAxisType) {\n return datapoint.yAxisType;\n }\n const currentIndex = datapointsWithValues.indexOf(datapoint);\n const otherIndexLeft = datapointsWithValues.findIndex(\n dp => dp !== datapoint && (!dp.yAxisType || dp.yAxisType === 'left')\n );\n if (otherIndexLeft > -1 && otherIndexLeft < currentIndex) {\n return 'right';\n } else {\n return 'left';\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { DatapointChartRenderType, DpWithValues, EchartsSeriesOptions } from '../models';\nimport type { BarSeriesOption, LineSeriesOption } from 'echarts';\n\nfunction assertUnreachable(_: never): never {\n throw new Error('Case unreachable.');\n}\n\n@Injectable()\nexport class ChartTypesService {\n private RENDER_TYPE_SYMBOL: Record<\n Exclude<DatapointChartRenderType, 'area'>,\n Partial<LineSeriesOption>\n > = {\n min: { symbol: 'triangle', symbolRotate: 0 },\n max: { symbol: 'triangle', symbolRotate: 180 }\n };\n getSeriesOptions(\n { lineType, color }: DpWithValues,\n isMinMaxChart = false,\n renderType: DatapointChartRenderType\n ): EchartsSeriesOptions {\n switch (lineType) {\n case 'points':\n return this.pointsSeriesOption(color, isMinMaxChart, renderType);\n case 'linePoints':\n return this.linePointsSeriesOption(color, isMinMaxChart, renderType);\n case 'bars':\n return this.barsSeriesOption(color, isMinMaxChart, renderType);\n case 'step-before':\n return this.stepBeforeSeriesOption(color, isMinMaxChart, renderType);\n case 'step-after':\n return this.stepAfterSeriesOption(color, isMinMaxChart, renderType);\n case 'line':\n case undefined:\n return this.lineSeriesOption(color, isMinMaxChart, renderType);\n }\n return assertUnreachable(lineType);\n }\n\n private pointsSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n const baseOption = this.linePointsSeriesOption(color, isMinMaxChart, renderType);\n return {\n ...baseOption,\n lineStyle: { opacity: 0 }\n };\n }\n\n private lineSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n let baseOption: LineSeriesOption = {\n type: 'line',\n lineStyle: {\n color: color,\n width: 1,\n type: 'solid'\n },\n itemStyle: {\n color: color\n },\n emphasis: {\n scale: 1.2,\n itemStyle: {\n color: color\n }\n },\n showSymbol: false,\n symbolSize: 4 // symbol is visible on hover\n };\n if (isMinMaxChart) {\n baseOption = {\n ...baseOption,\n ...this.RENDER_TYPE_SYMBOL[renderType],\n symbolSize: 8\n };\n }\n return baseOption;\n }\n\n private linePointsSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n const baseOption = this.lineSeriesOption(color, isMinMaxChart, renderType);\n return {\n ...baseOption,\n showSymbol: true\n };\n }\n\n private barsSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): BarSeriesOption {\n const baseOption: BarSeriesOption = {\n type: 'bar',\n barMinWidth: 1,\n barMaxWidth: 20,\n itemStyle: {\n color\n }\n };\n if (isMinMaxChart) {\n baseOption.itemStyle.opacity = renderType === 'max' ? 0.6 : 1.0;\n }\n return baseOption;\n }\n\n private stepBeforeSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n const baseOption = this.lineSeriesOption(color, isMinMaxChart, renderType);\n return { ...baseOption, step: 'start' };\n }\n\n private stepAfterSeriesOption(\n color: string,\n isMinMaxChart: boolean,\n renderType: DatapointChartRenderType\n ): LineSeriesOption {\n const baseOption = this.lineSeriesOption(color, isMinMaxChart, renderType);\n return { ...baseOption, step: 'end' };\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Injectable } from '@angular/core';\nimport { DatePipe } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport type { EChartsOption, SeriesOption, ECharts } from 'echarts';\nimport {\n DatapointChartRenderType,\n DpWithValues,\n DateString,\n DpValuesItem,\n MarkLineData,\n MarkPointData,\n SeriesDatapointInfo,\n SeriesValue,\n GraphDisplayOptions\n} from '../models';\nimport { YAxisService } from './y-axis.service';\nimport { ChartTypesService } from './chart-types.service';\nimport type { CallbackDataParams, TooltipFormatterCallback } from 'echarts/types/src/util/types';\nimport type { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';\nimport { AlarmStatus, IAlarm, IEvent, SeverityType } from '@c8y/client';\nimport { ICONS_MAP } from '../models/svg-icons.model';\nimport { CustomSeriesOptions } from '../models/chart.model';\nimport { Router } from '@angular/router';\nimport { AlarmSeverityToIconPipe, AlarmSeverityToLabelPipe } from '@c8y/ngx-components/alarms';\nimport { Interval, INTERVALS } from '@c8y/ngx-components/interval-picker';\nimport { TranslateService } from '@ngx-translate/core';\n\ntype TooltipPositionCallback = (\n point: [number, number], // position of mouse in chart [X, Y]; 0,0 is top left corner\n _: any, // tooltip data\n dom: HTMLElement | unknown, // tooltip element\n __: any, // valid only when mouse is on graphic elements; not relevant in our case\n size: {\n contentSize: [number, number]; // size of tooltip\n viewSize: [number, number]; // size of the chart\n } | null // size of chart\n) => Partial<Record<'top' | 'bottom' | 'left' | 'right', number>>;\n\nconst INDEX_HTML = '/index.html';\n\n@Injectable()\nexport class EchartsOptionsService {\n echartsInstance: ECharts | undefined;\n private TOOLTIP_WIDTH = 300;\n private tooltipPositionCallback: TooltipPositionCallback | undefined;\n\n constructor(\n private datePipe: DatePipe,\n private yAxisService: YAxisService,\n private chartTypesService: ChartTypesService,\n private severityIconPipe: AlarmSeverityToIconPipe,\n private severityLabelPipe: AlarmSeverityToLabelPipe,\n private translate: TranslateService,\n private router: Router\n ) {}\n\n getChartOptions(\n datapointsWithValues: DpWithValues[],\n timeRange: { dateFrom: string; dateTo: string; interval: Interval['id'] },\n showSplitLines: { YAxis: boolean; XAxis: boolean },\n events: IEvent[],\n alarms: IAlarm[],\n displayOptions: GraphDisplayOptions,\n selectedTimeRange?: { dateFrom: string; dateTo: string; interval: Interval['id'] } | null,\n aggregatedDatapoint?: DpWithValues,\n sliderZoomUsed = false\n ): EChartsOption {\n const yAxis = this.yAxisService.getYAxis(datapointsWithValues, {\n showSplitLines: showSplitLines.YAxis,\n mergeMatchingDatapoints: displayOptions.mergeMatchingDatapoints,\n forceMergeDatapoints: displayOptions.forceMergeDatapoints,\n showLabelAndUnit: displayOptions.showLabelAndUnit\n });\n const leftAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'left') : [];\n const gridLeft = leftAxis.length ? leftAxis.length * this.yAxisService.Y_AXIS_OFFSET : 32;\n const rightAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'right') : [];\n const gridRight = rightAxis.length ? rightAxis.length * this.yAxisService.Y_AXIS_OFFSET : 16;\n const selectedLanguage = this.translate.currentLang;\n let intervalInMs = this.calculateExtendedIntervalInMs(\n selectedTimeRange?.interval || timeRange.interval || 'hours',\n selectedTimeRange || timeRange\n );\n if (sliderZoomUsed) {\n intervalInMs = this.calculateExtendedIntervalInMs(timeRange.interval || 'hours', timeRange);\n }\n if (displayOptions.showOnlyAlarmsOrEvents) {\n return {\n xAxis: {\n min: timeRange.dateFrom,\n max: timeRange.dateTo,\n type: 'time'\n },\n yAxis: {\n show: false\n },\n tooltip: {\n trigger: 'axis',\n // intended empty for now. Later we can add a tooltip for more info on the hovered alarm/event\n formatter: () => ''\n },\n series: this.createAlarmEventTypeSeries(alarms, events)\n };\n }\n return {\n grid: {\n containLabel: true, // axis labels are taken into account to calculate graph grid\n left: gridLeft,\n top: 16,\n right: gridRight,\n bottom: 68\n },\n dataZoom: [\n {\n type: 'inside',\n // TODO: use 'none' only when this bug is fixed https://github.com/apache/echarts/issues/17858\n filterMode: datapointsWithValues.some(dp => dp.lineType === 'bars') ? 'filter' : 'none',\n zoomOnMouseWheel: true,\n startValue: selectedTimeRange\n ? selectedTimeRange.dateFrom.valueOf()\n : timeRange.dateFrom.valueOf(),\n endValue: selectedTimeRange\n ? selectedTimeRange.dateTo.valueOf()\n : timeRange.dateTo.valueOf()\n },\n {\n type: 'slider',\n show: displayOptions.showSlider,\n bottom: 8,\n realtime: false,\n left: displayOptions.sliderPositionMode === 'compact' ? '64px' : '64px',\n right: displayOptions.sliderPositionMode === 'compact' ? '172px' : '64px',\n labelFormatter(_value, valueStr) {\n const locale = selectedLanguage.replace('_', '-');\n const date = new Date(valueStr);\n\n const datePart = new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'short',\n day: '2-digit'\n }).format(date);\n\n const timePart = new Intl.DateTimeFormat(locale, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit'\n }).format(date);\n\n return `${datePart}\\n${timePart}`;\n },\n textStyle: {\n fontSize: 9,\n lineHeight: 14\n }\n }\n ], // on realtime, 'none' will cause extending chart line to left edge of the chart\n animation: false,\n toolbox: {\n show: true,\n itemSize: 0, // toolbox is needed for zooming in action, but we provide our own buttons\n feature: {\n dataZoom: {\n yAxisIndex: 'none'\n }\n }\n },\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'cross',\n snap: true\n },\n backgroundColor: 'var(--c8y-root-component-background-default)',\n borderColor: 'var(--c8y-root-component-border-color)',\n formatter: this.getTooltipFormatter(displayOptions),\n appendToBody: true,\n position: this.tooltipPosition(),\n transitionDuration: 0\n },\n legend: {\n show: false\n },\n xAxis: {\n min: aggregatedDatapoint\n ? Object.keys(aggregatedDatapoint.values)\n .map(date => new Date(date).valueOf())\n .sort((a, b) => a - b)[0]\n : new Date(timeRange.dateFrom).valueOf() - intervalInMs,\n max: timeRange.dateTo,\n type: 'time',\n animation: false,\n axisPointer: {\n label: {\n show: false\n }\n },\n axisLine: {\n // align X axis to 0 of Y axis of datapoint with lineType 'bars'\n onZeroAxisIndex: datapointsWithValues.findIndex(dp => dp.lineType === 'bars')\n },\n axisLabel: {\n hideOverlap: true,\n borderWidth: 2, // as there is no margin for labels spacing, transparent border is a workaround\n borderColor: 'transparent',\n formatter: value => {\n const date = new Date(value);\n const locale = selectedLanguage.replace('_', '-');\n\n const isStartOfMinute = date.getSeconds() === 0;\n const isStartOfDay =\n date.getHours() === 0 && date.getMinutes() === 0 && date.getSeconds() === 0;\n const isStartOfYear = date.getMonth() === 0 && date.getDate() === 1 && isStartOfDay;\n\n let options: Intl.DateTimeFormatOptions;\n\n // Case 1: Tick is start of year\n // Shows only the year, e.g. \"2025\"\n if (isStartOfYear) {\n options = { year: 'numeric' };\n }\n\n // Case 2: Tick is start of day\n // Shows abbreviated month and day, e.g. \"Jan 13\"\n else if (isStartOfDay) {\n options = { month: 'short', day: 'numeric' };\n }\n // Case 3: Tick is start of minute\n // Shows hour and minute, e.g. \"14:30\" (format depends on locale)\n else if (isStartOfMinute) {\n options = { hour: 'numeric', minute: '2-digit' };\n }\n // Case 4: Interval is 1 minute or less\n // Shows seconds, e.g. \":45\"\n else {\n options = { second: '2-digit' };\n }\n\n return new Intl.DateTimeFormat(locale, options).format(date);\n }\n },\n splitLine: {\n show: showSplitLines.XAxis,\n lineStyle: { opacity: 0.8, type: 'dashed', width: 2 }\n }\n },\n yAxis,\n series: [\n this.getAggregatedSeries(aggregatedDatapoint || null, displayOptions),\n ...this.getChartSeries(datapointsWithValues, events, alarms, displayOptions)\n ]\n };\n }\n\n calculateExtendedIntervalInMs(interval: Interval['id'], selectedTimeRange): number {\n let intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs;\n\n switch (interval) {\n case 'minutes':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 60;\n break;\n case 'hours':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 24;\n break;\n case 'days':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 28;\n break;\n case 'weeks':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 12;\n break;\n case 'months':\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs * 12;\n break;\n case 'custom':\n intervalInMs =\n (new Date(selectedTimeRange.dateTo).valueOf() -\n new Date(selectedTimeRange.dateFrom).valueOf()) *\n 12;\n break;\n default:\n intervalInMs = INTERVALS.find(i => i.id === interval).timespanInMs;\n break;\n }\n\n return intervalInMs;\n }\n\n getAggregatedSeries(\n aggregatedDatapoint: DpWithValues,\n displayOptions: GraphDisplayOptions\n ): SeriesOption {\n const series: SeriesOption[] = [];\n const renderType: DatapointChartRenderType = aggregatedDatapoint?.renderType || 'min';\n const idx = 0;\n\n if (renderType === 'area') {\n series.push(\n this.getSingleSeries(aggregatedDatapoint, 'min', idx, true, displayOptions, 'aggr')\n );\n series.push(\n this.getSingleSeries(aggregatedDatapoint, 'max', idx, true, displayOptions, 'aggr')\n );\n } else {\n series.push(\n this.getSingleSeries(aggregatedDatapoint, renderType, idx, false, displayOptions, 'aggr')\n );\n }\n\n series.forEach((s: any) => {\n s.datapointId = 'aggregated';\n s.typeOfSeries = 'fake';\n s.itemStyle = {\n ...s.itemStyle,\n opacity: 0\n };\n s.lineStyle = {\n ...s.lineStyle,\n opacity: 0\n };\n });\n\n return series[0];\n }\n\n /**\n * This method is used to get the series for alarms and events.\n * @param dp - The data point.\n * @param renderType - The render type.\n * @param isMinMaxChart - If the chart is min max chart.\n * @param items - All alarms or events which should be displayed on the chart.\n * @param itemType - The item type.\n * @param id - The id of the device\n */\n getAlarmOrEventSeries(\n dp: DpWithValues,\n renderType: DatapointChartRenderType,\n isMinMaxChart = false,\n items: IAlarm[] | IEvent[] = [],\n itemType: 'alarm' | 'event' = 'alarm',\n displayOptions: GraphDisplayOptions = {\n displayMarkedLine: true,\n displayMarkedPoint: true,\n mergeMatchingDatapoints: false,\n forceMergeDatapoints: false,\n showLabelAndUnit: false,\n showSlider: false\n },\n id?: string | number,\n idx?: number,\n realtime?: boolean\n ): CustomSeriesOptions[] {\n if (!items.length) {\n return [];\n }\n\n if (!displayOptions.displayMarkedLine && !displayOptions.displayMarkedPoint) {\n return [];\n }\n\n //filter items that are not __hidden\n const filteredItems: IAlarm[] | IEvent[] = items.filter(item => !item['__hidden']);\n const itemsByType = this.groupByType(filteredItems, 'type');\n const isAlarm = itemType === 'alarm';\n\n return Object.entries(itemsByType).flatMap(\n ([type, itemsOfType]: [string, (IAlarm | IEvent)[]]) => {\n // Main series data\n const mainData = itemsOfType.map(item => [item.creationTime, null, 'markLineFlag']);\n // Is a specific datapoint template selected for this alarm/event type?\n let isDpTemplateSelected = false;\n\n // MarkPoint data\n const markPointData = itemsOfType.reduce<MarkPointData[]>((acc, item) => {\n isDpTemplateSelected =\n item['selectedDatapoint'] &&\n dp['__target'] &&\n item['selectedDatapoint']['fragment'] === dp['fragment'] &&\n item['selectedDatapoint']['series'] === dp['series'] &&\n item['selectedDatapoint']['target'] === dp['__target']['id'];\n if (dp.__target?.id === item.source.id) {\n const isCleared = isAlarm && item.status === AlarmStatus.CLEARED;\n const isEvent = !isAlarm;\n return acc.concat(this.createMarkPoint(item, dp, isCleared, isEvent, realtime));\n } else {\n if (!item.creationTime) {\n return [];\n }\n return acc.concat([\n {\n coord: [item.creationTime, null],\n name: item.type,\n itemType: item.type,\n itemStyle: { color: item['color'] }\n }\n ]);\n }\n }, []);\n\n // Construct series with markPoint\n const seriesWithMarkPoint = {\n id: `${type}/${dp.__target?.id}+${id ? id : ''}-markPoint`,\n name: `${type}-markPoint`,\n typeOfSeries: itemType,\n data: mainData,\n isDpTemplateSelected,\n position: 'bottom',\n silent: true,\n markPoint: {\n showSymbol: true,\n symbolKeepAspect: true,\n data: markPointData\n },\n yAxisIndex: idx,\n ...this.chartTypesService.getSeriesOptions(dp, isMinMaxChart, renderType)\n };\n\n const markLineData = this.createMarkLine(itemsOfType, itemType);\n\n // Construct series with markLine\n const seriesWithMarkLine = {\n id: `${type}/${dp.__target?.id}+${id ? id : ''}-markLine`,\n name: `${type}-markLine`,\n typeOfSeries: itemType,\n isDpTemplateSelected,\n data: mainData,\n markLine: {\n showSymbol: false,\n symbol: ['none', 'none'], // no symbol at the start/end of the line\n data: markLineData\n },\n ...this.chartTypesService.getSeriesOptions(dp, isMinMaxChart, renderType)\n };\n\n //depending on the options return only the required series\n if (displayOptions.displayMarkedLine && displayOptions.displayMarkedPoint) {\n return [seriesWithMarkLine, seriesWithMarkPoint];\n } else if (displayOptions.displayMarkedLine) {\n return [seriesWithMarkLine];\n } else if (displayOptions.displayMarkedPoint) {\n return [seriesWithMarkPoint];\n } else {\n return null;\n }\n }\n ) as CustomSeriesOptions[];\n }\n\n /**\n * This method is used to get tooltip formatter for alarms and events.\n * @param tooltipParams - The tooltip parameters.\n * @param params - The parameters data.\n * @param allEvents - All events.\n * @param allAlarms - All alarms.\n * @returns The formatted string for the tooltip.\n */\n getTooltipFormatterForAlarmAndEvents(\n tooltipParams: CallbackDataParams,\n params: { data: { itemType: string } },\n allEvents: IEvent[],\n allAlarms: IAlarm[],\n displayOptions: GraphDisplayOptions\n ): string {\n if (!Array.isArray(tooltipParams)) {\n return '';\n }\n const XAxisValue: string = tooltipParams[0].data[0];\n const YAxisReadings: string[] = [];\n const allSeries = this.echartsInstance?.getOption()['series'] as CustomSeriesOptions[];\n\n // filter out alarm and event series\n const allDataPointSeries = allSeries.filter(\n series => series['typeOfSeries'] !== 'alarm' && series['typeOfSeries'] !== 'event'\n );\n\n this.processSeries(allDataPointSeries, XAxisValue, YAxisReadings, displayOptions);\n\n // find event and alarm of the same type as the hovered markedLine or markedPoint\n const event = allEvents.find(e => e.type === params.data.itemType);\n const alarm = allAlarms.find(a => a.type === params.data.itemType);\n\n let value = '';\n if (event) {\n value = this.processEvent(event, XAxisValue);\n }\n\n if (alarm) {\n this.processAlarm(alarm).then(alarmVal => {\n value = alarmVal;\n YAxisReadings.push(value);\n const options = this.echartsInstance?.getOption() as EChartsOption;\n if (!options.tooltip || !Array.isArray(options.tooltip)) {\n return;\n }\n const updatedOptions: Partial<SeriesOption> = {\n tooltip: options['tooltip'][0]\n };\n\n if (!updatedOptions.tooltip) {\n return;\n }\n updatedOptions.tooltip.formatter = `<div style=\"width: ${this.TOOLTIP_WIDTH}px\">${YAxisReadings.join('')}</div>`;\n updatedOptions.tooltip.transitionDuration = 0;\n updatedOptions.tooltip.position = this.tooltipPosition();\n this.echartsInstance?.setOption(updatedOptions);\n return;\n });\n }\n YAxisReadings.push(value);\n\n return `<div style=\"width: 300px\">${YAxisReadings.join('')}</div>`;\n }\n\n /**\n * Creates the series for alarms and events by their type.\n * @param alarms - The list of alarms.\n * @param events - The list of events.\n * @returns The series options for the chart.\n */\n createAlarmEventTypeSeries(alarms: IAlarm[], events: IEvent[]): SeriesOption[] {\n const series: SeriesOption[] = [];\n let yValue = 10;\n\n // Group alarms and events by type\n const alarmTypes = Array.from(new Set(alarms.map(a => a.type)));\n const eventTypes = Array.from(new Set(events.map(e => e.type)));\n\n // Alarms by type\n for (const type of alarmTypes) {\n const alarmsOfType = alarms.filter(a => a.type === type);\n // Background circle series\n series.push({\n type: 'scatter',\n name: `${type}-circle`,\n data: alarmsOfType.map(a => [a.creationTime, yValue]),\n symbol: 'circle',\n symbolSize: 24,\n itemStyle: {\n color: alarmsOfType[0]?.color || '#EE6666'\n },\n z: 2\n });\n\n // Foreground icon series\n series.push({\n type: 'scatter',\n name: `${type}-icon`,\n data: alarmsOfType.map(a => {\n const isCleared = a.status === AlarmStatus.CLEARED;\n return {\n value: [isCleared ? a.lastUpdated : a.creationTime, yValue],\n itemStyle: { color: 'white' },\n symbol: isCleared ? ICONS_MAP.CLEARED : ICONS_MAP[a.severity as SeverityType],\n symbolSize: 16\n };\n }),\n z: 3\n });\n\n // If alarm is cleared, also show the cleared icon at lastUpdated\n alarmsOfType.forEach(a => {\n if (a.status === AlarmStatus.CLEARED && a.lastUpdated !== a.creationTime) {\n series.push({\n type: 'scatter',\n name: `${type}-cleared-circle`,\n data: [[a.lastUpdated, yValue]],\n symbol: 'circle',\n symbolSize: 24,\n itemStyle: {\n color: a.color || '#EE6666'\n },\n z: 2\n });\n series.push({\n type: 'scatter',\n name: `${type}-cleared-icon`,\n data: [\n {\n value: [a.lastUpdated, yValue],\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP.CLEARED,\n symbolSize: 16\n }\n ],\n z: 3\n });\n }\n });\n\n yValue += 10;\n }\n\n // Events by type\n for (const type of eventTypes) {\n const eventsOfType = events.filter(e => e.type === type);\n // Background circle series\n series.push({\n type: 'scatter',\n name: `${type}-circle`,\n data: eventsOfType.map(e => [e.creationTime, yValue]),\n symbol: 'circle',\n symbolSize: 24,\n itemStyle: {\n color: eventsOfType[0]?.color || '#6f6cd0'\n },\n z: 2\n });\n\n // Foreground icon series\n series.push({\n type: 'scatter',\n name: `${type}-icon`,\n data: eventsOfType.map(e => ({\n value: [e.creationTime, yValue],\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP.EVENT,\n symbolSize: 16\n })),\n z: 3\n });\n\n yValue += 10;\n }\n\n return series;\n }\n\n private tooltipPosition(): TooltipPositionCallback {\n let lastPositionOfTooltip: Partial<Record<'top' | 'bottom' | 'left' | 'right', number>> = {};\n if (this.tooltipPositionCallback) {\n return this.tooltipPositionCallback;\n }\n\n this.tooltipPositionCallback = (\n point: [number, number], // position of mouse in chart [X, Y]; 0,0 is top left corner\n _: any, // tooltip data\n dom: HTMLElement | unknown, // tooltip element\n __: any,\n size: {\n contentSize: [number, number]; // size of tooltip\n viewSize: [number, number];\n } | null // size of chart\n ) => {\n const offset = 10;\n const [mouseX, mouseY] = point;\n const chartWidth = size?.viewSize[0] || 0;\n const chartHeight = size?.viewSize[1] || 0;\n const tooltipWidth = size?.contentSize[0] || 0;\n const tooltipHeight = size?.contentSize[1] || 0;\n const tooltipRect = (dom as HTMLElement)?.getBoundingClientRect();\n const tooltipOverflowsBottomEdge = tooltipRect.bottom > window.innerHeight;\n\n const tooltipOverflowsRightEdge = tooltipRect.right > window.innerWidth;\n\n const tooltipWouldOverflowBottomEdgeOnPositionChange =\n !lastPositionOfTooltip.top &&\n tooltipRect.bottom + 2 * offset + tooltipHeight > window.innerHeight;\n\n const tooltipWouldOverflowRightEdgeOnPositionChange =\n !lastPositionOfTooltip.left &&\n tooltipRect.right + 2 * offset + tooltipWidth > window.innerWidth;\n\n let verticalPosition: { top: number } | { bottom: number } = {\n top: mouseY + offset\n };\n let horizontalPosition: { left: number } | { right: number } = {\n left: mouseX + offset\n };\n\n if (tooltipOverflowsBottomEdge || tooltipWouldOverflowBottomEdgeOnPositionChange) {\n verticalPosition = {\n bottom: chartHeight - mouseY + offset\n };\n }\n if (tooltipOverflowsRightEdge || tooltipWouldOverflowRightEdgeOnPositionChange) {\n horizontalPosition = {\n right: chartWidth - mouseX + offset\n };\n }\n\n lastPositionOfTooltip = {\n ...verticalPosition,\n ...horizontalPosition\n };\n return lastPositionOfTooltip;\n };\n return this.tooltipPositionCallback;\n }\n\n /**\n * This method is used to add the data point info to the tooltip.\n * @param allDataPointSeries - All the data point series.\n * @param XAxisValue - The X Axis value.\n * @param YAxisReadings - The Y Axis readings.\n */\n private processSeries(\n allDataPointSeries: CustomSeriesOptions[],\n XAxisValue: string,\n YAxisReadings: string[],\n displayOptions: GraphDisplayOptions\n ): void {\n allDataPointSeries.forEach((series: any) => {\n if (series.datapointId === 'aggregated') {\n return;\n }\n let value = '';\n if (series.id.endsWith('/min')) {\n value = this.processMinSeries(series, allDataPointSeries, XAxisValue, displayOptions);\n } else if (!series.id.endsWith('/max')) {\n value = this.processRegularSeries(series, XAxisValue, displayOptions);\n }\n\n if (value) {\n YAxisReadings.push(\n `<div class=\"d-flex a-i-center p-b-8 text-default\"><span class='dlt-c8y-icon-circle m-r-4' style='color: ${series.itemStyle.color};'></span>` + // color circle\n `<strong class=\"text-truncate\">${series.datapointLabel}</strong></div>` + // name\n `${value}` // single value or min-max range\n );\n }\n });\n }\n\n /**\n * This method is used to process the min series.\n * @param series - The series.\n * @param allDataPointSeries - All the data point series.\n * @param XAxisValue - The X Axis value.\n * @returns The processed value.\n */\n private processMinSeries(\n series: any,\n allDataPointSeries: CustomSeriesOptions[],\n XAxisValue: string,\n displayOptions: GraphDisplayOptions\n ): string {\n const minValue = this.findValueForExactOrEarlierTimestamp(series.data, XAxisValue);\n if (!minValue) {\n return '';\n }\n const maxSeries = allDataPointSeries.find(s => s['id'] === series.id.replace('/min', '/max'));\n const maxValue = this.findValueForExactOrEarlierTimestamp(\n maxSeries?.['data'] as SeriesValue[],\n XAxisValue\n );\n return (\n `<div class=\"d-flex a-i-center separator-top p-t-8 p-b-8 text-default\"><label class=\"text-12 m-r-8 m-b-0\">${this.datePipe.transform(minValue[0])}</label>` +\n `<span class=\"m-l-auto text-12\">${minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'} — ${maxValue?.[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +\n (series.datapointUnit ? ` ${series.datapointUnit}` : '') +\n `</span></div>`\n );\n }\n\n /**\n * This method is used to process the regular series.\n * @param series - The series.\n * @param XAxisValue - The X Axis value.\n * @returns The processed value.\n */\n private processRegularSeries(\n series: any,\n XAxisValue: string,\n displayOptions: GraphDisplayOptions\n ): string {\n const seriesValue = this.findValueForExactOrEarlierTimestamp(series.data, XAxisValue);\n if (!seriesValue) {\n return '';\n }\n return (\n `<div class=\"d-flex a-i-center p-t-8 p-b-8 separator-top text-default\">` +\n `<label class=\"m-b-0 m-r-8 text-12\">${this.datePipe.transform(\n seriesValue[0]\n )}</label><span class=\"m-l-auto text-12\">` +\n `${seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +\n (series.datapointUnit ? ` ${series.datapointUnit}` : '') +\n `</span></div>`\n );\n }\n\n /**\n * This method is used to process the event tooltip.\n * @param event - The event object.\n * @returns The processed value.\n */\n private processEvent(event: IEvent, XAxisValue: string): string {\n let value = `<ul class=\"list-unstyled small separator-top text-default\">`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"small m-b-0 m-r-8\">${this.translate.instant(gettext('Event type'))}</label><code class=\"m-l-auto\" style=\"display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px; -webkit-line-clamp: 2;\" title=\"${event.type}\">${event.type}</code></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"small m-b-0 m-r-8\">${this.translate.instant(gettext('Event text'))}</label><span class=\"m-l-auto\" style=\"display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px; -webkit-line-clamp: 5;\" title=\"${event.text}\">${event.text}</span></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"small m-b-0 m-r-8\">${this.translate.instant(gettext('Event time'))}</label><span class=\"m-l-auto\">${this.datePipe.transform(XAxisValue)}<span></li>`;\n value += `</ul>`;\n return value;\n }\n\n /**\n * This method is used to process the alarm tooltip.\n * @param alarm - The alarm object.\n * @returns The processed value.\n */\n private async processAlarm(alarm: IAlarm): Promise<string> {\n let value = `<ul class=\"list-unstyled small separator-top text-default m-0\">`;\n value += `<li class=\"p-t-4 p-b-4 d-flex a-i-center separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Alarm severity'))}</label>`;\n value += `<span class=\"small d-inline-flex a-i-center gap-4 m-l-auto\"><i class=\"stroked-icon icon-14 status dlt-c8y-icon-${this.severityIconPipe.transform(alarm.severity)} ${alarm.severity.toLowerCase()}\" > </i> ${this.severityLabelPipe.transform(alarm.severity)} </span></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Alarm type'))}</label><span class=\"small m-l-auto\"><code>${alarm.type}</code></span></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Message'))}</label><span class=\"small m-l-auto\" style=\"display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 5; overflow: hidden; text-overflow: ellipsis; word-break: break-word; white-space: normal; max-width: 200px;\" title=\"${this.translate.instant(alarm.text)}\">${this.translate.instant(alarm.text)}</span></li>`;\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Last updated'))}</label><span class=\"small m-l-auto\">${this.datePipe.transform(alarm['lastUpdated'])}</span></li>`;\n const exists = await this.alarmRouteExists();\n if (exists) {\n const currentUrl = window.location.href;\n const baseUrlIndex = currentUrl.indexOf(INDEX_HTML);\n const baseUrl = currentUrl.substring(0, baseUrlIndex + INDEX_HTML.length);\n value += `<li class=\"p-t-4 p-b-4 d-flex separator-bottom text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Open details'))}</label><span class=\"small m-l-auto\"><a href=\"${baseUrl}#/alarms/${alarm.id}/details?showCleared=true\">${this.translate.instant(gettext('Alarm details'))}</a></span></li>`;\n }\n value += `<li class=\"p-t-4 p-b-4 d-flex text-no-wrap\"><label class=\"text-label-small m-b-0 m-r-8\">${this.translate.instant(gettext('Alarm count'))}</label><span class=\"small m-l-auto\"><span class=\"badge badge-info\">${alarm.count}</span></span></li>`;\n value += `</ul>`;\n return value;\n }\n\n private async alarmRouteExists(): Promise<boolean> {\n const exists = this.router.config.some(route => {\n return `${route.path}` === 'alarms';\n });\n return exists;\n }\n\n private getChartSeries(\n datapointsWithValues: DpWithValues[],\n events: IEvent[],\n alarms: IAlarm[],\n displayOptions: GraphDisplayOptions\n ): CustomSeriesOptions[] | SeriesOption[] {\n const series: SeriesOption[] = [];\n let eventSeries: CustomSeriesOptions[] = [];\n let alarmSeries: CustomSeriesOptions[] = [];\n datapointsWithValues.forEach((dp, idx) => {\n const renderType: DatapointChartRenderType = dp.renderType || 'min';\n if (renderType === 'area') {\n series.push(this.getSingleSeries(dp, 'min', idx, true, displayOptions));\n series.push(this.getSingleSeries(dp, 'max', idx, true, displayOptions));\n } else {\n series.push(this.getSingleSeries(dp, renderType, idx, false, displayOptions));\n }\n\n const newEventSeries = this.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n events,\n 'event',\n displayOptions,\n null,\n idx\n );\n const newAlarmSeries = this.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n alarms,\n 'alarm',\n displayOptions,\n null,\n idx\n );\n eventSeries = [...eventSeries, ...newEventSeries];\n alarmSeries = [...alarmSeries, ...newAlarmSeries];\n });\n const deduplicateFilterCallback = (\n obj1: CustomSeriesOptions,\n i: number,\n arr: SeriesOption[]\n ): obj1 is CustomSeriesOptions => {\n const duplicates = arr.filter(obj2 => obj1['id'] === obj2['id'] && i !== arr.indexOf(obj2));\n\n if (duplicates.length > 0) {\n return obj1['isDpTemplateSelected'] as boolean;\n }\n\n return true;\n };\n\n const deduplicateFilterCallbackFallback = (\n obj1: SeriesOption,\n i: number,\n arr: SeriesOption[]\n ): obj1 is SeriesOption => arr.findIndex(obj2 => obj2['id'] === obj1['id']) === i;\n\n let deduplicatedEvents = eventSeries.filter(deduplicateFilterCallback);\n let deduplicatedAlarms = alarmSeries.filter(deduplicateFilterCallback);\n if (deduplicatedAlarms.length === 0) {\n deduplicatedAlarms = alarmSeries.filter(deduplicateFilterCallbackFallback);\n }\n if (deduplicatedEvents.length === 0) {\n deduplicatedEvents = eventSeries.filter(deduplicateFilterCallbackFallback);\n }\n return [...series, ...deduplicatedEvents, ...deduplicatedAlarms];\n }\n\n private groupByType(\n items: IAlarm[] | IEvent[],\n typeField: string\n ): Record<string, IAlarm[] | IEvent[]> {\n return items.reduce((grouped, item) => {\n (grouped[item[typeField]] = grouped[item[typeField]] || []).push(item);\n return grouped;\n }, {} as any);\n }\n\n /**\n * This method interpolates between two data points. The goal is to place the markPoint on the chart in the right place.\n * @param dpValuesArray array of data points\n * @param targetTime time of the alarm or event\n * @returns interpolated data point\n */\n private interpolateBetweenTwoDps(\n dpValuesArray: DpValuesItem[],\n targetTime: number\n ): DpValuesItem {\n let maxValue: number;\n let minValue: number;\n return dpValuesArray.reduce((acc, curr, idx, arr) => {\n if (new Date(curr.time).getTime() <= targetTime) {\n if (idx === arr.length - 1) {\n return {\n time: targetTime,\n values: [{ min: minValue, max: maxValue }]\n };\n }\n const nextDp = arr[idx + 1];\n if (new Date(nextDp.time).getTime() >= targetTime) {\n const timeDiff = new Date(nextDp.time).getTime() - new Date(curr.time).getTime();\n const targetTimeDiff = targetTime - new Date(curr.time).getTime();\n const minValueDiff = nextDp.values[0]?.min - curr.values[0]?.min;\n const maxValueDiff = nextDp.values[0]?.max - curr.values[0]?.max;\n minValue = curr.values[0]?.min + (minValueDiff * targetTimeDiff) / timeDiff;\n maxValue = curr.values[0]?.max + (maxValueDiff * targetTimeDiff) / timeDiff;\n return {\n time: targetTime,\n values: [{ min: minValue, max: maxValue }]\n };\n }\n }\n return acc;\n });\n }\n\n private getClosestDpValueToTargetTime(\n dpValuesArray: DpValuesItem[],\n targetTime: number\n ): DpValuesItem {\n return dpValuesArray.reduce((prev, curr) =>\n //should take the value closest to the target time, for realtime the current time would always change\n Math.abs(new Date(curr.time).getTime() - targetTime) <\n Math.abs(new Date(prev.time).getTime() - targetTime)\n ? curr\n : prev\n );\n }\n\n /**\n * This method creates a markPoint on the chart which represents the icon of the alarm or event.\n * @param item Single alarm or event\n * @param dp Data point\n * @param isCleared If the alarm is cleared in case of alarm\n * @param isEvent If the item is an event\n * @param realtime If the chart is in realtime mode\n * @returns MarkPointDataItemOption[]\n */\n private createMarkPoint(\n item: IAlarm | IEvent,\n dp: DpWithValues,\n isCleared: boolean,\n isEvent: boolean,\n realtime: boolean\n ): MarkPointData[] {\n // check if dp.values object is empty\n if (!item.creationTime || Object.keys(dp.values).length === 0) {\n return [];\n }\n\n const dpValuesArray: DpValuesItem[] = Object.entries(dp.values).map(([time, values]) => ({\n time: new Date(time).getTime(),\n values\n }));\n const creationTime = new Date(item.creationTime).getTime();\n const lastUpdatedTime = new Date(item['lastUpdated']).getTime();\n\n let coordCreationTime: any;\n let coordLastUpdatedTime: any;\n\n if (realtime) {\n const lastValue = dpValuesArray[dpValuesArray.length - 1];\n coordCreationTime = [\n item.creationTime,\n lastValue?.values[0]?.min ?? lastValue?.values[1] ?? null\n ];\n coordLastUpdatedTime = [\n item['lastUpdated'],\n lastValue?.values[0]?.min ?? lastValue?.values[1] ?? null\n ];\n } else {\n const closestDpValue = this.interpolateBetweenTwoDps(dpValuesArray, creationTime);\n const dpValuesForNewAlarms = this.getClosestDpValueToTargetTime(dpValuesArray, creationTime);\n const closestDpValueLastUpdated = this.interpolateBetweenTwoDps(\n dpValuesArray,\n lastUpdatedTime\n );\n const dpValuesForNewAlarmsLastUpdated = this.getClosestDpValueToTargetTime(\n dpValuesArray,\n lastUpdatedTime\n );\n\n coordCreationTime = [\n item.creationTime,\n closestDpValue?.values[0]?.min ??\n closestDpValue?.values[1] ??\n dpValuesForNewAlarms?.values[0]?.min ??\n dpValuesForNewAlarms?.values[1] ??\n null\n ];\n coordLastUpdatedTime = [\n item['lastUpdated'],\n closestDpValueLastUpdated?.values[0]?.min ??\n closestDpValueLastUpdated?.values[1] ??\n dpValuesForNewAlarmsLastUpdated?.values[0]?.min ??\n dpValuesForNewAlarmsLastUpdated?.values[1] ??\n null\n ];\n }\n\n if (isEvent) {\n return [\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP.EVENT,\n symbolSize: 16\n }\n ];\n }\n\n return isCleared\n ? [\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP[item.severity as SeverityType],\n symbolSize: 16\n },\n {\n coord: coordLastUpdatedTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordLastUpdatedTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP.CLEARED,\n symbolSize: 16\n }\n ]\n : [\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordCreationTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP[item.severity as SeverityType],\n symbolSize: 16\n },\n {\n coord: coordLastUpdatedTime,\n name: item.type,\n itemType: item.type,\n itemStyle: {\n color: item['color']\n },\n symbol: 'circle',\n symbolSize: 24\n },\n {\n coord: coordLastUpdatedTime,\n name: item.type,\n itemType: item.type,\n itemStyle: { color: 'white' },\n symbol: ICONS_MAP[item.severity as SeverityType],\n symbolSize: 16\n }\n ];\n }\n\n /**\n * This method creates a markLine on the chart which represents the line between every alarm or event on the chart.\n * @param items Array of alarms or events\n * @returns MarkLineDataItemOptionBase[]\n */\n private createMarkLine<T extends IAlarm | IEvent>(\n items: T[],\n itemType: 'alarm' | 'event'\n ): MarkLineData[] {\n return items.reduce<MarkLineData[]>((acc, item) => {\n if (!item.creationTime) {\n return acc;\n }\n if (itemType === 'event') {\n return acc.concat([\n {\n xAxis: item.time,\n itemType: item.type,\n label: { show: false, formatter: () => item.type },\n itemStyle: { color: item['color'] }\n }\n ]);\n }\n if (item.creationTime === item['lastUpdated']) {\n return acc.concat([\n {\n xAxis: item.creationTime,\n itemType: item.type,\n label: { show: false, formatter: () => item.type },\n itemStyle: { color: item['color'] }\n }\n ]);\n } else {\n return acc.concat([\n {\n xAxis: item.creationTime,\n itemType: item.type,\n label: { show: false, formatter: () => item.type },\n itemStyle: { color: item['color'] }\n },\n {\n xAxis: item['lastUpdated'],\n itemType: item.type,\n label: { show: false, formatter: () => item.type },\n itemStyle: { color: item['color'] }\n }\n ]);\n }\n }, []);\n }\n\n private getSingleSeries(\n dp: DpWithValues,\n renderType: Exclude<DatapointChartRenderType, 'area'>,\n idx: number,\n isMinMaxChart = false,\n displayOptions: GraphDisplayOptions,\n seriesType = ''\n ): SeriesOption & SeriesDatapointInfo {\n const datapointId = dp.__target?.id + dp.fragment + dp.series;\n return {\n datapointId,\n datapointUnit: dp.unit || '',\n // 'id' property is needed as 'seriesId' in tooltip formatter\n id: isMinMaxChart\n ? `${datapointId}/${renderType}${seriesType}`\n : `${datapointId}${seriesType}`,\n name: `${dp.label} (${dp.__target?.['name']})`,\n // datapointLabel used to proper display of tooltip\n datapointLabel: dp.label || '',\n data: Object.entries(dp.values).map(([dateString, values]) => {\n return [dateString, values[0][renderType]];\n }),\n ...(displayOptions.forceMergeDatapoints ? {} : { yAxisIndex: idx }),\n ...this.chartTypesService.getSeriesOptions(dp, isMinMaxChart, renderType)\n };\n }\n\n /**\n * This method creates a general tooltip formatter for the chart.\n * @returns TooltipFormatterCallback<TopLevelFormatterParams>\n */\n private getTooltipFormatter(\n displayOptions: GraphDisplayOptions\n ): TooltipFormatterCallback<TopLevelFormatterParams> {\n return params => {\n if (!Array.isArray(params) || !params[0]?.data) {\n return null;\n }\n const data = params[0].data as [string, ...any[]];\n const XAxisValue: string = data[0];\n const YAxisReadings: string[] = [];\n const allSeries = this.echartsInstance?.getOption()['series'] as CustomSeriesOptions[];\n\n const allDataPointSeries = allSeries.filter(\n series =>\n series['typeOfSeries'] !== 'alarm' &&\n series['typeOfSeries'] !== 'event' &&\n series['typeOfSeries'] !== 'fake'\n );\n\n allDataPointSeries.forEach((series: CustomSeriesOptions) => {\n let value: string;\n const id = series['id'] as string;\n if (id.endsWith('/min')) {\n const minValue = this.findValueForExactOrEarlierTimestamp(\n series['data'] as SeriesValue[],\n XAxisValue\n );\n if (!minValue) {\n return;\n }\n const maxSeries = allDataPointSeries.find(s => s['id'] === id.replace('/min', '/max'));\n if (!maxSeries) {\n return;\n }\n const maxValue = this.findValueForExactOrEarlierTimestamp(\n maxSeries['data'] as SeriesValue[],\n XAxisValue\n );\n if (maxValue === null) {\n return;\n }\n value =\n `<div class=\"d-flex a-i-center separator-top text-default p-t-8 p-b-8\">` +\n `<label class=\"text-12 m-r-8 m-b-0\">${this.datePipe.transform(minValue[0])}</label>` +\n `<div class=\"m-l-auto text-12\" >${minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'} — ${maxValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +\n (series['datapointUnit'] ? ` ${series['datapointUnit']}` : '') +\n `</div></div>`;\n } else if (id.endsWith('/max')) {\n // do nothing, value is handled in 'min' case\n return;\n } else {\n const seriesValue = this.findValueForExactOrEarlierTimestamp(\n series['data'] as SeriesValue[],\n XAxisValue\n );\n if (!seriesValue) {\n return;\n }\n value =\n `<div class=\"d-flex a-i-center separator-top text-default p-t-8 p-b-8\">` +\n `<label class=\"text-12 m-r-8 m-b-0\">${this.datePipe.transform(seriesValue[0])}</label>` +\n `<div class=\"m-l-auto text-12\" >${seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--'}` +\n (series['datapointUnit'] ? ` ${series['datapointUnit']}` : '') +\n `</div></div>`;\n }\n\n const itemStyle = series['itemStyle'] as { color: string };\n\n YAxisReadings.push(\n `<div class=\"d-flex a-i-center p-b-8 text-default\"><span class='dlt-c8y-icon-circle m-r-4' style='color: ${itemStyle.color}'></span>` + // color circle\n `<strong class=\"text-truncate\">${series['datapointLabel']} </strong></div>` + // name\n `${value}` // single value or min-max range\n );\n });\n\n return `<div inner-e-cbg-component style=\"width: ${this.TOOLTIP_WIDTH}px\">${YAxisReadings.join('')}</div>`;\n };\n }\n\n private findValueForExactOrEarlierTimestamp(\n values: SeriesValue[],\n timestampString: DateString\n ): SeriesValue | null {\n const timestamp = new Date(timestampString).valueOf();\n return values.reduce((acc: SeriesValue | null, curr: SeriesValue) => {\n if (new Date(curr[0]).valueOf() <= timestamp) {\n if (\n acc === null ||\n Math.abs(new Date(curr[0]).valueOf() - timestamp) <\n Math.abs(new Date(acc[0]).valueOf() - timestamp)\n ) {\n return curr;\n }\n }\n return acc;\n }, null);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { from, interval, merge, Observable, Subscription } from 'rxjs';\nimport { IAlarm, IEvent, IMeasurement } from '@c8y/client';\nimport { buffer, map, mergeMap, tap, throttleTime } from 'rxjs/operators';\nimport {\n AlarmOrEventExtended,\n DatapointChartRenderType,\n DatapointRealtimeMeasurements,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n GraphDisplayOptions,\n DpWithValues,\n SeriesValue\n} from '../models';\nimport {\n AlarmRealtimeService,\n EventRealtimeService,\n MeasurementRealtimeService,\n RealtimeMessage\n} from '@c8y/ngx-components';\nimport type { ECharts, SeriesOption } from 'echarts';\nimport { EchartsOptionsService } from './echarts-options.service';\nimport { CustomSeriesOptions } from '../models/chart.model';\n\ntype Milliseconds = number;\n\n@Injectable()\nexport class ChartRealtimeService {\n private INTERVAL: Milliseconds = 1000;\n private MIN_REALTIME_TIMEOUT: Milliseconds = 250;\n private MAX_REALTIME_TIMEOUT: Milliseconds = 5_000;\n private realtimeSubscriptionMeasurements!: Subscription;\n private realtimeSubscriptionAlarmsEvents!: Subscription;\n private realtimeIntervalSubscription!: Subscription;\n private echartsInstance: ECharts | undefined;\n private currentTimeRange: { dateFrom: Date; dateTo: Date } | undefined;\n private lastMeasurements: Map<string, DatapointRealtimeMeasurements> = new Map();\n private pendingAlarmsOrEvents: Map<string, IAlarm | IEvent> = new Map();\n private currentAlarms: IAlarm[] = [];\n private currentEvents: IEvent[] = [];\n\n constructor(\n private measurementRealtime: MeasurementRealtimeService,\n private alarmRealtimeService: AlarmRealtimeService,\n private eventRealtimeService: EventRealtimeService,\n private echartsOptionsService: EchartsOptionsService\n ) {}\n\n startRealtime(\n echartsInstance: ECharts,\n datapoints: DatapointsGraphKPIDetails[],\n timeRange: { dateFrom: string; dateTo: string },\n datapointOutOfSyncCallback: (dp: DatapointsGraphKPIDetails) => void,\n timeRangeChangedCallback: (\n timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n ) => void,\n alarmOrEventConfig: AlarmOrEventExtended[] = [],\n displayOptions: GraphDisplayOptions,\n alarms?: IAlarm[],\n events?: IEvent[]\n ) {\n this.echartsInstance = echartsInstance;\n this.currentTimeRange = {\n dateFrom: new Date(timeRange.dateFrom),\n dateTo: new Date(timeRange.dateTo)\n };\n\n const activeAlarmsOrEvents = alarmOrEventConfig.filter(\n alarmOrEvent => alarmOrEvent.__active && !alarmOrEvent.__hidden\n );\n const uniqueAlarmOrEventTargets = Array.from(\n new Set(activeAlarmsOrEvents.map(aOrE => aOrE.__target.id))\n );\n\n if (displayOptions.showOnlyAlarmsOrEvents) {\n this.currentAlarms = alarms ? [...alarms] : [];\n this.currentEvents = events ? [...events] : [];\n\n // Subscribe to realtime alarms/events\n const allAlarmsAndEvents$: Observable<IAlarm | IEvent> = from(uniqueAlarmOrEventTargets).pipe(\n mergeMap(targetId => {\n const alarmsRealtime$: Observable<RealtimeMessage<IAlarm>> =\n this.alarmRealtimeService.onAll$(targetId);\n const eventsRealtime$: Observable<RealtimeMessage<IEvent>> =\n this.eventRealtimeService.onAll$(targetId);\n return merge(alarmsRealtime$, eventsRealtime$).pipe(\n map(realtimeMessage => realtimeMessage.data as IAlarm | IEvent)\n );\n })\n );\n\n this.realtimeSubscriptionAlarmsEvents = allAlarmsAndEvents$.subscribe(alarmOrEvent => {\n if (!alarmOrEvent) return;\n if ('severity' in alarmOrEvent) {\n // Alarm\n if (!this.currentAlarms.some(a => a.id === alarmOrEvent.id)) {\n this.currentAlarms.push(alarmOrEvent as IAlarm);\n }\n } else {\n // Event\n if (!this.currentEvents.some(e => e.id === alarmOrEvent.id)) {\n this.currentEvents.push(alarmOrEvent as IEvent);\n }\n }\n this.updateAlarmsEventsChartRealtime();\n });\n\n const updateThrottleTime: Milliseconds = this.getRealtimeUpdateThrottleTime({\n dateFrom: this.currentTimeRange!.dateFrom.toISOString(),\n dateTo: this.currentTimeRange!.dateTo.toISOString()\n });\n\n this.realtimeIntervalSubscription = interval(this.INTERVAL)\n .pipe(\n tap(() => {\n const windowSize =\n this.currentTimeRange!.dateTo.valueOf() - this.currentTimeRange!.dateFrom.valueOf();\n const now = Date.now();\n this.currentTimeRange = {\n dateFrom: new Date(now - windowSize),\n dateTo: new Date(now)\n };\n timeRangeChangedCallback(this.currentTimeRange);\n this.updateAlarmsEventsChartRealtime();\n }),\n throttleTime(updateThrottleTime)\n )\n .subscribe();\n\n return;\n }\n\n const allAlarmsAndEvents$: Observable<IAlarm | IEvent> = from(uniqueAlarmOrEventTargets).pipe(\n mergeMap(targetId => {\n const alarmsRealtime$: Observable<RealtimeMessage<IAlarm>> =\n this.alarmRealtimeService.onAll$(targetId);\n const eventsRealtime$: Observable<RealtimeMessage<IEvent>> =\n this.eventRealtimeService.onAll$(targetId);\n return merge(alarmsRealtime$, eventsRealtime$).pipe(\n map(realtimeMessage => realtimeMessage.data as IAlarm | IEvent)\n );\n })\n );\n\n const measurementsForDatapoints: Observable<DatapointRealtimeMeasurements>[] = datapoints.map(\n dp => {\n const source$: Observable<IMeasurement> =\n this.measurementRealtime.onCreateOfSpecificMeasurement$(\n dp.fragment,\n dp.series,\n dp.__target?.id\n );\n return source$.pipe(map((measurement: IMeasurement) => ({ datapoint: dp, measurement })));\n }\n );\n const updateThrottleTime: Milliseconds = this.getRealtimeUpdateThrottleTime(timeRange);\n const measurement$ = merge(...measurementsForDatapoints);\n const bufferReset$ = merge(\n measurement$.pipe(throttleTime(updateThrottleTime)),\n interval(this.INTERVAL).pipe(\n tap(() => {\n this.currentTimeRange = {\n dateFrom: new Date((this.currentTimeRange?.dateFrom?.valueOf() || 0) + this.INTERVAL),\n dateTo: new Date((this.currentTimeRange?.dateTo?.valueOf() || 0) + this.INTERVAL)\n };\n timeRangeChangedCallback(this.currentTimeRange);\n }),\n throttleTime(updateThrottleTime)\n )\n ).pipe(throttleTime(this.MIN_REALTIME_TIMEOUT));\n\n this.realtimeSubscriptionMeasurements = measurement$\n .pipe(buffer(bufferReset$))\n .subscribe(measurements => {\n const alarmsOrEvents = Array.from(this.pendingAlarmsOrEvents.values());\n this.pendingAlarmsOrEvents.clear();\n\n if (alarmsOrEvents.length) {\n alarmsOrEvents.forEach(alarmOrEvent => {\n this.updateChartInstance(\n measurements,\n alarmOrEvent,\n displayOptions,\n datapointOutOfSyncCallback\n );\n });\n } else {\n this.updateChartInstance(measurements, null, displayOptions, datapointOutOfSyncCallback);\n }\n\n // Store the last measurements\n measurements.forEach(measurement => {\n this.lastMeasurements.set(measurement.datapoint.fragment, measurement);\n });\n });\n\n this.realtimeSubscriptionAlarmsEvents = allAlarmsAndEvents$\n .pipe(\n map(alarmOrEvent => {\n const foundAlarmOrEvent = activeAlarmsOrEvents.find(\n aOrE => aOrE.filters.type === alarmOrEvent.type\n );\n if (foundAlarmOrEvent) {\n alarmOrEvent['color'] = foundAlarmOrEvent.color;\n alarmOrEvent['selectedDatapoint'] = foundAlarmOrEvent.selectedDatapoint;\n const key = String(alarmOrEvent.id || alarmOrEvent.creationTime);\n this.pendingAlarmsOrEvents.set(key, alarmOrEvent);\n }\n return null;\n })\n )\n .subscribe();\n }\n\n stopRealtime() {\n this.realtimeSubscriptionMeasurements?.unsubscribe();\n this.realtimeSubscriptionAlarmsEvents?.unsubscribe();\n this.realtimeIntervalSubscription?.unsubscribe();\n }\n\n /**\n * Updates the chart with the current alarms and events data. Only used when no active datapoints are selected.\n */\n private updateAlarmsEventsChartRealtime() {\n const series = this.echartsOptionsService.createAlarmEventTypeSeries(\n this.currentAlarms,\n this.currentEvents\n );\n this.echartsInstance?.setOption({\n series,\n xAxis: {\n min: this.currentTimeRange?.dateFrom,\n max: this.currentTimeRange?.dateTo\n },\n dataZoom: [\n {\n type: 'inside',\n startValue: this.currentTimeRange?.dateFrom?.valueOf(),\n endValue: this.currentTimeRange?.dateTo?.valueOf()\n }\n ]\n });\n }\n\n private removeValuesBeforeTimeRange(series: SeriesOption): SeriesValue[] {\n const firstValidValueByDateIndex = (series.data as SeriesValue[]).findIndex(\n ([dateString, _]) => {\n return new Date(dateString) >= (this.currentTimeRange?.dateFrom || new Date());\n }\n );\n if (firstValidValueByDateIndex > 1) {\n // we need one value before dateFrom for chart lines to be extended to the left edge of the graph\n series.data = (series.data as SeriesValue[]).slice(firstValidValueByDateIndex - 1);\n }\n return series.data as SeriesValue[];\n }\n\n private getRealtimeUpdateThrottleTime(timeRange: {\n dateFrom: string;\n dateTo: string;\n }): Milliseconds {\n const timeRangeInMs =\n new Date(timeRange.dateTo).valueOf() - new Date(timeRange.dateFrom).valueOf();\n const calculatedThrottleTime = Math.round(timeRangeInMs / 1000);\n if (calculatedThrottleTime < this.MIN_REALTIME_TIMEOUT) {\n return this.MIN_REALTIME_TIMEOUT;\n } else if (calculatedThrottleTime > this.MAX_REALTIME_TIMEOUT) {\n return this.MAX_REALTIME_TIMEOUT;\n }\n return calculatedThrottleTime;\n }\n\n private updateChartInstance(\n receivedMeasurements: DatapointRealtimeMeasurements[],\n alarmOrEvent: IAlarm | IEvent | null,\n displayOptions: GraphDisplayOptions,\n datapointOutOfSyncCallback: (dp: DatapointsGraphKPIDetails) => void\n ) {\n const isEvent = (item: IAlarm | IEvent): item is IEvent => !('severity' in item);\n const isAlarm = (item: IAlarm | IEvent): item is IAlarm => 'severity' in item;\n\n const seriesDataToUpdate = new Map<DatapointsGraphKPIDetails, IMeasurement[]>();\n\n receivedMeasurements.forEach(({ datapoint, measurement }) => {\n if (!seriesDataToUpdate.has(datapoint)) {\n seriesDataToUpdate.set(datapoint, []);\n }\n seriesDataToUpdate.get(datapoint)?.push(measurement);\n });\n\n let allDataSeries = this.echartsInstance?.getOption()['series'] as CustomSeriesOptions[];\n\n seriesDataToUpdate.forEach((measurements, datapoint) => {\n const newValues: SeriesValue[] = measurements.map(m => [\n m.time as string,\n m[datapoint.fragment][datapoint.series].value\n ]);\n const datapointId = datapoint.__target?.id + datapoint.fragment + datapoint.series;\n const seriesMatchingDatapoint = allDataSeries.find(s => s['datapointId'] === datapointId);\n if (!seriesMatchingDatapoint) {\n return;\n }\n const seriesDataToUpdate = seriesMatchingDatapoint['data'] as SeriesValue[];\n seriesDataToUpdate.push(...newValues);\n\n seriesMatchingDatapoint['data'] = this.removeValuesBeforeTimeRange(seriesMatchingDatapoint);\n\n if (alarmOrEvent) {\n const renderType: DatapointChartRenderType = datapoint.renderType || 'min';\n const dp: DpWithValues = {\n ...datapoint,\n values: seriesMatchingDatapoint['data'] as {\n [date: string]: { min: number; max: number }[];\n }\n };\n\n if (isEvent(alarmOrEvent)) {\n // if event series with the same id already exists, return\n const eventExists = allDataSeries.some(series =>\n (series['data'] as string[][]).some(\n data => data[0] === (alarmOrEvent as IEvent).creationTime\n )\n );\n if (eventExists) {\n return;\n }\n const newEventSeries = this.echartsOptionsService.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n [alarmOrEvent],\n 'event',\n displayOptions,\n alarmOrEvent.creationTime,\n null,\n true\n );\n allDataSeries.push(...newEventSeries);\n } else if (isAlarm(alarmOrEvent)) {\n const alarmExists = allDataSeries.some((series: CustomSeriesOptions) => {\n const seriesData = series['data'] as SeriesValue[];\n return seriesData.some(\n (data: SeriesValue) => data[0] === (alarmOrEvent as IEvent).creationTime\n );\n });\n if (alarmExists) {\n const alarmSeries = allDataSeries.filter((series: CustomSeriesOptions) => {\n const seriesData = series['data'] as SeriesValue[];\n return seriesData.some(\n (data: SeriesValue) => data[0] === (alarmOrEvent as IAlarm).creationTime\n );\n });\n // remove all matching alarm series which are in the array\n alarmSeries.forEach(series => {\n allDataSeries = allDataSeries.filter(s => s['id'] !== series['id']);\n });\n\n const newAlarmSeries = this.echartsOptionsService.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n [alarmOrEvent],\n 'alarm',\n displayOptions,\n (alarmOrEvent as IAlarm).creationTime,\n null,\n true\n );\n allDataSeries.push(...newAlarmSeries);\n } else {\n const newAlarmSeries = this.echartsOptionsService.getAlarmOrEventSeries(\n dp,\n renderType,\n false,\n [alarmOrEvent],\n 'alarm',\n displayOptions,\n (alarmOrEvent as IEvent).id,\n null,\n true\n );\n allDataSeries.push(...newAlarmSeries);\n }\n }\n }\n\n this.checkForValuesAfterTimeRange(\n seriesMatchingDatapoint['data'] as SeriesValue[],\n datapoint,\n datapointOutOfSyncCallback\n );\n });\n\n this.echartsInstance?.setOption({\n dataZoom: [\n {\n type: 'inside',\n startValue: this.currentTimeRange?.dateFrom.valueOf(),\n endValue: this.currentTimeRange?.dateTo.valueOf()\n }\n ],\n xAxis: {\n max: this.currentTimeRange?.dateTo\n },\n series: allDataSeries\n });\n }\n\n private checkForValuesAfterTimeRange(\n data: SeriesValue[],\n datapoint: DatapointsGraphKPIDetails,\n datapointOutOfSyncCallback: (dp: DatapointsGraphKPIDetails) => void\n ) {\n const now = new Date();\n const valueAfterNowExists = data.some(([dateString, _]: SeriesValue) => {\n return new Date(dateString).valueOf() > now.valueOf();\n });\n if (valueAfterNowExists) {\n datapointOutOfSyncCallback(datapoint);\n }\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { CommonModule, DynamicComponentAlertAggregator } from '@c8y/ngx-components';\n\n@Component({\n selector: 'c8y-chart-alerts',\n templateUrl: './chart-alerts.component.html',\n standalone: true,\n imports: [CommonModule]\n})\nexport class ChartAlertsComponent {\n @Input() alerts: DynamicComponentAlertAggregator;\n}\n","<div\n class=\"overlay-center-vertically d-col p-16 p-r-24 p-l-24\"\n *ngIf=\"alerts?.anyAlertExists$ | async\"\n>\n <ng-container *ngFor=\"let alertGroup of alerts?.alertGroups\">\n <div\n class=\"alert\"\n role=\"alert\"\n *ngIf=\"alertGroup.value.alerts.length\"\n [ngClass]=\"'alert-' + alertGroup.type\"\n >\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\"\n >\n <span aria-hidden=\"true\">×</span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n <p *ngFor=\"let alertItem of alertGroup.value.alerts\">\n {{ alertItem.text | translate }}\n </p>\n <label\n class=\"c8y-checkbox m-t-16\"\n title=\"{{ 'Don\\'t show again' | translate }}\"\n >\n <input\n type=\"checkbox\"\n #dismissPermanently\n />\n <span></span>\n <span>{{ \"Don't show again\" | translate }}</span>\n </label>\n </div>\n </ng-container>\n</div>\n","import { Injectable } from '@angular/core';\nimport { EventService, IEvent, IFetchOptions } from '@c8y/client';\nimport { EventDetails } from '@c8y/ngx-components/alarm-event-selector';\n\n@Injectable()\nexport class ChartEventsService {\n constructor(private eventService: EventService) {}\n\n /**\n * List events for the given event details.\n * @param params Additonal fetchOptions\n * @param events List of event types with details like color, target, etc.\n * @returns List of events for the given event details\n */\n async listEvents(params?: any, events?: EventDetails[]): Promise<IEvent[]> {\n if (!events) {\n return [];\n }\n const promises = events.map(event => {\n const fetchOptions: IFetchOptions = {\n source: event.__target.id,\n type: event.filters.type,\n withTotalPages: true,\n pageSize: 1000,\n ...params\n };\n return this.eventService.list(fetchOptions).then(result => {\n result.data.forEach(iEvent => {\n iEvent['color'] = event.color;\n iEvent['selectedDatapoint'] = event.selectedDatapoint;\n });\n return result.data;\n });\n });\n const result = await Promise.all(promises);\n return result.flat();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AlarmService, IAlarm, IFetchOptions } from '@c8y/client';\nimport { AlarmDetailsExtended } from '../models';\n\n@Injectable()\nexport class ChartAlarmsService {\n constructor(private alarmService: AlarmService) {}\n\n /**\n * List alarms for the given alarm details.\n * @param params Additonal fetchOptions\n * @param alarms List of alarm types with details like color, target, etc.\n * @returns List of alarms for the given alarm details\n */\n async listAlarms(params?: any, alarms?: AlarmDetailsExtended[]): Promise<IAlarm[]> {\n if (!alarms) {\n return [];\n }\n const promises = alarms.map(alarm => {\n if (alarm.__severity && alarm.__severity?.length > 0) {\n const severities = alarm.__severity.join(',');\n params = {\n ...params,\n severity: severities\n };\n }\n if (alarm.__status && alarm.__status?.length > 0) {\n const statuses = alarm.__status.join(',');\n params = {\n ...params,\n status: statuses\n };\n }\n const fetchOptions: IFetchOptions = {\n source: alarm.__target.id,\n type: alarm.filters.type,\n withTotalPages: true,\n pageSize: 1000,\n ...params\n };\n return this.alarmService.list(fetchOptions).then(result => {\n result.data.forEach(iAlarm => {\n iAlarm['color'] = alarm.color;\n iAlarm['selectedDatapoint'] = alarm.selectedDatapoint;\n });\n return result.data;\n });\n });\n const result = await Promise.all(promises);\n return result.flat();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { SelectedDatapoint } from '@c8y/ngx-components/alarm-event-selector';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatapointsGraphWidgetConfig } from '../models';\n\n@Injectable()\nexport class ChartHelpersService {\n /**\n * Cleans the widget configuration which will be sent to Gainsight by removing unnecessary properties.\n * @param config The widget configuration to clean.\n * @returns The cleaned widget configuration.\n */\n getConfigSummaryForGainsight(config: DatapointsGraphWidgetConfig) {\n return {\n datapointCount: config.datapoints?.length ?? 0,\n alarmsEventsCount: config.alarmsEventsConfigs?.length ?? 0,\n interval: config.interval,\n forceMergeDatapoints: config.forceMergeDatapoints,\n mergeMatchingDatapoints: config.mergeMatchingDatapoints,\n showSlider: config.showSlider,\n widgetInstanceGlobalTimeContext: config.widgetInstanceGlobalTimeContext,\n dateFrom: config.dateFrom,\n dateTo: config.dateTo\n };\n }\n\n findMatchingDatapoint(\n datapoints: KPIDetails[],\n selected: KPIDetails | SelectedDatapoint | null\n ): KPIDetails | undefined {\n if (!selected) return undefined;\n\n return datapoints.find(\n dp =>\n this.getTargetId(dp) === this.getTargetId(selected) &&\n dp.fragment === selected.fragment &&\n dp.series === selected.series\n );\n }\n\n private getTargetId(obj: any): string | undefined {\n return obj?.__target?.id ?? obj?.target;\n }\n}\n","import { NgForOf, NgIf } from '@angular/common';\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n OnChanges,\n SimpleChanges,\n inject\n} from '@angular/core';\nimport { FormsModule, C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { SelectedDatapoint } from '@c8y/ngx-components/alarm-event-selector';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { ChartHelpersService } from '../services/chart-helpers.service';\n\n@Component({\n selector: 'c8y-select-aggregated-datapoint',\n templateUrl: './select-aggregated-datapoint.component.html',\n host: {\n class: 'd-contents'\n },\n standalone: true,\n imports: [\n FormsModule,\n C8yTranslatePipe,\n PopoverModule,\n TooltipModule,\n BsDropdownModule,\n A11yModule,\n IconDirective,\n NgIf,\n NgForOf\n ]\n})\nexport class SelectAggregatedDatapointComponent implements OnChanges {\n @Input() activeDatapoints: KPIDetails[] = [];\n @Input() value: KPIDetails | null = null;\n @Output() valueChange = new EventEmitter<SelectedDatapoint>();\n\n private readonly chartHelpersService = inject(ChartHelpersService);\n\n selectedDatapointLabel = gettext('Select data point') as string;\n selectedDatapointColor = '';\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['value'] || changes['activeDatapoints']) {\n this.updateSelectedDatapointInfo();\n }\n }\n\n changeDatapointSelection(datapoint: KPIDetails) {\n const trimmedDatapoint: SelectedDatapoint = {\n target: datapoint.__target.id as string,\n fragment: datapoint.fragment,\n series: datapoint.series\n };\n this.valueChange.emit(trimmedDatapoint);\n }\n\n private updateSelectedDatapointInfo() {\n if (!this.value) {\n return;\n }\n\n const found = this.chartHelpersService.findMatchingDatapoint(this.activeDatapoints, this.value);\n\n if (this.value && !found) {\n this.selectedDatapointLabel = this.value.label || '';\n this.selectedDatapointColor = this.value.color || '';\n return;\n }\n\n this.selectedDatapointLabel = found?.label || '';\n this.selectedDatapointColor = found?.color || '';\n }\n}\n","<div\n class=\"dropdown dropup\"\n dropdown\n #datapointDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointDropdown.isOpen\"\n *ngIf=\"activeDatapoints?.length > 0\"\n>\n <ng-template #selectedDatapoint>\n <div class=\"text-left\">\n <strong>{{ selectedDatapointLabel }}</strong>\n <br />\n {{ 'Click to change' | translate }}\n </div>\n </ng-template>\n <button\n class=\"btn btn-default d-flex a-i-center dropdown-toggle c8y-dropdown\"\n title=\"{{'Select a data point to view its aggregated values in the time slider.' | translate }}\"\n type=\"button\"\n dropdownToggle\n >\n <span\n [style.background-color]=\"selectedDatapointColor\"\n style=\"display: inline-block; width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"caret\"></span>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n <li *ngFor=\"let datapoint of activeDatapoints\">\n <button\n class=\"p-r-8\"\n type=\"button\"\n (click)=\"changeDatapointSelection(datapoint)\"\n >\n <span\n class=\"d-inline-block m-r-4\"\n [style.background-color]=\"datapoint?.color\"\n style=\"width: 16px; height: 16px; border-radius: 50%\"\n ></span>\n <span class=\"text-truncate\" style=\"max-width:220px!important\" title=\"{{ datapoint?.label || `${datapoint?.fragment}-${datapoint?.series}` }}\">\n {{ datapoint?.label || `${datapoint?.fragment}-${datapoint?.series}` }}\n </span>\n <span\n class=\"m-l-auto flex-no-shrink\"\n *ngIf=\"\n datapoint.__target.id === value?.__target.id &&\n datapoint.fragment === value?.fragment &&\n datapoint.series === value?.series\n \"\n >\n <i\n class=\"text-success h4\"\n [c8yIcon]=\"'check'\"\n ></i>\n </span>\n </button>\n </li>\n </ul>\n</div>\n<button\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select a data point to view its aggregated values in the time slider.' | translate\n }}\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n></button>\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n Component,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport type { ECharts, EChartsOption, SeriesOption } from 'echarts';\nimport {\n AlarmDetailsExtended,\n AlarmOrEventExtended,\n CHART_VIEW_CONTEXT,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DpWithValues,\n EventDetailsExtended,\n MarkLineData,\n SeriesDatapointInfo\n} from './models';\nimport { BehaviorSubject, defer, forkJoin, lastValueFrom, Observable, of } from 'rxjs';\nimport { map, switchMap, tap } from 'rxjs/operators';\nimport {\n AlarmRealtimeService,\n CoreModule,\n DismissAlertStrategy,\n DynamicComponentAlert,\n DynamicComponentAlertAggregator,\n EventRealtimeService,\n MeasurementRealtimeService,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { EchartsOptionsService } from './services/echarts-options.service';\nimport { ChartRealtimeService } from './services/chart-realtime.service';\nimport type {\n CallbackDataParams,\n ECActionEvent,\n TooltipFormatterCallback\n} from 'echarts/types/src/util/types';\nimport { ChartTypesService } from './services/chart-types.service';\nimport { CommonModule } from '@angular/common';\nimport { NGX_ECHARTS_CONFIG, NgxEchartsModule } from 'ngx-echarts';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { YAxisService } from './services/y-axis.service';\nimport { ChartAlertsComponent } from './chart-alerts/chart-alerts.component';\nimport { aggregationType, AlarmStatus, IAlarm, IEvent, MeasurementService } from '@c8y/client';\nimport { ChartEventsService } from './services/chart-events.service';\nimport { ChartAlarmsService } from './services/chart-alarms.service';\nimport { EchartsCustomOptions } from './models/chart.model';\nimport { TopLevelFormatterParams } from 'echarts/types/src/component/tooltip/TooltipModel';\nimport {\n AlarmSeverityToIconPipe,\n AlarmSeverityToLabelPipe,\n AlarmsModule\n} from '@c8y/ngx-components/alarms';\nimport { Interval, INTERVALS } from '@c8y/ngx-components/interval-picker';\nimport { SelectAggregatedDatapointComponent } from './select-aggregated-datapoint/select-aggregated-datapoint.component';\nimport { SelectedDatapoint } from '@c8y/ngx-components/alarm-event-selector';\n\n@Component({\n selector: 'c8y-charts',\n templateUrl: './charts.component.html',\n providers: [\n { provide: NGX_ECHARTS_CONFIG, useFactory: () => ({ echarts: () => import('echarts') }) },\n ChartRealtimeService,\n MeasurementRealtimeService,\n AlarmRealtimeService,\n EventRealtimeService,\n ChartTypesService,\n EchartsOptionsService,\n YAxisService,\n AlarmSeverityToIconPipe,\n AlarmSeverityToLabelPipe\n ],\n standalone: true,\n imports: [\n CommonModule,\n CoreModule,\n NgxEchartsModule,\n TooltipModule,\n PopoverModule,\n ChartAlertsComponent,\n AlarmsModule,\n SelectAggregatedDatapointComponent\n ]\n})\nexport class ChartsComponent implements OnChanges, OnInit, OnDestroy {\n chartOption$: Observable<EChartsOption>;\n echartsInstance!: ECharts;\n showLoadMore = false;\n alarms: IAlarm[] = [];\n events: IEvent[] = [];\n sliderZoomUsed = false;\n activeDatapoints: DatapointsGraphKPIDetails[] = [];\n @Input() config!: DatapointsGraphWidgetConfig;\n @Input() alerts!: DynamicComponentAlertAggregator;\n @Input() chartViewContext: CHART_VIEW_CONTEXT;\n @Output() configChangeOnZoomOut = new EventEmitter<{\n dateFrom: Date;\n dateTo: Date;\n interval?: Interval['id'];\n }>();\n @Output() timeRangeChangeOnRealtime = new EventEmitter<\n Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n >();\n @Output() datapointOutOfSync = new EventEmitter<DatapointsGraphKPIDetails>();\n @Output() updateAlarmsAndEvents = new EventEmitter<AlarmOrEventExtended[]>();\n @Output() isMarkedAreaEnabled = new EventEmitter<boolean>();\n @Output() updateActiveDatapoints = new EventEmitter<DatapointsGraphKPIDetails[]>();\n @Output() updateAggregatedSliderDatapoint = new EventEmitter<SelectedDatapoint | null>();\n @ViewChild('chart') chart: ElementRef;\n CHART_VIEW_CONTEXT = CHART_VIEW_CONTEXT;\n private configChangedSubject = new BehaviorSubject<void | null>(null);\n\n private readonly measurementService = inject(MeasurementService);\n private readonly echartsOptionsService = inject(EchartsOptionsService);\n private readonly chartRealtimeService = inject(ChartRealtimeService);\n private readonly chartEventsService = inject(ChartEventsService);\n private readonly chartAlarmsService = inject(ChartAlarmsService);\n private readonly widgetTimeContextDateRangeService = inject(WidgetTimeContextDateRangeService);\n private loadedTimeRange: { dateFrom: string; dateTo: string } | null = null;\n\n constructor() {\n this.chartOption$ = this.configChangedSubject.pipe(\n switchMap(() => this.loadAlarmsAndEvents()),\n switchMap(() => this.fetchSeriesForDatapoints$()),\n switchMap((datapointsWithValues: DpWithValues[]) => {\n if (datapointsWithValues.length === 0 && this.config.alarmsEventsConfigs?.length === 0) {\n this.echartsInstance?.clear();\n this.showLoadMore = false;\n return of(this.getDefaultChartOptions());\n }\n this.loadedTimeRange = { ...this.getTimeRange() };\n return this.getChartOptions(datapointsWithValues);\n }),\n tap(v => {\n if (v['empty']) {\n return;\n }\n this.chartRealtimeService.stopRealtime();\n this.startRealtimeIfPossible();\n\n if (this.echartsInstance) {\n /**\n * * Set the chart options\n * First parameter is the options to set\n * Second parameter is a boolean to indicate that the chart should be re-rendered as we do not want to merge.\n * Third parameter is a boolean to indicate that we want to lazy load the chart.\n */\n this.echartsInstance.setOption(v, true, true);\n const options = this.echartsInstance.getOption();\n const dataZoom = options['dataZoom'][0];\n if (dataZoom?.start !== 0) {\n this.showLoadMore = false;\n }\n }\n this.sliderZoomUsed = false;\n })\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const currentTimeRange = this.getTimeRange();\n // Old aggregation supported NONE for aggregation in the configuration.\n // for backward compatibility replacing NONE with null\n if (changes.config && (this.config.aggregation as any) === 'NONE') {\n this.config.aggregation = null;\n }\n // Check if the current time range is within the loaded time range to avoid unnecessary updates\n if (\n this.loadedTimeRange &&\n new Date(currentTimeRange.dateFrom) >= new Date(this.loadedTimeRange.dateFrom) &&\n new Date(currentTimeRange.dateTo) <= new Date(this.loadedTimeRange.dateTo) &&\n changes.config.previousValue?.dateFrom !== changes.config.currentValue.dateFrom &&\n changes.config.previousValue?.dateTo !== changes.config.currentValue.dateTo\n ) {\n return;\n }\n this.configChangedSubject.next();\n }\n\n ngOnInit() {\n if (this.alerts) {\n this.alerts.setAlertGroupDismissStrategy(\n 'warning',\n DismissAlertStrategy.TEMPORARY_OR_PERMANENT\n );\n }\n }\n\n ngOnDestroy() {\n this.chartRealtimeService.stopRealtime();\n }\n\n onChartInit(ec: ECharts) {\n this.echartsInstance = ec;\n this.echartsOptionsService.echartsInstance = this.echartsInstance;\n this.startRealtimeIfPossible();\n\n const dataZoomHandler = (evt: ECActionEvent) => {\n if (evt.batch?.[0]?.start === 0 || evt['start'] === 0) {\n this.showLoadMore = true;\n }\n\n const options = this.echartsInstance.getOption();\n const dataZoom = options['dataZoom'][0];\n this.sliderZoomUsed = true;\n this.configChangeOnZoomOut.emit({\n dateFrom: new Date(dataZoom['startValue']),\n dateTo: new Date(dataZoom['endValue']),\n interval: 'custom'\n });\n this.echartsInstance.setOption(options);\n this.chartRealtimeService.stopRealtime();\n };\n\n const debouncedDataZoomHandler = this.config.realtime\n ? dataZoomHandler\n : this.debounce(dataZoomHandler, 1000);\n\n this.echartsInstance.on('dataZoom', debouncedDataZoomHandler);\n this.echartsInstance.on('click', this.onChartClick.bind(this));\n\n let originalFormatter:\n | TooltipFormatterCallback<TopLevelFormatterParams>\n | string\n | null\n | undefined = null;\n\n this.echartsInstance.on('mouseover', (params: any) => {\n if (params?.componentType !== 'markLine' && params?.componentType !== 'markPoint') {\n return;\n }\n\n const options = this.echartsInstance.getOption() as EChartsOption;\n if (!options.tooltip || !Array.isArray(options.tooltip) || !options.tooltip[0]) {\n return;\n }\n originalFormatter = originalFormatter ?? options['tooltip'][0].formatter;\n\n const updatedOptions: Partial<SeriesOption> = { tooltip: options['tooltip'][0] };\n\n if (!updatedOptions.tooltip) {\n return;\n }\n updatedOptions.tooltip.formatter = (tooltipParams: CallbackDataParams) => {\n return this.echartsOptionsService.getTooltipFormatterForAlarmAndEvents(\n tooltipParams,\n params,\n this.events,\n this.alarms,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,\n forceMergeDatapoints: this.config.forceMergeDatapoints || false,\n showLabelAndUnit: this.config.showLabelAndUnit || false,\n showSlider: this.config.showSlider || false,\n numberOfDecimalPlaces: this.config.numberOfDecimalPlaces ?? 2\n }\n );\n };\n\n this.echartsInstance.setOption(updatedOptions);\n });\n\n this.echartsInstance.on('mouseout', () => {\n const options = this.echartsInstance.getOption() as EchartsCustomOptions;\n if (originalFormatter) {\n options['tooltip'][0].formatter = originalFormatter;\n this.echartsInstance.setOption(options);\n }\n });\n }\n\n onChartClick(params: { data: { itemType: string } }): void {\n const options = this.echartsInstance.getOption();\n if (!this.isAlarmOrEventClick(params)) {\n this.echartsInstance.setOption({\n tooltip: { triggerOn: 'mousemove' },\n series: [{ markArea: { data: [] }, markLine: { data: [] } }]\n });\n return;\n }\n\n const clickedAlarms = this.alarms.filter(alarm => alarm.type === params.data.itemType);\n const clickedEvents = this.events.filter(event => event.type === params.data.itemType);\n\n if (clickedEvents.length > 0) {\n const updatedOptions = {\n tooltip: {\n enterable: true,\n triggerOn: 'click'\n }\n };\n\n this.echartsInstance.setOption(updatedOptions);\n return;\n }\n\n this.isMarkedAreaEnabled.emit(this.hasMarkArea(options));\n const updatedOptions = !this.hasMarkArea(options)\n ? {\n tooltip: { enterable: true, triggerOn: 'click' },\n series: [\n {\n markArea: { label: { show: false }, data: this.getMarkedAreaData(clickedAlarms) },\n markLine: {\n showSymbol: true,\n symbol: ['none', 'none'],\n data: this.getMarkedLineData(clickedAlarms)\n }\n }\n ]\n }\n : // if markArea already exists, remove it and remove lastUpdated from markLine\n {\n tooltip: { triggerOn: 'mousemove' },\n series: [{ markArea: { data: [] }, markLine: { data: [] } }]\n };\n\n this.echartsInstance.setOption(updatedOptions);\n }\n\n isAlarmOrEventClick(params: any): boolean {\n return (\n this.alarms.some(alarm => alarm.type === params.data.itemType) ||\n this.events.some(event => event.type === params.data.itemType)\n );\n }\n\n hasMarkArea(options: any): boolean {\n return options?.series?.[0]?.markArea?.data?.length > 0;\n }\n\n saveAsImage(): void {\n this.echartsInstance.setOption({ legend: { show: true } });\n const url = this.echartsInstance.getDataURL({\n pixelRatio: 2,\n backgroundColor: '#fff',\n type: 'png'\n });\n const link = document.createElement('a');\n link.href = url;\n link.download = 'datapoints-graph-screenshot';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n this.echartsInstance.setOption({ legend: { show: false } });\n }\n\n loadMoreData(): void {\n const currentTimeRangeInMs = this.echartsOptionsService.calculateExtendedIntervalInMs(\n this.config.interval || 'custom',\n {\n dateTo: this.widgetTimeContextDateRangeService.initialTimeRange().dateTo,\n dateFrom: this.widgetTimeContextDateRangeService.initialTimeRange().dateFrom\n }\n );\n this.widgetTimeContextDateRangeService.updateInitialTimeRange({\n dateFrom: new Date(\n new Date(this.widgetTimeContextDateRangeService.initialTimeRange().dateFrom).valueOf() -\n currentTimeRangeInMs / 4\n ).toISOString(),\n dateTo: this.widgetTimeContextDateRangeService.initialTimeRange().dateTo,\n interval: 'custom'\n });\n const options = this.echartsInstance.getOption();\n const dataZoom = options['dataZoom'][0];\n this.configChangeOnZoomOut.emit({\n dateFrom: new Date(dataZoom['startValue']),\n dateTo: new Date(dataZoom['endValue']),\n interval: 'custom'\n });\n this.showLoadMore = false;\n }\n\n debounce<T extends (...args: any[]) => void>(\n func: T,\n wait: number\n ): (...args: Parameters<T>) => void {\n let timeout: ReturnType<typeof setTimeout>;\n return (...args: Parameters<T>) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func(...args), wait);\n };\n }\n\n /**\n * Toggles the visibility of a series in the chart based on the provided datapoint.\n * @param datapoint - The datapoint to toggle visibility for.\n */\n toggleDatapointSeriesVisibility(datapoint: DatapointsGraphKPIDetails): void {\n const series = this.echartsInstance.getOption().series as (SeriesOption &\n SeriesDatapointInfo)[];\n const seriesToUpdate = series.find(\n s => s.datapointId === `${datapoint.__target?.id}${datapoint.fragment}${datapoint.series}`\n );\n if (seriesToUpdate) {\n this.echartsInstance.dispatchAction({\n type: 'legendToggleSelect',\n name: seriesToUpdate.name\n });\n }\n }\n\n /**\n * Toggles the visibility of a series in the chart based on the provided alarm or event.\n * @param alarmOrEvent - The alarm or event to toggle visibility for.\n */\n toggleAlarmEventSeriesVisibility(\n alarmOrEvent: AlarmDetailsExtended | EventDetailsExtended\n ): void {\n const series = this.echartsInstance.getOption().series as (SeriesOption &\n SeriesDatapointInfo)[];\n const seriesToUpdate = series.filter(\n s =>\n s.name === `${alarmOrEvent.label}-markPoint` || s.name === `${alarmOrEvent.label}-markLine`\n );\n if (seriesToUpdate) {\n seriesToUpdate.forEach(s => {\n this.echartsInstance.dispatchAction({\n type: 'legendToggleSelect',\n name: s.name\n });\n });\n }\n }\n\n private getDefaultChartOptions(): EChartsOption {\n return {\n title: {\n text: gettext('No data available.'),\n left: 'center',\n top: 'center',\n textStyle: { fontSize: 30 }\n },\n empty: true,\n xAxis: { type: 'category', data: [] },\n yAxis: { type: 'value' },\n series: []\n };\n }\n\n private getMarkedAreaData(clickedAlarms: IAlarm[]) {\n const timeRange = this.getTimeRange();\n const clearedAlarmColor = 'rgba(221,255,221,1.00)';\n const activeAlarmColor = 'rgba(255, 173, 177, 0.4)';\n\n return clickedAlarms.map(clickedAlarm => {\n return [\n {\n name: clickedAlarm.type,\n xAxis: clickedAlarm.creationTime,\n itemStyle: {\n color:\n clickedAlarm.status === AlarmStatus.CLEARED ? clearedAlarmColor : activeAlarmColor\n }\n },\n {\n xAxis:\n clickedAlarm['lastUpdated'] === clickedAlarm.creationTime ||\n clickedAlarm.status !== AlarmStatus.CLEARED\n ? timeRange.dateTo\n : clickedAlarm['lastUpdated']\n }\n ];\n });\n }\n\n private getMarkedLineData(clickedAlarms: IAlarm[]) {\n return clickedAlarms.reduce<MarkLineData[]>((acc, alarm) => {\n const isClickedAlarmCleared = alarm.status === AlarmStatus.CLEARED;\n if (isClickedAlarmCleared) {\n return acc.concat([\n {\n xAxis: alarm.creationTime,\n itemType: alarm.type,\n label: { show: false, formatter: () => alarm.type },\n itemStyle: { color: alarm['color'] }\n },\n {\n xAxis: alarm['lastUpdated'],\n itemType: alarm.type,\n label: { show: false, formatter: () => alarm.type },\n itemStyle: { color: alarm['color'] }\n }\n ]);\n }\n return acc.concat([\n {\n xAxis: alarm.creationTime,\n itemType: alarm.type,\n label: { show: false, formatter: () => alarm.type },\n itemStyle: { color: alarm['color'] }\n }\n ]);\n }, []);\n }\n\n private async loadAlarmsAndEvents(customTimeRange?: {\n dateFrom: string;\n dateTo: string;\n }): Promise<void> {\n const timeRange = this.getTimeRange();\n const updatedTimeRange = {\n lastUpdatedFrom: customTimeRange ? customTimeRange.dateFrom : timeRange.dateFrom,\n createdTo: customTimeRange ? customTimeRange.dateTo : timeRange.dateTo\n };\n if (!this.config.alarmsEventsConfigs) return;\n const visibleAlarmsOrEvents = this.config.alarmsEventsConfigs?.filter(\n alarmOrEvent => !alarmOrEvent.__hidden && alarmOrEvent.__active\n );\n const alarms = visibleAlarmsOrEvents?.filter(\n alarmOrEvent => alarmOrEvent.timelineType === 'ALARM'\n ) as AlarmDetailsExtended[];\n const events = visibleAlarmsOrEvents?.filter(\n alarmOrEvent => alarmOrEvent.timelineType === 'EVENT'\n ) as EventDetailsExtended[];\n\n const [listedEvents, listedAlarms] = await Promise.all([\n this.chartEventsService.listEvents(updatedTimeRange, events),\n this.chartAlarmsService.listAlarms(updatedTimeRange, alarms)\n ]);\n\n this.events = listedEvents;\n this.alarms = listedAlarms;\n await this.addActiveAlarms(alarms);\n\n this.updateAlarmsAndEvents.emit(this.config.alarmsEventsConfigs);\n }\n\n private startRealtimeIfPossible(): void {\n this.activeDatapoints = this.config?.datapoints?.filter(dp => dp.__active);\n if (\n (this.activeDatapoints || this.config.alarmsEventsConfigs?.length > 0) &&\n this.config.realtime &&\n this.echartsInstance\n ) {\n const showOnlyAlarmsOrEvents =\n this.config.alarmsEventsConfigs?.length > 0 && this.activeDatapoints?.length === 0;\n this.chartRealtimeService.startRealtime(\n this.echartsInstance,\n this.activeDatapoints,\n this.getTimeRange(),\n dp => this.datapointOutOfSync.emit(dp),\n timeRange => this.timeRangeChangeOnRealtime.emit(timeRange),\n this.config.alarmsEventsConfigs,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,\n forceMergeDatapoints: this.config.forceMergeDatapoints || false,\n showLabelAndUnit: this.config.showLabelAndUnit || false,\n showSlider: this.config.showSlider || false,\n showOnlyAlarmsOrEvents\n },\n this.alarms,\n this.events\n );\n }\n }\n\n /*\n This method should check and add active alarms from the begining of time to the alarm array\n */\n private async addActiveAlarms(alarms: AlarmDetailsExtended[]): Promise<void> {\n const timeRange = this.getTimeRange();\n const params = {\n dateFrom: '1970-01-01T01:00:00+01:00',\n dateTo: timeRange.dateTo,\n status: AlarmStatus.ACTIVE\n };\n\n const activeAlarms = await this.chartAlarmsService.listAlarms(params, alarms);\n this.config.activeAlarmTypesOutOfRange = [];\n // iterate through the activeAlarms and check if the alarm is in the alarms array, if not update the config.activeAlarmTypesOutOfRange prop\n activeAlarms.forEach(activeAlarm => {\n const alarmType = activeAlarm.type;\n const alarm = this.alarms.find(alarm => alarm.type === alarmType);\n if (!alarm && this.config.activeAlarmTypesOutOfRange) {\n this.config.activeAlarmTypesOutOfRange.push(alarmType);\n }\n });\n }\n\n private async getChartOptions(datapointsWithValues: DpWithValues[]): Promise<EChartsOption> {\n const timeRange = { ...this.getTimeRange(), interval: this.config.interval };\n const sliderPositionMode = this.getSliderPositionMode();\n if (\n (!this.activeDatapoints || this.activeDatapoints.length === 0) &&\n this.config.alarmsEventsConfigs?.length > 0\n ) {\n return this.echartsOptionsService.getChartOptions(\n datapointsWithValues,\n timeRange,\n {\n YAxis: this.config.yAxisSplitLines || false,\n XAxis: this.config.xAxisSplitLines || false\n },\n this.events,\n this.alarms,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: false,\n forceMergeDatapoints: false,\n showLabelAndUnit: false,\n showSlider: false,\n showOnlyAlarmsOrEvents: true\n }\n );\n }\n if (!this.widgetTimeContextDateRangeService.initialTimeRange()) {\n const extendedDateFrom = new Date(\n new Date(timeRange.dateFrom).valueOf() -\n this.echartsOptionsService.calculateExtendedIntervalInMs(\n this.config.interval || 'custom',\n {\n dateFrom: timeRange.dateFrom,\n dateTo: timeRange.dateTo\n }\n )\n ).toISOString();\n\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(timeRange);\n const aggregatedDatapoints = await lastValueFrom(\n this.fetchAggregatedSeriesForSelectedDatapoint$(\n {\n dateFrom: extendedDateFrom,\n dateTo: timeRange.dateTo\n },\n this.config.aggregatedDatapoint\n )\n );\n return this.echartsOptionsService.getChartOptions(\n datapointsWithValues,\n timeRange,\n {\n YAxis: this.config.yAxisSplitLines || false,\n XAxis: this.config.xAxisSplitLines || false\n },\n this.events,\n this.alarms,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,\n forceMergeDatapoints: this.config.forceMergeDatapoints || false,\n showLabelAndUnit: this.config.showLabelAndUnit || false,\n showSlider: this.config.showSlider || false,\n numberOfDecimalPlaces: this.config.numberOfDecimalPlaces ?? 2,\n sliderPositionMode\n },\n undefined,\n aggregatedDatapoints\n );\n } else {\n const initialDateFromValue = new Date(\n this.widgetTimeContextDateRangeService.initialTimeRange().dateFrom\n ).valueOf();\n const calculateInitialIntervalInMs = this.echartsOptionsService.calculateExtendedIntervalInMs(\n this.widgetTimeContextDateRangeService.initialTimeRange().interval || 'custom',\n {\n dateFrom: this.widgetTimeContextDateRangeService.initialTimeRange().dateFrom,\n dateTo: this.widgetTimeContextDateRangeService.initialTimeRange().dateTo\n }\n );\n // The extended date from is the initial date from (which was selected by the user) minus the calculated interval in milliseconds (this is the extended range for the slider).\n // This extended date from is used to fetch the aggregated datapoints for the slider.\n const initialExtendedDateFrom = new Date(\n initialDateFromValue - calculateInitialIntervalInMs\n ).toISOString();\n\n const aggregatedDatapoints = await lastValueFrom(\n this.fetchAggregatedSeriesForSelectedDatapoint$(\n {\n dateFrom: initialExtendedDateFrom,\n dateTo: new Date(\n this.widgetTimeContextDateRangeService.initialTimeRange().dateTo\n ).toISOString()\n },\n this.config.aggregatedDatapoint\n )\n );\n return this.echartsOptionsService.getChartOptions(\n datapointsWithValues,\n this.widgetTimeContextDateRangeService.initialTimeRange(),\n {\n YAxis: this.config.yAxisSplitLines || false,\n XAxis: this.config.xAxisSplitLines || false\n },\n this.events,\n this.alarms,\n {\n displayMarkedLine: this.config.displayMarkedLine || false,\n displayMarkedPoint: this.config.displayMarkedPoint || false,\n mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,\n forceMergeDatapoints: this.config.forceMergeDatapoints || false,\n showLabelAndUnit: this.config.showLabelAndUnit || false,\n showSlider: this.config.showSlider || false,\n numberOfDecimalPlaces: this.config.numberOfDecimalPlaces ?? 2,\n sliderPositionMode\n },\n timeRange,\n aggregatedDatapoints,\n true\n );\n }\n }\n\n private fetchSeriesForDatapoints$(): Observable<DpWithValues[]> {\n this.activeDatapoints = this.config?.datapoints?.filter(dp => dp.__active);\n if (!this.activeDatapoints || this.activeDatapoints.length === 0) {\n this.updateActiveDatapoints.emit([]);\n return of([]);\n }\n this.updateActiveDatapoints.emit(this.activeDatapoints);\n const datapointsWithValuesRequests: Observable<DpWithValues>[] = [];\n const timeRange = this.getTimeRange(60_000);\n for (const dp of this.activeDatapoints) {\n const request = defer(() =>\n this.measurementService.listSeries({\n revert: true,\n ...timeRange,\n source: dp.__target?.id || '',\n series: [`${dp.fragment}.${dp.series}`],\n ...(this.config.aggregation && {\n aggregationType: this.config.aggregation\n })\n })\n ).pipe(\n map(res => {\n const values = res.data.values;\n if (res.data.truncated && this.config.dateFrom) {\n values[new Date(this.config.dateFrom).toISOString()] = [{ min: null, max: null }];\n } else {\n if (this.alerts) {\n this.alerts.clear();\n }\n }\n return { ...dp, values, truncated: res.data.truncated };\n })\n );\n\n datapointsWithValuesRequests.push(request);\n }\n return forkJoin(datapointsWithValuesRequests).pipe(\n tap((dpsWithValues: DpWithValues[]) => {\n if (dpsWithValues.some(dp => dp['truncated'])) {\n this.addTruncatedDataAlert();\n }\n })\n );\n }\n\n private fetchAggregatedSeriesForSelectedDatapoint$(\n customTimeRange: {\n dateFrom: string;\n dateTo: string;\n },\n aggregatedDatapoint: DatapointsGraphKPIDetails\n ) {\n const timeRange = this.getTimeRange(60_000);\n aggregatedDatapoint = aggregatedDatapoint\n ? aggregatedDatapoint\n : this.config?.datapoints?.filter(dp => dp.__active)[0];\n\n const request = defer(() =>\n this.measurementService.listSeries({\n ...(customTimeRange ? customTimeRange : timeRange),\n source: aggregatedDatapoint?.target || aggregatedDatapoint.__target?.id || '',\n series: [`${aggregatedDatapoint.fragment}.${aggregatedDatapoint.series}`],\n ...(this.config.aggregation || customTimeRange\n ? {\n aggregationType: this.getAggregationTypeForTimeRange()\n }\n : {})\n })\n ).pipe(\n map(res => {\n const values = res.data.values;\n if (res.data.truncated && this.config.dateFrom) {\n values[new Date(this.config.dateFrom).toISOString()] = [{ min: null, max: null }];\n }\n return { ...aggregatedDatapoint, values, truncated: res.data.truncated };\n })\n );\n\n return request.pipe(\n tap((dpsWithValues: DpWithValues) => {\n if (dpsWithValues['truncated']) {\n this.addTruncatedDataAlert();\n }\n })\n );\n }\n\n private getAggregationTypeForTimeRange() {\n const interval = this.widgetTimeContextDateRangeService.initialTimeRange().interval;\n switch (interval) {\n case 'minutes':\n return aggregationType.MINUTELY;\n case 'hours':\n return aggregationType.HOURLY;\n case 'days':\n return aggregationType.DAILY;\n case 'weeks':\n return aggregationType.DAILY;\n case 'months':\n return aggregationType.DAILY;\n case 'custom':\n return aggregationType.HOURLY;\n }\n }\n\n private getSliderPositionMode(): 'compact' | 'default' {\n if (\n (this.chartViewContext === CHART_VIEW_CONTEXT.DATAPOINT_EXPLORER ||\n this.chartViewContext === CHART_VIEW_CONTEXT.WIDGET_CONFIG) &&\n this.activeDatapoints.length > 1\n ) {\n return 'compact';\n }\n return 'default';\n }\n\n private addTruncatedDataAlert(): void {\n if (this.alerts?.alertGroups.find(a => a.type === 'warning')?.value?.alerts?.length) {\n return;\n }\n const alert = new DynamicComponentAlert({\n type: 'warning',\n text: gettext('Truncated data. Change aggregation or select shorter date range.')\n });\n\n this.alerts?.addAlerts(alert);\n }\n\n private getTimeRange(additionalPadding?: number): { dateFrom: string; dateTo: string } {\n let timeRange: { dateFrom: Date; dateTo: Date };\n if (\n this.config.widgetInstanceGlobalTimeContext ||\n (this.config.interval === 'custom' && !this.config.realtime)\n ) {\n timeRange = {\n dateFrom: new Date(this.config.dateFrom as Date),\n dateTo: new Date(this.config.dateTo as Date)\n };\n } else {\n let timeRangeInMs = 0;\n if (this.config.interval && this.config.interval !== 'custom') {\n timeRangeInMs = INTERVALS.find(i => i.id === this.config.interval)?.timespanInMs || 0;\n } else if (this.config.realtime) {\n timeRangeInMs =\n new Date(this.config.dateTo as Date).valueOf() -\n new Date(this.config.dateFrom as Date).valueOf();\n }\n const now = new Date();\n timeRange = { dateFrom: new Date(now.valueOf() - timeRangeInMs), dateTo: now };\n }\n if (additionalPadding) {\n timeRange.dateFrom = new Date(timeRange.dateFrom.valueOf() - additionalPadding);\n timeRange.dateTo = new Date(timeRange.dateTo.valueOf() + additionalPadding);\n }\n return { dateFrom: timeRange.dateFrom.toISOString(), dateTo: timeRange.dateTo.toISOString() };\n }\n}\n","<div class=\"p-relative fit-h chart-container\">\n <div\n class=\"fit-w fit-h\"\n #chart\n echarts\n [options]=\"chartOption$ | async\"\n (chartInit)=\"onChartInit($event)\"\n ></div>\n\n <c8y-chart-alerts [alerts]=\"alerts\"></c8y-chart-alerts>\n\n <div\n class=\"chart-load-more\"\n *ngIf=\"showLoadMore\"\n >\n <button\n class=\"btn btn-primary btn-block\"\n (click)=\"loadMoreData()\"\n >\n <i c8yIcon=\"restore\"></i>\n {{ 'Load more' | translate }}\n </button>\n </div>\n\n <div\n class=\"e-charts--aggregated-datapoint\"\n *ngIf=\"\n activeDatapoints.length > 1 &&\n config?.showSlider &&\n chartViewContext !== CHART_VIEW_CONTEXT.WIDGET_VIEW\n \"\n >\n <c8y-select-aggregated-datapoint\n [value]=\"config?.aggregatedDatapoint || activeDatapoints[0]\"\n (valueChange)=\"updateAggregatedSliderDatapoint.emit($event)\"\n [activeDatapoints]=\"activeDatapoints\"\n ></c8y-select-aggregated-datapoint>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.YAxisService","i3.ChartTypesService","i2.EchartsOptionsService","i1","CommonModule","i3"],"mappings":"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"}