@c8y/ngx-components 1023.58.3 → 1023.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/alarm-event-selector/index.d.ts +54 -4
  2. package/alarm-event-selector/index.d.ts.map +1 -1
  3. package/asset-properties/index.d.ts +20 -5
  4. package/asset-properties/index.d.ts.map +1 -1
  5. package/assets-navigator/index.d.ts.map +1 -1
  6. package/computed-asset-properties/index.d.ts.map +1 -1
  7. package/context-dashboard/index.d.ts +31 -3
  8. package/context-dashboard/index.d.ts.map +1 -1
  9. package/datapoint-explorer/devicemanagement/index.d.ts.map +1 -1
  10. package/datapoint-selector/index.d.ts +90 -6
  11. package/datapoint-selector/index.d.ts.map +1 -1
  12. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +16 -16
  13. package/fesm2022/c8y-ngx-components-advanced-software-management.mjs +7 -7
  14. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +9 -9
  15. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +12 -12
  16. package/fesm2022/c8y-ngx-components-ai.mjs +3 -3
  17. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +202 -44
  18. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
  20. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +3 -3
  21. package/fesm2022/c8y-ngx-components-alarms.mjs +82 -82
  22. package/fesm2022/c8y-ngx-components-api.mjs +7 -7
  23. package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
  24. package/fesm2022/c8y-ngx-components-application-access-list.mjs +12 -12
  25. package/fesm2022/c8y-ngx-components-application-access-user-application-access-user-details-wrapper.mjs +3 -3
  26. package/fesm2022/c8y-ngx-components-asset-properties.mjs +121 -57
  27. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  28. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-BoVrIpap.mjs → c8y-ngx-components-asset-property-grid.component-D3cPNQyD.mjs} +13 -13
  29. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-BoVrIpap.mjs.map → c8y-ngx-components-asset-property-grid.component-D3cPNQyD.mjs.map} +1 -1
  30. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +36 -34
  31. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +120 -120
  33. package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
  34. package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
  35. package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
  36. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
  37. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
  38. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
  39. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
  40. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +15 -15
  41. package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
  42. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +36 -36
  43. package/fesm2022/c8y-ngx-components-branding-shared.mjs +13 -13
  44. package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
  45. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
  46. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-SA0syLy7.mjs → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-cxDrUoXY.mjs} +4 -4
  47. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-SA0syLy7.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-cxDrUoXY.mjs.map} +1 -1
  48. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BxmSKHiM.mjs +790 -0
  49. package/fesm2022/c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-BxmSKHiM.mjs.map +1 -0
  50. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-BOmgJI14.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-CbLcHjZB.mjs} +4 -4
  51. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-BOmgJI14.mjs.map → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-CbLcHjZB.mjs.map} +1 -1
  52. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-CaTb9cph.mjs → c8y-ngx-components-computed-asset-properties-event-count-config.component-DSWgAtkH.mjs} +4 -4
  53. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-CaTb9cph.mjs.map → c8y-ngx-components-computed-asset-properties-event-count-config.component-DSWgAtkH.mjs.map} +1 -1
  54. package/fesm2022/c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CYskL4Lc.mjs +120 -0
  55. package/fesm2022/c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-CYskL4Lc.mjs.map +1 -0
  56. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-DkrSvf9F.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CDFNPo4q.mjs} +5 -4
  57. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CDFNPo4q.mjs.map +1 -0
  58. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +1 -642
  59. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
  61. package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
  62. package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +7 -7
  63. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +11 -11
  64. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-CfvHiXsE.mjs} +4 -4
  65. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BovfVT29.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-CfvHiXsE.mjs.map} +1 -1
  66. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-CC5346kW.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DUbxiMZh.mjs} +10 -10
  67. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-CC5346kW.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DUbxiMZh.mjs.map} +1 -1
  68. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-CHuc--XM.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-Byk0CoOG.mjs} +4 -4
  69. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-CHuc--XM.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-Byk0CoOG.mjs.map} +1 -1
  70. package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
  71. package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +7 -7
  72. package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +3 -3
  73. package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs +3 -3
  74. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +143 -107
  75. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  76. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DvKsV_Fs.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CGnlj1KZ.mjs} +16 -16
  77. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-DvKsV_Fs.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CGnlj1KZ.mjs.map} +1 -1
  78. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
  79. package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +6 -6
  80. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +22 -22
  81. package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
  82. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
  83. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
  84. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +1 -1
  85. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +25 -25
  87. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +13 -13
  89. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -3
  90. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
  91. package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
  92. package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
  93. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +234 -67
  94. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +33 -33
  96. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
  97. package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs +9 -9
  98. package/fesm2022/c8y-ngx-components-device-enrolment.mjs +6 -6
  99. package/fesm2022/c8y-ngx-components-device-grid.mjs +43 -43
  100. package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
  101. package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
  102. package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
  103. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
  104. package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
  105. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
  106. package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
  107. package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
  108. package/fesm2022/c8y-ngx-components-echart.mjs +30 -30
  109. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
  110. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
  111. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
  112. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
  113. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
  114. package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
  115. package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
  116. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +3 -3
  117. package/fesm2022/c8y-ngx-components-events.mjs +3 -3
  118. package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
  119. package/fesm2022/c8y-ngx-components-feature-toggles-list.mjs +6 -6
  120. package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
  121. package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
  122. package/fesm2022/c8y-ngx-components-global-context.mjs +130 -130
  123. package/fesm2022/c8y-ngx-components-group-breadcrumbs.mjs +6 -6
  124. package/fesm2022/c8y-ngx-components-icon-selector.mjs +19 -19
  125. package/fesm2022/c8y-ngx-components-interval-picker.mjs +3 -3
  126. package/fesm2022/c8y-ngx-components-location.mjs +28 -28
  127. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
  128. package/fesm2022/c8y-ngx-components-map.mjs +19 -19
  129. package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
  130. package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
  131. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
  132. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
  133. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
  134. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
  135. package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
  136. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
  137. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +3 -3
  138. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
  139. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
  140. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
  141. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
  142. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
  143. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
  144. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
  145. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +7 -7
  146. package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
  147. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
  148. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
  149. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +13 -13
  150. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +13 -13
  151. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +13 -13
  152. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
  153. package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
  154. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
  155. package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
  156. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
  157. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
  158. package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
  159. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
  160. package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
  161. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
  162. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
  163. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
  164. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
  165. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
  166. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
  167. package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
  168. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
  169. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
  170. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
  171. package/fesm2022/c8y-ngx-components-replace-device.mjs +10 -10
  172. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +16 -16
  173. package/fesm2022/c8y-ngx-components-reports.mjs +19 -19
  174. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +48 -48
  175. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
  176. package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
  177. package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
  178. package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
  179. package/fesm2022/c8y-ngx-components-search.mjs +19 -19
  180. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +6 -6
  181. package/fesm2022/c8y-ngx-components-sensor-phone.mjs +7 -7
  182. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
  183. package/fesm2022/c8y-ngx-components-services-shared.mjs +3 -3
  184. package/fesm2022/c8y-ngx-components-services.mjs +29 -29
  185. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +16 -16
  186. package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
  187. package/fesm2022/c8y-ngx-components-static-assets-data.mjs +3 -3
  188. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +9 -9
  189. package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
  190. package/fesm2022/c8y-ngx-components-sub-assets.mjs +60 -60
  191. package/fesm2022/c8y-ngx-components-tenants.mjs +40 -40
  192. package/fesm2022/c8y-ngx-components-time-context.mjs +6 -6
  193. package/fesm2022/c8y-ngx-components-tracking.mjs +12 -12
  194. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -3
  195. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
  196. package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
  197. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
  198. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
  199. package/fesm2022/c8y-ngx-components-upgrade.mjs +41 -41
  200. package/fesm2022/c8y-ngx-components-user-roles.mjs +10 -10
  201. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-table.mjs +6 -6
  202. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +39 -3
  203. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
  204. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +19 -0
  205. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
  206. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +3 -3
  207. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -6
  208. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +95 -1
  209. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
  210. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +21 -1
  211. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  212. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs +23 -1
  213. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs.map +1 -1
  214. package/fesm2022/c8y-ngx-components-widgets-definitions-pie-chart.mjs +15 -1
  215. package/fesm2022/c8y-ngx-components-widgets-definitions-pie-chart.mjs.map +1 -1
  216. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +24 -1
  217. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -1
  218. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs +23 -1
  219. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs.map +1 -1
  220. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +19 -19
  221. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
  222. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +39 -39
  223. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs +3 -3
  224. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +3 -3
  225. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +31 -75
  226. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  227. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +74 -113
  228. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  229. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
  230. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +10 -10
  231. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
  232. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +24 -24
  233. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +13 -14
  234. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  235. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +36 -59
  236. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  237. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +14 -10
  238. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  239. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +15 -11
  240. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  241. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +10 -10
  242. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  243. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
  244. package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs +12 -46
  245. package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs.map +1 -1
  246. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +28 -25
  247. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  248. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
  249. package/fesm2022/c8y-ngx-components.mjs +1386 -1386
  250. package/locales/de.po +20 -0
  251. package/locales/es.po +20 -0
  252. package/locales/fr.po +20 -0
  253. package/locales/ja_JP.po +19 -0
  254. package/locales/ko.po +20 -0
  255. package/locales/locales.pot +45 -7
  256. package/locales/nl.po +20 -0
  257. package/locales/pl.po +20 -0
  258. package/locales/pt_BR.po +20 -0
  259. package/locales/zh_CN.po +20 -0
  260. package/locales/zh_TW.po +20 -0
  261. package/package.json +1 -1
  262. package/widgets/definitions/datapoints-graph/index.d.ts.map +1 -1
  263. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
  264. package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
  265. package/widgets/definitions/kpi/index.d.ts.map +1 -1
  266. package/widgets/definitions/linear-gauge/index.d.ts.map +1 -1
  267. package/widgets/definitions/pie-chart/index.d.ts.map +1 -1
  268. package/widgets/definitions/radial-gauge/index.d.ts.map +1 -1
  269. package/widgets/definitions/silo/index.d.ts.map +1 -1
  270. package/widgets/implementations/datapoints-graph/index.d.ts +4 -8
  271. package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -1
  272. package/widgets/implementations/datapoints-table/index.d.ts +19 -23
  273. package/widgets/implementations/datapoints-table/index.d.ts.map +1 -1
  274. package/widgets/implementations/image/index.d.ts.map +1 -1
  275. package/widgets/implementations/info-gauge/index.d.ts +3 -2
  276. package/widgets/implementations/info-gauge/index.d.ts.map +1 -1
  277. package/widgets/implementations/kpi/index.d.ts +3 -2
  278. package/widgets/implementations/kpi/index.d.ts.map +1 -1
  279. package/widgets/implementations/linear-gauge/index.d.ts +3 -2
  280. package/widgets/implementations/linear-gauge/index.d.ts.map +1 -1
  281. package/widgets/implementations/pie-chart/index.d.ts +0 -9
  282. package/widgets/implementations/pie-chart/index.d.ts.map +1 -1
  283. package/widgets/implementations/quick-links/index.d.ts +1 -1
  284. package/widgets/implementations/quick-links/index.d.ts.map +1 -1
  285. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-DkrSvf9F.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle, DragDropModule } from '@angular/cdk/drag-drop';
2
2
  import * as i0 from '@angular/core';
3
- import { Injectable, forwardRef, Input, Component, EventEmitter, ContentChild, Output, Pipe, Optional, NgModule } from '@angular/core';
3
+ import { Injectable, forwardRef, Input, Component, EventEmitter, ContentChild, Output, Pipe, Optional, NgModule, inject, DestroyRef } from '@angular/core';
4
4
  import * as i2$1 from '@c8y/ngx-components';
5
- import { C8yValidators, C8yTranslateDirective, FormGroupComponent, RequiredInputPlaceholderDirective, MessagesComponent, MessageDirective, C8yTranslatePipe, MAX_PAGE_SIZE, IconDirective, ListItemComponent, ListItemDragHandleComponent, ListItemCheckboxComponent, HighlightComponent, ListItemActionComponent, ListItemCollapseComponent, TypeaheadComponent, ForOfDirective, ListItemIconComponent, EmptyStateComponent, LoadingComponent, ListGroupComponent, CoreModule } from '@c8y/ngx-components';
5
+ import { C8yValidators, C8yTranslateDirective, FormGroupComponent, RequiredInputPlaceholderDirective, MessagesComponent, MessageDirective, C8yTranslatePipe, MAX_PAGE_SIZE, IconDirective, ListItemComponent, ListItemDragHandleComponent, ListItemCheckboxComponent, HighlightComponent, ListItemActionComponent, ListItemCollapseComponent, TypeaheadComponent, ForOfDirective, ListItemIconComponent, EmptyStateComponent, LoadingComponent, ListGroupComponent, CoreModule, FormsModule as FormsModule$1 } from '@c8y/ngx-components';
6
6
  import { MillerViewComponent, AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';
7
7
  import { CollapseModule } from 'ngx-bootstrap/collapse';
8
8
  import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
@@ -11,14 +11,16 @@ import { ModalModule } from 'ngx-bootstrap/modal';
11
11
  import { PopoverDirective, PopoverModule } from 'ngx-bootstrap/popover';
12
12
  import { TooltipDirective, TooltipModule } from 'ngx-bootstrap/tooltip';
13
13
  import * as i2 from '@angular/forms';
14
- import { Validators, FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
14
+ import { Validators, FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS, NgForm, ControlContainer } from '@angular/forms';
15
15
  import { map, take, filter, startWith, tap, switchMap, shareReplay, distinctUntilChanged, debounceTime } from 'rxjs/operators';
16
16
  import { gettext } from '@c8y/ngx-components/gettext';
17
17
  import { NgClass, NgTemplateOutlet, KeyValuePipe, AsyncPipe, NgIf, NgFor } from '@angular/common';
18
18
  import * as i4 from '@c8y/ngx-components/context-dashboard';
19
+ import { WidgetConfigService, WidgetConfigComponent, ContextDashboardComponent, WidgetConfigFeedbackComponent } from '@c8y/ngx-components/context-dashboard';
19
20
  import { pipe, BehaviorSubject, from, combineLatest } from 'rxjs';
20
21
  import * as i1 from '@c8y/client';
21
22
  import { sortBy, get, uniq } from 'lodash-es';
23
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
22
24
 
23
25
  const AXIS_TYPES = [
24
26
  { val: null, text: gettext('Auto') },
@@ -210,10 +212,10 @@ class DatapointAttributesFormValidationService {
210
212
  return possibleString;
211
213
  }
212
214
  }
213
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointAttributesFormValidationService, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Injectable }); }
214
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointAttributesFormValidationService, providedIn: 'root' }); }
215
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointAttributesFormValidationService, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Injectable }); }
216
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointAttributesFormValidationService, providedIn: 'root' }); }
215
217
  }
216
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointAttributesFormValidationService, decorators: [{
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointAttributesFormValidationService, decorators: [{
217
219
  type: Injectable,
218
220
  args: [{ providedIn: 'root' }]
219
221
  }], ctorParameters: () => [{ type: i2.FormBuilder }] });
@@ -335,8 +337,8 @@ class DatapointAttributesFormComponent {
335
337
  this.AXIS_TYPES = this.AXIS_TYPES.filter(axisType => this.selectableAxisTypes.includes(axisType.val));
336
338
  }
337
339
  }
338
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointAttributesFormComponent, deps: [{ token: DatapointAttributesFormValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
339
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DatapointAttributesFormComponent, isStandalone: true, selector: "c8y-datapoint-attributes-form", inputs: { selectableChartRenderTypes: "selectableChartRenderTypes", selectableChartLineTypes: "selectableChartLineTypes", selectableAxisTypes: "selectableAxisTypes", showTarget: "showTarget", showRange: "showRange", showYellowRange: "showYellowRange", showRedRange: "showRedRange", showChart: "showChart", showFormIfTemplateWasSelected: "showFormIfTemplateWasSelected", showAdvancedChartOptions: "showAdvancedChartOptions", showErrorsImmediately: "showErrorsImmediately" }, providers: [
340
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointAttributesFormComponent, deps: [{ token: DatapointAttributesFormValidationService }], target: i0.ɵɵFactoryTarget.Component }); }
341
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: DatapointAttributesFormComponent, isStandalone: true, selector: "c8y-datapoint-attributes-form", inputs: { selectableChartRenderTypes: "selectableChartRenderTypes", selectableChartLineTypes: "selectableChartLineTypes", selectableAxisTypes: "selectableAxisTypes", showTarget: "showTarget", showRange: "showRange", showYellowRange: "showYellowRange", showRedRange: "showRedRange", showChart: "showChart", showFormIfTemplateWasSelected: "showFormIfTemplateWasSelected", showAdvancedChartOptions: "showAdvancedChartOptions", showErrorsImmediately: "showErrorsImmediately" }, providers: [
340
342
  {
341
343
  provide: NG_VALUE_ACCESSOR,
342
344
  useExisting: forwardRef(() => DatapointAttributesFormComponent),
@@ -349,7 +351,7 @@ class DatapointAttributesFormComponent {
349
351
  }
350
352
  ], usesOnChanges: true, ngImport: i0, template: "<div [formGroup]=\"formGroup\">\n @if (!rawValue?.__template || showFormIfTemplateWasSelected) {\n @if (formGroup.controls?.label || formGroup.controls?.unit || formGroup.controls?.target) {\n <fieldset class=\"c8y-fieldset\">\n <legend translate>Details</legend>\n <div class=\"row\">\n @if (formGroup.controls?.label) {\n <div class=\"col-md-6\">\n <c8y-form-group class=\"form-group-sm\">\n <label translate>Label</label>\n <input\n class=\"form-control\"\n name=\"label\"\n formControlName=\"label\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'Temperature' }\"\n />\n <c8y-messages\n [show]=\"formGroup.controls.label.touched && formGroup.controls.label.errors\"\n >\n @for (item of customValidationErrorMessages['label'] | keyvalue; track item.key) {\n <c8y-message\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n }\n </c8y-messages>\n </c8y-form-group>\n </div>\n }\n @if (formGroup.controls?.unit) {\n <div class=\"col-md-6\">\n <c8y-form-group class=\"form-group-sm\">\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 >\n @for (item of customValidationErrorMessages['unit'] | keyvalue; track item.key) {\n <c8y-message\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n }\n </c8y-messages>\n </c8y-form-group>\n </div>\n }\n @if (formGroup.controls?.target && showTarget) {\n <div class=\"col-md-6\">\n <c8y-form-group\n class=\"form-group-sm\"\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 class=\"form-control\"\n name=\"target\"\n type=\"number\"\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 >\n @for (\n item of customValidationErrorMessages['target'] | keyvalue;\n track item.key\n ) {\n <c8y-message\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n }\n </c8y-messages>\n </c8y-form-group>\n </div>\n }\n </div>\n </fieldset>\n }\n @if (range && showRange) {\n <fieldset class=\"c8y-fieldset\">\n <legend translate>Range</legend>\n <div\n class=\"row\"\n formGroupName=\"range\"\n >\n <div class=\"col-md-6\">\n <c8y-form-group\n class=\"form-group-sm\"\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n name=\"min\"\n type=\"number\"\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 class=\"form-group-sm\"\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n name=\"max\"\n type=\"number\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\">\n @for (item of customValidationErrorMessages['max'] | keyvalue; track item.key) {\n <c8y-message\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n }\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n }\n @if (yellowRange && showYellowRange) {\n <fieldset\n class=\"c8y-fieldset\"\n formGroupName=\"yellowRange\"\n >\n <legend translate>Yellow range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n class=\"form-group-sm\"\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n name=\"min\"\n type=\"number\"\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 class=\"form-group-sm\"\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n name=\"max\"\n type=\"number\"\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 @if (redRange && showRedRange) {\n <fieldset\n class=\"c8y-fieldset\"\n formGroupName=\"redRange\"\n >\n <legend translate>Red range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n class=\"form-group-sm\"\n [ngClass]=\"{\n 'has-error':\n (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n name=\"min\"\n type=\"number\"\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 class=\"form-group-sm\"\n [ngClass]=\"{\n 'has-error':\n (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n name=\"max\"\n type=\"number\"\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 }\n }\n\n @if (showChartForm) {\n <fieldset\n class=\"c8y-fieldset\"\n formGroupName=\"chart\"\n >\n <legend translate>Chart</legend>\n <div class=\"tight-grid\">\n @if (selectableChartRenderTypes?.length !== 0) {\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group class=\"form-group-sm\">\n <ng-container *ngTemplateOutlet=\"displayHelpButton\"></ng-container>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"renderType\"\n >\n @for (type of CHART_RENDER_TYPES; track type.val) {\n <option [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n }\n </select>\n </div>\n </c8y-form-group>\n </div>\n }\n @if (selectableChartLineTypes?.length !== 0) {\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group class=\"form-group-sm\">\n <label\n for=\"chartType\"\n translate\n >\n Chart type\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"lineType\"\n >\n @for (type of CHART_LINE_TYPES; track type.val) {\n <option [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n }\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n }\n @if (selectableAxisTypes?.length !== 0) {\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group class=\"form-group-sm\">\n <label\n for=\"yAxis\"\n translate\n >\n Y-axis\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"yAxisType\"\n >\n @for (type of AXIS_TYPES; track type.val) {\n <option [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n }\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n }\n </div>\n </fieldset>\n }\n @if (showOnlyDisplayForm) {\n <fieldset\n class=\"c8y-fieldset\"\n formGroupName=\"display\"\n >\n <legend>\n <ng-container *ngTemplateOutlet=\"displayHelpButton\"></ng-container>\n </legend>\n <div class=\"tight-grid\">\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group class=\"form-group-sm\">\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"renderType\"\n >\n @for (type of CHART_RENDER_TYPES; track type.val) {\n <option [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n }\n </select>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n }\n</div>\n\n<ng-template #displayHelpButton>\n <label>\n {{ 'Display' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'Value displayed when data is aggregated' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n </label>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }] }); }
351
353
  }
352
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointAttributesFormComponent, decorators: [{
354
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointAttributesFormComponent, decorators: [{
353
355
  type: Component,
354
356
  args: [{ selector: 'c8y-datapoint-attributes-form', providers: [
355
357
  {
@@ -604,10 +606,10 @@ class DatapointLibraryService {
604
606
  return [];
605
607
  }
606
608
  }
607
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointLibraryService, deps: [{ token: i1.InventoryService }, { token: i2$1.AppStateService }, { token: i1.MeasurementService }, { token: i2$1.ColorService }], target: i0.ɵɵFactoryTarget.Injectable }); }
608
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointLibraryService, providedIn: 'root' }); }
609
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryService, deps: [{ token: i1.InventoryService }, { token: i2$1.AppStateService }, { token: i1.MeasurementService }, { token: i2$1.ColorService }], target: i0.ɵɵFactoryTarget.Injectable }); }
610
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryService, providedIn: 'root' }); }
609
611
  }
610
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointLibraryService, decorators: [{
612
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLibraryService, decorators: [{
611
613
  type: Injectable,
612
614
  args: [{ providedIn: 'root' }]
613
615
  }], ctorParameters: () => [{ type: i1.InventoryService }, { type: i2$1.AppStateService }, { type: i1.MeasurementService }, { type: i2$1.ColorService }] });
@@ -639,10 +641,10 @@ class DatapointTemplatePopoverComponent {
639
641
  }
640
642
  ];
641
643
  }
642
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointTemplatePopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
643
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DatapointTemplatePopoverComponent, isStandalone: true, selector: "c8y-datapoint-template-popover", inputs: { datapoint: "datapoint", attributes: "attributes" }, ngImport: i0, template: "<p class=\"text-medium\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.color\"\n ></i>\n {{ datapoint.label }}\n</p>\n<p>{{ datapoint.description }}</p>\n\n<ul class=\"list-unstyled small p-t-16\">\n @for (attribute of attributes; track attribute; let i = $index) {\n @if (datapoint[attribute.key] !== undefined) {\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">\n @if (attribute.labelColor) {\n <i\n c8yIcon=\"square\"\n [style.color]=\"attribute.labelColor\"\n ></i>\n }\n {{ attribute.label | translate }}\n </label>\n @switch (attribute.key) {\n @case ('min') {\n <span class=\"m-l-auto\">{{ datapoint['min'] }} \u2014 {{ datapoint['max'] }}</span>\n }\n @case ('yellowRangeMin') {\n <span class=\"m-l-auto\">\n {{ datapoint['yellowRangeMin'] }} \u2014 {{ datapoint['yellowRangeMax'] }}\n </span>\n }\n @case ('redRangeMin') {\n <span class=\"m-l-auto\">\n {{ datapoint['redRangeMin'] }} \u2014 {{ datapoint['redRangeMax'] }}\n </span>\n }\n @default {\n <span class=\"m-l-auto\">\n {{ datapoint[attribute.key] }}\n </span>\n }\n }\n </li>\n }\n }\n</ul>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
644
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointTemplatePopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
645
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: DatapointTemplatePopoverComponent, isStandalone: true, selector: "c8y-datapoint-template-popover", inputs: { datapoint: "datapoint", attributes: "attributes" }, ngImport: i0, template: "<p class=\"text-medium\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.color\"\n ></i>\n {{ datapoint.label }}\n</p>\n<p>{{ datapoint.description }}</p>\n\n<ul class=\"list-unstyled small p-t-16\">\n @for (attribute of attributes; track attribute; let i = $index) {\n @if (datapoint[attribute.key] !== undefined) {\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">\n @if (attribute.labelColor) {\n <i\n c8yIcon=\"square\"\n [style.color]=\"attribute.labelColor\"\n ></i>\n }\n {{ attribute.label | translate }}\n </label>\n @switch (attribute.key) {\n @case ('min') {\n <span class=\"m-l-auto\">{{ datapoint['min'] }} \u2014 {{ datapoint['max'] }}</span>\n }\n @case ('yellowRangeMin') {\n <span class=\"m-l-auto\">\n {{ datapoint['yellowRangeMin'] }} \u2014 {{ datapoint['yellowRangeMax'] }}\n </span>\n }\n @case ('redRangeMin') {\n <span class=\"m-l-auto\">\n {{ datapoint['redRangeMin'] }} \u2014 {{ datapoint['redRangeMax'] }}\n </span>\n }\n @default {\n <span class=\"m-l-auto\">\n {{ datapoint[attribute.key] }}\n </span>\n }\n }\n </li>\n }\n }\n</ul>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
644
646
  }
645
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointTemplatePopoverComponent, decorators: [{
647
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointTemplatePopoverComponent, decorators: [{
646
648
  type: Component,
647
649
  args: [{ selector: 'c8y-datapoint-template-popover', imports: [IconDirective, C8yTranslatePipe], template: "<p class=\"text-medium\">\n <i\n c8yIcon=\"circle\"\n [style.color]=\"datapoint.color\"\n ></i>\n {{ datapoint.label }}\n</p>\n<p>{{ datapoint.description }}</p>\n\n<ul class=\"list-unstyled small p-t-16\">\n @for (attribute of attributes; track attribute; let i = $index) {\n @if (datapoint[attribute.key] !== undefined) {\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">\n @if (attribute.labelColor) {\n <i\n c8yIcon=\"square\"\n [style.color]=\"attribute.labelColor\"\n ></i>\n }\n {{ attribute.label | translate }}\n </label>\n @switch (attribute.key) {\n @case ('min') {\n <span class=\"m-l-auto\">{{ datapoint['min'] }} \u2014 {{ datapoint['max'] }}</span>\n }\n @case ('yellowRangeMin') {\n <span class=\"m-l-auto\">\n {{ datapoint['yellowRangeMin'] }} \u2014 {{ datapoint['yellowRangeMax'] }}\n </span>\n }\n @case ('redRangeMin') {\n <span class=\"m-l-auto\">\n {{ datapoint['redRangeMin'] }} \u2014 {{ datapoint['redRangeMax'] }}\n </span>\n }\n @default {\n <span class=\"m-l-auto\">\n {{ datapoint[attribute.key] }}\n </span>\n }\n }\n </li>\n }\n }\n</ul>\n" }]
648
650
  }], propDecorators: { datapoint: [{
@@ -797,8 +799,8 @@ class DatapointSelectorListItemComponent {
797
799
  delete obj.details;
798
800
  return obj;
799
801
  }
800
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorListItemComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
801
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DatapointSelectorListItemComponent, isStandalone: true, selector: "c8y-datapoint-selector-list-item", inputs: { defaultFormOptions: "defaultFormOptions", isSelected: "isSelected", isCollapsed: "isCollapsed", addButtonType: "addButtonType", editable: "editable", showActiveToggle: "showActiveToggle", activeToggleDisabled: "activeToggleDisabled", showOptions: "showOptions", datapointLibraryEntries: "datapointLibraryEntries", actions: "actions", optionToRemove: "optionToRemove", hasUnlinkTemplateOption: "hasUnlinkTemplateOption", colorPickerDisabled: "colorPickerDisabled", disableTypeaheadIfSelected: "disableTypeaheadIfSelected", highlightText: "highlightText" }, outputs: { added: "added", removed: "removed" }, providers: [
802
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorListItemComponent, deps: [{ token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
803
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: DatapointSelectorListItemComponent, isStandalone: true, selector: "c8y-datapoint-selector-list-item", inputs: { defaultFormOptions: "defaultFormOptions", isSelected: "isSelected", isCollapsed: "isCollapsed", addButtonType: "addButtonType", editable: "editable", showActiveToggle: "showActiveToggle", activeToggleDisabled: "activeToggleDisabled", showOptions: "showOptions", datapointLibraryEntries: "datapointLibraryEntries", actions: "actions", optionToRemove: "optionToRemove", hasUnlinkTemplateOption: "hasUnlinkTemplateOption", colorPickerDisabled: "colorPickerDisabled", disableTypeaheadIfSelected: "disableTypeaheadIfSelected", highlightText: "highlightText" }, outputs: { added: "added", removed: "removed" }, providers: [
802
804
  {
803
805
  provide: NG_VALUE_ACCESSOR,
804
806
  useExisting: forwardRef(() => DatapointSelectorListItemComponent),
@@ -811,7 +813,7 @@ class DatapointSelectorListItemComponent {
811
813
  }
812
814
  ], queries: [{ propertyName: "dragHandle", first: true, predicate: ListItemDragHandleComponent, descendants: true }], ngImport: i0, template: "<c8y-li\n class=\"c8y-list__item__collapse--container-small\"\n [formGroup]=\"formGroup\"\n #li\n>\n <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n @if (showActiveToggle) {\n <c8y-li-checkbox\n class=\"a-s-center p-r-0\"\n [displayAsSwitch]=\"true\"\n formControlName=\"__active\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-li-checkbox>\n }\n\n <div class=\"d-flex a-i-center\">\n <div\n class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-16\"\n [title]=\"'Change color' | translate\"\n >\n <div class=\"c8y-colorpicker\">\n <input\n [attr.aria-label]=\"'Color' | translate\"\n type=\"color\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\"></span>\n </div>\n </div>\n <button\n class=\"btn-clean data-point-label text-truncate\"\n [attr.aria-expanded]=\"!li.collapsed\"\n type=\"button\"\n (click)=\"li.collapsed = !li.collapsed\"\n >\n <span\n class=\"text-truncate\"\n [title]=\"formGroup.value.details?.label\"\n >\n <c8y-highlight\n [text]=\"formGroup.value.details?.label\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n @if (formGroup.value.__target) {\n <small class=\"text-truncate text-muted icon-flex\">\n <i c8yIcon=\"exchange\"></i>\n <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n </small>\n }\n </button>\n\n @if (!(isValid$ | async)) {\n <button\n class=\"btn btn-dot btn-dot--danger m-l-auto\"\n [attr.aria-label]=\"'Invalid' | translate\"\n [popover]=\"\n errorMessage\n ? errorMessage\n : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n \"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <i c8yIcon=\"warning\"></i>\n </button>\n }\n @if (addButtonType === AddButtonTypes.addRemove) {\n <div class=\"m-l-auto a-s-center p-r-4\">\n @if (isSelected) {\n <button\n class=\"btn btn-dot btn-dot--danger\"\n [attr.aria-label]=\"'Remove' | translate\"\n [tooltip]=\"'Remove from selected data points' | translate\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n >\n <i\n class=\"icon-20\"\n c8yIcon=\"minus-circle\"\n ></i>\n </button>\n }\n @if (!isSelected) {\n <button\n class=\"btn btn-dot text-primary\"\n [attr.aria-label]=\"'Add to selected data points' | translate\"\n [tooltip]=\"'Add to selected data points' | translate\"\n type=\"button\"\n [delay]=\"500\"\n [disabled]=\"!(isValid$ | async)\"\n (click)=\"addOrRemoveItem()\"\n [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n >\n <i\n class=\"text-primary icon-20\"\n c8yIcon=\"plus-circle\"\n ></i>\n </button>\n }\n </div>\n }\n @if (addButtonType === AddButtonTypes.select) {\n <button\n class=\"btn btn-default btn-sm m-l-auto\"\n [attr.aria-label]=\"'Select' | translate\"\n [tooltip]=\"'Select data point' | translate\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"addOrRemoveItem()\"\n >\n {{ 'Select' | translate }}\n </button>\n }\n </div>\n\n @if (optionToRemove) {\n <c8y-li-action\n [icon]=\"'minus-circle'\"\n [label]=\"'Remove from list' | translate\"\n (click)=\"remove()\"\n ></c8y-li-action>\n }\n @for (action of actions; track action) {\n <c8y-li-action\n [icon]=\"action.icon\"\n [label]=\"action.label\"\n (click)=\"action.callback(formGroup.value)\"\n ></c8y-li-action>\n }\n @if (editable) {\n <c8y-li-collapse>\n <div class=\"data-point-details\">\n <ul class=\"list-unstyled small m-b-16\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n <label\n class=\"small m-b-0 m-r-8 a-s-start text-muted\"\n translate\n >\n Fragment\n </label>\n <span\n class=\"m-l-auto text-truncate\"\n title=\"{{ formGroup.value.fragment }}\"\n >\n <c8y-highlight\n [text]=\"formGroup.value.fragment\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n <label\n class=\"small m-b-0 m-r-8 a-s-start text-muted\"\n translate\n >\n Series\n </label>\n <span\n class=\"m-l-auto text-truncate\"\n title=\"{{ formGroup.value.series }}\"\n >\n <c8y-highlight\n [text]=\"formGroup.value.series\"\n [pattern]=\"highlightText\"\n [shouldTrimPattern]=\"true\"\n ></c8y-highlight>\n </span>\n </li>\n </ul>\n @if (datapointLibraryEntries && datapointLibraryEntries | async; as libraryEntries) {\n <div class=\"form-group form-group-sm\">\n <label>\n {{ 'Data point template' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"datapointHintPopoverTemplate\"\n placement=\"top\"\n triggers=\"focus\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n ></button>\n </label>\n\n <ng-template #datapointHintPopoverTemplate>\n {{\n 'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n | translate\n }}\n </ng-template>\n <div class=\"input-group input-group-sm\">\n @if (datapointLibraryEntries) {\n <c8y-typeahead\n class=\"flex-grow\"\n [placeholder]=\"'No template' | translate\"\n [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onSearch)=\"setPipe($event)\"\n [displayProperty]=\"'label'\"\n [hideNew]=\"true\"\n [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n >\n <c8y-li\n class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n *c8yFor=\"\n let item of datapointLibraryEntries;\n loadMore: 'auto';\n pipe: filterPipe;\n notFound: notFoundTemplate\n \"\n (click)=\"dataPointTemplateSelected(item)\"\n [active]=\"formGroup.value.__template === item.id\"\n [attr.role]=\"'menuitem'\"\n >\n <c8y-highlight\n [text]=\"item.c8y_Kpi?.label\"\n [pattern]=\"pattern\"\n ></c8y-highlight>\n <c8y-li-icon\n icon=\"circle\"\n [style.color]=\"item.c8y_Kpi?.color\"\n ></c8y-li-icon>\n </c8y-li>\n <ng-template #notFoundTemplate>\n @if (pattern.length > 0) {\n <c8y-li class=\"bg-level-2 p-8\">\n <span>No match found.</span>\n </c8y-li>\n }\n </ng-template>\n </c8y-typeahead>\n }\n <div class=\"input-group-btn\">\n @if (formGroup.value.__template) {\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Info' | translate\"\n [popover]=\"datapointOverviewPopoverTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n }\n </div>\n <div class=\"input-group-btn\">\n @if (formGroup.value.__template && hasUnlinkTemplateOption) {\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Unlink data point template' | translate\"\n tooltip=\"{{ 'Unlink data point template' | translate }}\"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n [adaptivePosition]=\"false\"\n (click)=\"unlinkDatapointTemplate()\"\n >\n <i c8yIcon=\"unlink\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n }\n <ng-template #datapointOverviewPopoverTemplate>\n <c8y-datapoint-template-popover\n [datapoint]=\"formGroup.value.details\"\n ></c8y-datapoint-template-popover>\n </ng-template>\n @if (defaultFormOptions) {\n <c8y-datapoint-attributes-form\n [showTarget]=\"defaultFormOptions.showTarget\"\n [showRange]=\"defaultFormOptions.showRange\"\n [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n [showRedRange]=\"defaultFormOptions.showRedRange\"\n [showChart]=\"defaultFormOptions.showChart\"\n [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n [selectableChartRenderTypes]=\"defaultFormOptions.selectableChartRenderTypes\"\n [selectableChartLineTypes]=\"defaultFormOptions.selectableChartLineTypes\"\n [selectableAxisTypes]=\"defaultFormOptions.selectableAxisTypes\"\n [showAdvancedChartOptions]=\"defaultFormOptions.showAdvancedChartOptions\"\n [showErrorsImmediately]=\"true\"\n formControlName=\"details\"\n ></c8y-datapoint-attributes-form>\n }\n </div>\n </c8y-li-collapse>\n }\n</c8y-li>\n", dependencies: [{ kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "component", type: ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "directive", type: RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "directive", type: 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: "component", type: ListItemActionComponent, selector: "c8y-list-item-action, c8y-li-action", inputs: ["label", "icon", "disabled"], outputs: ["click"] }, { kind: "component", type: ListItemCollapseComponent, selector: "c8y-list-item-collapse, c8y-li-collapse", inputs: ["collapseWay"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected", "title", "highlightFirstItem"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: 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: ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: DatapointTemplatePopoverComponent, selector: "c8y-datapoint-template-popover", inputs: ["datapoint", "attributes"] }, { kind: "component", type: DatapointAttributesFormComponent, selector: "c8y-datapoint-attributes-form", inputs: ["selectableChartRenderTypes", "selectableChartLineTypes", "selectableAxisTypes", "showTarget", "showRange", "showYellowRange", "showRedRange", "showChart", "showFormIfTemplateWasSelected", "showAdvancedChartOptions", "showErrorsImmediately"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
813
815
  }
814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorListItemComponent, decorators: [{
816
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorListItemComponent, decorators: [{
815
817
  type: Component,
816
818
  args: [{ selector: 'c8y-datapoint-selector-list-item', providers: [
817
819
  {
@@ -894,10 +896,10 @@ class IncludesDatapointPipe {
894
896
  tmp.series === datapoint.series &&
895
897
  tmp.__target?.id === datapoint.__target?.id);
896
898
  }
897
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IncludesDatapointPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
898
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: IncludesDatapointPipe, isStandalone: true, name: "includesDatapoint" }); }
899
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: IncludesDatapointPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
900
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: IncludesDatapointPipe, isStandalone: true, name: "includesDatapoint" }); }
899
901
  }
900
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IncludesDatapointPipe, decorators: [{
902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: IncludesDatapointPipe, decorators: [{
901
903
  type: Pipe,
902
904
  args: [{ name: 'includesDatapoint' }]
903
905
  }] });
@@ -921,10 +923,10 @@ class DatapointLabelPipe {
921
923
  }
922
924
  return label;
923
925
  }
924
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointLabelPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
925
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: DatapointLabelPipe, isStandalone: true, name: "datapointLabel" }); }
926
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLabelPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
927
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: DatapointLabelPipe, isStandalone: true, name: "datapointLabel" }); }
926
928
  }
927
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointLabelPipe, decorators: [{
929
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointLabelPipe, decorators: [{
928
930
  type: Pipe,
929
931
  args: [{ name: 'datapointLabel' }]
930
932
  }] });
@@ -1067,8 +1069,8 @@ class DatapointSelectorComponent {
1067
1069
  }
1068
1070
  return false;
1069
1071
  }
1070
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorComponent, deps: [{ token: DatapointLibraryService }], target: i0.ɵɵFactoryTarget.Component }); }
1071
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DatapointSelectorComponent, isStandalone: true, selector: "c8y-datapoint-selector", inputs: { contextAsset: "contextAsset", allowChangingContext: "allowChangingContext", allowDatapointsFromMultipleAssets: "allowDatapointsFromMultipleAssets", defaultActiveState: "defaultActiveState", ignoreDatapointTemplates: "ignoreDatapointTemplates", datapointTemplatesOnly: "datapointTemplatesOnly", guessDatapointUnit: "guessDatapointUnit", allowSearch: "allowSearch", hideSelection: "hideSelection", itemsEditable: "itemsEditable" }, providers: [
1072
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorComponent, deps: [{ token: DatapointLibraryService }], target: i0.ɵɵFactoryTarget.Component }); }
1073
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: DatapointSelectorComponent, isStandalone: true, selector: "c8y-datapoint-selector", inputs: { contextAsset: "contextAsset", allowChangingContext: "allowChangingContext", allowDatapointsFromMultipleAssets: "allowDatapointsFromMultipleAssets", defaultActiveState: "defaultActiveState", ignoreDatapointTemplates: "ignoreDatapointTemplates", datapointTemplatesOnly: "datapointTemplatesOnly", guessDatapointUnit: "guessDatapointUnit", allowSearch: "allowSearch", hideSelection: "hideSelection", itemsEditable: "itemsEditable" }, providers: [
1072
1074
  {
1073
1075
  provide: NG_VALUE_ACCESSOR,
1074
1076
  multi: true,
@@ -1076,7 +1078,7 @@ class DatapointSelectorComponent {
1076
1078
  }
1077
1079
  ], ngImport: i0, template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext && !hideSelection,\n 'grid__col--8-4--md': !allowChangingContext && !hideSelection,\n 'grid__col--4-8--md': allowChangingContext && hideSelection\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"selectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: true,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"emptyStateTitle | translate\"\n [subtitle]=\"'Select an asset from the list.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"selectorTitle | translate\"\n >\n {{ selectorTitle | translate }}\n </p>\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!loadingDatapoints\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Search\u2026\"\n type=\"search\"\n [ngModel]=\"searchString\"\n (ngModelChange)=\"searchStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!searchString; else clearSearchString\"\n ></i>\n <ng-template #clearSearchString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n (click)=\"searchStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n <ng-container *ngIf=\"filteredDatapoints$ | async as filteredDatapoints; else loadingData\">\n <ng-container *ngIf=\"!loadingDatapoints; else loadingData\">\n <ng-container *ngIf=\"datapoints$ | async as datapoints\">\n <div\n class=\"p-16\"\n *ngIf=\"!filteredDatapoints.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"emptyStateTitle | translate\"\n [subtitle]=\"\n datapoints.length\n ? (emptyStateSubtitleWhenNoMatchingDataPoints | translate)\n : (emptyStateSubtitleWhenNoDataPointsInAsset | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"\n datapoints.length > maxNumberOfDatapoints &&\n filteredDatapoints.length >= maxNumberOfDatapoints\n \"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{\n 'Due to the large number, only a subset of data points is displayed. Use search to narrow down the number of results.'\n | translate\n }}\n </div>\n </c8y-list-item>\n <c8y-datapoint-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"dp\"\n [isSelected]=\"selectedDatapoints | includesDatapoint: dp\"\n [datapointLibraryEntries]=\"datapointLibraryEntries\"\n [disableTypeaheadIfSelected]=\"true\"\n [addButtonType]=\"hideSelection ? AddButtonTypes.select : AddButtonTypes.addRemove\"\n (added)=\"datapointAdded($event)\"\n (removed)=\"datapointRemoved($event)\"\n [highlightText]=\"searchStringChanges$ | async\"\n *ngFor=\"let dp of filteredDatapoints; trackBy: trackByFn\"\n [editable]=\"itemsEditable\"\n ></c8y-datapoint-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <!-- last column -->\n <div\n class=\"inner-scroll bg-level-1\"\n *ngIf=\"!hideSelection\"\n >\n <p\n class=\"text-medium p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"selectedListTitle | translate\"\n >\n {{ selectedListTitle | translate }}\n </p>\n <div\n class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-t-8 p-b-16\"\n *ngIf=\"selectedDatapoints?.length\"\n >\n <div\n class=\"c8y-datapoint-pill\"\n *ngFor=\"let selectedDp of selectedDatapoints\"\n >\n <button\n class=\"c8y-datapoint-pill__btn\"\n [title]=\"'Remove' | translate\"\n type=\"button\"\n (click)=\"datapointRemoved(selectedDp)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedDp | datapointLabel: { doNotUseLabel: true, includeDevice: true }\"\n >\n <i\n class=\"m-r-4 icon-14\"\n c8yIcon=\"circle\"\n [style.color]=\"selectedDp.color\"\n ></i>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedDp | datapointLabel }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"selectedDp?.__target?.name\"\n >\n {{ selectedDp?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n <div\n class=\"p-r-8\"\n *ngIf=\"!selectedDatapoints || !selectedDatapoints.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"'c8y-data-points'\"\n [title]=\"emptyStateTitle | translate\"\n [subtitle]=\"\n 'Select the asset, then on the available data points list, click on the plus button on the desired data point.'\n | translate\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: DatapointSelectorListItemComponent, selector: "c8y-datapoint-selector-list-item", inputs: ["defaultFormOptions", "isSelected", "isCollapsed", "addButtonType", "editable", "showActiveToggle", "activeToggleDisabled", "showOptions", "datapointLibraryEntries", "actions", "optionToRemove", "hasUnlinkTemplateOption", "colorPickerDisabled", "disableTypeaheadIfSelected", "highlightText"], outputs: ["added", "removed"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: IncludesDatapointPipe, name: "includesDatapoint" }, { kind: "pipe", type: DatapointLabelPipe, name: "datapointLabel" }] }); }
1078
1080
  }
1079
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorComponent, decorators: [{
1081
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorComponent, decorators: [{
1080
1082
  type: Component,
1081
1083
  args: [{ selector: 'c8y-datapoint-selector', providers: [
1082
1084
  {
@@ -1171,10 +1173,10 @@ class DatapointSelectorModalComponent {
1171
1173
  const modalContainer = get(this.elementRef, 'nativeElement.parentElement.parentElement.parentElement');
1172
1174
  modalContainer.style.zIndex = '1060';
1173
1175
  }
1174
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorModalComponent, deps: [{ token: i1$1.BsModalRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
1175
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DatapointSelectorModalComponent, isStandalone: true, selector: "c8y-datapoint-selector-modal", ngImport: i0, template: "<div class=\"modal-header separator\">\n <h4 id=\"modal-title\" class=\"text-medium\">{{ title | translate }}</h4>\n</div>\n<div class=\"modal-inner-scroll modal-inner-scroll--fixed\" id=\"modal-body\">\n <c8y-datapoint-selector\n [contextAsset]=\"contextAsset\"\n [guessDatapointUnit]=\"guessDatapointUnit\"\n [allowDatapointsFromMultipleAssets]=\"allowDatapointsFromMultipleAssets\"\n [allowChangingContext]=\"allowChangingContext\"\n [defaultActiveState]=\"defaultActiveState\"\n [allowSearch]=\"allowSearch\"\n [hideSelection]=\"finishWithFirstSelection\"\n [ignoreDatapointTemplates]=\"ignoreDatapointTemplates\"\n [datapointTemplatesOnly]=\"datapointTemplatesOnly\"\n [itemsEditable]=\"itemsEditable\"\n [ngModel]=\"selectedDatapoints\"\n (ngModelChange)=\"selectionChange($event)\"\n ></c8y-datapoint-selector>\n</div>\n<div class=\"modal-footer\">\n <button\n type=\"button\"\n [title]=\"'Cancel' | translate\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n translate\n >\n Cancel\n </button>\n <button\n [title]=\"saveButtonLabel | translate\"\n class=\"btn btn-primary\"\n [disabled]=\"!selectedDatapoints?.length\"\n (click)=\"saveChanges()\"\n *ngIf=\"!finishWithFirstSelection\"\n >\n {{ saveButtonLabel | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "component", type: DatapointSelectorComponent, selector: "c8y-datapoint-selector", inputs: ["contextAsset", "allowChangingContext", "allowDatapointsFromMultipleAssets", "defaultActiveState", "ignoreDatapointTemplates", "datapointTemplatesOnly", "guessDatapointUnit", "allowSearch", "hideSelection", "itemsEditable"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1176
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorModalComponent, deps: [{ token: i1$1.BsModalRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
1177
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: DatapointSelectorModalComponent, isStandalone: true, selector: "c8y-datapoint-selector-modal", ngImport: i0, template: "<div class=\"modal-header separator\">\n <h4 id=\"modal-title\" class=\"text-medium\">{{ title | translate }}</h4>\n</div>\n<div class=\"modal-inner-scroll modal-inner-scroll--fixed\" id=\"modal-body\">\n <c8y-datapoint-selector\n [contextAsset]=\"contextAsset\"\n [guessDatapointUnit]=\"guessDatapointUnit\"\n [allowDatapointsFromMultipleAssets]=\"allowDatapointsFromMultipleAssets\"\n [allowChangingContext]=\"allowChangingContext\"\n [defaultActiveState]=\"defaultActiveState\"\n [allowSearch]=\"allowSearch\"\n [hideSelection]=\"finishWithFirstSelection\"\n [ignoreDatapointTemplates]=\"ignoreDatapointTemplates\"\n [datapointTemplatesOnly]=\"datapointTemplatesOnly\"\n [itemsEditable]=\"itemsEditable\"\n [ngModel]=\"selectedDatapoints\"\n (ngModelChange)=\"selectionChange($event)\"\n ></c8y-datapoint-selector>\n</div>\n<div class=\"modal-footer\">\n <button\n type=\"button\"\n [title]=\"'Cancel' | translate\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n translate\n >\n Cancel\n </button>\n <button\n [title]=\"saveButtonLabel | translate\"\n class=\"btn btn-primary\"\n [disabled]=\"!selectedDatapoints?.length\"\n (click)=\"saveChanges()\"\n *ngIf=\"!finishWithFirstSelection\"\n >\n {{ saveButtonLabel | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "component", type: DatapointSelectorComponent, selector: "c8y-datapoint-selector", inputs: ["contextAsset", "allowChangingContext", "allowDatapointsFromMultipleAssets", "defaultActiveState", "ignoreDatapointTemplates", "datapointTemplatesOnly", "guessDatapointUnit", "allowSearch", "hideSelection", "itemsEditable"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1176
1178
  }
1177
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorModalComponent, decorators: [{
1179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorModalComponent, decorators: [{
1178
1180
  type: Component,
1179
1181
  args: [{ selector: 'c8y-datapoint-selector-modal', imports: [DatapointSelectorComponent, FormsModule, C8yTranslateDirective, NgIf, C8yTranslatePipe], template: "<div class=\"modal-header separator\">\n <h4 id=\"modal-title\" class=\"text-medium\">{{ title | translate }}</h4>\n</div>\n<div class=\"modal-inner-scroll modal-inner-scroll--fixed\" id=\"modal-body\">\n <c8y-datapoint-selector\n [contextAsset]=\"contextAsset\"\n [guessDatapointUnit]=\"guessDatapointUnit\"\n [allowDatapointsFromMultipleAssets]=\"allowDatapointsFromMultipleAssets\"\n [allowChangingContext]=\"allowChangingContext\"\n [defaultActiveState]=\"defaultActiveState\"\n [allowSearch]=\"allowSearch\"\n [hideSelection]=\"finishWithFirstSelection\"\n [ignoreDatapointTemplates]=\"ignoreDatapointTemplates\"\n [datapointTemplatesOnly]=\"datapointTemplatesOnly\"\n [itemsEditable]=\"itemsEditable\"\n [ngModel]=\"selectedDatapoints\"\n (ngModelChange)=\"selectionChange($event)\"\n ></c8y-datapoint-selector>\n</div>\n<div class=\"modal-footer\">\n <button\n type=\"button\"\n [title]=\"'Cancel' | translate\"\n class=\"btn btn-default\"\n (click)=\"close()\"\n translate\n >\n Cancel\n </button>\n <button\n [title]=\"saveButtonLabel | translate\"\n class=\"btn btn-primary\"\n [disabled]=\"!selectedDatapoints?.length\"\n (click)=\"saveChanges()\"\n *ngIf=\"!finishWithFirstSelection\"\n >\n {{ saveButtonLabel | translate }}\n </button>\n</div>\n" }]
1180
1182
  }], ctorParameters: () => [{ type: i1$1.BsModalRef }, { type: i0.ElementRef }] });
@@ -1195,10 +1197,10 @@ class DatapointSelectorService {
1195
1197
  const content = modal.content;
1196
1198
  return content.result;
1197
1199
  }
1198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorService, deps: [{ token: i1$1.BsModalService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1199
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorService, providedIn: 'root' }); }
1200
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorService, deps: [{ token: i1$1.BsModalService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1201
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorService, providedIn: 'root' }); }
1200
1202
  }
1201
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorService, decorators: [{
1203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorService, decorators: [{
1202
1204
  type: Injectable,
1203
1205
  args: [{ providedIn: 'root' }]
1204
1206
  }], ctorParameters: () => [{ type: i1$1.BsModalService }] });
@@ -1222,8 +1224,12 @@ class DatapointSelectionListComponent {
1222
1224
  this.minActiveCount = 1;
1223
1225
  this.resolveContext = true;
1224
1226
  this.listTitle = '';
1227
+ this.removeTitle = false;
1225
1228
  this.maxActiveCountReached = false;
1226
1229
  this.AddButtonTypes = AddButtonTypes;
1230
+ this.minActiveErrorMessage = gettext('At least {{ minActive }} data point(s) must be selected and active.');
1231
+ this.maxActiveErrorMessage = gettext('At maximum {{ maxActive }} data point(s) can be selected and active.');
1232
+ this.DATA_POINTS_LABEL = gettext('Data points`display`');
1227
1233
  this.usedValidators = {};
1228
1234
  this.formArray = this.formBuilder.array([]);
1229
1235
  this.isValid = this.formArray.statusChanges.pipe(map(status => status === 'VALID'));
@@ -1234,20 +1240,7 @@ class DatapointSelectionListComponent {
1234
1240
  if (!changes.maxActiveCount && !changes.minActiveCount) {
1235
1241
  return;
1236
1242
  }
1237
- if (changes.maxActiveCount) {
1238
- this.usedValidators.maxActiveCount = C8yValidators.maxActiveCount(this.maxActiveCount);
1239
- }
1240
- if (changes.minActiveCount) {
1241
- this.usedValidators.minActiveCount = C8yValidators.minActiveCount(this.minActiveCount);
1242
- }
1243
- const validators = Object.values(this.usedValidators);
1244
- this.formArray.setValidators(validators);
1245
- }
1246
- registerOnTouched(fn) {
1247
- this.formArray.valueChanges.pipe(take(1)).subscribe(fn);
1248
- }
1249
- validate(_control) {
1250
- return this.formArray.valid ? null : { formInvalid: {} };
1243
+ this.updateValidators();
1251
1244
  }
1252
1245
  ngOnInit() {
1253
1246
  const context = this.widgetComponent?.context;
@@ -1255,13 +1248,26 @@ class DatapointSelectionListComponent {
1255
1248
  const { name, id, c8y_IsDevice } = context;
1256
1249
  this.config.contextAsset = { name, id, c8y_IsDevice };
1257
1250
  }
1251
+ this.updateValidators();
1258
1252
  }
1259
- writeValue(obj) {
1253
+ registerOnTouched(fn) {
1254
+ this.formArray.valueChanges.pipe(take(1)).subscribe(fn);
1255
+ }
1256
+ validate(_control) {
1257
+ if (this.formArray.valid) {
1258
+ return null;
1259
+ }
1260
+ return {
1261
+ formInvalid: {}, // keep for backwards compatibility
1262
+ ...(this.formArray.errors || {})
1263
+ };
1264
+ }
1265
+ writeValue(datapoints) {
1260
1266
  this.formArray.clear();
1261
- if (obj?.length) {
1262
- obj.forEach(val => {
1267
+ if (datapoints?.length) {
1268
+ datapoints.forEach(dp => {
1263
1269
  const formgroup = this.formBuilder.group({ details: [] });
1264
- formgroup.patchValue({ details: val });
1270
+ formgroup.patchValue({ details: dp });
1265
1271
  this.formArray.push(formgroup);
1266
1272
  });
1267
1273
  }
@@ -1295,6 +1301,9 @@ class DatapointSelectionListComponent {
1295
1301
  onItemRemoved(index) {
1296
1302
  this.formArray.removeAt(index);
1297
1303
  }
1304
+ get formGroups() {
1305
+ return this.formArray.controls;
1306
+ }
1298
1307
  drop(event) {
1299
1308
  const currentSorting = this.formArray.value;
1300
1309
  moveItemInArray(currentSorting, event.previousIndex, event.currentIndex);
@@ -1310,11 +1319,23 @@ class DatapointSelectionListComponent {
1310
1319
  if (this.maxActiveCount) {
1311
1320
  const currentlyActive = this.formArray.value.filter(tmp => tmp.details?.__active).length;
1312
1321
  this.maxActiveCountReached = currentlyActive >= this.maxActiveCount;
1322
+ return;
1313
1323
  }
1314
1324
  this.maxActiveCountReached = false;
1315
1325
  }
1316
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectionListComponent, deps: [{ token: DatapointSelectorService }, { token: DatapointLibraryService }, { token: i2.FormBuilder }, { token: i4.WidgetConfigComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1317
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: DatapointSelectionListComponent, isStandalone: true, selector: "c8y-datapoint-selection-list", inputs: { actions: "actions", allowDragAndDrop: "allowDragAndDrop", config: "config", defaultFormOptions: "defaultFormOptions", maxActiveCount: "maxActiveCount", minActiveCount: "minActiveCount", resolveContext: "resolveContext", listTitle: "listTitle" }, outputs: { isValid: "isValid", change: "change" }, providers: [
1326
+ updateValidators() {
1327
+ if (this.maxActiveCount !== undefined) {
1328
+ this.usedValidators.maxActiveCount = C8yValidators.maxActiveCount(this.maxActiveCount);
1329
+ }
1330
+ if (this.minActiveCount !== undefined) {
1331
+ this.usedValidators.minActiveCount = C8yValidators.minActiveCount(this.minActiveCount);
1332
+ }
1333
+ const validators = Object.values(this.usedValidators);
1334
+ this.formArray.setValidators(validators);
1335
+ this.formArray.updateValueAndValidity();
1336
+ }
1337
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectionListComponent, deps: [{ token: DatapointSelectorService }, { token: DatapointLibraryService }, { token: i2.FormBuilder }, { token: i4.WidgetConfigComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1338
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: DatapointSelectionListComponent, isStandalone: true, selector: "c8y-datapoint-selection-list", inputs: { actions: "actions", allowDragAndDrop: "allowDragAndDrop", config: "config", defaultFormOptions: "defaultFormOptions", maxActiveCount: "maxActiveCount", minActiveCount: "minActiveCount", resolveContext: "resolveContext", listTitle: "listTitle", removeTitle: "removeTitle" }, outputs: { isValid: "isValid", change: "change" }, providers: [
1318
1339
  {
1319
1340
  provide: NG_VALUE_ACCESSOR,
1320
1341
  multi: true,
@@ -1325,9 +1346,9 @@ class DatapointSelectionListComponent {
1325
1346
  useExisting: forwardRef(() => DatapointSelectionListComponent),
1326
1347
  multi: true
1327
1348
  }
1328
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"card-header separator sticky-top bg-inherit\">\n <span\n class=\"card-title h4\"\n *ngIf=\"listTitle\"\n >\n {{ listTitle | translate }}\n </span>\n <span\n class=\"card-title h4\"\n *ngIf=\"!listTitle\"\n >\n {{ 'Data points' | translate }}\n </span>\n</div>\n\n<c8y-list-group\n class=\"flex-grow ff-scroll-fix cdk-droplist\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"!allowDragAndDrop || formArray.controls?.length < 2\"\n>\n <div\n class=\"alert alert-warning m-t-8\"\n role=\"alert\"\n ngNonBindable\n *ngIf=\"formArray.errors?.minActiveCount\"\n translate\n [translateParams]=\"formArray.errors?.minActiveCount\"\n >\n At least {{ minActive }} active data points must be selected.\n </div>\n\n <div\n class=\"alert alert-warning m-t-8\"\n role=\"alert\"\n ngNonBindable\n *ngIf=\"formArray.errors?.maxActiveCount\"\n translate\n [translateParams]=\"formArray.errors?.maxActiveCount\"\n >\n At maximum {{ maxActive }} active data points are allowed to be selected.\n </div>\n\n <ng-content select=\".alert\"></ng-content>\n\n <div\n class=\"p-t-8\"\n *ngIf=\"!formArray.controls?.length\"\n >\n <c8y-ui-empty-state\n class=\"p-t-8\"\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add your first data point.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <div\n [formGroup]=\"dpForm\"\n *ngFor=\"let dpForm of formArray.controls; let index = index\"\n >\n <c8y-datapoint-selector-list-item\n class=\"d-block\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [activeToggleDisabled]=\"maxActiveCountReached\"\n [showActiveToggle]=\"true\"\n [addButtonType]=\"AddButtonTypes.none\"\n [showOptions]=\"true\"\n [editable]=\"true\"\n [colorPickerDisabled]=\"false\"\n [actions]=\"actions\"\n [optionToRemove]=\"true\"\n [datapointLibraryEntries]=\"datapointLibraryEntries\"\n [hasUnlinkTemplateOption]=\"true\"\n formControlName=\"details\"\n (removed)=\"onItemRemoved(index)\"\n cdkDrag\n >\n <c8y-li-drag-handle\n title=\"{{ 'Click and drag to reorder' | translate }}\"\n cdkDragHandle\n >\n <i c8yIcon=\"drag-reorder\"></i>\n </c8y-li-drag-handle>\n </c8y-datapoint-selector-list-item>\n </div>\n</c8y-list-group>\n\n<div class=\"card-footer bg-inherit\">\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n data-cy=\"c8y-datapoint-selection-list--add-datapoint-button\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ListGroupComponent, selector: "c8y-list-group" }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DatapointSelectorListItemComponent, selector: "c8y-datapoint-selector-list-item", inputs: ["defaultFormOptions", "isSelected", "isCollapsed", "addButtonType", "editable", "showActiveToggle", "activeToggleDisabled", "showOptions", "datapointLibraryEntries", "actions", "optionToRemove", "hasUnlinkTemplateOption", "colorPickerDisabled", "disableTypeaheadIfSelected", "highlightText"], outputs: ["added", "removed"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1349
+ ], usesOnChanges: true, ngImport: i0, template: "@if (!removeTitle) {\n <div class=\"card-header separator sticky-top bg-inherit\">\n <span class=\"card-title h4\">\n {{ (listTitle ? listTitle : DATA_POINTS_LABEL) | translate }}\n </span>\n </div>\n}\n\n<c8y-list-group\n class=\"flex-grow ff-scroll-fix cdk-droplist\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"!allowDragAndDrop || formArray.controls?.length < 2\"\n>\n @if (formArray.errors?.minActiveCount && formArray.touched) {\n <div\n class=\"alert alert-warning m-t-8\"\n role=\"alert\"\n >\n {{ minActiveErrorMessage | translate: { minActive: minActiveCount } }}\n </div>\n }\n\n @if (formArray.errors?.maxActiveCount && formArray.touched) {\n <div\n class=\"alert alert-warning m-t-8\"\n role=\"alert\"\n >\n {{ maxActiveErrorMessage | translate: { maxActive: maxActiveCount } }}\n </div>\n }\n\n <ng-content select=\".alert\"></ng-content>\n\n @if (!formArray.controls?.length) {\n <div class=\"p-t-8\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add your first data point.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n }\n\n @for (formGroup of formGroups; track formGroup; let index = $index) {\n <div [formGroup]=\"formGroup\">\n <c8y-datapoint-selector-list-item\n class=\"d-block\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [activeToggleDisabled]=\"maxActiveCountReached\"\n [showActiveToggle]=\"true\"\n [addButtonType]=\"AddButtonTypes.none\"\n [showOptions]=\"true\"\n [editable]=\"true\"\n [colorPickerDisabled]=\"false\"\n [actions]=\"actions\"\n [optionToRemove]=\"true\"\n [datapointLibraryEntries]=\"datapointLibraryEntries\"\n [hasUnlinkTemplateOption]=\"true\"\n formControlName=\"details\"\n (removed)=\"onItemRemoved(index)\"\n cdkDrag\n >\n <c8y-li-drag-handle\n title=\"{{ 'Click and drag to reorder' | translate }}\"\n cdkDragHandle\n >\n <i c8yIcon=\"drag-reorder\"></i>\n </c8y-li-drag-handle>\n </c8y-datapoint-selector-list-item>\n </div>\n }\n\n <div class=\"card-footer bg-inherit\">\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n data-cy=\"c8y-datapoint-selection-list--add-datapoint-button\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n </div>\n</c8y-list-group>\n", dependencies: [{ kind: "component", type: ListGroupComponent, selector: "c8y-list-group" }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: DatapointSelectorListItemComponent, selector: "c8y-datapoint-selector-list-item", inputs: ["defaultFormOptions", "isSelected", "isCollapsed", "addButtonType", "editable", "showActiveToggle", "activeToggleDisabled", "showOptions", "datapointLibraryEntries", "actions", "optionToRemove", "hasUnlinkTemplateOption", "colorPickerDisabled", "disableTypeaheadIfSelected", "highlightText"], outputs: ["added", "removed"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: ListItemDragHandleComponent, selector: "c8y-list-item-drag-handle, c8y-li-drag-handle" }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
1329
1350
  }
1330
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectionListComponent, decorators: [{
1351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectionListComponent, decorators: [{
1331
1352
  type: Component,
1332
1353
  args: [{ selector: 'c8y-datapoint-selection-list', providers: [
1333
1354
  {
@@ -1341,12 +1362,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1341
1362
  multi: true
1342
1363
  }
1343
1364
  ], imports: [
1344
- NgIf,
1345
1365
  ListGroupComponent,
1346
1366
  CdkDropList,
1347
- C8yTranslateDirective,
1348
1367
  EmptyStateComponent,
1349
- NgFor,
1350
1368
  FormsModule,
1351
1369
  ReactiveFormsModule,
1352
1370
  DatapointSelectorListItemComponent,
@@ -1355,7 +1373,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1355
1373
  CdkDragHandle,
1356
1374
  IconDirective,
1357
1375
  C8yTranslatePipe
1358
- ], template: "<div class=\"card-header separator sticky-top bg-inherit\">\n <span\n class=\"card-title h4\"\n *ngIf=\"listTitle\"\n >\n {{ listTitle | translate }}\n </span>\n <span\n class=\"card-title h4\"\n *ngIf=\"!listTitle\"\n >\n {{ 'Data points' | translate }}\n </span>\n</div>\n\n<c8y-list-group\n class=\"flex-grow ff-scroll-fix cdk-droplist\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"!allowDragAndDrop || formArray.controls?.length < 2\"\n>\n <div\n class=\"alert alert-warning m-t-8\"\n role=\"alert\"\n ngNonBindable\n *ngIf=\"formArray.errors?.minActiveCount\"\n translate\n [translateParams]=\"formArray.errors?.minActiveCount\"\n >\n At least {{ minActive }} active data points must be selected.\n </div>\n\n <div\n class=\"alert alert-warning m-t-8\"\n role=\"alert\"\n ngNonBindable\n *ngIf=\"formArray.errors?.maxActiveCount\"\n translate\n [translateParams]=\"formArray.errors?.maxActiveCount\"\n >\n At maximum {{ maxActive }} active data points are allowed to be selected.\n </div>\n\n <ng-content select=\".alert\"></ng-content>\n\n <div\n class=\"p-t-8\"\n *ngIf=\"!formArray.controls?.length\"\n >\n <c8y-ui-empty-state\n class=\"p-t-8\"\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add your first data point.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n <div\n [formGroup]=\"dpForm\"\n *ngFor=\"let dpForm of formArray.controls; let index = index\"\n >\n <c8y-datapoint-selector-list-item\n class=\"d-block\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [activeToggleDisabled]=\"maxActiveCountReached\"\n [showActiveToggle]=\"true\"\n [addButtonType]=\"AddButtonTypes.none\"\n [showOptions]=\"true\"\n [editable]=\"true\"\n [colorPickerDisabled]=\"false\"\n [actions]=\"actions\"\n [optionToRemove]=\"true\"\n [datapointLibraryEntries]=\"datapointLibraryEntries\"\n [hasUnlinkTemplateOption]=\"true\"\n formControlName=\"details\"\n (removed)=\"onItemRemoved(index)\"\n cdkDrag\n >\n <c8y-li-drag-handle\n title=\"{{ 'Click and drag to reorder' | translate }}\"\n cdkDragHandle\n >\n <i c8yIcon=\"drag-reorder\"></i>\n </c8y-li-drag-handle>\n </c8y-datapoint-selector-list-item>\n </div>\n</c8y-list-group>\n\n<div class=\"card-footer bg-inherit\">\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n data-cy=\"c8y-datapoint-selection-list--add-datapoint-button\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n</div>\n" }]
1376
+ ], template: "@if (!removeTitle) {\n <div class=\"card-header separator sticky-top bg-inherit\">\n <span class=\"card-title h4\">\n {{ (listTitle ? listTitle : DATA_POINTS_LABEL) | translate }}\n </span>\n </div>\n}\n\n<c8y-list-group\n class=\"flex-grow ff-scroll-fix cdk-droplist\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"!allowDragAndDrop || formArray.controls?.length < 2\"\n>\n @if (formArray.errors?.minActiveCount && formArray.touched) {\n <div\n class=\"alert alert-warning m-t-8\"\n role=\"alert\"\n >\n {{ minActiveErrorMessage | translate: { minActive: minActiveCount } }}\n </div>\n }\n\n @if (formArray.errors?.maxActiveCount && formArray.touched) {\n <div\n class=\"alert alert-warning m-t-8\"\n role=\"alert\"\n >\n {{ maxActiveErrorMessage | translate: { maxActive: maxActiveCount } }}\n </div>\n }\n\n <ng-content select=\".alert\"></ng-content>\n\n @if (!formArray.controls?.length) {\n <div class=\"p-t-8\">\n <c8y-ui-empty-state\n class=\"p-t-8\"\n [icon]=\"'c8y-data-points'\"\n [title]=\"'No data points to display.' | translate\"\n [subtitle]=\"'Add your first data point.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n }\n\n @for (formGroup of formGroups; track formGroup; let index = $index) {\n <div [formGroup]=\"formGroup\">\n <c8y-datapoint-selector-list-item\n class=\"d-block\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [activeToggleDisabled]=\"maxActiveCountReached\"\n [showActiveToggle]=\"true\"\n [addButtonType]=\"AddButtonTypes.none\"\n [showOptions]=\"true\"\n [editable]=\"true\"\n [colorPickerDisabled]=\"false\"\n [actions]=\"actions\"\n [optionToRemove]=\"true\"\n [datapointLibraryEntries]=\"datapointLibraryEntries\"\n [hasUnlinkTemplateOption]=\"true\"\n formControlName=\"details\"\n (removed)=\"onItemRemoved(index)\"\n cdkDrag\n >\n <c8y-li-drag-handle\n title=\"{{ 'Click and drag to reorder' | translate }}\"\n cdkDragHandle\n >\n <i c8yIcon=\"drag-reorder\"></i>\n </c8y-li-drag-handle>\n </c8y-datapoint-selector-list-item>\n </div>\n }\n\n <div class=\"card-footer bg-inherit\">\n <button\n class=\"btn btn-default btn-sm\"\n [title]=\"'Add data point' | translate\"\n type=\"button\"\n data-cy=\"c8y-datapoint-selection-list--add-datapoint-button\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Add data point' | translate }}\n </button>\n </div>\n</c8y-list-group>\n" }]
1359
1377
  }], ctorParameters: () => [{ type: DatapointSelectorService }, { type: DatapointLibraryService }, { type: i2.FormBuilder }, { type: i4.WidgetConfigComponent, decorators: [{
1360
1378
  type: Optional
1361
1379
  }] }], propDecorators: { actions: [{
@@ -1374,6 +1392,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1374
1392
  type: Input
1375
1393
  }], listTitle: [{
1376
1394
  type: Input
1395
+ }], removeTitle: [{
1396
+ type: Input
1377
1397
  }], isValid: [{
1378
1398
  type: Output
1379
1399
  }], change: [{
@@ -1403,17 +1423,17 @@ class FilterDatapointsPipe {
1403
1423
  }
1404
1424
  return false;
1405
1425
  }
1406
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FilterDatapointsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1407
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: FilterDatapointsPipe, isStandalone: true, name: "filterDatapoints" }); }
1426
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: FilterDatapointsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
1427
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: FilterDatapointsPipe, isStandalone: true, name: "filterDatapoints" }); }
1408
1428
  }
1409
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FilterDatapointsPipe, decorators: [{
1429
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: FilterDatapointsPipe, decorators: [{
1410
1430
  type: Pipe,
1411
1431
  args: [{ name: 'filterDatapoints' }]
1412
1432
  }] });
1413
1433
 
1414
1434
  class DatapointSelectorModule {
1415
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1416
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorModule, imports: [AssetSelectorModule,
1435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1436
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorModule, imports: [AssetSelectorModule,
1417
1437
  CollapseModule,
1418
1438
  CoreModule,
1419
1439
  BsDropdownModule,
@@ -1437,7 +1457,7 @@ class DatapointSelectorModule {
1437
1457
  IncludesDatapointPipe,
1438
1458
  DatapointLabelPipe,
1439
1459
  DatapointAttributesFormComponent] }); }
1440
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorModule, imports: [AssetSelectorModule,
1460
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorModule, imports: [AssetSelectorModule,
1441
1461
  CollapseModule,
1442
1462
  CoreModule,
1443
1463
  BsDropdownModule,
@@ -1451,7 +1471,7 @@ class DatapointSelectorModule {
1451
1471
  DatapointSelectionListComponent,
1452
1472
  DatapointAttributesFormComponent] }); }
1453
1473
  }
1454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DatapointSelectorModule, decorators: [{
1474
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DatapointSelectorModule, decorators: [{
1455
1475
  type: NgModule,
1456
1476
  args: [{
1457
1477
  imports: [
@@ -1486,9 +1506,156 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
1486
1506
  }]
1487
1507
  }] });
1488
1508
 
1509
+ /**
1510
+ * A configuration component for selecting and managing datapoints in the widget config section.
1511
+ */
1512
+ class WidgetDatapointsSelectorComponent {
1513
+ constructor() {
1514
+ /**
1515
+ * Minimum number of active datapoints required in the list.
1516
+ */
1517
+ this.minActiveCount = 1;
1518
+ /**
1519
+ * When true, adds an info validation error if selected active datapoints
1520
+ * have different units.
1521
+ */
1522
+ this.showDifferentUnitsAlert = false;
1523
+ /**
1524
+ * The title displayed above the datapoint selection list.
1525
+ *
1526
+ * When set, this title appears as a header for the datapoint list section.
1527
+ */
1528
+ this.listTitle = '';
1529
+ /**
1530
+ * Configuration options for the datapoint attributes form.
1531
+ */
1532
+ this.defaultFormOptions = {};
1533
+ /**
1534
+ * Configuration options for the datapoint selector modal.
1535
+ *
1536
+ * These options customize the behavior and appearance of the modal
1537
+ * dialog used for selecting datapoints.
1538
+ */
1539
+ this.config = {};
1540
+ /**
1541
+ * The name of the control in the widget configuration where
1542
+ * the selected datapoints will be stored.
1543
+ *
1544
+ * This corresponds to a property name in the widget's configuration object.
1545
+ */
1546
+ this.controlName = 'datapoints';
1547
+ /**
1548
+ * Whether to hide the title section of the datapoint selection list.
1549
+ *
1550
+ * When set to `true`, the title header will not be rendered.
1551
+ */
1552
+ this.removeTitle = true;
1553
+ /**
1554
+ * Whether to read `showAdvancedChartOptions` from the widget config
1555
+ * and merge it into `defaultFormOptions`.
1556
+ *
1557
+ * When set to `true`, the component will subscribe to `currentConfig$`
1558
+ * and apply the `showAdvancedChartOptions` flag.
1559
+ * Defaults to `false`.
1560
+ */
1561
+ this.useAdvancedChartOptions = false;
1562
+ this.datapoints = [];
1563
+ this.differentUnits = false;
1564
+ this.differentUnitsMessageError = gettext('Selected data points have different units.');
1565
+ this.widgetConfigService = inject(WidgetConfigService);
1566
+ this.widgetComponent = inject(WidgetConfigComponent, { optional: true });
1567
+ this.dashboardContextComponent = inject(ContextDashboardComponent, {
1568
+ optional: true
1569
+ });
1570
+ this.destroyRef = inject(DestroyRef);
1571
+ }
1572
+ ngOnInit() {
1573
+ this.datapoints = this.getDatapointsFromWidgetConfig();
1574
+ this.checkUnitsMatch(this.datapoints);
1575
+ if (this.useAdvancedChartOptions) {
1576
+ this.widgetConfigService.currentConfig$
1577
+ .pipe(takeUntilDestroyed(this.destroyRef))
1578
+ .subscribe(({ showAdvancedChartOptions }) => (this.defaultFormOptions = { ...this.defaultFormOptions, showAdvancedChartOptions }));
1579
+ }
1580
+ }
1581
+ onDatapointsChange(datapoints) {
1582
+ this.widgetConfigService.updateConfig({ [this.controlName]: datapoints || [] });
1583
+ this.checkUnitsMatch(datapoints);
1584
+ }
1585
+ getDatapointsFromWidgetConfig() {
1586
+ const datapoints = this.widgetConfigService.currentConfig?.[this.controlName];
1587
+ if (!datapoints) {
1588
+ return [];
1589
+ }
1590
+ datapoints.forEach(dp => this.assignContextFromContextDashboard(dp));
1591
+ return datapoints;
1592
+ }
1593
+ assignContextFromContextDashboard(datapoint) {
1594
+ if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {
1595
+ return;
1596
+ }
1597
+ const context = this.widgetComponent?.context;
1598
+ if (context?.id) {
1599
+ const { name, id } = context;
1600
+ datapoint.__target = { name, id };
1601
+ this.config.contextAsset = { id };
1602
+ }
1603
+ }
1604
+ /**
1605
+ * Checks if selected datapoints have different units and sets warning flag.
1606
+ * Different units in a pie chart can be misleading to users.
1607
+ *
1608
+ * @param datapoints - Array of selected datapoints to check
1609
+ */
1610
+ checkUnitsMatch(datapoints) {
1611
+ if (!datapoints || datapoints.length <= 1) {
1612
+ this.differentUnits = false;
1613
+ return;
1614
+ }
1615
+ const units = datapoints.filter(dp => dp && dp.unit).map(dp => dp.unit);
1616
+ if (units.length <= 1) {
1617
+ this.differentUnits = false;
1618
+ return;
1619
+ }
1620
+ const firstUnit = units[0];
1621
+ this.differentUnits = units.some(unit => unit !== firstUnit);
1622
+ }
1623
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WidgetDatapointsSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1624
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: WidgetDatapointsSelectorComponent, isStandalone: true, selector: "c8y-widget-datapoints-selector", inputs: { minActiveCount: "minActiveCount", maxActiveCount: "maxActiveCount", showDifferentUnitsAlert: "showDifferentUnitsAlert", listTitle: "listTitle", defaultFormOptions: "defaultFormOptions", config: "config", controlName: "controlName", removeTitle: "removeTitle", useAdvancedChartOptions: "useAdvancedChartOptions" }, host: { classAttribute: "bg-level-1" }, ngImport: i0, template: "@let hasDifferentUnits = showDifferentUnitsAlert && differentUnits;\n\n<c8y-datapoint-selection-list\n class=\"bg-inherit\"\n [removeTitle]=\"removeTitle\"\n [listTitle]=\"listTitle\"\n [name]=\"controlName\"\n [config]=\"config\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [minActiveCount]=\"minActiveCount\"\n [maxActiveCount]=\"maxActiveCount\"\n [(ngModel)]=\"datapoints\"\n (ngModelChange)=\"onDatapointsChange($event)\"\n #dpSelection\n #dpModel=\"ngModel\"\n>\n @if (hasDifferentUnits) {\n <div\n class=\"alert alert-info m-t-8\"\n role=\"alert\"\n >\n {{ differentUnitsMessageError | translate }}\n </div>\n }\n</c8y-datapoint-selection-list>\n\n<c8y-widget-config-feedback>\n @let minActiveError = dpModel?.errors?.minActiveCount;\n @let maxActiveError = dpModel?.errors?.maxActiveCount;\n\n @if ((minActiveError || maxActiveError) && dpModel.touched) {\n <button\n class=\"btn-clean\"\n [tooltip]=\"\n minActiveError\n ? (dpSelection.minActiveErrorMessage | translate: { minActive: minActiveCount })\n : maxActiveError\n ? (dpSelection.maxActiveErrorMessage | translate: { maxActive: maxActiveCount })\n : null\n \"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n class=\"status major\"\n [c8yIcon]=\"'warning'\"\n ></i>\n </button>\n }\n\n @if (hasDifferentUnits) {\n <button\n class=\"btn-clean\"\n [tooltip]=\"differentUnitsMessageError | translate\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n class=\"alert-info\"\n [c8yIcon]=\"'info'\"\n ></i>\n </button>\n }\n</c8y-widget-config-feedback>\n", dependencies: [{ kind: "component", type: DatapointSelectionListComponent, selector: "c8y-datapoint-selection-list", inputs: ["actions", "allowDragAndDrop", "config", "defaultFormOptions", "maxActiveCount", "minActiveCount", "resolveContext", "listTitle", "removeTitle"], outputs: ["isValid", "change"] }, { kind: "directive", type: 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: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "ngmodule", type: FormsModule$1 }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: WidgetConfigFeedbackComponent, selector: "c8y-widget-config-feedback" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
1625
+ }
1626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WidgetDatapointsSelectorComponent, decorators: [{
1627
+ type: Component,
1628
+ args: [{ selector: 'c8y-widget-datapoints-selector', host: { class: 'bg-level-1' }, standalone: true, imports: [
1629
+ DatapointSelectionListComponent,
1630
+ C8yTranslatePipe,
1631
+ TooltipDirective,
1632
+ IconDirective,
1633
+ FormsModule$1,
1634
+ WidgetConfigFeedbackComponent
1635
+ ], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "@let hasDifferentUnits = showDifferentUnitsAlert && differentUnits;\n\n<c8y-datapoint-selection-list\n class=\"bg-inherit\"\n [removeTitle]=\"removeTitle\"\n [listTitle]=\"listTitle\"\n [name]=\"controlName\"\n [config]=\"config\"\n [defaultFormOptions]=\"defaultFormOptions\"\n [minActiveCount]=\"minActiveCount\"\n [maxActiveCount]=\"maxActiveCount\"\n [(ngModel)]=\"datapoints\"\n (ngModelChange)=\"onDatapointsChange($event)\"\n #dpSelection\n #dpModel=\"ngModel\"\n>\n @if (hasDifferentUnits) {\n <div\n class=\"alert alert-info m-t-8\"\n role=\"alert\"\n >\n {{ differentUnitsMessageError | translate }}\n </div>\n }\n</c8y-datapoint-selection-list>\n\n<c8y-widget-config-feedback>\n @let minActiveError = dpModel?.errors?.minActiveCount;\n @let maxActiveError = dpModel?.errors?.maxActiveCount;\n\n @if ((minActiveError || maxActiveError) && dpModel.touched) {\n <button\n class=\"btn-clean\"\n [tooltip]=\"\n minActiveError\n ? (dpSelection.minActiveErrorMessage | translate: { minActive: minActiveCount })\n : maxActiveError\n ? (dpSelection.maxActiveErrorMessage | translate: { maxActive: maxActiveCount })\n : null\n \"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n class=\"status major\"\n [c8yIcon]=\"'warning'\"\n ></i>\n </button>\n }\n\n @if (hasDifferentUnits) {\n <button\n class=\"btn-clean\"\n [tooltip]=\"differentUnitsMessageError | translate\"\n type=\"button\"\n [delay]=\"500\"\n >\n <i\n class=\"alert-info\"\n [c8yIcon]=\"'info'\"\n ></i>\n </button>\n }\n</c8y-widget-config-feedback>\n" }]
1636
+ }], propDecorators: { minActiveCount: [{
1637
+ type: Input
1638
+ }], maxActiveCount: [{
1639
+ type: Input
1640
+ }], showDifferentUnitsAlert: [{
1641
+ type: Input
1642
+ }], listTitle: [{
1643
+ type: Input
1644
+ }], defaultFormOptions: [{
1645
+ type: Input
1646
+ }], config: [{
1647
+ type: Input
1648
+ }], controlName: [{
1649
+ type: Input
1650
+ }], removeTitle: [{
1651
+ type: Input
1652
+ }], useAdvancedChartOptions: [{
1653
+ type: Input
1654
+ }] } });
1655
+
1489
1656
  /**
1490
1657
  * Generated bundle index. Do not edit.
1491
1658
  */
1492
1659
 
1493
- export { AXIS_TYPES, AddButtonTypes, CHART_LINE_TYPES, CHART_RENDER_TYPES, DATAPOINT_LIBRARY_FRAGMENT, DatapointAttributesFormComponent, DatapointAttributesFormValidationService, DatapointLabelPipe, DatapointLibraryService, DatapointSelectionListComponent, DatapointSelectorComponent, DatapointSelectorListItemComponent, DatapointSelectorModalComponent, DatapointSelectorModule, DatapointSelectorService, DatapointTemplatePopoverComponent, IncludesDatapointPipe };
1660
+ export { AXIS_TYPES, AddButtonTypes, CHART_LINE_TYPES, CHART_RENDER_TYPES, DATAPOINT_LIBRARY_FRAGMENT, DatapointAttributesFormComponent, DatapointAttributesFormValidationService, DatapointLabelPipe, DatapointLibraryService, DatapointSelectionListComponent, DatapointSelectorComponent, DatapointSelectorListItemComponent, DatapointSelectorModalComponent, DatapointSelectorModule, DatapointSelectorService, DatapointTemplatePopoverComponent, IncludesDatapointPipe, WidgetDatapointsSelectorComponent };
1494
1661
  //# sourceMappingURL=c8y-ngx-components-datapoint-selector.mjs.map