@c8y/ngx-components 1023.14.2 → 1023.14.33

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 (251) hide show
  1. package/ai/index.d.ts +4 -2
  2. package/ai/index.d.ts.map +1 -1
  3. package/auth-configuration/index.d.ts +6 -3
  4. package/auth-configuration/index.d.ts.map +1 -1
  5. package/context-dashboard/index.d.ts +1 -0
  6. package/context-dashboard/index.d.ts.map +1 -1
  7. package/datapoint-explorer/view/index.d.ts +2 -1
  8. package/datapoint-explorer/view/index.d.ts.map +1 -1
  9. package/datapoint-library/details/index.d.ts.map +1 -1
  10. package/datapoint-selector/index.d.ts +6 -3
  11. package/datapoint-selector/index.d.ts.map +1 -1
  12. package/device-grid/index.d.ts.map +1 -1
  13. package/echart/index.d.ts +1 -0
  14. package/echart/index.d.ts.map +1 -1
  15. package/echart/models/index.d.ts +1 -0
  16. package/echart/models/index.d.ts.map +1 -1
  17. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +16 -16
  18. package/fesm2022/c8y-ngx-components-advanced-software-management.mjs +7 -7
  19. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +9 -9
  20. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +12 -12
  21. package/fesm2022/c8y-ngx-components-ai.mjs +11 -9
  22. package/fesm2022/c8y-ngx-components-ai.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +34 -34
  24. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
  25. package/fesm2022/c8y-ngx-components-alarms.mjs +76 -76
  26. package/fesm2022/c8y-ngx-components-api.mjs +7 -7
  27. package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
  28. package/fesm2022/c8y-ngx-components-asset-properties.mjs +39 -39
  29. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs → c8y-ngx-components-asset-property-grid.component-CDjsn5j9.mjs} +13 -13
  30. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-B1q7kXRu.mjs.map → c8y-ngx-components-asset-property-grid.component-CDjsn5j9.mjs.map} +1 -1
  31. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +32 -32
  32. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +244 -170
  33. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
  35. package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
  36. package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
  37. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
  38. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
  39. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
  40. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
  41. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +15 -15
  42. package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
  43. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +36 -36
  44. package/fesm2022/c8y-ngx-components-branding-shared.mjs +13 -13
  45. package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
  46. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
  47. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-SA0syLy7.mjs} +4 -4
  48. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Bl18pHcM.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-SA0syLy7.mjs.map} +1 -1
  49. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-BOmgJI14.mjs} +4 -4
  50. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C5QMFdX1.mjs.map → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-BOmgJI14.mjs.map} +1 -1
  51. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs → c8y-ngx-components-computed-asset-properties-event-count-config.component-CaTb9cph.mjs} +4 -4
  52. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-C-Lc5Ble.mjs.map → c8y-ngx-components-computed-asset-properties-event-count-config.component-CaTb9cph.mjs.map} +1 -1
  53. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-DkrSvf9F.mjs} +4 -4
  54. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BXfM7hTQ.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-DkrSvf9F.mjs.map} +1 -1
  55. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +6 -6
  56. package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
  57. package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
  58. package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +7 -7
  59. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +11 -11
  60. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BuGMpNrA.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DM3hASUP.mjs} +4 -4
  61. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BuGMpNrA.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DM3hASUP.mjs.map} +1 -1
  62. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-CC5346kW.mjs} +10 -10
  63. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DN-f35bA.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-CC5346kW.mjs.map} +1 -1
  64. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-BlIVEV__.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-CHuc--XM.mjs} +4 -4
  65. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-BlIVEV__.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-CHuc--XM.mjs.map} +1 -1
  66. package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
  67. package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +7 -7
  68. package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +3 -3
  69. package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs +3 -3
  70. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +113 -108
  71. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  72. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0C7SH6L.mjs} +16 -16
  73. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-m7YeEj9R.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0C7SH6L.mjs.map} +1 -1
  74. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
  75. package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +6 -6
  76. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +22 -22
  77. package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
  78. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
  79. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
  80. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +31 -26
  81. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +13 -13
  83. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +6 -19
  84. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
  85. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
  86. package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
  87. package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
  88. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +56 -57
  89. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +34 -34
  91. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
  93. package/fesm2022/c8y-ngx-components-device-grid.mjs +48 -44
  94. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
  96. package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
  97. package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
  98. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
  99. package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
  100. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
  101. package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
  102. package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
  103. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  104. package/fesm2022/c8y-ngx-components-echart.mjs +120 -61
  105. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  106. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
  107. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
  108. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
  109. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
  110. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
  111. package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
  112. package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
  113. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +4 -4
  114. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs.map +1 -1
  115. package/fesm2022/c8y-ngx-components-events.mjs +3 -3
  116. package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
  117. package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
  118. package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
  119. package/fesm2022/c8y-ngx-components-global-context.mjs +134 -134
  120. package/fesm2022/c8y-ngx-components-global-context.mjs.map +1 -1
  121. package/fesm2022/c8y-ngx-components-icon-selector.mjs +21 -21
  122. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  123. package/fesm2022/c8y-ngx-components-interval-picker.mjs +3 -3
  124. package/fesm2022/c8y-ngx-components-location.mjs +28 -28
  125. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
  126. package/fesm2022/c8y-ngx-components-map.mjs +19 -19
  127. package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
  128. package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
  129. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
  130. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
  131. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
  132. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
  133. package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
  134. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
  135. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +3 -3
  136. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
  137. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
  138. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
  139. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
  140. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
  141. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
  142. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
  143. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +10 -12
  144. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs.map +1 -1
  145. package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
  146. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
  147. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
  148. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +13 -13
  149. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +13 -13
  150. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +13 -13
  151. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
  152. package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
  153. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
  154. package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
  155. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
  156. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
  157. package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
  158. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
  159. package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
  160. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
  161. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
  162. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
  163. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
  164. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
  165. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
  166. package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
  167. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
  168. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
  169. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
  170. package/fesm2022/c8y-ngx-components-replace-device.mjs +10 -10
  171. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +16 -16
  172. package/fesm2022/c8y-ngx-components-reports.mjs +19 -19
  173. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +48 -48
  174. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
  175. package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
  176. package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
  177. package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
  178. package/fesm2022/c8y-ngx-components-search.mjs +48 -45
  179. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  180. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +6 -6
  181. package/fesm2022/c8y-ngx-components-sensor-phone.mjs +7 -7
  182. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
  183. package/fesm2022/c8y-ngx-components-services-shared.mjs +3 -3
  184. package/fesm2022/c8y-ngx-components-services.mjs +29 -29
  185. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +16 -16
  186. package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
  187. package/fesm2022/c8y-ngx-components-static-assets-data.mjs +3 -3
  188. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +9 -9
  189. package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
  190. package/fesm2022/c8y-ngx-components-sub-assets.mjs +76 -66
  191. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  192. package/fesm2022/c8y-ngx-components-tenants.mjs +40 -40
  193. package/fesm2022/c8y-ngx-components-time-context.mjs +14 -7
  194. package/fesm2022/c8y-ngx-components-time-context.mjs.map +1 -1
  195. package/fesm2022/c8y-ngx-components-tracking.mjs +15 -15
  196. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  197. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -3
  198. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
  199. package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
  200. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
  201. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
  202. package/fesm2022/c8y-ngx-components-upgrade.mjs +41 -41
  203. package/fesm2022/c8y-ngx-components-user-roles.mjs +10 -10
  204. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +3 -3
  205. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +4 -4
  206. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs.map +1 -1
  207. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -6
  208. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +19 -19
  209. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
  210. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs +3 -3
  211. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +3 -3
  212. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +7 -7
  213. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  214. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +27 -27
  215. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
  216. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +7 -7
  217. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
  218. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +24 -24
  219. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +9 -9
  220. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +24 -20
  221. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  222. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +6 -6
  223. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +6 -6
  224. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +9 -9
  225. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
  226. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +18 -18
  227. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
  228. package/fesm2022/c8y-ngx-components.mjs +9450 -9420
  229. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  230. package/global-context/index.d.ts.map +1 -1
  231. package/index.d.ts +3283 -3271
  232. package/index.d.ts.map +1 -1
  233. package/locales/de.po +124 -133
  234. package/locales/es.po +48 -40
  235. package/locales/fr.po +41 -33
  236. package/locales/ja_JP.po +35 -28
  237. package/locales/ko.po +46 -38
  238. package/locales/locales.pot +17 -8
  239. package/locales/nl.po +44 -36
  240. package/locales/pl.po +62 -54
  241. package/locales/pt_BR.po +45 -37
  242. package/locales/zh_CN.po +42 -35
  243. package/locales/zh_TW.po +55 -46
  244. package/operations/operations-timeline/index.d.ts.map +1 -1
  245. package/package.json +1 -1
  246. package/search/index.d.ts +5 -5
  247. package/search/index.d.ts.map +1 -1
  248. package/sub-assets/index.d.ts +3 -3
  249. package/sub-assets/index.d.ts.map +1 -1
  250. package/time-context/index.d.ts +3 -2
  251. package/time-context/index.d.ts.map +1 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Input, Component, EventEmitter, inject, Output, ViewChild } from '@angular/core';
2
+ import { Injectable, inject, SecurityContext, Input, Component, EventEmitter, Output, ViewChild } from '@angular/core';
3
3
  import { gettext } from '@c8y/ngx-components/gettext';
4
4
  import { from, merge, interval, BehaviorSubject, of, lastValueFrom, defer, forkJoin } from 'rxjs';
5
5
  import { mergeMap, map, tap, throttleTime, buffer, switchMap } from 'rxjs/operators';
@@ -20,6 +20,7 @@ import { NgxEchartsModule, NGX_ECHARTS_CONFIG } from 'ngx-echarts';
20
20
  import { TooltipModule } from 'ngx-bootstrap/tooltip';
21
21
  import * as i1$3 from 'ngx-bootstrap/popover';
22
22
  import { PopoverModule } from 'ngx-bootstrap/popover';
23
+ import { DomSanitizer } from '@angular/platform-browser';
23
24
  import * as i2 from 'ngx-bootstrap/dropdown';
24
25
  import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
25
26
  import * as i3 from '@angular/cdk/a11y';
@@ -97,12 +98,26 @@ class YAxisService {
97
98
  getYAxis(datapointsWithValues, YAxisOptions) {
98
99
  const YAxisPlacement = this.getYAxisPlacement(datapointsWithValues);
99
100
  if (YAxisOptions.forceMergeDatapoints) {
100
- const firstDp = datapointsWithValues[0];
101
- const unit = firstDp?.unit ? `[${firstDp.unit}]` : '';
102
101
  return {
103
- name: unit,
102
+ name: Array.from(datapointsWithValues)
103
+ .map((dp, index) => `{${index}|${dp.unit}}`)
104
+ .join(' /'),
104
105
  nameLocation: 'middle',
106
+ nameTruncate: {
107
+ maxWidth: 350
108
+ },
105
109
  nameGap: 25,
110
+ nameTextStyle: {
111
+ // add rich text to support multiple colors for different dp units
112
+ rich: {
113
+ ...Array.from(datapointsWithValues).reduce((acc, dp, index) => {
114
+ acc[index] = {
115
+ color: dp.color || '#6f7079'
116
+ };
117
+ return acc;
118
+ }, {})
119
+ }
120
+ },
106
121
  type: 'value',
107
122
  animation: true,
108
123
  axisLabel: {
@@ -127,7 +142,8 @@ class YAxisService {
127
142
  label: {
128
143
  show: false
129
144
  }
130
- }
145
+ },
146
+ ...(datapointsWithValues[0] ? {} : { min: 0, max: 100 })
131
147
  };
132
148
  }
133
149
  const matchingDpSet = new Set();
@@ -160,7 +176,7 @@ class YAxisService {
160
176
  ? YAxisOptions.mergeMatchingDatapoints
161
177
  ? firstOccurrence.has(dp)
162
178
  ? Array.from(matchingDpSet)
163
- .map(dp => `{${dp.__target?.id}|${dp.unit}}`)
179
+ .map((dp, index) => `{${index}|${dp.unit}}`)
164
180
  .join(' /')
165
181
  : matchingDpRange
166
182
  ? ''
@@ -168,13 +184,15 @@ class YAxisService {
168
184
  : `${dp.label} [${dp.unit}]`
169
185
  : '',
170
186
  nameLocation: 'middle',
187
+ nameTruncate: {
188
+ maxWidth: 350
189
+ },
171
190
  nameGap: 25,
172
191
  nameTextStyle: {
173
192
  // add rich text to support multiple colors for different dp units
174
193
  rich: {
175
- ...Array.from(matchingDpSet).reduce((acc, dp) => {
176
- const accKey = `${dp.__target?.id}`;
177
- acc[accKey] = {
194
+ ...Array.from(matchingDpSet).reduce((acc, dp, index) => {
195
+ acc[index] = {
178
196
  color: dp.color
179
197
  };
180
198
  return acc;
@@ -220,6 +238,7 @@ class YAxisService {
220
238
  show: false
221
239
  }
222
240
  },
241
+ ...(Object.keys(dp.values || {}).length > 0 ? {} : { min: 0, max: 100 }),
223
242
  ...(dp.min && { min: dp.min }),
224
243
  ...(dp.max && { max: dp.max })
225
244
  };
@@ -261,10 +280,10 @@ class YAxisService {
261
280
  return 'left';
262
281
  }
263
282
  }
264
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: YAxisService, deps: [{ token: i1.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
265
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: YAxisService }); }
283
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: YAxisService, deps: [{ token: i1.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
284
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: YAxisService }); }
266
285
  }
267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: YAxisService, decorators: [{
286
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: YAxisService, decorators: [{
268
287
  type: Injectable
269
288
  }], ctorParameters: () => [{ type: i1.AppStateService }] });
270
289
 
@@ -361,10 +380,10 @@ class ChartTypesService {
361
380
  const baseOption = this.lineSeriesOption(color, isMinMaxChart, renderType);
362
381
  return { ...baseOption, step: 'end' };
363
382
  }
364
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartTypesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
365
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartTypesService }); }
383
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartTypesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
384
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartTypesService }); }
366
385
  }
367
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartTypesService, decorators: [{
386
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartTypesService, decorators: [{
368
387
  type: Injectable
369
388
  }] });
370
389
 
@@ -388,10 +407,15 @@ class EchartsOptionsService {
388
407
  forceMergeDatapoints: displayOptions.forceMergeDatapoints,
389
408
  showLabelAndUnit: displayOptions.showLabelAndUnit
390
409
  });
410
+ const AXIS_PADDING = 20;
391
411
  const leftAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'left') : [];
392
- const gridLeft = leftAxis.length ? leftAxis.length * this.yAxisService.Y_AXIS_OFFSET : 32;
412
+ const gridLeft = leftAxis.length
413
+ ? leftAxis.length * (this.yAxisService.Y_AXIS_OFFSET - AXIS_PADDING)
414
+ : 32;
393
415
  const rightAxis = Array.isArray(yAxis) ? yAxis.filter(yx => yx.position === 'right') : [];
394
- const gridRight = rightAxis.length ? rightAxis.length * this.yAxisService.Y_AXIS_OFFSET : 16;
416
+ const gridRight = rightAxis.length
417
+ ? rightAxis.length * (this.yAxisService.Y_AXIS_OFFSET - AXIS_PADDING)
418
+ : 16;
395
419
  const selectedLanguage = this.translate.currentLang;
396
420
  let intervalInMs = this.calculateExtendedIntervalInMs(selectedTimeRange?.interval || timeRange.interval || 'hours', selectedTimeRange || timeRange);
397
421
  if (sliderZoomUsed) {
@@ -421,7 +445,7 @@ class EchartsOptionsService {
421
445
  left: gridLeft,
422
446
  top: 16,
423
447
  right: gridRight,
424
- bottom: 68
448
+ bottom: displayOptions.showSlider ? 68 : 8
425
449
  },
426
450
  dataZoom: [
427
451
  {
@@ -495,8 +519,8 @@ class EchartsOptionsService {
495
519
  show: false
496
520
  },
497
521
  xAxis: {
498
- min: aggregatedDatapoint
499
- ? Object.keys(aggregatedDatapoint.values)
522
+ min: Object.keys(aggregatedDatapoint.values || {}).length > 0
523
+ ? Object.keys(aggregatedDatapoint.values || {})
500
524
  .map(date => new Date(date).valueOf())
501
525
  .sort((a, b) => a - b)[0]
502
526
  : new Date(timeRange.dateFrom).valueOf() - intervalInMs,
@@ -988,9 +1012,9 @@ class EchartsOptionsService {
988
1012
  */
989
1013
  processEvent(event, XAxisValue) {
990
1014
  let value = `<ul class="list-unstyled small separator-top text-default">`;
991
- 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">${echarts.format.encodeHTML(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="${echarts.format.encodeHTML(event.type)}">${echarts.format.encodeHTML(event.type)}</code></li>`;
992
- 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">${echarts.format.encodeHTML(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="${echarts.format.encodeHTML(event.text)}">${echarts.format.encodeHTML(event.text)}</span></li>`;
993
- 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">${echarts.format.encodeHTML(this.translate.instant(gettext('Event time')))}</label><span class="m-l-auto">${echarts.format.encodeHTML(this.datePipe.transform(XAxisValue))}<span></li>`;
1015
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(this.translate.instant(gettext('Event type')))}</label><span class="small m-l-auto"><code title="${echarts.format.encodeHTML(event.type)}">${echarts.format.encodeHTML(event.type)}</code></span></li>`;
1016
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(this.translate.instant(gettext('Event text')))}</label><span class="small 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="${echarts.format.encodeHTML(event.text)}">${echarts.format.encodeHTML(event.text)}</span></li>`;
1017
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(this.translate.instant(gettext('Event time')))}</label><span class="small m-l-auto">${echarts.format.encodeHTML(this.datePipe.transform(XAxisValue))}<span></li>`;
994
1018
  value += `</ul>`;
995
1019
  return value;
996
1020
  }
@@ -1001,19 +1025,19 @@ class EchartsOptionsService {
1001
1025
  */
1002
1026
  async processAlarm(alarm) {
1003
1027
  let value = `<ul class="list-unstyled small separator-top text-default m-0">`;
1004
- 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">${echarts.format.encodeHTML(this.translate.instant(gettext('Alarm severity')))}</label>`;
1028
+ value += `<li class="p-t-4 p-b-4 d-flex a-i-center separator-bottom text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(this.translate.instant(gettext('Alarm severity')))}</label>`;
1005
1029
  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-${echarts.format.encodeHTML(this.severityIconPipe.transform(alarm.severity))} ${alarm.severity.toLowerCase()}" > </i> ${this.severityLabelPipe.transform(alarm.severity)} </span></li>`;
1006
- 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">${echarts.format.encodeHTML(this.translate.instant(gettext('Alarm type')))}</label><span class="small m-l-auto"><code>${echarts.format.encodeHTML(alarm.type)}</code></span></li>`;
1007
- 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">${echarts.format.encodeHTML(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="${echarts.format.encodeHTML(this.translate.instant(alarm.text))}">${echarts.format.encodeHTML(this.translate.instant(alarm.text))}</span></li>`;
1008
- 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">${echarts.format.encodeHTML(this.translate.instant(gettext('Last updated')))}</label><span class="small m-l-auto">${echarts.format.encodeHTML(this.datePipe.transform(alarm['lastUpdated']))}</span></li>`;
1030
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(this.translate.instant(gettext('Alarm type')))}</label><span class="small m-l-auto"><code title="${echarts.format.encodeHTML(alarm.type)}">${echarts.format.encodeHTML(alarm.type)}</code></span></li>`;
1031
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(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="${echarts.format.encodeHTML(this.translate.instant(alarm.text))}">${echarts.format.encodeHTML(this.translate.instant(alarm.text))}</span></li>`;
1032
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(this.translate.instant(gettext('Last updated')))}</label><span class="small m-l-auto">${echarts.format.encodeHTML(this.datePipe.transform(alarm['lastUpdated']))}</span></li>`;
1009
1033
  const exists = await this.alarmRouteExists();
1010
1034
  if (exists) {
1011
1035
  const currentUrl = window.location.href;
1012
1036
  const baseUrlIndex = currentUrl.indexOf(INDEX_HTML);
1013
1037
  const baseUrl = currentUrl.substring(0, baseUrlIndex + INDEX_HTML.length);
1014
- 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">${echarts.format.encodeHTML(this.translate.instant(gettext('Open details')))}</label><span class="small m-l-auto"><a href="${baseUrl}#/alarms/${alarm.id}/details?showCleared=true">${echarts.format.encodeHTML(this.translate.instant(gettext('Alarm details')))}</a></span></li>`;
1038
+ value += `<li class="p-t-4 p-b-4 d-flex separator-bottom text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(this.translate.instant(gettext('Open details')))}</label><span class="small m-l-auto"><a href="${baseUrl}#/alarms/${alarm.id}/details?showCleared=true">${echarts.format.encodeHTML(this.translate.instant(gettext('Alarm details')))}</a></span></li>`;
1015
1039
  }
1016
- 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">${echarts.format.encodeHTML(this.translate.instant(gettext('Alarm count')))}</label><span class="small m-l-auto"><span class="badge badge-info">${alarm.count}</span></span></li>`;
1040
+ value += `<li class="p-t-4 p-b-4 d-flex text-truncate"><label class="text-label-small m-b-0 m-r-8">${echarts.format.encodeHTML(this.translate.instant(gettext('Alarm count')))}</label><span class="small m-l-auto"><span class="badge badge-info">${alarm.count}</span></span></li>`;
1017
1041
  value += `</ul>`;
1018
1042
  return value;
1019
1043
  }
@@ -1364,7 +1388,7 @@ class EchartsOptionsService {
1364
1388
  value =
1365
1389
  `<div class="d-flex a-i-center separator-top text-default p-t-8 p-b-8">` +
1366
1390
  `<label class="text-12 m-r-8 m-b-0">${echarts.format.encodeHTML(this.datePipe.transform(minValue[0]))}</label>` +
1367
- `<div class="m-l-auto text-12" >${echarts.format.encodeHTML(minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--')} — ${echarts.format.encodeHTML(maxValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--')}</div>` +
1391
+ `<div class="m-l-auto text-12 text-truncate">${echarts.format.encodeHTML(minValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--')} — ${echarts.format.encodeHTML(maxValue[1].toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--')}</div>` +
1368
1392
  (series['datapointUnit']
1369
1393
  ? ` ${echarts.format.encodeHTML(series['datapointUnit'])}`
1370
1394
  : '') +
@@ -1382,7 +1406,7 @@ class EchartsOptionsService {
1382
1406
  value =
1383
1407
  `<div class="d-flex a-i-center separator-top text-default p-t-8 p-b-8">` +
1384
1408
  `<label class="text-12 m-r-8 m-b-0">${echarts.format.encodeHTML(this.datePipe.transform(seriesValue[0]))}</label>` +
1385
- `<div class="m-l-auto text-12" >${echarts.format.encodeHTML(seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--')}` +
1409
+ `<div class="m-l-auto text-12 text-truncate">${echarts.format.encodeHTML(seriesValue[1]?.toFixed(displayOptions.numberOfDecimalPlaces ?? 2) ?? '--')}` +
1386
1410
  (series['datapointUnit']
1387
1411
  ? ` ${echarts.format.encodeHTML(series['datapointUnit'])}`
1388
1412
  : '') +
@@ -1410,10 +1434,10 @@ class EchartsOptionsService {
1410
1434
  return acc;
1411
1435
  }, null);
1412
1436
  }
1413
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EchartsOptionsService, deps: [{ token: i1.DatePipe }, { token: YAxisService }, { token: ChartTypesService }, { token: i4.AlarmSeverityToIconPipe }, { token: i4.AlarmSeverityToLabelPipe }, { token: i5.TranslateService }, { token: i6.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
1414
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EchartsOptionsService }); }
1437
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EchartsOptionsService, deps: [{ token: i1.DatePipe }, { token: YAxisService }, { token: ChartTypesService }, { token: i4.AlarmSeverityToIconPipe }, { token: i4.AlarmSeverityToLabelPipe }, { token: i5.TranslateService }, { token: i6.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
1438
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EchartsOptionsService }); }
1415
1439
  }
1416
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EchartsOptionsService, decorators: [{
1440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: EchartsOptionsService, decorators: [{
1417
1441
  type: Injectable
1418
1442
  }], ctorParameters: () => [{ type: i1.DatePipe }, { type: YAxisService }, { type: ChartTypesService }, { type: i4.AlarmSeverityToIconPipe }, { type: i4.AlarmSeverityToLabelPipe }, { type: i5.TranslateService }, { type: i6.Router }] });
1419
1443
 
@@ -1665,20 +1689,29 @@ class ChartRealtimeService {
1665
1689
  datapointOutOfSyncCallback(datapoint);
1666
1690
  }
1667
1691
  }
1668
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartRealtimeService, deps: [{ token: i1.MeasurementRealtimeService }, { token: i1.AlarmRealtimeService }, { token: i1.EventRealtimeService }, { token: EchartsOptionsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1669
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartRealtimeService }); }
1692
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartRealtimeService, deps: [{ token: i1.MeasurementRealtimeService }, { token: i1.AlarmRealtimeService }, { token: i1.EventRealtimeService }, { token: EchartsOptionsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1693
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartRealtimeService }); }
1670
1694
  }
1671
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartRealtimeService, decorators: [{
1695
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartRealtimeService, decorators: [{
1672
1696
  type: Injectable
1673
1697
  }], ctorParameters: () => [{ type: i1.MeasurementRealtimeService }, { type: i1.AlarmRealtimeService }, { type: i1.EventRealtimeService }, { type: EchartsOptionsService }] });
1674
1698
 
1675
1699
  class ChartAlertsComponent {
1676
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartAlertsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1677
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: ChartAlertsComponent, isStandalone: true, selector: "c8y-chart-alerts", inputs: { alerts: "alerts" }, ngImport: i0, template: "<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\">\u00D7</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", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
1700
+ constructor() {
1701
+ this.sanitizer = inject(DomSanitizer);
1702
+ }
1703
+ sanitizeAlertText(text) {
1704
+ if (typeof text === 'string') {
1705
+ return this.sanitizer.sanitize(SecurityContext.HTML, text);
1706
+ }
1707
+ return text;
1708
+ }
1709
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartAlertsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1710
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ChartAlertsComponent, isStandalone: true, selector: "c8y-chart-alerts", inputs: { alerts: "alerts" }, ngImport: i0, template: "@if (alerts?.anyAlertExists$ | async) {\n <div class=\"overlay-center-vertically d-col p-16 p-r-24 p-l-24\">\n @for (alertGroup of alerts?.alertGroups; track alertGroup) {\n @if (alertGroup.value.alerts.length) {\n <div\n class=\"alert\"\n role=\"alert\"\n [ngClass]=\"'alert-' + alertGroup.type\"\n >\n @if (alertGroup.value.alertDismissal.dismissStrategy !== 'none') {\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n }\n\n @for (alertItem of alertGroup.value.alerts; track alertItem) {\n <p [innerHTML]=\"sanitizeAlertText(alertItem.text)\"></p>\n }\n\n @if (alertGroup.value.alertDismissal.dismissStrategy !== 'none') {\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 }\n </div>\n }\n }\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
1678
1711
  }
1679
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartAlertsComponent, decorators: [{
1712
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartAlertsComponent, decorators: [{
1680
1713
  type: Component,
1681
- args: [{ selector: 'c8y-chart-alerts', standalone: true, imports: [CommonModule], template: "<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\">\u00D7</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" }]
1714
+ args: [{ selector: 'c8y-chart-alerts', standalone: true, imports: [CommonModule], template: "@if (alerts?.anyAlertExists$ | async) {\n <div class=\"overlay-center-vertically d-col p-16 p-r-24 p-l-24\">\n @for (alertGroup of alerts?.alertGroups; track alertGroup) {\n @if (alertGroup.value.alerts.length) {\n <div\n class=\"alert\"\n role=\"alert\"\n [ngClass]=\"'alert-' + alertGroup.type\"\n >\n @if (alertGroup.value.alertDismissal.dismissStrategy !== 'none') {\n <button\n class=\"close\"\n type=\"button\"\n (click)=\"alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n }\n\n @for (alertItem of alertGroup.value.alerts; track alertItem) {\n <p [innerHTML]=\"sanitizeAlertText(alertItem.text)\"></p>\n }\n\n @if (alertGroup.value.alertDismissal.dismissStrategy !== 'none') {\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 }\n </div>\n }\n }\n </div>\n}\n" }]
1682
1715
  }], propDecorators: { alerts: [{
1683
1716
  type: Input
1684
1717
  }] } });
@@ -1716,10 +1749,10 @@ class ChartEventsService {
1716
1749
  const result = await Promise.all(promises);
1717
1750
  return result.flat();
1718
1751
  }
1719
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartEventsService, deps: [{ token: i1$2.EventService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1720
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartEventsService }); }
1752
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartEventsService, deps: [{ token: i1$2.EventService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1753
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartEventsService }); }
1721
1754
  }
1722
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartEventsService, decorators: [{
1755
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartEventsService, decorators: [{
1723
1756
  type: Injectable
1724
1757
  }], ctorParameters: () => [{ type: i1$2.EventService }] });
1725
1758
 
@@ -1770,10 +1803,10 @@ class ChartAlarmsService {
1770
1803
  const result = await Promise.all(promises);
1771
1804
  return result.flat();
1772
1805
  }
1773
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartAlarmsService, deps: [{ token: i1$2.AlarmService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1774
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartAlarmsService }); }
1806
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartAlarmsService, deps: [{ token: i1$2.AlarmService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1807
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartAlarmsService }); }
1775
1808
  }
1776
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartAlarmsService, decorators: [{
1809
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartAlarmsService, decorators: [{
1777
1810
  type: Injectable
1778
1811
  }], ctorParameters: () => [{ type: i1$2.AlarmService }] });
1779
1812
 
@@ -1805,10 +1838,10 @@ class ChartHelpersService {
1805
1838
  getTargetId(obj) {
1806
1839
  return obj?.__target?.id ?? obj?.target;
1807
1840
  }
1808
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartHelpersService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1809
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartHelpersService }); }
1841
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartHelpersService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1842
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartHelpersService }); }
1810
1843
  }
1811
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartHelpersService, decorators: [{
1844
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartHelpersService, decorators: [{
1812
1845
  type: Injectable
1813
1846
  }] });
1814
1847
 
@@ -1847,10 +1880,10 @@ class SelectAggregatedDatapointComponent {
1847
1880
  this.selectedDatapointLabel = found?.label || '';
1848
1881
  this.selectedDatapointColor = found?.color || '';
1849
1882
  }
1850
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectAggregatedDatapointComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1851
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: SelectAggregatedDatapointComponent, isStandalone: true, selector: "c8y-select-aggregated-datapoint", inputs: { activeDatapoints: "activeDatapoints", value: "value" }, outputs: { valueChange: "valueChange" }, host: { classAttribute: "d-contents" }, usesOnChanges: true, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i1$3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i2.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i2.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i2.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1883
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectAggregatedDatapointComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1884
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SelectAggregatedDatapointComponent, isStandalone: true, selector: "c8y-select-aggregated-datapoint", inputs: { activeDatapoints: "activeDatapoints", value: "value" }, outputs: { valueChange: "valueChange" }, host: { classAttribute: "d-contents" }, usesOnChanges: true, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i1$3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i2.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i2.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i2.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1852
1885
  }
1853
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SelectAggregatedDatapointComponent, decorators: [{
1886
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SelectAggregatedDatapointComponent, decorators: [{
1854
1887
  type: Component,
1855
1888
  args: [{ selector: 'c8y-select-aggregated-datapoint', host: {
1856
1889
  class: 'd-contents'
@@ -1935,6 +1968,15 @@ class ChartsComponent {
1935
1968
  changes.config.previousValue?.dateFrom !== changes.config.currentValue.dateFrom &&
1936
1969
  changes.config.previousValue?.dateTo !== changes.config.currentValue.dateTo &&
1937
1970
  changes.config.previousValue?.aggregation === changes.config.currentValue?.aggregation) {
1971
+ // This is needed for cases when 2 data point graph widgets exist on the same dashboard
1972
+ // and one of them changes the time range which is loaded, the other one should update the zoom level accordingly
1973
+ if (this.echartsInstance) {
1974
+ this.echartsInstance.dispatchAction({
1975
+ type: 'dataZoom',
1976
+ startValue: new Date(currentTimeRange.dateFrom).getTime(),
1977
+ endValue: new Date(currentTimeRange.dateTo).getTime()
1978
+ }, { silent: true });
1979
+ }
1938
1980
  return;
1939
1981
  }
1940
1982
  this.configChangedSubject.next();
@@ -1942,6 +1984,7 @@ class ChartsComponent {
1942
1984
  ngOnInit() {
1943
1985
  if (this.alerts) {
1944
1986
  this.alerts.setAlertGroupDismissStrategy('warning', DismissAlertStrategy.TEMPORARY_OR_PERMANENT);
1987
+ this.alerts.setAlertGroupDismissStrategy('danger', DismissAlertStrategy.NONE);
1945
1988
  }
1946
1989
  }
1947
1990
  ngOnDestroy() {
@@ -2057,7 +2100,13 @@ class ChartsComponent {
2057
2100
  return options?.series?.[0]?.markArea?.data?.length > 0;
2058
2101
  }
2059
2102
  saveAsImage() {
2060
- this.echartsInstance.setOption({ legend: { show: true } });
2103
+ const dataZoom = this.echartsInstance.getOption().dataZoom;
2104
+ const grid = this.echartsInstance.getOption().grid;
2105
+ this.echartsInstance.setOption({
2106
+ grid: { bottom: 8 },
2107
+ dataZoom: [{}, { show: false }]
2108
+ });
2109
+ this.echartsInstance.resize();
2061
2110
  const url = this.echartsInstance.getDataURL({
2062
2111
  pixelRatio: 2,
2063
2112
  backgroundColor: '#fff',
@@ -2069,7 +2118,8 @@ class ChartsComponent {
2069
2118
  document.body.appendChild(link);
2070
2119
  link.click();
2071
2120
  document.body.removeChild(link);
2072
- this.echartsInstance.setOption({ legend: { show: false } });
2121
+ this.echartsInstance.setOption({ dataZoom, grid });
2122
+ this.echartsInstance.resize(); // force resize to original state
2073
2123
  }
2074
2124
  loadMoreData() {
2075
2125
  const currentRange = this.widgetTimeContextDateRangeService.initialTimeRange();
@@ -2291,7 +2341,7 @@ class ChartsComponent {
2291
2341
  }, this.events, this.alarms, {
2292
2342
  displayMarkedLine: this.config.displayMarkedLine || false,
2293
2343
  displayMarkedPoint: this.config.displayMarkedPoint || false,
2294
- mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,
2344
+ mergeMatchingDatapoints: this.config.mergeMatchingDatapoints ?? true,
2295
2345
  forceMergeDatapoints: this.config.forceMergeDatapoints || false,
2296
2346
  showLabelAndUnit: this.config.showLabelAndUnit || false,
2297
2347
  showSlider: this.config.showSlider || false,
@@ -2329,7 +2379,7 @@ class ChartsComponent {
2329
2379
  }, this.events, this.alarms, {
2330
2380
  displayMarkedLine: this.config.displayMarkedLine || false,
2331
2381
  displayMarkedPoint: this.config.displayMarkedPoint || false,
2332
- mergeMatchingDatapoints: this.config.mergeMatchingDatapoints || false,
2382
+ mergeMatchingDatapoints: this.config.mergeMatchingDatapoints ?? true,
2333
2383
  forceMergeDatapoints: this.config.forceMergeDatapoints || false,
2334
2384
  showLabelAndUnit: this.config.showLabelAndUnit || false,
2335
2385
  showSlider: this.config.showSlider || false,
@@ -2340,6 +2390,15 @@ class ChartsComponent {
2340
2390
  }
2341
2391
  fetchSeriesForDatapoints$() {
2342
2392
  this.activeDatapoints = this.config?.datapoints?.filter(dp => dp.__active);
2393
+ const retrievalError = this.config?.datapoints?.find(dp => dp.retrievalError);
2394
+ if (retrievalError) {
2395
+ this.alerts.clear();
2396
+ this.alerts.addAlerts(new DynamicComponentAlert({
2397
+ type: 'danger',
2398
+ text: retrievalError.text
2399
+ }));
2400
+ return of([]);
2401
+ }
2343
2402
  if (!this.activeDatapoints || this.activeDatapoints.length === 0) {
2344
2403
  this.updateActiveDatapoints.emit([]);
2345
2404
  return of([]);
@@ -2383,7 +2442,7 @@ class ChartsComponent {
2383
2442
  : this.config?.datapoints?.filter(dp => dp.__active)[0];
2384
2443
  const request = defer(() => this.measurementService.listSeries({
2385
2444
  ...(customTimeRange ? customTimeRange : timeRange),
2386
- source: aggregatedDatapoint?.target || aggregatedDatapoint.__target?.id || '',
2445
+ source: aggregatedDatapoint.__target?.id || '',
2387
2446
  series: [`${aggregatedDatapoint.fragment}.${aggregatedDatapoint.series}`],
2388
2447
  ...(this.config.aggregation || customTimeRange
2389
2448
  ? {
@@ -2466,8 +2525,8 @@ class ChartsComponent {
2466
2525
  }
2467
2526
  return { dateFrom: timeRange.dateFrom.toISOString(), dateTo: timeRange.dateTo.toISOString() };
2468
2527
  }
2469
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2470
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: ChartsComponent, isStandalone: true, selector: "c8y-charts", inputs: { config: "config", alerts: "alerts", chartViewContext: "chartViewContext" }, outputs: { configChangeOnZoomOut: "configChangeOnZoomOut", timeRangeChangeOnRealtime: "timeRangeChangeOnRealtime", datapointOutOfSync: "datapointOutOfSync", updateAlarmsAndEvents: "updateAlarmsAndEvents", isMarkedAreaEnabled: "isMarkedAreaEnabled", finishLoading: "finishLoading", updateActiveDatapoints: "updateActiveDatapoints", updateAggregatedSliderDatapoint: "updateAggregatedSliderDatapoint" }, providers: [
2528
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2529
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ChartsComponent, isStandalone: true, selector: "c8y-charts", inputs: { config: "config", alerts: "alerts", chartViewContext: "chartViewContext" }, outputs: { configChangeOnZoomOut: "configChangeOnZoomOut", timeRangeChangeOnRealtime: "timeRangeChangeOnRealtime", datapointOutOfSync: "datapointOutOfSync", updateAlarmsAndEvents: "updateAlarmsAndEvents", isMarkedAreaEnabled: "isMarkedAreaEnabled", finishLoading: "finishLoading", updateActiveDatapoints: "updateActiveDatapoints", updateAggregatedSliderDatapoint: "updateAggregatedSliderDatapoint" }, providers: [
2471
2530
  { provide: NGX_ECHARTS_CONFIG, useFactory: () => ({ echarts: () => import('echarts') }) },
2472
2531
  ChartRealtimeService,
2473
2532
  MeasurementRealtimeService,
@@ -2480,7 +2539,7 @@ class ChartsComponent {
2480
2539
  AlarmSeverityToLabelPipe
2481
2540
  ], viewQueries: [{ propertyName: "chart", first: true, predicate: ["chart"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule$1 }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "ngmodule", type: NgxEchartsModule }, { kind: "directive", type: i3$1.NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: ChartAlertsComponent, selector: "c8y-chart-alerts", inputs: ["alerts"] }, { kind: "ngmodule", type: AlarmsModule }, { kind: "component", type: SelectAggregatedDatapointComponent, selector: "c8y-select-aggregated-datapoint", inputs: ["activeDatapoints", "value"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
2482
2541
  }
2483
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: ChartsComponent, decorators: [{
2542
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ChartsComponent, decorators: [{
2484
2543
  type: Component,
2485
2544
  args: [{ selector: 'c8y-charts', providers: [
2486
2545
  { provide: NGX_ECHARTS_CONFIG, useFactory: () => ({ echarts: () => import('echarts') }) },