@c8y/ngx-components 1023.61.0 → 1023.61.12

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 (232) hide show
  1. package/context-dashboard/index.d.ts +13 -0
  2. package/context-dashboard/index.d.ts.map +1 -1
  3. package/datapoint-explorer/view/index.d.ts.map +1 -1
  4. package/echart/index.d.ts +2 -0
  5. package/echart/index.d.ts.map +1 -1
  6. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +16 -16
  7. package/fesm2022/c8y-ngx-components-advanced-software-management.mjs +7 -7
  8. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +9 -9
  9. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +12 -12
  10. package/fesm2022/c8y-ngx-components-ai.mjs +3 -3
  11. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +40 -40
  12. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
  13. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +3 -3
  14. package/fesm2022/c8y-ngx-components-alarms.mjs +82 -82
  15. package/fesm2022/c8y-ngx-components-api.mjs +7 -7
  16. package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
  17. package/fesm2022/c8y-ngx-components-application-access-list.mjs +12 -12
  18. package/fesm2022/c8y-ngx-components-application-access-user-application-access-user-details-wrapper.mjs +3 -3
  19. package/fesm2022/c8y-ngx-components-asset-properties.mjs +48 -48
  20. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-D3cPNQyD.mjs → c8y-ngx-components-asset-property-grid.component-CEphJoqx.mjs} +13 -13
  21. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-D3cPNQyD.mjs.map → c8y-ngx-components-asset-property-grid.component-CEphJoqx.mjs.map} +1 -1
  22. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +32 -32
  23. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +120 -120
  24. package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
  25. package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
  26. package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
  27. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
  28. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
  29. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
  30. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
  31. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +15 -15
  32. package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
  33. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +36 -36
  34. package/fesm2022/c8y-ngx-components-branding-shared.mjs +13 -13
  35. package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
  36. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
  37. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-cxDrUoXY.mjs → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-B2cy8gI7.mjs} +4 -4
  38. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-cxDrUoXY.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-B2cy8gI7.mjs.map} +1 -1
  39. package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BxmSKHiM.mjs → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BYHnA-5R.mjs} +11 -11
  40. package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BxmSKHiM.mjs.map → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BYHnA-5R.mjs.map} +1 -1
  41. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-CbLcHjZB.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C4oL39m8.mjs} +4 -4
  42. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-CbLcHjZB.mjs.map → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-C4oL39m8.mjs.map} +1 -1
  43. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-DSWgAtkH.mjs → c8y-ngx-components-computed-asset-properties-event-count-config.component-DGwm6_C9.mjs} +4 -4
  44. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-DSWgAtkH.mjs.map → c8y-ngx-components-computed-asset-properties-event-count-config.component-DGwm6_C9.mjs.map} +1 -1
  45. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CYskL4Lc.mjs → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-BxfCjbYY.mjs} +5 -5
  46. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CYskL4Lc.mjs.map → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-BxfCjbYY.mjs.map} +1 -1
  47. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CDFNPo4q.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs} +4 -4
  48. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CDFNPo4q.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-C1cuxN3L.mjs.map} +1 -1
  49. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +1 -1
  50. package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
  51. package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
  52. package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +7 -7
  53. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +11 -11
  54. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-CfvHiXsE.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DsCDppJx.mjs} +4 -4
  55. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-CfvHiXsE.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DsCDppJx.mjs.map} +1 -1
  56. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DUbxiMZh.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-RdLW5nde.mjs} +10 -10
  57. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DUbxiMZh.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-RdLW5nde.mjs.map} +1 -1
  58. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-Byk0CoOG.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component--1OYYpR2.mjs} +4 -4
  59. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-Byk0CoOG.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component--1OYYpR2.mjs.map} +1 -1
  60. package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
  61. package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +7 -7
  62. package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +3 -3
  63. package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs +3 -3
  64. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +118 -102
  65. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  66. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CGnlj1KZ.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-Cek3_qZQ.mjs} +16 -16
  67. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CGnlj1KZ.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-Cek3_qZQ.mjs.map} +1 -1
  68. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
  69. package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +6 -6
  70. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +22 -22
  71. package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
  72. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
  73. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
  74. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +29 -24
  75. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  76. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +18 -13
  77. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -3
  79. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
  80. package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
  81. package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
  82. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +43 -43
  83. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +33 -33
  84. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
  85. package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs +9 -9
  86. package/fesm2022/c8y-ngx-components-device-enrolment.mjs +6 -6
  87. package/fesm2022/c8y-ngx-components-device-grid.mjs +43 -43
  88. package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
  89. package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
  90. package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
  91. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
  92. package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
  93. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
  94. package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
  95. package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
  96. package/fesm2022/c8y-ngx-components-echart.mjs +67 -39
  97. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  98. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
  99. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
  100. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
  101. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
  102. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
  103. package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
  104. package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
  105. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +3 -3
  106. package/fesm2022/c8y-ngx-components-events.mjs +3 -3
  107. package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
  108. package/fesm2022/c8y-ngx-components-feature-toggles-list.mjs +6 -6
  109. package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
  110. package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
  111. package/fesm2022/c8y-ngx-components-global-context.mjs +130 -130
  112. package/fesm2022/c8y-ngx-components-group-breadcrumbs.mjs +6 -6
  113. package/fesm2022/c8y-ngx-components-icon-selector.mjs +19 -19
  114. package/fesm2022/c8y-ngx-components-interval-picker.mjs +3 -3
  115. package/fesm2022/c8y-ngx-components-location.mjs +28 -28
  116. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
  117. package/fesm2022/c8y-ngx-components-map.mjs +22 -20
  118. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  119. package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
  120. package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
  121. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
  122. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
  123. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
  124. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
  125. package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
  126. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
  127. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +3 -3
  128. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
  129. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
  130. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
  131. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
  132. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
  133. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
  134. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
  135. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +7 -7
  136. package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
  137. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
  138. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
  139. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +13 -13
  140. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +13 -13
  141. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +13 -13
  142. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
  143. package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
  144. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
  145. package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
  146. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
  147. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
  148. package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
  149. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
  150. package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
  151. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
  152. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
  153. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
  154. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
  155. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
  156. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
  157. package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
  158. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
  159. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
  160. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
  161. package/fesm2022/c8y-ngx-components-replace-device.mjs +10 -10
  162. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +16 -16
  163. package/fesm2022/c8y-ngx-components-reports.mjs +19 -19
  164. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +48 -48
  165. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
  166. package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
  167. package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
  168. package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
  169. package/fesm2022/c8y-ngx-components-search.mjs +19 -19
  170. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +6 -6
  171. package/fesm2022/c8y-ngx-components-sensor-phone.mjs +7 -7
  172. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
  173. package/fesm2022/c8y-ngx-components-services-shared.mjs +3 -3
  174. package/fesm2022/c8y-ngx-components-services.mjs +29 -29
  175. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +16 -16
  176. package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
  177. package/fesm2022/c8y-ngx-components-static-assets-data.mjs +3 -3
  178. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +9 -9
  179. package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
  180. package/fesm2022/c8y-ngx-components-sub-assets.mjs +60 -60
  181. package/fesm2022/c8y-ngx-components-tenants.mjs +40 -40
  182. package/fesm2022/c8y-ngx-components-time-context.mjs +6 -6
  183. package/fesm2022/c8y-ngx-components-tracking.mjs +12 -12
  184. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -3
  185. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
  186. package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
  187. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
  188. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
  189. package/fesm2022/c8y-ngx-components-upgrade.mjs +41 -41
  190. package/fesm2022/c8y-ngx-components-user-roles.mjs +10 -10
  191. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-table.mjs +6 -6
  192. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +3 -3
  193. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +3 -3
  194. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -6
  195. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +19 -19
  196. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
  197. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +39 -39
  198. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs +3 -3
  199. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +3 -3
  200. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +7 -6
  201. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  202. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +27 -27
  203. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
  204. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +10 -10
  205. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
  206. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +24 -24
  207. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +9 -9
  208. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +18 -18
  209. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +6 -6
  210. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +6 -6
  211. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +9 -9
  212. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
  213. package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs +9 -9
  214. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +23 -19
  215. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  216. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
  217. package/fesm2022/c8y-ngx-components.mjs +1386 -1386
  218. package/locales/de.po +32 -11
  219. package/locales/es.po +33 -12
  220. package/locales/fr.po +32 -11
  221. package/locales/ja_JP.po +32 -11
  222. package/locales/ko.po +32 -11
  223. package/locales/locales.pot +3 -0
  224. package/locales/nl.po +32 -11
  225. package/locales/pl.po +32 -11
  226. package/locales/pt_BR.po +32 -11
  227. package/locales/zh_CN.po +32 -11
  228. package/locales/zh_TW.po +32 -11
  229. package/map/index.d.ts.map +1 -1
  230. package/package.json +1 -1
  231. package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -1
  232. package/widgets/implementations/quick-links/index.d.ts.map +1 -1
@@ -29,10 +29,10 @@ class DatapointExplorerNavigationFactory {
29
29
  return [];
30
30
  }));
31
31
  }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointExplorerNavigationFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
33
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointExplorerNavigationFactory }); }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointExplorerNavigationFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
33
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointExplorerNavigationFactory }); }
34
34
  }
35
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointExplorerNavigationFactory, decorators: [{
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointExplorerNavigationFactory, decorators: [{
36
36
  type: Injectable
37
37
  }] });
38
38
 
@@ -41,9 +41,9 @@ function canActivateDatapointExplorer() {
41
41
  return previewFeatureService.getState$('ui.datapoint-explorer.v2').pipe(first());
42
42
  }
43
43
  class DatapointExplorerModule {
44
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointExplorerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
45
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: DatapointExplorerModule }); }
46
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointExplorerModule, providers: [
44
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointExplorerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
45
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: DatapointExplorerModule }); }
46
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointExplorerModule, providers: [
47
47
  hookRoute([
48
48
  {
49
49
  path: 'datapointexplorer-v2',
@@ -82,7 +82,7 @@ class DatapointExplorerModule {
82
82
  })
83
83
  ] }); }
84
84
  }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointExplorerModule, decorators: [{
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointExplorerModule, decorators: [{
86
86
  type: NgModule,
87
87
  args: [{
88
88
  providers: [
@@ -213,6 +213,11 @@ class WorkspaceConfigurationService {
213
213
  }
214
214
  /** Save workspace configs in localStorage */
215
215
  saveConfigurations(configurations, id) {
216
+ // Before saving, we need to clean up the config objects to remove any unnecessary properties in the __target object
217
+ configurations = configurations.map(workspace => ({
218
+ ...workspace,
219
+ config: this.cleanUpTargetObject(workspace.config)
220
+ }));
216
221
  localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(configurations));
217
222
  localStorage.setItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY, id);
218
223
  }
@@ -334,10 +339,10 @@ class WorkspaceConfigurationService {
334
339
  }
335
340
  return configCopy;
336
341
  }
337
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WorkspaceConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
338
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WorkspaceConfigurationService, providedIn: 'root' }); }
342
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: WorkspaceConfigurationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
343
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: WorkspaceConfigurationService, providedIn: 'root' }); }
339
344
  }
340
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WorkspaceConfigurationService, decorators: [{
345
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: WorkspaceConfigurationService, decorators: [{
341
346
  type: Injectable,
342
347
  args: [{
343
348
  providedIn: 'root'
@@ -437,10 +442,10 @@ class DataExplorerService {
437
442
  async loadAChunkOfManagedObjects(uniqIds) {
438
443
  return this.moChunkLoader.loadAChunkOfManagedObjectsBase(uniqIds, this.inventory, this.maxNumberOfManagedObjectsPerRequest, id => this.moChunkLoader.getStatusDetails(id));
439
444
  }
440
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DataExplorerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
441
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DataExplorerService, providedIn: 'root' }); }
445
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DataExplorerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
446
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DataExplorerService, providedIn: 'root' }); }
442
447
  }
443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DataExplorerService, decorators: [{
448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DataExplorerService, decorators: [{
444
449
  type: Injectable,
445
450
  args: [{
446
451
  providedIn: 'root'
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-datapoint-explorer.mjs","sources":["../../datapoint-explorer/datapoint-explorer-navigation-factory.ts","../../datapoint-explorer/datapoint-explorer.module.ts","../../datapoint-explorer/view/datapoint-explorer.model.ts","../../datapoint-explorer/view/configuration/workspace-configuration.service.ts","../../datapoint-explorer/view/datapoint-explorer.service.ts","../../datapoint-explorer/c8y-ngx-components-datapoint-explorer.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory, PreviewService } from '@c8y/ngx-components';\nimport { map, Observable } from 'rxjs';\n\n@Injectable()\nexport class DatapointExplorerNavigationFactory implements NavigatorNodeFactory {\n private readonly previewFeatureService = inject(PreviewService);\n\n get(): Observable<NavigatorNode[]> {\n return this.previewFeatureService.getState$('ui.datapoint-explorer.v2').pipe(\n map(state => {\n if (state) {\n return [\n new NavigatorNode({\n label: gettext('Data explorer'),\n featureId: 'dataExplorer',\n path: 'datapointexplorer-v2',\n icon: 'c8y-data-explorer',\n routerLinkExact: false,\n preventDuplicates: true\n })\n ];\n }\n return [];\n })\n );\n }\n}\n","import { inject, NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n hookNavigator,\n hookPreview,\n hookRoute,\n PreviewService,\n ViewContext\n} from '@c8y/ngx-components';\nimport { first, Observable } from 'rxjs';\nimport { DatapointExplorerNavigationFactory } from './datapoint-explorer-navigation-factory';\n\nexport function canActivateDatapointExplorer(): Observable<boolean> {\n const previewFeatureService = inject(PreviewService);\n return previewFeatureService.getState$('ui.datapoint-explorer.v2').pipe(first());\n}\n\n@NgModule({\n providers: [\n hookRoute([\n {\n path: 'datapointexplorer-v2',\n loadComponent: () =>\n import('@c8y/ngx-components/datapoint-explorer/view').then(\n m => m.DatapointExplorerComponent\n ),\n canActivate: [canActivateDatapointExplorer]\n },\n {\n context: ViewContext.Group,\n path: 'data_explorer-v2',\n priority: 800,\n icon: 'c8y-data-explorer',\n label: gettext('Data Explorer'),\n loadComponent: () =>\n import('@c8y/ngx-components/datapoint-explorer/view').then(\n m => m.DatapointExplorerComponent\n ),\n featureId: 'dataExplorer',\n canActivate: [canActivateDatapointExplorer]\n },\n {\n context: ViewContext.Device,\n path: 'data_explorer-v2',\n priority: 800,\n icon: 'c8y-data-explorer',\n label: gettext('Data Explorer'),\n loadComponent: () =>\n import('@c8y/ngx-components/datapoint-explorer/view').then(\n m => m.DatapointExplorerComponent\n ),\n featureId: 'dataExplorer',\n canActivate: [canActivateDatapointExplorer]\n }\n ]),\n hookNavigator(DatapointExplorerNavigationFactory),\n hookPreview({\n key: 'ui.datapoint-explorer.v2',\n label: 'Data point explorer',\n description: () =>\n import('@c8y/style/markdown-files/datapoint-explorer-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n })\n ]\n})\nexport class DatapointExplorerModule {}\n","import { DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { TimeContext } from '@c8y/ngx-components/time-context';\n\nexport interface Settings {\n hideWorkspaceConfig?: boolean;\n hideExportSelector?: boolean;\n hideWidgetActions?: boolean;\n timeContext?: TimeContext;\n defaultConfigurationId?: string;\n}\n\nexport interface DataExplorerUrlConfig {\n datapoints?: BaseDatapointConfig[];\n alarmsEventsConfigs?: BaseAlarmEventConfig[];\n dateFrom?: Date | string | null;\n dateTo?: Date | string | null;\n\n // Allow any additional fields so it's forward-compatible\n [key: string]: any;\n}\n\nexport interface BaseDatapointConfig {\n fragment: string;\n series: string;\n __target?: {\n id?: string;\n [key: string]: any;\n };\n __template?: string;\n\n [key: string]: any;\n}\n\nexport interface BaseAlarmEventConfig {\n timelineType: string;\n label: string;\n\n filters: {\n type: string;\n [key: string]: any;\n };\n\n __target?: {\n id?: string;\n [key: string]: any;\n };\n [key: string]: any;\n}\n\nexport const DATA_EXPLORER_BASE_CONFIG: DatapointsGraphWidgetConfig = {\n datapoints: [],\n alarmsEventsConfigs: [],\n dateFrom: null,\n dateTo: null,\n interval: 'hours',\n aggregation: null,\n realtime: false,\n isAutoRefreshEnabled: false,\n refreshInterval: 0,\n displayMarkedLine: true,\n displayMarkedPoint: true,\n mergeMatchingDatapoints: false,\n forceMergeDatapoints: false,\n showLabelAndUnit: true,\n showSlider: true,\n displayDateSelection: false,\n yAxisSplitLines: false,\n xAxisSplitLines: false,\n numberOfDecimalPlaces: 2\n};\n\nexport const REVERSE_KEY_MAP = {\n d: 'datapoints',\n a: 'alarmsEventsConfigs',\n f: 'fragment',\n s: 'series',\n t: '__target',\n m: '__template',\n l: 'label',\n r: 'filters',\n y: 'timelineType',\n df: 'dateFrom',\n dt: 'dateTo',\n ac: '__active',\n c: 'color',\n i: 'id',\n tp: 'type'\n};\n\nexport const KEY_MAP = Object.fromEntries(\n Object.entries(REVERSE_KEY_MAP).map(([shortKey, longKey]) => [longKey, shortKey])\n);\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { WorkspaceConfiguration } from './workspace-configuration.model';\nimport { compressToEncodedURIComponent, decompressFromEncodedURIComponent } from 'lz-string';\nimport {\n DATA_EXPLORER_BASE_CONFIG,\n DataExplorerUrlConfig,\n KEY_MAP,\n REVERSE_KEY_MAP\n} from '../datapoint-explorer.model';\nimport { DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { IIdentified } from '@c8y/client';\nimport { AlertService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkspaceConfigurationService {\n private readonly baseKey = 'c8y-configs';\n private readonly baseDefaultKey = 'c8y-default-config-id';\n contextIdSignal: WritableSignal<number | string | null> = signal(null);\n\n private readonly alertService = inject(AlertService);\n\n get LOCAL_STORAGE_KEY(): string {\n const id = this.contextIdSignal();\n return id !== null ? `${this.baseKey}-${id}` : this.baseKey;\n }\n\n get LOCAL_STORAGE_DEFAULT_ID_KEY(): string {\n const id = this.contextIdSignal();\n return id !== null ? `${this.baseDefaultKey}-${id}` : this.baseDefaultKey;\n }\n\n /**\n * Generates a full datapoint explorer link from a bare config\n */\n generateExplorerLink(\n config: Partial<DatapointsGraphWidgetConfig> | DataExplorerUrlConfig,\n label: string,\n id: string\n ): string {\n const diffed = this.removeDefaults(config);\n const minified = this.minifyKeys(diffed);\n const compressed = compressToEncodedURIComponent(JSON.stringify(minified));\n const url = `/datapointexplorer-v2?id=${id}&label=${encodeURIComponent(label)}&config=${compressed}`;\n\n return url;\n }\n\n /** Load workspace configs from localStorage */\n getConfigurations(): WorkspaceConfiguration[] {\n const configurations = localStorage.getItem(this.LOCAL_STORAGE_KEY);\n if (configurations) {\n const parsedConfigs: WorkspaceConfiguration[] = JSON.parse(configurations);\n return parsedConfigs.map(workspaceConfig => {\n if (typeof workspaceConfig.config === 'string') {\n return {\n ...workspaceConfig,\n config: this.decodeConfig(workspaceConfig.config)\n };\n }\n return workspaceConfig;\n });\n }\n return [];\n }\n\n getDefaultConfigurationId(): string | null {\n return localStorage.getItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY);\n }\n\n /** Save workspace configs in localStorage */\n saveConfigurations(configurations: WorkspaceConfiguration[], id: string): void {\n localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(configurations));\n localStorage.setItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY, id);\n }\n\n /**\n *\n * @param urlConfig - configuration from the URL, either compressed string or already decoded object\n * @returns\n */\n getConfigurationFromUrl(\n urlConfig: DatapointsGraphWidgetConfig | string\n ): DatapointsGraphWidgetConfig {\n if (typeof urlConfig === 'string') {\n const decodedConfig = this.decodeConfig(urlConfig);\n const expandedConfig = this.expandKeys(decodedConfig);\n return expandedConfig;\n }\n\n return this.expandKeys(urlConfig);\n }\n\n /**\n * Encode a config for the URL:\n * - Cleanup the __target objects to contain only name and id\n * - Remove default values (diff from base)\n * - Minify keys\n * - Compress with lz-string\n */\n encodeConfig(config: DatapointsGraphWidgetConfig): string {\n const normalized = this.cleanUpTargetObject(config);\n const diffed = this.removeDefaults(normalized);\n const minified = this.minifyKeys(diffed);\n return compressToEncodedURIComponent(JSON.stringify(minified));\n }\n\n /**\n * Decode a config from the URL:\n * - Decompress\n * - Expand keys\n * - Merge with base config\n */\n decodeConfig(urlConfig: string): Partial<DatapointsGraphWidgetConfig> {\n if (!urlConfig) return null;\n try {\n const decompressed = decompressFromEncodedURIComponent(urlConfig);\n if (!decompressed) return null;\n const parsed = JSON.parse(decompressed);\n const expanded = this.expandKeys(parsed) as Partial<DatapointsGraphWidgetConfig>;\n return { ...DATA_EXPLORER_BASE_CONFIG, ...expanded };\n } catch {\n this.alertService.danger(\n gettext('The decoded configuration is invalid and could not be loaded.')\n );\n }\n }\n\n /** Minify keys recursively using KEY_MAP */\n private minifyKeys(\n config: Partial<DatapointsGraphWidgetConfig>\n ): Record<keyof typeof KEY_MAP, unknown> | unknown {\n if (Array.isArray(config)) return config.map(object => this.minifyKeys(object));\n if (config !== Object(config)) return config;\n\n return Object.fromEntries(\n Object.entries(config as Record<string, unknown>).map(([originalKey, originalValue]) => [\n KEY_MAP[originalKey] || originalKey,\n this.minifyKeys(originalValue)\n ])\n );\n }\n\n /** Expand keys recursively using REVERSE_KEY_MAP */\n private expandKeys(\n config: Partial<DatapointsGraphWidgetConfig>\n ): Record<keyof typeof REVERSE_KEY_MAP, unknown> | unknown {\n if (Array.isArray(config)) return config.map(o => this.expandKeys(o));\n if (config !== Object(config)) return config;\n\n return Object.fromEntries(\n Object.entries(config as Record<string, unknown>).map(([originalKey, originalValue]) => [\n REVERSE_KEY_MAP[originalKey] || originalKey,\n this.expandKeys(originalValue)\n ])\n );\n }\n\n /**\n * Remove properties from `config` that match `base` so only changed values remain.\n */\n private removeDefaults(\n config: DatapointsGraphWidgetConfig | DataExplorerUrlConfig\n ): DatapointsGraphWidgetConfig {\n const result = {};\n\n for (const key in config) {\n if (!(key in DATA_EXPLORER_BASE_CONFIG) || DATA_EXPLORER_BASE_CONFIG[key] !== config[key]) {\n result[key] = config[key];\n }\n }\n\n return result;\n }\n\n /**\n * Cleans up __target objects to only keep id and name and remove the rest.\n */\n private cleanUpTargetObject(config: DatapointsGraphWidgetConfig): DatapointsGraphWidgetConfig {\n const configCopy: any = { ...config };\n\n // Cleanup the datapoints array\n if (Array.isArray(configCopy.datapoints)) {\n configCopy.datapoints = configCopy.datapoints.map((dp: KPIDetails) => {\n if (dp && typeof dp === 'object' && dp.__target && typeof dp.__target === 'object') {\n const { id, name } = dp.__target;\n const target: IIdentified = {};\n if (id !== undefined) target.id = id;\n if (name !== undefined) target.name = name;\n return { ...dp, __target: target };\n }\n return dp;\n });\n }\n\n // Cleanup the alarmEventsConfig array\n if (Array.isArray(configCopy.alarmsEventsConfigs)) {\n configCopy.alarmsEventsConfigs = configCopy.alarmsEventsConfigs.map((a: KPIDetails) => {\n if (a && typeof a === 'object' && a.__target && typeof a.__target === 'object') {\n const { id, name } = a.__target;\n const target: IIdentified = {};\n if (id !== undefined) target.id = id;\n if (name !== undefined) target.name = name;\n return { ...a, __target: target };\n }\n return a;\n });\n }\n\n return configCopy;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { DatapointSyncService, MOChunkLoaderService } from '@c8y/ngx-components';\nimport {\n ContextDashboardService,\n ContextDashboardType\n} from '@c8y/ngx-components/context-dashboard';\nimport { firstValueFrom } from 'rxjs';\nimport { WorkspaceConfigurationService } from './configuration/workspace-configuration.service';\nimport { Router } from '@angular/router';\nimport { DatapointsGraphKPIDetails, DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { DataExplorerUrlConfig } from './datapoint-explorer.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DataExplorerService {\n private readonly inventory = inject(InventoryService);\n private readonly contextDashboardService = inject(ContextDashboardService);\n private readonly workspaceConfigurationService = inject(WorkspaceConfigurationService);\n private readonly moChunkLoader = inject(MOChunkLoaderService);\n private readonly datapointSyncService = inject(DatapointSyncService);\n private readonly router = inject(Router);\n private readonly maxNumberOfManagedObjectsPerRequest = 50;\n\n async fetchReportDashboard(reportId: string): Promise<IManagedObject> {\n return (\n await this.inventory.list({\n pageSize: 1,\n query: `has('c8y_Dashboard!name!report_${reportId}')`\n })\n ).data[0];\n }\n\n async fetchContextDashboard(\n dashboardId: string,\n contextAsset: IManagedObject\n ): Promise<IManagedObject> {\n const context = contextAsset.c8y_isDevice\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n return firstValueFrom(this.contextDashboardService.getDashboard$(dashboardId, [context]));\n }\n\n async loadManagedObjectsInChunks(uniqIds: string[]) {\n const { results, errors } = await this.moChunkLoader.processInChunks(\n uniqIds,\n this.maxNumberOfManagedObjectsPerRequest,\n ids => this.loadAChunkOfManagedObjects(ids)\n );\n\n return { result: results, errors };\n }\n\n /**\n * Navigate to datapoint explorer with given config.\n * The goal of this method is to navigate to the data explorer with a provided config from any other application.\n * @param config Configuration to use\n * @param label Label to be displayed for the configuration\n * @param id ID for the configuration\n */\n navigateToDataExplorer(config: DataExplorerUrlConfig, label: string, id: string): void {\n const url = this.getUrlForConfig(config, label, id);\n this.router.navigateByUrl(url);\n }\n\n /**\n * Generate a URL for the datapoint explorer with the given config.\n * The goal of this method is to generate a shareable link to the data explorer.\n * @param config Configuration to use\n * @param label Label to be displayed for the configuration\n * @param id ID for the configuration\n * @returns The generated URL\n */\n getUrlForConfig(config: DataExplorerUrlConfig, label: string, id: string): string {\n return this.workspaceConfigurationService.generateExplorerLink(\n config as Partial<DatapointsGraphWidgetConfig>,\n label,\n id\n );\n }\n\n processAlarmEventConfigs(config: DatapointsGraphWidgetConfig): void {\n const firstTarget = config.alarmsEventsConfigs.find(ae => ae.__target)?.__target;\n\n config.alarmsEventsConfigs = config.alarmsEventsConfigs.map((ae, index) => {\n if (ae.__active === undefined) ae.__active = true;\n if (!ae.__target && firstTarget) ae.__target = firstTarget;\n if (!ae.color) ae.color = this.generateColor(index);\n return ae;\n });\n }\n\n processDatapoints(config: DatapointsGraphWidgetConfig): void {\n const firstTarget = config.datapoints.find(dp => dp.__target)?.__target;\n\n config.datapoints = config.datapoints.map((dp, index) => {\n // Default __active\n if (dp.__active === undefined) dp.__active = true;\n\n if (!dp.__target && firstTarget) dp.__target = firstTarget;\n\n if (!dp.color && !dp.__template) dp.color = this.generateColor(index);\n\n if (!dp.label) dp.label = `${dp.fragment} -> ${dp.series}`;\n\n return dp;\n });\n }\n\n /**\n * Generates a color from a fixed palette based on the index.\n * Used to assign colors to alarm/event configs in the UI.\n */\n generateColor(index: number): string {\n // Simple palette, can expand\n const palette = ['#c87d33', '#8c145f', '#8cd7fd', '#59a036', '#fb00ff', '#8d4c22', '#fbb2d7'];\n return palette[index % palette.length];\n }\n\n async loadAndAssignManagedObjects(\n config: DatapointsGraphWidgetConfig,\n uniqueIds: string[]\n ): Promise<void> {\n const managedObjectsResult = await this.loadManagedObjectsInChunks([...uniqueIds]);\n const managedObjects = managedObjectsResult.result;\n const errors = managedObjectsResult.errors;\n\n config.datapoints = this.datapointSyncService.assignUpdatedValues(\n config.datapoints,\n managedObjects,\n errors\n ) as DatapointsGraphKPIDetails[];\n }\n\n private async loadAChunkOfManagedObjects(uniqIds: string[]) {\n return this.moChunkLoader.loadAChunkOfManagedObjectsBase(\n uniqIds,\n this.inventory,\n this.maxNumberOfManagedObjectsPerRequest,\n id => this.moChunkLoader.getStatusDetails(id)\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-datapoint-explorer.mjs","sources":["../../datapoint-explorer/datapoint-explorer-navigation-factory.ts","../../datapoint-explorer/datapoint-explorer.module.ts","../../datapoint-explorer/view/datapoint-explorer.model.ts","../../datapoint-explorer/view/configuration/workspace-configuration.service.ts","../../datapoint-explorer/view/datapoint-explorer.service.ts","../../datapoint-explorer/c8y-ngx-components-datapoint-explorer.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NavigatorNode, NavigatorNodeFactory, PreviewService } from '@c8y/ngx-components';\nimport { map, Observable } from 'rxjs';\n\n@Injectable()\nexport class DatapointExplorerNavigationFactory implements NavigatorNodeFactory {\n private readonly previewFeatureService = inject(PreviewService);\n\n get(): Observable<NavigatorNode[]> {\n return this.previewFeatureService.getState$('ui.datapoint-explorer.v2').pipe(\n map(state => {\n if (state) {\n return [\n new NavigatorNode({\n label: gettext('Data explorer'),\n featureId: 'dataExplorer',\n path: 'datapointexplorer-v2',\n icon: 'c8y-data-explorer',\n routerLinkExact: false,\n preventDuplicates: true\n })\n ];\n }\n return [];\n })\n );\n }\n}\n","import { inject, NgModule } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n hookNavigator,\n hookPreview,\n hookRoute,\n PreviewService,\n ViewContext\n} from '@c8y/ngx-components';\nimport { first, Observable } from 'rxjs';\nimport { DatapointExplorerNavigationFactory } from './datapoint-explorer-navigation-factory';\n\nexport function canActivateDatapointExplorer(): Observable<boolean> {\n const previewFeatureService = inject(PreviewService);\n return previewFeatureService.getState$('ui.datapoint-explorer.v2').pipe(first());\n}\n\n@NgModule({\n providers: [\n hookRoute([\n {\n path: 'datapointexplorer-v2',\n loadComponent: () =>\n import('@c8y/ngx-components/datapoint-explorer/view').then(\n m => m.DatapointExplorerComponent\n ),\n canActivate: [canActivateDatapointExplorer]\n },\n {\n context: ViewContext.Group,\n path: 'data_explorer-v2',\n priority: 800,\n icon: 'c8y-data-explorer',\n label: gettext('Data Explorer'),\n loadComponent: () =>\n import('@c8y/ngx-components/datapoint-explorer/view').then(\n m => m.DatapointExplorerComponent\n ),\n featureId: 'dataExplorer',\n canActivate: [canActivateDatapointExplorer]\n },\n {\n context: ViewContext.Device,\n path: 'data_explorer-v2',\n priority: 800,\n icon: 'c8y-data-explorer',\n label: gettext('Data Explorer'),\n loadComponent: () =>\n import('@c8y/ngx-components/datapoint-explorer/view').then(\n m => m.DatapointExplorerComponent\n ),\n featureId: 'dataExplorer',\n canActivate: [canActivateDatapointExplorer]\n }\n ]),\n hookNavigator(DatapointExplorerNavigationFactory),\n hookPreview({\n key: 'ui.datapoint-explorer.v2',\n label: 'Data point explorer',\n description: () =>\n import('@c8y/style/markdown-files/datapoint-explorer-preview.md').then(m => m.default),\n settings: {\n reload: true\n }\n })\n ]\n})\nexport class DatapointExplorerModule {}\n","import { DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { TimeContext } from '@c8y/ngx-components/time-context';\n\nexport interface Settings {\n hideWorkspaceConfig?: boolean;\n hideExportSelector?: boolean;\n hideWidgetActions?: boolean;\n timeContext?: TimeContext;\n defaultConfigurationId?: string;\n}\n\nexport interface DataExplorerUrlConfig {\n datapoints?: BaseDatapointConfig[];\n alarmsEventsConfigs?: BaseAlarmEventConfig[];\n dateFrom?: Date | string | null;\n dateTo?: Date | string | null;\n\n // Allow any additional fields so it's forward-compatible\n [key: string]: any;\n}\n\nexport interface BaseDatapointConfig {\n fragment: string;\n series: string;\n __target?: {\n id?: string;\n [key: string]: any;\n };\n __template?: string;\n\n [key: string]: any;\n}\n\nexport interface BaseAlarmEventConfig {\n timelineType: string;\n label: string;\n\n filters: {\n type: string;\n [key: string]: any;\n };\n\n __target?: {\n id?: string;\n [key: string]: any;\n };\n [key: string]: any;\n}\n\nexport const DATA_EXPLORER_BASE_CONFIG: DatapointsGraphWidgetConfig = {\n datapoints: [],\n alarmsEventsConfigs: [],\n dateFrom: null,\n dateTo: null,\n interval: 'hours',\n aggregation: null,\n realtime: false,\n isAutoRefreshEnabled: false,\n refreshInterval: 0,\n displayMarkedLine: true,\n displayMarkedPoint: true,\n mergeMatchingDatapoints: false,\n forceMergeDatapoints: false,\n showLabelAndUnit: true,\n showSlider: true,\n displayDateSelection: false,\n yAxisSplitLines: false,\n xAxisSplitLines: false,\n numberOfDecimalPlaces: 2\n};\n\nexport const REVERSE_KEY_MAP = {\n d: 'datapoints',\n a: 'alarmsEventsConfigs',\n f: 'fragment',\n s: 'series',\n t: '__target',\n m: '__template',\n l: 'label',\n r: 'filters',\n y: 'timelineType',\n df: 'dateFrom',\n dt: 'dateTo',\n ac: '__active',\n c: 'color',\n i: 'id',\n tp: 'type'\n};\n\nexport const KEY_MAP = Object.fromEntries(\n Object.entries(REVERSE_KEY_MAP).map(([shortKey, longKey]) => [longKey, shortKey])\n);\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { WorkspaceConfiguration } from './workspace-configuration.model';\nimport { compressToEncodedURIComponent, decompressFromEncodedURIComponent } from 'lz-string';\nimport {\n DATA_EXPLORER_BASE_CONFIG,\n DataExplorerUrlConfig,\n KEY_MAP,\n REVERSE_KEY_MAP\n} from '../datapoint-explorer.model';\nimport { DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { IIdentified } from '@c8y/client';\nimport { AlertService } from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkspaceConfigurationService {\n private readonly baseKey = 'c8y-configs';\n private readonly baseDefaultKey = 'c8y-default-config-id';\n contextIdSignal: WritableSignal<number | string | null> = signal(null);\n\n private readonly alertService = inject(AlertService);\n\n get LOCAL_STORAGE_KEY(): string {\n const id = this.contextIdSignal();\n return id !== null ? `${this.baseKey}-${id}` : this.baseKey;\n }\n\n get LOCAL_STORAGE_DEFAULT_ID_KEY(): string {\n const id = this.contextIdSignal();\n return id !== null ? `${this.baseDefaultKey}-${id}` : this.baseDefaultKey;\n }\n\n /**\n * Generates a full datapoint explorer link from a bare config\n */\n generateExplorerLink(\n config: Partial<DatapointsGraphWidgetConfig> | DataExplorerUrlConfig,\n label: string,\n id: string\n ): string {\n const diffed = this.removeDefaults(config);\n const minified = this.minifyKeys(diffed);\n const compressed = compressToEncodedURIComponent(JSON.stringify(minified));\n const url = `/datapointexplorer-v2?id=${id}&label=${encodeURIComponent(label)}&config=${compressed}`;\n\n return url;\n }\n\n /** Load workspace configs from localStorage */\n getConfigurations(): WorkspaceConfiguration[] {\n const configurations = localStorage.getItem(this.LOCAL_STORAGE_KEY);\n if (configurations) {\n const parsedConfigs: WorkspaceConfiguration[] = JSON.parse(configurations);\n return parsedConfigs.map(workspaceConfig => {\n if (typeof workspaceConfig.config === 'string') {\n return {\n ...workspaceConfig,\n config: this.decodeConfig(workspaceConfig.config)\n };\n }\n return workspaceConfig;\n });\n }\n return [];\n }\n\n getDefaultConfigurationId(): string | null {\n return localStorage.getItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY);\n }\n\n /** Save workspace configs in localStorage */\n saveConfigurations(configurations: WorkspaceConfiguration[], id: string): void {\n // Before saving, we need to clean up the config objects to remove any unnecessary properties in the __target object\n configurations = configurations.map(workspace => ({\n ...workspace,\n config: this.cleanUpTargetObject(workspace.config)\n }));\n localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(configurations));\n localStorage.setItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY, id);\n }\n\n /**\n *\n * @param urlConfig - configuration from the URL, either compressed string or already decoded object\n * @returns\n */\n getConfigurationFromUrl(\n urlConfig: DatapointsGraphWidgetConfig | string\n ): DatapointsGraphWidgetConfig {\n if (typeof urlConfig === 'string') {\n const decodedConfig = this.decodeConfig(urlConfig);\n const expandedConfig = this.expandKeys(decodedConfig);\n return expandedConfig;\n }\n\n return this.expandKeys(urlConfig);\n }\n\n /**\n * Encode a config for the URL:\n * - Cleanup the __target objects to contain only name and id\n * - Remove default values (diff from base)\n * - Minify keys\n * - Compress with lz-string\n */\n encodeConfig(config: DatapointsGraphWidgetConfig): string {\n const normalized = this.cleanUpTargetObject(config);\n const diffed = this.removeDefaults(normalized);\n const minified = this.minifyKeys(diffed);\n return compressToEncodedURIComponent(JSON.stringify(minified));\n }\n\n /**\n * Decode a config from the URL:\n * - Decompress\n * - Expand keys\n * - Merge with base config\n */\n decodeConfig(urlConfig: string): Partial<DatapointsGraphWidgetConfig> {\n if (!urlConfig) return null;\n try {\n const decompressed = decompressFromEncodedURIComponent(urlConfig);\n if (!decompressed) return null;\n const parsed = JSON.parse(decompressed);\n const expanded = this.expandKeys(parsed) as Partial<DatapointsGraphWidgetConfig>;\n return { ...DATA_EXPLORER_BASE_CONFIG, ...expanded };\n } catch {\n this.alertService.danger(\n gettext('The decoded configuration is invalid and could not be loaded.')\n );\n }\n }\n\n /** Minify keys recursively using KEY_MAP */\n private minifyKeys(\n config: Partial<DatapointsGraphWidgetConfig>\n ): Record<keyof typeof KEY_MAP, unknown> | unknown {\n if (Array.isArray(config)) return config.map(object => this.minifyKeys(object));\n if (config !== Object(config)) return config;\n\n return Object.fromEntries(\n Object.entries(config as Record<string, unknown>).map(([originalKey, originalValue]) => [\n KEY_MAP[originalKey] || originalKey,\n this.minifyKeys(originalValue)\n ])\n );\n }\n\n /** Expand keys recursively using REVERSE_KEY_MAP */\n private expandKeys(\n config: Partial<DatapointsGraphWidgetConfig>\n ): Record<keyof typeof REVERSE_KEY_MAP, unknown> | unknown {\n if (Array.isArray(config)) return config.map(o => this.expandKeys(o));\n if (config !== Object(config)) return config;\n\n return Object.fromEntries(\n Object.entries(config as Record<string, unknown>).map(([originalKey, originalValue]) => [\n REVERSE_KEY_MAP[originalKey] || originalKey,\n this.expandKeys(originalValue)\n ])\n );\n }\n\n /**\n * Remove properties from `config` that match `base` so only changed values remain.\n */\n private removeDefaults(\n config: DatapointsGraphWidgetConfig | DataExplorerUrlConfig\n ): DatapointsGraphWidgetConfig {\n const result = {};\n\n for (const key in config) {\n if (!(key in DATA_EXPLORER_BASE_CONFIG) || DATA_EXPLORER_BASE_CONFIG[key] !== config[key]) {\n result[key] = config[key];\n }\n }\n\n return result;\n }\n\n /**\n * Cleans up __target objects to only keep id and name and remove the rest.\n */\n private cleanUpTargetObject(config: DatapointsGraphWidgetConfig): DatapointsGraphWidgetConfig {\n const configCopy: any = { ...config };\n\n // Cleanup the datapoints array\n if (Array.isArray(configCopy.datapoints)) {\n configCopy.datapoints = configCopy.datapoints.map((dp: KPIDetails) => {\n if (dp && typeof dp === 'object' && dp.__target && typeof dp.__target === 'object') {\n const { id, name } = dp.__target;\n const target: IIdentified = {};\n if (id !== undefined) target.id = id;\n if (name !== undefined) target.name = name;\n return { ...dp, __target: target };\n }\n return dp;\n });\n }\n\n // Cleanup the alarmEventsConfig array\n if (Array.isArray(configCopy.alarmsEventsConfigs)) {\n configCopy.alarmsEventsConfigs = configCopy.alarmsEventsConfigs.map((a: KPIDetails) => {\n if (a && typeof a === 'object' && a.__target && typeof a.__target === 'object') {\n const { id, name } = a.__target;\n const target: IIdentified = {};\n if (id !== undefined) target.id = id;\n if (name !== undefined) target.name = name;\n return { ...a, __target: target };\n }\n return a;\n });\n }\n\n return configCopy;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { DatapointSyncService, MOChunkLoaderService } from '@c8y/ngx-components';\nimport {\n ContextDashboardService,\n ContextDashboardType\n} from '@c8y/ngx-components/context-dashboard';\nimport { firstValueFrom } from 'rxjs';\nimport { WorkspaceConfigurationService } from './configuration/workspace-configuration.service';\nimport { Router } from '@angular/router';\nimport { DatapointsGraphKPIDetails, DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { DataExplorerUrlConfig } from './datapoint-explorer.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DataExplorerService {\n private readonly inventory = inject(InventoryService);\n private readonly contextDashboardService = inject(ContextDashboardService);\n private readonly workspaceConfigurationService = inject(WorkspaceConfigurationService);\n private readonly moChunkLoader = inject(MOChunkLoaderService);\n private readonly datapointSyncService = inject(DatapointSyncService);\n private readonly router = inject(Router);\n private readonly maxNumberOfManagedObjectsPerRequest = 50;\n\n async fetchReportDashboard(reportId: string): Promise<IManagedObject> {\n return (\n await this.inventory.list({\n pageSize: 1,\n query: `has('c8y_Dashboard!name!report_${reportId}')`\n })\n ).data[0];\n }\n\n async fetchContextDashboard(\n dashboardId: string,\n contextAsset: IManagedObject\n ): Promise<IManagedObject> {\n const context = contextAsset.c8y_isDevice\n ? ContextDashboardType.Device\n : ContextDashboardType.Group;\n return firstValueFrom(this.contextDashboardService.getDashboard$(dashboardId, [context]));\n }\n\n async loadManagedObjectsInChunks(uniqIds: string[]) {\n const { results, errors } = await this.moChunkLoader.processInChunks(\n uniqIds,\n this.maxNumberOfManagedObjectsPerRequest,\n ids => this.loadAChunkOfManagedObjects(ids)\n );\n\n return { result: results, errors };\n }\n\n /**\n * Navigate to datapoint explorer with given config.\n * The goal of this method is to navigate to the data explorer with a provided config from any other application.\n * @param config Configuration to use\n * @param label Label to be displayed for the configuration\n * @param id ID for the configuration\n */\n navigateToDataExplorer(config: DataExplorerUrlConfig, label: string, id: string): void {\n const url = this.getUrlForConfig(config, label, id);\n this.router.navigateByUrl(url);\n }\n\n /**\n * Generate a URL for the datapoint explorer with the given config.\n * The goal of this method is to generate a shareable link to the data explorer.\n * @param config Configuration to use\n * @param label Label to be displayed for the configuration\n * @param id ID for the configuration\n * @returns The generated URL\n */\n getUrlForConfig(config: DataExplorerUrlConfig, label: string, id: string): string {\n return this.workspaceConfigurationService.generateExplorerLink(\n config as Partial<DatapointsGraphWidgetConfig>,\n label,\n id\n );\n }\n\n processAlarmEventConfigs(config: DatapointsGraphWidgetConfig): void {\n const firstTarget = config.alarmsEventsConfigs.find(ae => ae.__target)?.__target;\n\n config.alarmsEventsConfigs = config.alarmsEventsConfigs.map((ae, index) => {\n if (ae.__active === undefined) ae.__active = true;\n if (!ae.__target && firstTarget) ae.__target = firstTarget;\n if (!ae.color) ae.color = this.generateColor(index);\n return ae;\n });\n }\n\n processDatapoints(config: DatapointsGraphWidgetConfig): void {\n const firstTarget = config.datapoints.find(dp => dp.__target)?.__target;\n\n config.datapoints = config.datapoints.map((dp, index) => {\n // Default __active\n if (dp.__active === undefined) dp.__active = true;\n\n if (!dp.__target && firstTarget) dp.__target = firstTarget;\n\n if (!dp.color && !dp.__template) dp.color = this.generateColor(index);\n\n if (!dp.label) dp.label = `${dp.fragment} -> ${dp.series}`;\n\n return dp;\n });\n }\n\n /**\n * Generates a color from a fixed palette based on the index.\n * Used to assign colors to alarm/event configs in the UI.\n */\n generateColor(index: number): string {\n // Simple palette, can expand\n const palette = ['#c87d33', '#8c145f', '#8cd7fd', '#59a036', '#fb00ff', '#8d4c22', '#fbb2d7'];\n return palette[index % palette.length];\n }\n\n async loadAndAssignManagedObjects(\n config: DatapointsGraphWidgetConfig,\n uniqueIds: string[]\n ): Promise<void> {\n const managedObjectsResult = await this.loadManagedObjectsInChunks([...uniqueIds]);\n const managedObjects = managedObjectsResult.result;\n const errors = managedObjectsResult.errors;\n\n config.datapoints = this.datapointSyncService.assignUpdatedValues(\n config.datapoints,\n managedObjects,\n errors\n ) as DatapointsGraphKPIDetails[];\n }\n\n private async loadAChunkOfManagedObjects(uniqIds: string[]) {\n return this.moChunkLoader.loadAChunkOfManagedObjectsBase(\n uniqIds,\n this.inventory,\n this.maxNumberOfManagedObjectsPerRequest,\n id => this.moChunkLoader.getStatusDetails(id)\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -231,10 +231,10 @@ class DatapointLibraryDetailsComponent {
231
231
  });
232
232
  return cleanedupValues;
233
233
  }
234
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryDetailsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.InventoryService }, { token: i3.FormBuilder }, { token: i4.AlertService }, { token: i1.Router }, { token: i5.TranslateService }, { token: i4.ColorService }, { token: i6.DatapointParserService }, { token: i7.DatapointSelectorService }, { token: DATAPOINT_LIBRARY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
235
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: DatapointLibraryDetailsComponent, isStandalone: true, selector: "c8y-datapoint-library-details", ngImport: i0, template: "<c8y-title *ngIf=\"!isLoading\">\n {{ formGroup.value?.label }}\n <small *ngIf=\"formGroup.value?.fragment && formGroup.value?.series\">\n {{ formGroup.value?.fragment }} / {{ formGroup.value?.series }}\n </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-data-points'\"\n [label]=\"'Data point library' | translate\"\n [path]=\"path\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-data-points'\"\n [label]=\"formGroup.value?.label\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n (ngSubmit)=\"formGroup.valid && save(formGroup.value)\"\n (change)=\"formChange()\"\n [formGroup]=\"formGroup\"\n class=\"card content-fullpage card--grid grid__col--6-6--md grid__row--fit-auto\"\n novalidate\n>\n <div class=\"card-header large-padding separator grid__col--fullspan\">\n <div class=\"card-title\">\n {{ formGroup.value?.label }}\n </div>\n </div>\n <div *ngIf=\"!isLoading\" class=\"d-contents\">\n <div class=\"inner-scroll bg-level-0 flex-grow\">\n <div class=\"card-block large-padding\">\n <div class=\"d-flex\">\n <c8y-form-group>\n <label translate>Color</label>\n <div class=\"data-point-color form-control\">\n <div class=\"c8y-colorpicker\">\n <input\n [attr.aria-label]=\"'Color picker' | translate\"\n type=\"color\"\n name=\"color\"\n formControlName=\"color\"\n />\n <span [style.background-color]=\"formGroup.value?.color\"></span>\n </div>\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow p-l-8\">\n <label translate>Label</label>\n <input\n class=\"form-control\"\n formControlName=\"label\"\n name=\"label\"\n [placeholder]=\"'e.g. Temperature' | translate\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.label?.touched && formGroup.controls?.label?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n <c8y-form-group>\n <label translate>Description</label>\n <textarea\n class=\"form-control\"\n formControlName=\"description\"\n name=\"description\"\n [placeholder]=\"'e.g. Ambient Temperature in Celsius' | translate\"\n rows=\"3\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"d-flex a-i-center gap-8\">\n <c8y-form-group class=\"flex-grow\">\n <label translate>Fragment</label>\n <input\n class=\"form-control\"\n name=\"fragment\"\n formControlName=\"fragment\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'c8y_Temperature' }\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.fragment?.touched && formGroup.controls?.fragment?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group class=\"flex-grow\">\n <label translate>Series</label>\n <input\n class=\"form-control\"\n formControlName=\"series\"\n name=\"series\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'T' }\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.series?.touched && formGroup.controls?.series?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n <div class=\"flex-no-grow\">\n <button\n class=\"btn btn-default p-l-8 p-r-8\"\n (click)=\"pickDatapoint()\"\n type=\"button\"\n [tooltip]=\"'Load fragment and series from an existing data point' | translate\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Load fragment and series from an existing data point' | translate\"\n >\n <i c8yIcon=\"eyedropper\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"config?.showCheckboxForGlobalFragment\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"c8y-checkbox\">\n <input name=\"c8y_Global\" formControlName=\"c8y_Global\" type=\"checkbox\" />\n <span></span>\n <span translate>Globally available</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"\n 'Will make this entry available to all users on the tenant if checked.'\n | translate\n \"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-1\">\n <div class=\"card-block large-padding\">\n <fieldset class=\"c8y-fieldset\">\n <legend translate>Preview</legend>\n <c8y-range-display [config]=\"rangeConfig\" class=\"m-b-16 d-block\"></c8y-range-display>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\">\n <legend translate>Range</legend>\n <div class=\"row\" formGroupName=\"range\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 0 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.min?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label translate>Unit</label>\n <input\n class=\"form-control\"\n name=\"unit\"\n formControlName=\"unit\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '\u00BAC' }\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.unit?.touched && formGroup.controls?.unit?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || formGroup.controls?.target?.touched) &&\n formGroup.controls?.target?.errors\n }\"\n >\n <label translate>Target</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"target\"\n formControlName=\"target\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 25 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || formGroup.controls?.target?.touched) &&\n formGroup.controls?.target?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"yellowRange\">\n <legend translate>Yellow range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 50 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || yellowRange?.touched) && yellowRange.controls?.min?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || yellowRange?.touched) && yellowRange.controls?.max?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"redRange\">\n <legend translate>Red range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <div class=\"card-footer separator grid__col--fullspan\">\n <button class=\"btn btn-default\" type=\"button\" [title]=\"'Cancel' | translate\" (click)=\"cancel()\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-form\"\n type=\"submit\"\n [title]=\"'Save' | translate\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_UPDATE']; allowAny: true\"\n [disabled]=\"formGroup.invalid || formGroup.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i4.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i4.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "component", type: i4.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i4.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i4.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i4.RangeDisplayComponent, selector: "c8y-range-display", inputs: ["config", "display"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i9.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: "directive", type: i10.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
234
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointLibraryDetailsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.InventoryService }, { token: i3.FormBuilder }, { token: i4.AlertService }, { token: i1.Router }, { token: i5.TranslateService }, { token: i4.ColorService }, { token: i6.DatapointParserService }, { token: i7.DatapointSelectorService }, { token: DATAPOINT_LIBRARY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
235
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: DatapointLibraryDetailsComponent, isStandalone: true, selector: "c8y-datapoint-library-details", ngImport: i0, template: "<c8y-title *ngIf=\"!isLoading\">\n {{ formGroup.value?.label }}\n <small *ngIf=\"formGroup.value?.fragment && formGroup.value?.series\">\n {{ formGroup.value?.fragment }} / {{ formGroup.value?.series }}\n </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-data-points'\"\n [label]=\"'Data point library' | translate\"\n [path]=\"path\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-data-points'\"\n [label]=\"formGroup.value?.label\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n (ngSubmit)=\"formGroup.valid && save(formGroup.value)\"\n (change)=\"formChange()\"\n [formGroup]=\"formGroup\"\n class=\"card content-fullpage card--grid grid__col--6-6--md grid__row--fit-auto\"\n novalidate\n>\n <div class=\"card-header large-padding separator grid__col--fullspan\">\n <div class=\"card-title\">\n {{ formGroup.value?.label }}\n </div>\n </div>\n <div *ngIf=\"!isLoading\" class=\"d-contents\">\n <div class=\"inner-scroll bg-level-0 flex-grow\">\n <div class=\"card-block large-padding\">\n <div class=\"d-flex\">\n <c8y-form-group>\n <label translate>Color</label>\n <div class=\"data-point-color form-control\">\n <div class=\"c8y-colorpicker\">\n <input\n [attr.aria-label]=\"'Color picker' | translate\"\n type=\"color\"\n name=\"color\"\n formControlName=\"color\"\n />\n <span [style.background-color]=\"formGroup.value?.color\"></span>\n </div>\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow p-l-8\">\n <label translate>Label</label>\n <input\n class=\"form-control\"\n formControlName=\"label\"\n name=\"label\"\n [placeholder]=\"'e.g. Temperature' | translate\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.label?.touched && formGroup.controls?.label?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n <c8y-form-group>\n <label translate>Description</label>\n <textarea\n class=\"form-control\"\n formControlName=\"description\"\n name=\"description\"\n [placeholder]=\"'e.g. Ambient Temperature in Celsius' | translate\"\n rows=\"3\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"d-flex a-i-center gap-8\">\n <c8y-form-group class=\"flex-grow\">\n <label translate>Fragment</label>\n <input\n class=\"form-control\"\n name=\"fragment\"\n formControlName=\"fragment\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'c8y_Temperature' }\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.fragment?.touched && formGroup.controls?.fragment?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group class=\"flex-grow\">\n <label translate>Series</label>\n <input\n class=\"form-control\"\n formControlName=\"series\"\n name=\"series\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'T' }\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.series?.touched && formGroup.controls?.series?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n <div class=\"flex-no-grow\">\n <button\n class=\"btn btn-default p-l-8 p-r-8\"\n (click)=\"pickDatapoint()\"\n type=\"button\"\n [tooltip]=\"'Load fragment and series from an existing data point' | translate\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Load fragment and series from an existing data point' | translate\"\n >\n <i c8yIcon=\"eyedropper\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"config?.showCheckboxForGlobalFragment\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"c8y-checkbox\">\n <input name=\"c8y_Global\" formControlName=\"c8y_Global\" type=\"checkbox\" />\n <span></span>\n <span translate>Globally available</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"\n 'Will make this entry available to all users on the tenant if checked.'\n | translate\n \"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-1\">\n <div class=\"card-block large-padding\">\n <fieldset class=\"c8y-fieldset\">\n <legend translate>Preview</legend>\n <c8y-range-display [config]=\"rangeConfig\" class=\"m-b-16 d-block\"></c8y-range-display>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\">\n <legend translate>Range</legend>\n <div class=\"row\" formGroupName=\"range\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 0 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.min?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label translate>Unit</label>\n <input\n class=\"form-control\"\n name=\"unit\"\n formControlName=\"unit\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '\u00BAC' }\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.unit?.touched && formGroup.controls?.unit?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || formGroup.controls?.target?.touched) &&\n formGroup.controls?.target?.errors\n }\"\n >\n <label translate>Target</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"target\"\n formControlName=\"target\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 25 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || formGroup.controls?.target?.touched) &&\n formGroup.controls?.target?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"yellowRange\">\n <legend translate>Yellow range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 50 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || yellowRange?.touched) && yellowRange.controls?.min?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || yellowRange?.touched) && yellowRange.controls?.max?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"redRange\">\n <legend translate>Red range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <div class=\"card-footer separator grid__col--fullspan\">\n <button class=\"btn btn-default\" type=\"button\" [title]=\"'Cancel' | translate\" (click)=\"cancel()\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-form\"\n type=\"submit\"\n [title]=\"'Save' | translate\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_UPDATE']; allowAny: true\"\n [disabled]=\"formGroup.invalid || formGroup.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "ngmodule", type: CoreModule }, { kind: "component", type: i4.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i4.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i4.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "component", type: i4.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i4.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "component", type: i4.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: i4.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i4.RangeDisplayComponent, selector: "c8y-range-display", inputs: ["config", "display"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: PopoverModule }, { kind: "directive", type: i9.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: "directive", type: i10.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "ngmodule", type: DatapointSelectorModule }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }] }); }
236
236
  }
237
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryDetailsComponent, decorators: [{
237
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointLibraryDetailsComponent, decorators: [{
238
238
  type: Component,
239
239
  args: [{ selector: 'c8y-datapoint-library-details', standalone: true, imports: [CoreModule, RouterModule, PopoverModule, TooltipModule, DatapointSelectorModule], template: "<c8y-title *ngIf=\"!isLoading\">\n {{ formGroup.value?.label }}\n <small *ngIf=\"formGroup.value?.fragment && formGroup.value?.series\">\n {{ formGroup.value?.fragment }} / {{ formGroup.value?.series }}\n </small>\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-data-points'\"\n [label]=\"'Data point library' | translate\"\n [path]=\"path\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-data-points'\"\n [label]=\"formGroup.value?.label\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<form\n (ngSubmit)=\"formGroup.valid && save(formGroup.value)\"\n (change)=\"formChange()\"\n [formGroup]=\"formGroup\"\n class=\"card content-fullpage card--grid grid__col--6-6--md grid__row--fit-auto\"\n novalidate\n>\n <div class=\"card-header large-padding separator grid__col--fullspan\">\n <div class=\"card-title\">\n {{ formGroup.value?.label }}\n </div>\n </div>\n <div *ngIf=\"!isLoading\" class=\"d-contents\">\n <div class=\"inner-scroll bg-level-0 flex-grow\">\n <div class=\"card-block large-padding\">\n <div class=\"d-flex\">\n <c8y-form-group>\n <label translate>Color</label>\n <div class=\"data-point-color form-control\">\n <div class=\"c8y-colorpicker\">\n <input\n [attr.aria-label]=\"'Color picker' | translate\"\n type=\"color\"\n name=\"color\"\n formControlName=\"color\"\n />\n <span [style.background-color]=\"formGroup.value?.color\"></span>\n </div>\n </div>\n </c8y-form-group>\n <c8y-form-group class=\"flex-grow p-l-8\">\n <label translate>Label</label>\n <input\n class=\"form-control\"\n formControlName=\"label\"\n name=\"label\"\n [placeholder]=\"'e.g. Temperature' | translate\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.label?.touched && formGroup.controls?.label?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n <c8y-form-group>\n <label translate>Description</label>\n <textarea\n class=\"form-control\"\n formControlName=\"description\"\n name=\"description\"\n [placeholder]=\"'e.g. Ambient Temperature in Celsius' | translate\"\n rows=\"3\"\n ></textarea>\n </c8y-form-group>\n\n <div class=\"d-flex a-i-center gap-8\">\n <c8y-form-group class=\"flex-grow\">\n <label translate>Fragment</label>\n <input\n class=\"form-control\"\n name=\"fragment\"\n formControlName=\"fragment\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'c8y_Temperature' }\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.fragment?.touched && formGroup.controls?.fragment?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group class=\"flex-grow\">\n <label translate>Series</label>\n <input\n class=\"form-control\"\n formControlName=\"series\"\n name=\"series\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'T' }\"\n type=\"text\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.series?.touched && formGroup.controls?.series?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n <div class=\"flex-no-grow\">\n <button\n class=\"btn btn-default p-l-8 p-r-8\"\n (click)=\"pickDatapoint()\"\n type=\"button\"\n [tooltip]=\"'Load fragment and series from an existing data point' | translate\"\n [delay]=\"500\"\n [attr.aria-label]=\"'Load fragment and series from an existing data point' | translate\"\n >\n <i c8yIcon=\"eyedropper\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"row\" *ngIf=\"config?.showCheckboxForGlobalFragment\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"c8y-checkbox\">\n <input name=\"c8y_Global\" formControlName=\"c8y_Global\" type=\"checkbox\" />\n <span></span>\n <span translate>Globally available</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"\n 'Will make this entry available to all users on the tenant if checked.'\n | translate\n \"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div class=\"inner-scroll bg-level-1\">\n <div class=\"card-block large-padding\">\n <fieldset class=\"c8y-fieldset\">\n <legend translate>Preview</legend>\n <c8y-range-display [config]=\"rangeConfig\" class=\"m-b-16 d-block\"></c8y-range-display>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\">\n <legend translate>Range</legend>\n <div class=\"row\" formGroupName=\"range\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 0 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.min?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group>\n <label translate>Unit</label>\n <input\n class=\"form-control\"\n name=\"unit\"\n formControlName=\"unit\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '\u00BAC' }\"\n />\n <c8y-messages\n [show]=\"formGroup.controls?.unit?.touched && formGroup.controls?.unit?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || formGroup.controls?.target?.touched) &&\n formGroup.controls?.target?.errors\n }\"\n >\n <label translate>Target</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"target\"\n formControlName=\"target\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 25 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || formGroup.controls?.target?.touched) &&\n formGroup.controls?.target?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"yellowRange\">\n <legend translate>Yellow range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 50 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || yellowRange?.touched) && yellowRange.controls?.min?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || yellowRange?.touched) && yellowRange.controls?.max?.errors\n \"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"redRange\">\n <legend translate>Red range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n </div>\n <div class=\"card-footer separator grid__col--fullspan\">\n <button class=\"btn btn-default\" type=\"button\" [title]=\"'Cancel' | translate\" (click)=\"cancel()\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-form\"\n type=\"submit\"\n [title]=\"'Save' | translate\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN', 'ROLE_INVENTORY_UPDATE']; allowAny: true\"\n [disabled]=\"formGroup.invalid || formGroup.pristine\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
240
240
  }], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.InventoryService }, { type: i3.FormBuilder }, { type: i4.AlertService }, { type: i1.Router }, { type: i5.TranslateService }, { type: i4.ColorService }, { type: i6.DatapointParserService }, { type: i7.DatapointSelectorService }, { type: undefined, decorators: [{
@@ -63,10 +63,10 @@ class DatapointLibraryListComponent {
63
63
  reload() {
64
64
  this.reload$.next();
65
65
  }
66
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryListComponent, deps: [{ token: i1.InventoryService }, { token: i2.Router }, { token: i3.ModalService }, { token: i4.TranslateService }, { token: i3.AlertService }, { token: i5.DatapointParserService }], target: i0.ɵɵFactoryTarget.Component }); }
67
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: DatapointLibraryListComponent, isStandalone: true, selector: "c8y-datapoint-library-list", ngImport: i0, template: "<c8y-title>{{ title | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"title | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN']\"\n [priority]=\"1\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n data-cy=\"c8y-datapoint-library-list--add-data-point\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Reload' | translate\"\n type=\"button\"\n [disabled]=\"isLoading\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(datapoints$ | async)?.data?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/cockpit/data-point-library/#data-point-library\"></c8y-help>\n\n<!-- empty state\n-->\n<c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add a data point using the button below.' | translate\"\n *ngIf=\"(datapoints$ | async)?.data?.length === 0\"\n>\n <p>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n </p>\n</c8y-ui-empty-state>\n\n<!-- loading indicator -->\n<div\n class=\"d-flex j-c-center\"\n *ngIf=\"isLoading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n\n<div\n class=\"card-group\"\n [ngClass]=\"listClass\"\n *ngIf=\"!isLoading && (datapoints$ | async) as datapoints\"\n>\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"datapoints.data.length\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header\">\n <div class=\"card-icon\"></div>\n <p translate>Label</p>\n </div>\n <div class=\"card-actions\"></div>\n <div class=\"card-block p-l-0\">\n <div class=\"col-sm-3 p-l-16\">\n <p translate>Fragment</p>\n </div>\n <div class=\"col-sm-2\">\n <p translate>Series</p>\n </div>\n <div class=\"col-sm-1\">\n <span translate>Unit</span>\n </div>\n <div class=\"col-sm-2\">\n <span translate>Target</span>\n </div>\n <div class=\"col-sm-4\">\n <span translate>Range</span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"col-sm-6 col-md-4 col-lg-3 col-xs-12\"\n *c8yFor=\"let datapoint of datapoints; loadMore: 'hidden'; pipe: parsePipe\"\n >\n <div\n class=\"card pointer\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <div\n class=\"card-actions\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"dropdown settings\"\n dropdown\n #datapointOptionsDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointOptionsDropdown.isOpen\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n [title]=\"'Actions' | translate\"\n type=\"button\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n <li>\n <button\n [title]=\"'Edit' | translate\"\n type=\"button\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li>\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n (click)=\"removeDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.c8y_Kpi?.color\"\n ></i>\n </div>\n <div\n class=\"card-title text-truncate\"\n [title]=\"datapoint.c8y_Kpi?.label\"\n >\n {{ datapoint.c8y_Kpi?.label }}\n </div>\n </div>\n <div class=\"card-block bg-level-1 p-b-24 card-hidden-list\">\n <div class=\"col-sm-3 col-md-2\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'compact'\"\n ></c8y-range-display>\n </div>\n </div>\n <div class=\"card-block\">\n <div class=\"col-sm-3 text-truncate\">\n <span>\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Fragment\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.fragment\">\n {{ datapoint.c8y_Kpi?.fragment }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Series\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.series\">\n {{ datapoint.c8y_Kpi?.series }}\n </span>\n </div>\n <div class=\"col-sm-1 text-truncate card-hidden-grid\">\n <span *ngIf=\"datapoint.c8y_Kpi?.unit\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Unit\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.unit\">\n {{ datapoint.c8y_Kpi?.unit }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <span *ngIf=\"datapoint.c8y_Kpi?.target\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Target\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.target\">\n {{ datapoint.c8y_Kpi?.target }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-4 card-hidden-grid\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'inline'\"\n ></c8y-range-display>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i3.RangeDisplayComponent, selector: "c8y-range-display", inputs: ["config", "display"] }, { kind: "component", type: i3.ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: ["listKey", "listLength", "filterPipe"], outputs: ["onListClassChange"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i8.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i8.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i8.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: RouterModule }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] }); }
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointLibraryListComponent, deps: [{ token: i1.InventoryService }, { token: i2.Router }, { token: i3.ModalService }, { token: i4.TranslateService }, { token: i3.AlertService }, { token: i5.DatapointParserService }], target: i0.ɵɵFactoryTarget.Component }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.18", type: DatapointLibraryListComponent, isStandalone: true, selector: "c8y-datapoint-library-list", ngImport: i0, template: "<c8y-title>{{ title | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"title | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN']\"\n [priority]=\"1\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n data-cy=\"c8y-datapoint-library-list--add-data-point\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Reload' | translate\"\n type=\"button\"\n [disabled]=\"isLoading\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(datapoints$ | async)?.data?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/cockpit/data-point-library/#data-point-library\"></c8y-help>\n\n<!-- empty state\n-->\n<c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add a data point using the button below.' | translate\"\n *ngIf=\"(datapoints$ | async)?.data?.length === 0\"\n>\n <p>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n </p>\n</c8y-ui-empty-state>\n\n<!-- loading indicator -->\n<div\n class=\"d-flex j-c-center\"\n *ngIf=\"isLoading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n\n<div\n class=\"card-group\"\n [ngClass]=\"listClass\"\n *ngIf=\"!isLoading && (datapoints$ | async) as datapoints\"\n>\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"datapoints.data.length\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header\">\n <div class=\"card-icon\"></div>\n <p translate>Label</p>\n </div>\n <div class=\"card-actions\"></div>\n <div class=\"card-block p-l-0\">\n <div class=\"col-sm-3 p-l-16\">\n <p translate>Fragment</p>\n </div>\n <div class=\"col-sm-2\">\n <p translate>Series</p>\n </div>\n <div class=\"col-sm-1\">\n <span translate>Unit</span>\n </div>\n <div class=\"col-sm-2\">\n <span translate>Target</span>\n </div>\n <div class=\"col-sm-4\">\n <span translate>Range</span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"col-sm-6 col-md-4 col-lg-3 col-xs-12\"\n *c8yFor=\"let datapoint of datapoints; loadMore: 'hidden'; pipe: parsePipe\"\n >\n <div\n class=\"card pointer\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <div\n class=\"card-actions\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"dropdown settings\"\n dropdown\n #datapointOptionsDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointOptionsDropdown.isOpen\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n [title]=\"'Actions' | translate\"\n type=\"button\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n <li>\n <button\n [title]=\"'Edit' | translate\"\n type=\"button\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li>\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n (click)=\"removeDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.c8y_Kpi?.color\"\n ></i>\n </div>\n <div\n class=\"card-title text-truncate\"\n [title]=\"datapoint.c8y_Kpi?.label\"\n >\n {{ datapoint.c8y_Kpi?.label }}\n </div>\n </div>\n <div class=\"card-block bg-level-1 p-b-24 card-hidden-list\">\n <div class=\"col-sm-3 col-md-2\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'compact'\"\n ></c8y-range-display>\n </div>\n </div>\n <div class=\"card-block\">\n <div class=\"col-sm-3 text-truncate\">\n <span>\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Fragment\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.fragment\">\n {{ datapoint.c8y_Kpi?.fragment }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Series\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.series\">\n {{ datapoint.c8y_Kpi?.series }}\n </span>\n </div>\n <div class=\"col-sm-1 text-truncate card-hidden-grid\">\n <span *ngIf=\"datapoint.c8y_Kpi?.unit\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Unit\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.unit\">\n {{ datapoint.c8y_Kpi?.unit }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <span *ngIf=\"datapoint.c8y_Kpi?.target\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Target\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.target\">\n {{ datapoint.c8y_Kpi?.target }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-4 card-hidden-grid\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'inline'\"\n ></c8y-range-display>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "ngmodule", type: CoreModule }, { kind: "component", type: i3.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i3.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i3.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.IfAllowedDirective, selector: "[c8yIfAllowed]", inputs: ["c8yIfAllowed", "c8yIfAllowedAllowAny"] }, { kind: "directive", type: i3.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: i3.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i3.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i3.RangeDisplayComponent, selector: "c8y-range-display", inputs: ["config", "display"] }, { kind: "component", type: i3.ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: ["listKey", "listLength", "filterPipe"], outputs: ["onListClassChange"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i8.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i8.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i8.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: RouterModule }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] }); }
68
68
  }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryListComponent, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointLibraryListComponent, decorators: [{
70
70
  type: Component,
71
71
  args: [{ selector: 'c8y-datapoint-library-list', standalone: true, imports: [A11yModule, CoreModule, BsDropdownModule, RouterModule], template: "<c8y-title>{{ title | translate }}</c8y-title>\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"'Configuration' | translate\"\n ></c8y-breadcrumb-item>\n <c8y-breadcrumb-item\n [icon]=\"'c8y-tools'\"\n [label]=\"title | translate\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN']\"\n [priority]=\"1\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n data-cy=\"c8y-datapoint-library-list--add-data-point\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n [priority]=\"0\"\n>\n <button\n class=\"btn btn-link\"\n [title]=\"'Reload' | translate\"\n type=\"button\"\n [disabled]=\"isLoading\"\n (click)=\"reload()\"\n >\n <i\n c8yIcon=\"refresh\"\n [ngClass]=\"{ 'icon-spin': isLoading }\"\n ></i>\n {{ 'Reload' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n [placement]=\"'left'\"\n itemClass=\"navbar-form hidden-xs\"\n>\n <c8y-list-display-switch\n (onListClassChange)=\"listClass = $event\"\n [listLength]=\"(datapoints$ | async)?.data?.length\"\n ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/cockpit/data-point-library/#data-point-library\"></c8y-help>\n\n<!-- empty state\n-->\n<c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add a data point using the button below.' | translate\"\n *ngIf=\"(datapoints$ | async)?.data?.length === 0\"\n>\n <p>\n <button\n class=\"btn btn-primary\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n (click)=\"addDatapointEntry()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n </p>\n</c8y-ui-empty-state>\n\n<!-- loading indicator -->\n<div\n class=\"d-flex j-c-center\"\n *ngIf=\"isLoading\"\n>\n <c8y-loading></c8y-loading>\n</div>\n\n<div\n class=\"card-group\"\n [ngClass]=\"listClass\"\n *ngIf=\"!isLoading && (datapoints$ | async) as datapoints\"\n>\n <div\n class=\"page-sticky-header hidden-xs\"\n *ngIf=\"datapoints.data.length\"\n >\n <div class=\"d-flex\">\n <div class=\"card-header\">\n <div class=\"card-icon\"></div>\n <p translate>Label</p>\n </div>\n <div class=\"card-actions\"></div>\n <div class=\"card-block p-l-0\">\n <div class=\"col-sm-3 p-l-16\">\n <p translate>Fragment</p>\n </div>\n <div class=\"col-sm-2\">\n <p translate>Series</p>\n </div>\n <div class=\"col-sm-1\">\n <span translate>Unit</span>\n </div>\n <div class=\"col-sm-2\">\n <span translate>Target</span>\n </div>\n <div class=\"col-sm-4\">\n <span translate>Range</span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"col-sm-6 col-md-4 col-lg-3 col-xs-12\"\n *c8yFor=\"let datapoint of datapoints; loadMore: 'hidden'; pipe: parsePipe\"\n >\n <div\n class=\"card pointer\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <div\n class=\"card-actions\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"dropdown settings\"\n dropdown\n #datapointOptionsDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"datapointOptionsDropdown.isOpen\"\n >\n <button\n class=\"dropdown-toggle c8y-dropdown\"\n [title]=\"'Actions' | translate\"\n type=\"button\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul\n class=\"dropdown-menu dropdown-menu-right\"\n *dropdownMenu\n >\n <li>\n <button\n [title]=\"'Edit' | translate\"\n type=\"button\"\n (click)=\"editDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </li>\n <li>\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n (click)=\"removeDatapointEntry(datapoint)\"\n >\n <i c8yIcon=\"delete\"></i>\n {{ 'Remove' | translate }}\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"card-header separator\">\n <div class=\"card-icon\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.c8y_Kpi?.color\"\n ></i>\n </div>\n <div\n class=\"card-title text-truncate\"\n [title]=\"datapoint.c8y_Kpi?.label\"\n >\n {{ datapoint.c8y_Kpi?.label }}\n </div>\n </div>\n <div class=\"card-block bg-level-1 p-b-24 card-hidden-list\">\n <div class=\"col-sm-3 col-md-2\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'compact'\"\n ></c8y-range-display>\n </div>\n </div>\n <div class=\"card-block\">\n <div class=\"col-sm-3 text-truncate\">\n <span>\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Fragment\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.fragment\">\n {{ datapoint.c8y_Kpi?.fragment }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Series\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.series\">\n {{ datapoint.c8y_Kpi?.series }}\n </span>\n </div>\n <div class=\"col-sm-1 text-truncate card-hidden-grid\">\n <span *ngIf=\"datapoint.c8y_Kpi?.unit\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Unit\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.unit\">\n {{ datapoint.c8y_Kpi?.unit }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-2 text-truncate\">\n <span *ngIf=\"datapoint.c8y_Kpi?.target\">\n <label\n class=\"text-label-small m-r-4\"\n translate\n >\n Target\n </label>\n <span [title]=\"datapoint.c8y_Kpi?.target\">\n {{ datapoint.c8y_Kpi?.target }}\n </span>\n </span>\n </div>\n <div class=\"col-sm-4 card-hidden-grid\">\n <c8y-range-display\n [config]=\"datapoint.c8y_Kpi\"\n [display]=\"'inline'\"\n ></c8y-range-display>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
72
72
  }], ctorParameters: () => [{ type: i1.InventoryService }, { type: i2.Router }, { type: i3.ModalService }, { type: i4.TranslateService }, { type: i3.AlertService }, { type: i5.DatapointParserService }] });
@@ -34,10 +34,10 @@ class DatapointParserService {
34
34
  }
35
35
  return datapoint;
36
36
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointParserService, providedIn: 'root' }); }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointParserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
38
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointParserService, providedIn: 'root' }); }
39
39
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointParserService, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointParserService, decorators: [{
41
41
  type: Injectable,
42
42
  args: [{ providedIn: 'root' }]
43
43
  }] });
@@ -16,9 +16,9 @@ class DatapointLibraryModule {
16
16
  ]
17
17
  };
18
18
  }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryModule }); }
21
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryModule, providers: [
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointLibraryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
20
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.18", ngImport: i0, type: DatapointLibraryModule }); }
21
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointLibraryModule, providers: [
22
22
  hookRoute([
23
23
  {
24
24
  path: pathToDatapointLibrary,
@@ -45,7 +45,7 @@ class DatapointLibraryModule {
45
45
  ])
46
46
  ] }); }
47
47
  }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryModule, decorators: [{
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: DatapointLibraryModule, decorators: [{
49
49
  type: NgModule,
50
50
  args: [{
51
51
  providers: [