@c8y/ngx-components 1023.88.1 → 1023.88.4

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 (230) hide show
  1. package/ai/agent-chat/index.d.ts.map +1 -1
  2. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +16 -16
  3. package/fesm2022/c8y-ngx-components-advanced-software-management.mjs +7 -7
  4. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs +23 -13
  5. package/fesm2022/c8y-ngx-components-ai-agent-chat.mjs.map +1 -1
  6. package/fesm2022/c8y-ngx-components-ai-ai-chat.mjs +24 -24
  7. package/fesm2022/c8y-ngx-components-ai.mjs +3 -3
  8. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +40 -40
  9. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +4 -4
  10. package/fesm2022/c8y-ngx-components-alarms.mjs +76 -76
  11. package/fesm2022/c8y-ngx-components-api.mjs +7 -7
  12. package/fesm2022/c8y-ngx-components-app-logs.mjs +10 -10
  13. package/fesm2022/c8y-ngx-components-application-access-list.mjs +12 -12
  14. package/fesm2022/c8y-ngx-components-application-access-user-application-access-user-details-wrapper.mjs +3 -3
  15. package/fesm2022/c8y-ngx-components-asset-properties.mjs +48 -48
  16. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-BJOPTjF1.mjs → c8y-ngx-components-asset-property-grid.component-DsfLvryd.mjs} +13 -13
  17. package/fesm2022/{c8y-ngx-components-asset-property-grid.component-BJOPTjF1.mjs.map → c8y-ngx-components-asset-property-grid.component-DsfLvryd.mjs.map} +1 -1
  18. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +32 -32
  19. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +120 -120
  20. package/fesm2022/c8y-ngx-components-binary-file-download.mjs +7 -7
  21. package/fesm2022/c8y-ngx-components-bookmarks.mjs +13 -13
  22. package/fesm2022/c8y-ngx-components-branding-base-branding.mjs +4 -4
  23. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +7 -7
  24. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +7 -7
  25. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor-lazy.mjs +3 -3
  26. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +7 -7
  27. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +17 -17
  28. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-branding-shared-lazy-add-branding-modal.mjs +6 -6
  30. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +36 -36
  31. package/fesm2022/c8y-ngx-components-branding-shared.mjs +13 -13
  32. package/fesm2022/c8y-ngx-components-child-devices.mjs +13 -13
  33. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +40 -40
  34. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-tP8yUdy3.mjs → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Zygcid6r.mjs} +4 -4
  35. package/fesm2022/{c8y-ngx-components-computed-asset-properties-alarm-count-config.component-tP8yUdy3.mjs.map → c8y-ngx-components-computed-asset-properties-alarm-count-config.component-Zygcid6r.mjs.map} +1 -1
  36. package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-wNQ45CJ1.mjs → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-Cy9R6Ixb.mjs} +11 -11
  37. package/fesm2022/{c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-wNQ45CJ1.mjs.map → c8y-ngx-components-computed-asset-properties-c8y-ngx-components-computed-asset-properties-Cy9R6Ixb.mjs.map} +1 -1
  38. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-BrYcCHYL.mjs → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-Dz3efcEU.mjs} +4 -4
  39. package/fesm2022/{c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-BrYcCHYL.mjs.map → c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-Dz3efcEU.mjs.map} +1 -1
  40. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-BBKuA2rZ.mjs → c8y-ngx-components-computed-asset-properties-event-count-config.component-DzAGrG1d.mjs} +4 -4
  41. package/fesm2022/{c8y-ngx-components-computed-asset-properties-event-count-config.component-BBKuA2rZ.mjs.map → c8y-ngx-components-computed-asset-properties-event-count-config.component-DzAGrG1d.mjs.map} +1 -1
  42. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-uEdtPWC0.mjs → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-LrmlAh6V.mjs} +5 -5
  43. package/fesm2022/{c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-uEdtPWC0.mjs.map → c8y-ngx-components-computed-asset-properties-fieldbus-item-status-config.component-LrmlAh6V.mjs.map} +1 -1
  44. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BGhex-OP.mjs → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-f1u1TcCl.mjs} +5 -5
  45. package/fesm2022/{c8y-ngx-components-computed-asset-properties-last-measurement-config.component-BGhex-OP.mjs.map → c8y-ngx-components-computed-asset-properties-last-measurement-config.component-f1u1TcCl.mjs.map} +1 -1
  46. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +1 -1
  47. package/fesm2022/c8y-ngx-components-connectivity.mjs +53 -53
  48. package/fesm2022/c8y-ngx-components-context-dashboard-asset-add.mjs +10 -10
  49. package/fesm2022/c8y-ngx-components-context-dashboard-asset-view.mjs +7 -7
  50. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +11 -11
  51. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BkwPfkeK.mjs → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DxpivVU5.mjs} +4 -4
  52. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-BkwPfkeK.mjs.map → c8y-ngx-components-context-dashboard-dashboard-appearance-settings.component-DxpivVU5.mjs.map} +1 -1
  53. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-4aO0U4qs.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-2HrOH9-8.mjs} +10 -10
  54. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-4aO0U4qs.mjs.map → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-2HrOH9-8.mjs.map} +1 -1
  55. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-1xx4pGiq.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-Cqy2OUcS.mjs} +4 -4
  56. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-1xx4pGiq.mjs.map → c8y-ngx-components-context-dashboard-dashboard-version-history.component-Cqy2OUcS.mjs.map} +1 -1
  57. package/fesm2022/c8y-ngx-components-context-dashboard-device-add.mjs +10 -10
  58. package/fesm2022/c8y-ngx-components-context-dashboard-device-view.mjs +7 -7
  59. package/fesm2022/c8y-ngx-components-context-dashboard-devicemanagement.mjs +3 -3
  60. package/fesm2022/c8y-ngx-components-context-dashboard-state.mjs +3 -3
  61. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +108 -108
  62. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-C8QX6xlf.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-L0Ns8oOr.mjs} +16 -16
  63. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-C8QX6xlf.mjs.map → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-L0Ns8oOr.mjs.map} +1 -1
  64. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +12 -12
  65. package/fesm2022/c8y-ngx-components-dashboard-manager-devicemanagement.mjs +6 -6
  66. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +22 -22
  67. package/fesm2022/c8y-ngx-components-data-broker.mjs +7 -7
  68. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +3 -3
  69. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +3 -3
  70. package/fesm2022/c8y-ngx-components-data-preparation.mjs +7 -7
  71. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +24 -24
  72. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +13 -13
  73. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -3
  74. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +3 -3
  75. package/fesm2022/c8y-ngx-components-datapoint-library-services.mjs +3 -3
  76. package/fesm2022/c8y-ngx-components-datapoint-library.mjs +4 -4
  77. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +43 -43
  78. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +36 -36
  79. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +16 -16
  80. package/fesm2022/c8y-ngx-components-device-enrolment-modal.mjs +9 -9
  81. package/fesm2022/c8y-ngx-components-device-enrolment.mjs +6 -6
  82. package/fesm2022/c8y-ngx-components-device-grid.mjs +43 -43
  83. package/fesm2022/c8y-ngx-components-device-list.mjs +22 -22
  84. package/fesm2022/c8y-ngx-components-device-map.mjs +12 -12
  85. package/fesm2022/c8y-ngx-components-device-profile.mjs +34 -34
  86. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -3
  87. package/fesm2022/c8y-ngx-components-device-protocols.mjs +16 -16
  88. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +13 -13
  89. package/fesm2022/c8y-ngx-components-device-shell.mjs +31 -31
  90. package/fesm2022/c8y-ngx-components-diagnostics.mjs +13 -13
  91. package/fesm2022/c8y-ngx-components-echart.mjs +30 -30
  92. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +43 -43
  93. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +7 -7
  94. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +10 -10
  95. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +7 -7
  96. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +46 -46
  97. package/fesm2022/c8y-ngx-components-ecosystem.mjs +82 -82
  98. package/fesm2022/c8y-ngx-components-editor.mjs +6 -6
  99. package/fesm2022/c8y-ngx-components-events-events-timeline.mjs +3 -3
  100. package/fesm2022/c8y-ngx-components-events.mjs +33 -33
  101. package/fesm2022/c8y-ngx-components-exports-list.mjs +6 -6
  102. package/fesm2022/c8y-ngx-components-feature-toggles-list.mjs +6 -6
  103. package/fesm2022/c8y-ngx-components-file-preview.mjs +7 -7
  104. package/fesm2022/c8y-ngx-components-files-repository.mjs +19 -19
  105. package/fesm2022/c8y-ngx-components-global-context.mjs +130 -130
  106. package/fesm2022/c8y-ngx-components-group-breadcrumbs.mjs +6 -6
  107. package/fesm2022/c8y-ngx-components-icon-selector.mjs +19 -19
  108. package/fesm2022/c8y-ngx-components-interval-picker.mjs +3 -3
  109. package/fesm2022/c8y-ngx-components-location.mjs +28 -28
  110. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +16 -16
  111. package/fesm2022/c8y-ngx-components-map.mjs +19 -19
  112. package/fesm2022/c8y-ngx-components-messaging-management.mjs +55 -55
  113. package/fesm2022/c8y-ngx-components-operation-picker.mjs +9 -9
  114. package/fesm2022/c8y-ngx-components-operations-bulk-operation-from-single.mjs +7 -7
  115. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +19 -19
  116. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -7
  117. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +13 -13
  118. package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +13 -13
  119. package/fesm2022/c8y-ngx-components-operations-bulk-operations-service.mjs +7 -7
  120. package/fesm2022/c8y-ngx-components-operations-bulk-operations-stepper-container.mjs +7 -7
  121. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +3 -3
  122. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +7 -7
  123. package/fesm2022/c8y-ngx-components-operations-device-selector.mjs +7 -7
  124. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +12 -12
  125. package/fesm2022/c8y-ngx-components-operations-operation-details.mjs +13 -13
  126. package/fesm2022/c8y-ngx-components-operations-operation-summary.mjs +7 -7
  127. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +10 -10
  128. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +12 -12
  129. package/fesm2022/c8y-ngx-components-operations-operations-timeline.mjs +7 -7
  130. package/fesm2022/c8y-ngx-components-operations-shared.mjs +10 -10
  131. package/fesm2022/c8y-ngx-components-operations-status-filter.mjs +7 -7
  132. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +7 -7
  133. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +13 -13
  134. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +13 -13
  135. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +13 -13
  136. package/fesm2022/c8y-ngx-components-operations-stepper-frames.mjs +13 -13
  137. package/fesm2022/c8y-ngx-components-operations.mjs +7 -7
  138. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +7 -7
  139. package/fesm2022/c8y-ngx-components-platform-configuration.mjs +10 -10
  140. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +38 -38
  141. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +58 -58
  142. package/fesm2022/c8y-ngx-components-register-device.mjs +58 -58
  143. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +9 -9
  144. package/fesm2022/c8y-ngx-components-remote-access-data.mjs +3 -3
  145. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +3 -3
  146. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +6 -6
  147. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +3 -3
  148. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +3 -3
  149. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +3 -3
  150. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +3 -3
  151. package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +3 -3
  152. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +6 -6
  153. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +3 -3
  154. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +6 -6
  155. package/fesm2022/c8y-ngx-components-replace-device.mjs +10 -10
  156. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +16 -16
  157. package/fesm2022/c8y-ngx-components-reports.mjs +19 -19
  158. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +48 -48
  159. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +33 -33
  160. package/fesm2022/c8y-ngx-components-repository-shared.mjs +34 -34
  161. package/fesm2022/c8y-ngx-components-repository-software.mjs +42 -42
  162. package/fesm2022/c8y-ngx-components-repository.mjs +4 -4
  163. package/fesm2022/c8y-ngx-components-search.mjs +19 -19
  164. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +6 -6
  165. package/fesm2022/c8y-ngx-components-sensor-phone.mjs +7 -7
  166. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +3 -3
  167. package/fesm2022/c8y-ngx-components-services-shared.mjs +3 -3
  168. package/fesm2022/c8y-ngx-components-services.mjs +29 -29
  169. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +16 -16
  170. package/fesm2022/c8y-ngx-components-sms-gateway.mjs +7 -7
  171. package/fesm2022/c8y-ngx-components-static-assets-data.mjs +6 -8
  172. package/fesm2022/c8y-ngx-components-static-assets-data.mjs.map +1 -1
  173. package/fesm2022/c8y-ngx-components-static-assets-modal.mjs +9 -9
  174. package/fesm2022/c8y-ngx-components-static-assets.mjs +6 -6
  175. package/fesm2022/c8y-ngx-components-sub-assets.mjs +60 -60
  176. package/fesm2022/c8y-ngx-components-tenants.mjs +40 -40
  177. package/fesm2022/c8y-ngx-components-time-context.mjs +6 -6
  178. package/fesm2022/c8y-ngx-components-tracking.mjs +12 -12
  179. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +4 -5
  180. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
  181. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +12 -12
  182. package/fesm2022/c8y-ngx-components-translation-editor.mjs +6 -6
  183. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +33 -33
  184. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +4 -4
  185. package/fesm2022/c8y-ngx-components-upgrade.mjs +41 -41
  186. package/fesm2022/c8y-ngx-components-user-roles.mjs +10 -10
  187. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-table.mjs +6 -6
  188. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +3 -3
  189. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget-ai-config.mjs +3 -3
  190. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +6 -6
  191. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +19 -19
  192. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +3 -3
  193. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +34 -34
  194. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs.map +1 -1
  195. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-legacy-welcome.mjs +3 -3
  196. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +3 -3
  197. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +6 -6
  198. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-list.mjs +12 -12
  199. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +21 -21
  200. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +3 -3
  201. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +10 -10
  202. package/fesm2022/c8y-ngx-components-widgets-implementations-events.mjs +6 -6
  203. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +3 -3
  204. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +24 -24
  205. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +9 -9
  206. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +18 -18
  207. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +6 -6
  208. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +6 -6
  209. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +9 -9
  210. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +9 -9
  211. package/fesm2022/c8y-ngx-components-widgets-implementations-pie-chart.mjs +9 -9
  212. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +18 -18
  213. package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation.mjs +9 -9
  214. package/fesm2022/c8y-ngx-components.mjs +1398 -1398
  215. package/locales/de.po +65 -8
  216. package/locales/es.po +64 -8
  217. package/locales/fr.po +64 -8
  218. package/locales/ja_JP.po +60 -6
  219. package/locales/ko.po +64 -8
  220. package/locales/locales.pot +6 -0
  221. package/locales/nl.po +64 -8
  222. package/locales/pl.po +65 -8
  223. package/locales/pt_BR.po +65 -8
  224. package/locales/zh_CN.po +64 -8
  225. package/locales/zh_TW.po +64 -8
  226. package/package.json +1 -1
  227. package/static-assets/data/index.d.ts.map +1 -1
  228. package/translation-editor/data/index.d.ts.map +1 -1
  229. package/widgets/implementations/asset-table/index.d.ts +67 -1
  230. package/widgets/implementations/asset-table/index.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sources":["../../../ai/agent-chat/agent-chat.component.ts","../../../ai/agent-chat/widget-ai-chat-section.component.ts"],"sourcesContent":[null,null],"names":[],"mappings":";;;;;;AAiEA,cAAA,kBAAA,YAAA,MAAA,EAAA,SAAA,EAAA,SAAA;;AA0BE;AACA;;AAGA;AAMA;;;;;;;;AAQG;oBACW,aAAA,CAAA,WAAA,UAAA,qBAAA;;AAMd,2BAAA,qBAAA;AAKA;;;;;AAKG;0BACiB,aAAA,CAAA,WAAA,CAAA,UAAA;;yBAGD,aAAA,CAAA,WAAA,CAAA,OAAA,CAAA,eAAA;;8BAGK,aAAA,CAAA,WAAA,CAAA,WAAA;;0BAGJ,aAAA,CAAA,MAAA;AAEpB;;;AAGG;+BACsB,aAAA,CAAA,WAAA;;wBAGP,aAAA,CAAA,WAAA,CAAA,MAAA;AAElB;;;;;;;;;AASG;wCAC+B,aAAA,CAAA,WAAA,CAAA,IAAA;AAElC;;;;;;AAMG;4CACmC,aAAA,CAAA,WAAA,CAAA,6BAAA;AAEtC;;;;;;;;;;;AAWG;qCAC4B,aAAA,CAAA,WAAA,WAAA,kBAAA,gBAAA,gBAAA,oBAAA,kBAAA;AAQ/B;;;;;AAKG;oCAC2B,aAAA,CAAA,WAAA,CAAA,qBAAA;AAE9B;;AAE4D;8BACpC,aAAA,CAAA,WAAA;;AAGxB,iCAA2B,aAAA,CAAA,WAAA;;;;;;;;;;;;;;;;;;;;;;;;AAAwB;;AAEnD,oCAAA,UAAA;AAEA;;;;;;;;;AASG;AACH,uCAAiC,aAAA,CAAA,WAAA;AAEjC;;;;;AAKG;mCAC0B,aAAA,CAAA,WAAA,CAAA,MAAA;8BAEL,aAAA,CAAA,gBAAA,CAAA,SAAA;AAExB;;;;;;;AAOG;2BACkB,aAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,MAAA;;AAGrB,yBAAmB,aAAA,CAAA,gBAAA;;;;AAId;;AAGL;;AAEA,6BAAA,KAAA;;;AAA6D;AAE7D;;;AAGG;+BACsB,aAAA,CAAA,gBAAA,CAAA,SAAA;AAEzB,mCAA6B,aAAA,CAAA,cAAA;;AAE7B,+BAAuB,aAAA,CAAA,MAAA;AAIvB;;AAGA,0CAAoC,aAAA,CAAA,cAAA;;AAKpC;;AAEA;;AAKA,oDAA8C,aAAA,CAAA,cAAA;AAE9C;;;;;AAKG;gCACuB,aAAA,CAAA,cAAA;uBAKT,aAAA,CAAA,cAAA,CAAA,SAAA;;AAGjB,8BAAwB,aAAA,CAAA,MAAA;;;;AAarB;AAEH;;;AAGG;oDAC2C,aAAA,CAAA,MAAA;;;;;AAc3C;;AAGH;AACA;AAEA;AACA;AACA;AACA;;;;;AAMA;;AAMA;;;AAGG;;AAGG,gBAAA,OAAA;;AAWN;;;;;;;;AAQG;AACH,6BAAA,qBAAA,GAAA,WAAA;;;AAsDA;;;AAsCM,2BAAA,kBAAA,sBAAA,OAAA;;;;;;;AA+EN;;;;;;;AAOG;AACH;;;;;;;AA+FA;AAyDA;;;;;;AAMG;;AA4EH;;;AA4HA;;AAEG;;;;AA6DJ;;AC57BD,cAAA,4BAAA,YAAA,MAAA;AAOE;;;AAGG;;AAMH,yCAAmC,aAAA,CAAA,cAAA,CAAA,kCAAA;;;;AAGiB;AAEpD,oBAAA,qBAAA;AAEA,iBAAA,OAAA,CAAA,eAAA;;AAGA;AAEA;;AAGA;;;;;;;;;;;;;;;;AAgBG;AACH,uBAAA,UAAA;AACgC;AAAoB;AAAM;;;AAO5B;AAAoB;AAIlD;AACA;AACA;AACA;AAEA;;;;AAIG;;AAIH;;AAEG;AACG,gBAAA,OAAA;AAaN;;;AAGG;;;;AAoBJ;;;;"}
1
+ {"version":3,"file":"index.d.ts","sources":["../../../ai/agent-chat/agent-chat.component.ts","../../../ai/agent-chat/widget-ai-chat-section.component.ts"],"sourcesContent":[null,null],"names":[],"mappings":";;;;;;AAiEA,cAAA,kBAAA,YAAA,MAAA,EAAA,SAAA,EAAA,SAAA;;AA0BE;AACA;;AAGA;AAMA;;;;;;;;AAQG;oBACW,aAAA,CAAA,WAAA,UAAA,qBAAA;;AAMd,2BAAA,qBAAA;AAKA;;;;;AAKG;0BACiB,aAAA,CAAA,WAAA,CAAA,UAAA;;yBAGD,aAAA,CAAA,WAAA,CAAA,OAAA,CAAA,eAAA;;8BAGK,aAAA,CAAA,WAAA,CAAA,WAAA;;0BAGJ,aAAA,CAAA,MAAA;AAEpB;;;AAGG;+BACsB,aAAA,CAAA,WAAA;;wBAGP,aAAA,CAAA,WAAA,CAAA,MAAA;AAElB;;;;;;;;;AASG;wCAC+B,aAAA,CAAA,WAAA,CAAA,IAAA;AAElC;;;;;;AAMG;4CACmC,aAAA,CAAA,WAAA,CAAA,6BAAA;AAEtC;;;;;;;;;;;AAWG;qCAC4B,aAAA,CAAA,WAAA,WAAA,kBAAA,gBAAA,gBAAA,oBAAA,kBAAA;AAQ/B;;;;;AAKG;oCAC2B,aAAA,CAAA,WAAA,CAAA,qBAAA;AAE9B;;AAE4D;8BACpC,aAAA,CAAA,WAAA;;AAGxB,iCAA2B,aAAA,CAAA,WAAA;;;;;;;;;;;;;;;;;;;;;;;;AAAwB;;AAEnD,oCAAA,UAAA;AAEA;;;;;;;;;AASG;AACH,uCAAiC,aAAA,CAAA,WAAA;AAEjC;;;;;AAKG;mCAC0B,aAAA,CAAA,WAAA,CAAA,MAAA;8BAEL,aAAA,CAAA,gBAAA,CAAA,SAAA;AAExB;;;;;;;AAOG;2BACkB,aAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,MAAA;;AAGrB,yBAAmB,aAAA,CAAA,gBAAA;;;;AAId;;AAGL;;AAEA,6BAAA,KAAA;;;AAA6D;AAE7D;;;AAGG;+BACsB,aAAA,CAAA,gBAAA,CAAA,SAAA;AAEzB,mCAA6B,aAAA,CAAA,cAAA;;AAE7B,+BAAuB,aAAA,CAAA,MAAA;AAIvB;;AAGA,0CAAoC,aAAA,CAAA,cAAA;;AAKpC;;AAEA;;AAKA,oDAA8C,aAAA,CAAA,cAAA;AAE9C;;;;;AAKG;gCACuB,aAAA,CAAA,cAAA;uBAKT,aAAA,CAAA,cAAA,CAAA,SAAA;;AAGjB,8BAAwB,aAAA,CAAA,MAAA;;;;AAarB;AAEH;;;AAGG;oDAC2C,aAAA,CAAA,MAAA;;;;;AAc3C;;AAGH;AACA;AAEA;AACA;AACA;AACA;;;;;AAMA;;AAMA;;;AAGG;;AAGG,gBAAA,OAAA;;AAWN;;;;;;;;AAQG;AACH,6BAAA,qBAAA,GAAA,WAAA;;;AAsDA;;;AAsCM,2BAAA,kBAAA,sBAAA,OAAA;;;;;;;AA+EN;;;;;;;AAOG;AACH;;;;;;;AA+FA;AAyDA;;;;;;AAMG;;AA4EH;;;AA8IA;;AAEG;;;;AA6DJ;;AC98BD,cAAA,4BAAA,YAAA,MAAA;AAOE;;;AAGG;;AAMH,yCAAmC,aAAA,CAAA,cAAA,CAAA,kCAAA;;;;AAGiB;AAEpD,oBAAA,qBAAA;AAEA,iBAAA,OAAA,CAAA,eAAA;;AAGA;AAEA;;AAGA;;;;;;;;;;;;;;;;AAgBG;AACH,uBAAA,UAAA;AACgC;AAAoB;AAAM;;;AAO5B;AAAoB;AAIlD;AACA;AACA;AACA;AAEA;;;;AAIG;;AAIH;;AAEG;AACG,gBAAA,OAAA;AAaN;;;AAGG;;;;AAoBJ;;;;"}
@@ -237,10 +237,10 @@ class ActilityDeviceRegistrationService {
237
237
  error.message = data.message;
238
238
  throw error;
239
239
  }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationService, deps: [{ token: i1.InventoryService }, { token: i1.FetchClient }, { token: i2.TranslateService }, { token: i1.ApplicationService }, { token: i3.OptionsService }, { token: i3.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
241
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationService, providedIn: 'root' }); }
240
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationService, deps: [{ token: i1.InventoryService }, { token: i1.FetchClient }, { token: i2.TranslateService }, { token: i1.ApplicationService }, { token: i3.OptionsService }, { token: i3.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
241
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationService, providedIn: 'root' }); }
242
242
  }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationService, decorators: [{
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationService, decorators: [{
244
244
  type: Injectable,
245
245
  args: [{ providedIn: 'root' }]
246
246
  }], ctorParameters: () => [{ type: i1.InventoryService }, { type: i1.FetchClient }, { type: i2.TranslateService }, { type: i1.ApplicationService }, { type: i3.OptionsService }, { type: i3.AppStateService }] });
@@ -461,10 +461,10 @@ class ActilityDeviceRegistrationComponent {
461
461
  this.unsubscribe$.next();
462
462
  this.unsubscribe$.complete();
463
463
  }
464
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationComponent, deps: [{ token: i1$1.BsModalRef }, { token: ActilityDeviceRegistrationService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
465
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: ActilityDeviceRegistrationComponent, isStandalone: true, selector: "c8y-actility-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Actility LoRa registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <!--Formly schema is rendered-->\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n c8y-modal-body\n linear\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Actility device' | translate }}\n </p>\n <formly-form\n class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n ></formly-form>\n </div>\n\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n [labels]=\"registrationStepLabels\"\n (onNext)=\"register($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form?.valid\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <!--success scenario-->\n <div\n class=\"p-16 text-center\"\n *ngIf=\"state === 'registrationPending'\"\n >\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n class=\"lead m-b-0\"\n type=\"success\"\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <!--Failure scenario-->\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n class=\"lead\"\n type=\"error\"\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n <div\n class=\"m-b-8\"\n *ngFor=\"let msg of errorMessages$ | async\"\n data-cy=\"actility-device-registration.component--registration-error\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"bsModalRef.hide()\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n", dependencies: [{ kind: "component", type: ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
464
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationComponent, deps: [{ token: i1$1.BsModalRef }, { token: ActilityDeviceRegistrationService }, { token: i3.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); }
465
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: ActilityDeviceRegistrationComponent, isStandalone: true, selector: "c8y-actility-registration", ngImport: i0, template: "<c8y-modal\n [title]=\"'Actility LoRa registration' | translate\"\n [headerClasses]=\"'dialog-header'\"\n [customFooter]=\"true\"\n>\n <ng-container c8y-modal-title>\n <span [c8yIcon]=\"'c8y-device-connect'\"></span>\n </ng-container>\n\n <ng-container *ngIf=\"state === 'loadPending'; else registrationForm\">\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-container>\n\n <!--Formly schema is rendered-->\n <ng-template #registrationForm>\n <c8y-stepper\n [hideStepProgress]=\"true\"\n c8y-modal-body\n linear\n *ngIf=\"(errorMessages$ | async).length === 0; else errorMessagesPresent\"\n >\n <cdk-step [stepControl]=\"form\">\n <div class=\"p-b-16\">\n <p class=\"modal-subtitle sticky-top\">\n {{ 'Register a single Actility device' | translate }}\n </p>\n <formly-form\n class=\"formly-group-array-cols d-block p-l-24 p-r-24 p-t-16\"\n [form]=\"form\"\n [fields]=\"fields\"\n [model]=\"model\"\n ></formly-form>\n </div>\n\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n [labels]=\"registrationStepLabels\"\n (onNext)=\"register($event)\"\n (onCancel)=\"bsModalRef.hide()\"\n [showButtons]=\"{ cancel: true, next: true }\"\n [pending]=\"state === 'registrationPending'\"\n [disabled]=\"!form?.valid\"\n ></c8y-stepper-buttons>\n </cdk-step>\n <cdk-step state=\"final\">\n <!--success scenario-->\n <div\n class=\"p-16 text-center\"\n *ngIf=\"state === 'registrationPending'\"\n >\n <c8y-loading></c8y-loading>\n </div>\n <div class=\"m-24\">\n <c8y-operation-result\n class=\"lead m-b-0\"\n type=\"success\"\n *ngIf=\"state === 'registrationSuccess'\"\n text=\"{{ 'Device registered' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n </div>\n <c8y-stepper-buttons\n class=\"sticky-bottom d-block p-t-16 p-b-16 separator-top bg-level-0\"\n (onCustom)=\"bsModalRef.hide()\"\n [showButtons]=\"{ custom: true }\"\n [labels]=\"finalStepLabels\"\n ></c8y-stepper-buttons>\n </cdk-step>\n </c8y-stepper>\n </ng-template>\n\n <!--Failure scenario-->\n <ng-template #errorMessagesPresent>\n <div class=\"m-24\">\n <c8y-operation-result\n class=\"lead\"\n type=\"error\"\n *ngIf=\"state === 'registrationError'\"\n text=\"{{ 'Failed to register' | translate }}\"\n [size]=\"84\"\n [vertical]=\"true\"\n ></c8y-operation-result>\n <div\n class=\"m-b-8\"\n *ngFor=\"let msg of errorMessages$ | async\"\n data-cy=\"actility-device-registration.component--registration-error\"\n [ngClass]=\"{\n 'text-center': state === 'registrationError',\n 'alert alert-danger': state === 'loadError'\n }\"\n >\n <span [innerHTML]=\"msg | translate\"></span>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"bsModalRef.hide()\"\n >\n {{ 'Close' | translate }}\n </button>\n </div>\n </ng-template>\n</c8y-modal>\n", dependencies: [{ kind: "component", type: ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "component", type: C8yStepper, selector: "c8y-stepper", inputs: ["disableDefaultIcons", "disableProgressButtons", "customClasses", "hideStepProgress", "useStepLabelsAsTitlesOnly"], outputs: ["onStepChange"] }, { kind: "component", type: CdkStep, selector: "cdk-step", inputs: ["stepControl", "label", "errorMessage", "aria-label", "aria-labelledby", "state", "editable", "optional", "completed", "hasError"], outputs: ["interacted"], exportAs: ["cdkStep"] }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i4.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "component", type: C8yStepperButtons, selector: "c8y-stepper-buttons", inputs: ["labels", "pending", "disabled", "showButtons"], outputs: ["onCancel", "onNext", "onBack", "onCustom"] }, { kind: "component", type: OperationResultComponent, selector: "c8y-operation-result", inputs: ["text", "vertical", "size", "type"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
466
466
  }
467
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationComponent, decorators: [{
467
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationComponent, decorators: [{
468
468
  type: Component,
469
469
  args: [{ selector: 'c8y-actility-registration', imports: [
470
470
  ModalComponent,
@@ -495,10 +495,10 @@ class ActilityDeviceRegistrationButtonComponent {
495
495
  ignoreBackdropClick: true
496
496
  });
497
497
  }
498
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationButtonComponent, deps: [{ token: i1$1.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); }
499
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: ActilityDeviceRegistrationButtonComponent, isStandalone: true, selector: "c8y-actility-registration-button", ngImport: i0, template: "<button title=\"{{ 'Actility LoRa' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'Actility LoRa' | translate }}\n</button>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
498
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationButtonComponent, deps: [{ token: i1$1.BsModalService }], target: i0.ɵɵFactoryTarget.Component }); }
499
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: ActilityDeviceRegistrationButtonComponent, isStandalone: true, selector: "c8y-actility-registration-button", ngImport: i0, template: "<button title=\"{{ 'Actility LoRa' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'Actility LoRa' | translate }}\n</button>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }] }); }
500
500
  }
501
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationButtonComponent, decorators: [{
501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationButtonComponent, decorators: [{
502
502
  type: Component,
503
503
  args: [{ selector: 'c8y-actility-registration-button', imports: [IconDirective, C8yTranslatePipe], template: "<button title=\"{{ 'Actility LoRa' | translate }}\" type=\"button\" (click)=\"open()\">\n <i c8yIcon=\"c8y-device-connect\"></i>\n {{ 'Actility LoRa' | translate }}\n</button>\n" }]
504
504
  }], ctorParameters: () => [{ type: i1$1.BsModalService }] });
@@ -518,10 +518,10 @@ class ActilityDeviceRegistrationFactory {
518
518
  }
519
519
  return actions;
520
520
  }
521
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationFactory, deps: [{ token: i3.TenantUiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
522
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationFactory, providedIn: 'root' }); }
521
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationFactory, deps: [{ token: i3.TenantUiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
522
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationFactory, providedIn: 'root' }); }
523
523
  }
524
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationFactory, decorators: [{
524
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationFactory, decorators: [{
525
525
  type: Injectable,
526
526
  args: [{
527
527
  providedIn: 'root'
@@ -529,19 +529,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
529
529
  }], ctorParameters: () => [{ type: i3.TenantUiService }] });
530
530
 
531
531
  class ActilityDeviceRegistrationModule {
532
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
533
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationModule, imports: [CoreModule,
532
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
533
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationModule, imports: [CoreModule,
534
534
  CommonModule,
535
535
  ActilityDeviceRegistrationButtonComponent,
536
536
  ActilityDeviceRegistrationComponent] }); }
537
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationModule, providers: [
537
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationModule, providers: [
538
538
  ActilityDeviceRegistrationService,
539
539
  hookDeviceRegistration(ActilityDeviceRegistrationFactory)
540
540
  ], imports: [CoreModule,
541
541
  CommonModule,
542
542
  ActilityDeviceRegistrationComponent] }); }
543
543
  }
544
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ActilityDeviceRegistrationModule, decorators: [{
544
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ActilityDeviceRegistrationModule, decorators: [{
545
545
  type: NgModule,
546
546
  args: [{
547
547
  imports: [
@@ -24,19 +24,19 @@ class AdvancedSoftwareService extends Service {
24
24
  }
25
25
  return this.isAvailable;
26
26
  }
27
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AdvancedSoftwareService, deps: [{ token: i1.FetchClient }, { token: i2.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
28
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AdvancedSoftwareService }); }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdvancedSoftwareService, deps: [{ token: i1.FetchClient }, { token: i2.AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
28
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdvancedSoftwareService }); }
29
29
  }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AdvancedSoftwareService, decorators: [{
30
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdvancedSoftwareService, decorators: [{
31
31
  type: Injectable
32
32
  }], ctorParameters: () => [{ type: i1.FetchClient }, { type: i2.AppStateService }] });
33
33
 
34
34
  class AdvancedSoftwareModule {
35
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AdvancedSoftwareModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
36
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.19", ngImport: i0, type: AdvancedSoftwareModule, imports: [CommonModule, CoreModule] }); }
37
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AdvancedSoftwareModule, providers: [AdvancedSoftwareService, hookService('asm', AdvancedSoftwareService)], imports: [CommonModule, CoreModule] }); }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdvancedSoftwareModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
36
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.25", ngImport: i0, type: AdvancedSoftwareModule, imports: [CommonModule, CoreModule] }); }
37
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdvancedSoftwareModule, providers: [AdvancedSoftwareService, hookService('asm', AdvancedSoftwareService)], imports: [CommonModule, CoreModule] }); }
38
38
  }
39
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AdvancedSoftwareModule, decorators: [{
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AdvancedSoftwareModule, decorators: [{
40
40
  type: NgModule,
41
41
  args: [{
42
42
  imports: [CommonModule, CoreModule],
@@ -185,10 +185,10 @@ class ChatHistoryService {
185
185
  : [];
186
186
  return { messages, suggestions };
187
187
  }
188
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ChatHistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
189
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ChatHistoryService, providedIn: 'root' }); }
188
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChatHistoryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
189
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChatHistoryService, providedIn: 'root' }); }
190
190
  }
191
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ChatHistoryService, decorators: [{
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: ChatHistoryService, decorators: [{
192
192
  type: Injectable,
193
193
  args: [{
194
194
  providedIn: 'root'
@@ -318,10 +318,10 @@ class UserAnalyticsService {
318
318
  ...analyticsMetadataContext
319
319
  });
320
320
  }
321
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: UserAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
322
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: UserAnalyticsService, providedIn: 'root' }); }
321
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: UserAnalyticsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
322
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: UserAnalyticsService, providedIn: 'root' }); }
323
323
  }
324
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: UserAnalyticsService, decorators: [{
324
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: UserAnalyticsService, decorators: [{
325
325
  type: Injectable,
326
326
  args: [{
327
327
  providedIn: 'root'
@@ -889,6 +889,16 @@ class AgentChatComponent {
889
889
  console.warn('Received finish reason "stop" but assistant message content is empty. This may indicate an issue with the AI service or agent configuration.', currentAssistantMsg);
890
890
  }
891
891
  }
892
+ else if (updatedAssistantMsg.finishReason === 'length') {
893
+ currentAssistantMsg.usage = updatedAssistantMsg.usage;
894
+ this.onMessagesChange.emit(this.messages());
895
+ this.onMessageFinish.emit(currentAssistantMsg);
896
+ const maxOutputTokens = this.agentDefinition?.definition.agent.maxOutputTokens;
897
+ const message = maxOutputTokens
898
+ ? this.translateService.instant(gettext('The response was truncated because the maximum output tokens limit ({{ maxOutputTokens }}) configured by this application for a single assistant response was reached.'), { maxOutputTokens })
899
+ : this.translateService.instant(gettext('The response was truncated because the maximum output tokens limit configured by this application for a single assistant response was reached.'));
900
+ this.agentRequestError.set(message);
901
+ }
892
902
  else if (updatedAssistantMsg.finishReason === 'error') {
893
903
  if (currentAssistantMsg.content.length === 0) {
894
904
  // Should be impossible, but adding this as a debugging aid, as it was seen once by a user
@@ -1000,10 +1010,10 @@ class AgentChatComponent {
1000
1010
  this._isLoading.set(false);
1001
1011
  }
1002
1012
  }
1003
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AgentChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1004
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: AgentChatComponent, isStandalone: true, selector: "c8y-agent-chat", inputs: { agent: { classPropertyName: "agent", publicName: "agent", isSignal: true, isRequired: true, transformFunction: null }, suggestions: { classPropertyName: "suggestions", publicName: "suggestions", isSignal: true, isRequired: false, transformFunction: null }, chatConfig: { classPropertyName: "chatConfig", publicName: "chatConfig", isSignal: true, isRequired: false, transformFunction: null }, welcomeTemplate: { classPropertyName: "welcomeTemplate", publicName: "welcomeTemplate", isSignal: true, isRequired: false, transformFunction: null }, autoCreateAgents: { classPropertyName: "autoCreateAgents", publicName: "autoCreateAgents", isSignal: true, isRequired: false, transformFunction: null }, variables: { classPropertyName: "variables", publicName: "variables", isSignal: true, isRequired: false, transformFunction: null }, assistantMessageComponent: { classPropertyName: "assistantMessageComponent", publicName: "assistantMessageComponent", isSignal: true, isRequired: false, transformFunction: null }, assistantMessageDisplayConfig: { classPropertyName: "assistantMessageDisplayConfig", publicName: "assistantMessageDisplayConfig", isSignal: true, isRequired: false, transformFunction: null }, preprocessAgentMessage: { classPropertyName: "preprocessAgentMessage", publicName: "preprocessAgentMessage", isSignal: true, isRequired: false, transformFunction: null }, pruneMessagesForAgent: { classPropertyName: "pruneMessagesForAgent", publicName: "pruneMessagesForAgent", isSignal: true, isRequired: false, transformFunction: null }, skipHealthCheck: { classPropertyName: "skipHealthCheck", publicName: "skipHealthCheck", isSignal: true, isRequired: false, transformFunction: null }, initialChatHistory: { classPropertyName: "initialChatHistory", publicName: "initialChatHistory", isSignal: true, isRequired: false, transformFunction: null }, groundingContextProvider: { classPropertyName: "groundingContextProvider", publicName: "groundingContextProvider", isSignal: true, isRequired: false, transformFunction: null }, userAnalyticsContext: { classPropertyName: "userAnalyticsContext", publicName: "userAnalyticsContext", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMessageFinish: "onMessageFinish", onToolResult: "onToolResult", onFeedback: "onFeedback", onMessagesChange: "onMessagesChange" }, viewQueries: [{ propertyName: "assistantMessageComponents", predicate: AiChatAssistantMessageComponent, descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "@let agentHealthErrorMsg = _agentHealthError();\n@if (agentHealthErrorMsg) {\n @if (isLoadingAiResponse()) {\n <c8y-loading class=\"m-auto\"></c8y-loading>\n } @else {\n <c8y-ui-empty-state\n class=\"m-auto\"\n [icon]=\"'settings'\"\n [title]=\"'AI agent is not available.' | translate\"\n >\n <span>{{ agentHealthErrorMsg }}</span>\n\n @if (canCreate) {\n <div class=\"text-center m-t-16 m-b-16\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createAgent()\"\n >\n {{ 'Create agent' | translate }}\n </button>\n </div>\n } @else {\n <p\n class=\"text-pre-wrap m-t-8\"\n data-cy=\"agent-health-detailed-messages\"\n >\n <small>{{ agentHealthDetailedMessages() }}</small>\n </p>\n }\n\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/ai\">user documentation</a>.\n </small>\n </p>\n </c8y-ui-empty-state>\n }\n}\n\n@if (!agentHealthErrorMsg) {\n <c8y-ai-chat\n (onMessage)=\"sendMessage($event)\"\n [isLoading]=\"isLoadingAiResponse()\"\n (onCancel)=\"cancel()\"\n [config]=\"chatConfig() ?? {}\"\n [prompt]=\"prompt\"\n [suggestionsTemplate]=\"suggestionsRef\"\n [welcomeTemplate]=\"welcomeTemplate()\"\n [cumulativeUsage]=\"cumulativeUsage()\"\n >\n @let messages$ = messages();\n @for (message of messages$; track $index; let i = $index) {\n <c8y-ai-chat-message [message]=\"message\">\n @if (message.role !== 'user' && model) {\n <!-- Visually hidden label included when users copy-paste from the chat, e.g. to report issues. It's quite helpful to know the model. -->\n <span\n class=\"hidden-copy-label\"\n aria-hidden=\"true\"\n >\n {{ `(Using model: ${model})` }}</span\n >\n }\n\n @if (message.role === 'user') {\n <div\n class=\"message-content\"\n data-cy=\"user-message-content\"\n [innerHTML]=\"message.content | markdownToHtml | async\"\n ></div>\n } @else if (\n message.role === 'assistant' && isLoadingAiResponse() && i === messages$.length - 1\n ) {\n <div>\n <!-- Last assistant message uses reactive computed context -->\n <ng-container\n [ngComponentOutlet]=\"assistantMessageComponent()\"\n [ngComponentOutletInputs]=\"{ assistantMessageContext: lastAssistantMessageContext() }\"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n [ngComponentOutlet]=\"assistantMessageComponent()\"\n [ngComponentOutletInputs]=\"{\n assistantMessageContext: {\n message: message,\n config: assistantMessageDisplayConfig(),\n isMessageLoading: isLoadingAiResponse() && i === messages$.length - 1,\n messageDisplayIndex: messages$.length - 1 - i\n }\n }\"\n ></ng-container>\n }\n\n @let isLastMessage = i === messages$.length - 1;\n\n @if (message.role === 'user') {\n <c8y-ai-chat-message-action\n icon=\"pencil\"\n [tooltip]=\"'Edit and resend this message' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"reprompt(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n message.role === 'assistant' &&\n i > 0 &&\n chatConfig()?.showUsagePerMessage &&\n message.usage\n ) {\n <c8y-ai-chat-message-action [custom]=\"true\">\n <span\n class=\"tag tag--info m-l-auto\"\n [tooltip]=\"\n 'Input tokens: {{ input }} \\nOutput tokens: {{ output }}'\n | translate\n : {\n input: message.usage.inputTokens || 0 | c8yNumber: 'floor' : '1.0-0',\n output: message.usage.outputTokens || 0 | c8yNumber: 'floor' : '1.0-0'\n }\n \"\n >\n {{ 'Tokens used: {{total}}' | translate: { total: message.usage.totalTokens || 0 |\n c8yNumber: 'floor' : '1.0-0' } }}\n </span>\n </c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && i > 0 && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-up\"\n [tooltip]=\"'This is useful' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"rate(message, true)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && i > 0 && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-down\"\n [tooltip]=\"'This is not useful' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"rate(message, false)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n message.role === 'assistant' &&\n !isLoadingAiResponse() &&\n chatConfig()?.showDeleteAction &&\n isLastMessage\n ) {\n <c8y-ai-chat-message-action\n icon=\"delete-bin\"\n [tooltip]=\"'Delete last exchange' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"deleteLastExchange()\"\n ></c8y-ai-chat-message-action>\n }\n\n <!-- Only allow regenerating the last message, otherwise we could be deleting a lot of useful message history -->\n @if (message.role === 'assistant' && i > 0 && isLastMessage && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"refresh\"\n [tooltip]=\"'Regenerate this response' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"reload(message)\"\n ></c8y-ai-chat-message-action>\n }\n </c8y-ai-chat-message>\n }\n\n @let agentErrorMsg = agentRequestError();\n @if (agentErrorMsg) {\n <c8y-ai-chat-message [message]=\"{ role: 'assistant', content: agentErrorMsg }\">\n <div\n class=\"alert alert-danger d-flex a-i-center gap-8\"\n role=\"alert\"\n >\n <i\n class=\"c8y-icon c8y-icon-warning text-danger\"\n aria-hidden=\"true\"\n ></i>\n <!-- Since errors come from the backend the only translation is for the fallback error message supplied by the UI. -->\n <div class=\"flex-grow text-pre-wrap\">{{ agentErrorMsg | translate }}</div>\n </div>\n </c8y-ai-chat-message>\n }\n\n <ng-template #suggestionsRef>\n @if (!isLoadingAiResponse()) {\n <!-- As soon as we have any suggestions (even empty) these take priority over what we restored from history -->\n @let activeSuggestions = suggestions() === undefined ? _restoredSuggestions : suggestions();\n @for (suggestion of activeSuggestions; track $index) {\n <c8y-ai-chat-suggestion\n [icon]=\"suggestion.icon || 'c8y-bulb'\"\n [useAiButtons]=\"true\"\n [prompt]=\"suggestion.prompt\"\n [label]=\"suggestion.label ?? suggestion.prompt\"\n (suggestionClicked)=\"sendMessage($event)\"\n [disabled]=\"isLoadingAiResponse()\"\n ></c8y-ai-chat-suggestion>\n }\n }\n </ng-template>\n </c8y-ai-chat>\n}\n", styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fade-in-out{animation:fadeIn .2s ease-in}.fade-in-out.ng-leave-active{animation:fadeOut .2s ease-out}.hidden-copy-label{display:block;font-size:0;line-height:0;-webkit-user-select:text;user-select:text}\n"], dependencies: [{ kind: "component", type: AiChatComponent, selector: "c8y-ai-chat", inputs: ["isLoading", "disabled", "prompt", "suggestionsTemplate", "welcomeTemplate", "cumulativeUsage", "config"], outputs: ["onMessage", "onCancel"] }, { kind: "component", type: AiChatSuggestionComponent, selector: "c8y-ai-chat-suggestion", inputs: ["label", "prompt", "icon", "useAiButtons", "disabled"], outputs: ["suggestionClicked"] }, { kind: "component", type: AiChatMessageComponent, selector: "c8y-ai-chat-message", inputs: ["role", "message"] }, { kind: "component", type: AiChatMessageActionComponent, selector: "c8y-ai-chat-message-action", inputs: ["custom", "disabled", "tooltip", "icon"], outputs: ["actionClicked"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "ngmodule", type: CollapseModule }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "directive", type: GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.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: "pipe", type: MarkdownToHtmlPipe, name: "markdownToHtml" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: NumberPipe, name: "c8yNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1013
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AgentChatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1014
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.25", type: AgentChatComponent, isStandalone: true, selector: "c8y-agent-chat", inputs: { agent: { classPropertyName: "agent", publicName: "agent", isSignal: true, isRequired: true, transformFunction: null }, suggestions: { classPropertyName: "suggestions", publicName: "suggestions", isSignal: true, isRequired: false, transformFunction: null }, chatConfig: { classPropertyName: "chatConfig", publicName: "chatConfig", isSignal: true, isRequired: false, transformFunction: null }, welcomeTemplate: { classPropertyName: "welcomeTemplate", publicName: "welcomeTemplate", isSignal: true, isRequired: false, transformFunction: null }, autoCreateAgents: { classPropertyName: "autoCreateAgents", publicName: "autoCreateAgents", isSignal: true, isRequired: false, transformFunction: null }, variables: { classPropertyName: "variables", publicName: "variables", isSignal: true, isRequired: false, transformFunction: null }, assistantMessageComponent: { classPropertyName: "assistantMessageComponent", publicName: "assistantMessageComponent", isSignal: true, isRequired: false, transformFunction: null }, assistantMessageDisplayConfig: { classPropertyName: "assistantMessageDisplayConfig", publicName: "assistantMessageDisplayConfig", isSignal: true, isRequired: false, transformFunction: null }, preprocessAgentMessage: { classPropertyName: "preprocessAgentMessage", publicName: "preprocessAgentMessage", isSignal: true, isRequired: false, transformFunction: null }, pruneMessagesForAgent: { classPropertyName: "pruneMessagesForAgent", publicName: "pruneMessagesForAgent", isSignal: true, isRequired: false, transformFunction: null }, skipHealthCheck: { classPropertyName: "skipHealthCheck", publicName: "skipHealthCheck", isSignal: true, isRequired: false, transformFunction: null }, initialChatHistory: { classPropertyName: "initialChatHistory", publicName: "initialChatHistory", isSignal: true, isRequired: false, transformFunction: null }, groundingContextProvider: { classPropertyName: "groundingContextProvider", publicName: "groundingContextProvider", isSignal: true, isRequired: false, transformFunction: null }, userAnalyticsContext: { classPropertyName: "userAnalyticsContext", publicName: "userAnalyticsContext", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onMessageFinish: "onMessageFinish", onToolResult: "onToolResult", onFeedback: "onFeedback", onMessagesChange: "onMessagesChange" }, viewQueries: [{ propertyName: "assistantMessageComponents", predicate: AiChatAssistantMessageComponent, descendants: true, isSignal: true }], usesOnChanges: true, ngImport: i0, template: "@let agentHealthErrorMsg = _agentHealthError();\n@if (agentHealthErrorMsg) {\n @if (isLoadingAiResponse()) {\n <c8y-loading class=\"m-auto\"></c8y-loading>\n } @else {\n <c8y-ui-empty-state\n class=\"m-auto\"\n [icon]=\"'settings'\"\n [title]=\"'AI agent is not available.' | translate\"\n >\n <span>{{ agentHealthErrorMsg }}</span>\n\n @if (canCreate) {\n <div class=\"text-center m-t-16 m-b-16\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createAgent()\"\n >\n {{ 'Create agent' | translate }}\n </button>\n </div>\n } @else {\n <p\n class=\"text-pre-wrap m-t-8\"\n data-cy=\"agent-health-detailed-messages\"\n >\n <small>{{ agentHealthDetailedMessages() }}</small>\n </p>\n }\n\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/ai\">user documentation</a>.\n </small>\n </p>\n </c8y-ui-empty-state>\n }\n}\n\n@if (!agentHealthErrorMsg) {\n <c8y-ai-chat\n (onMessage)=\"sendMessage($event)\"\n [isLoading]=\"isLoadingAiResponse()\"\n (onCancel)=\"cancel()\"\n [config]=\"chatConfig() ?? {}\"\n [prompt]=\"prompt\"\n [suggestionsTemplate]=\"suggestionsRef\"\n [welcomeTemplate]=\"welcomeTemplate()\"\n [cumulativeUsage]=\"cumulativeUsage()\"\n >\n @let messages$ = messages();\n @for (message of messages$; track $index; let i = $index) {\n <c8y-ai-chat-message [message]=\"message\">\n @if (message.role !== 'user' && model) {\n <!-- Visually hidden label included when users copy-paste from the chat, e.g. to report issues. It's quite helpful to know the model. -->\n <span\n class=\"hidden-copy-label\"\n aria-hidden=\"true\"\n >\n {{ `(Using model: ${model})` }}</span\n >\n }\n\n @if (message.role === 'user') {\n <div\n class=\"message-content\"\n data-cy=\"user-message-content\"\n [innerHTML]=\"message.content | markdownToHtml | async\"\n ></div>\n } @else if (\n message.role === 'assistant' && isLoadingAiResponse() && i === messages$.length - 1\n ) {\n <div>\n <!-- Last assistant message uses reactive computed context -->\n <ng-container\n [ngComponentOutlet]=\"assistantMessageComponent()\"\n [ngComponentOutletInputs]=\"{ assistantMessageContext: lastAssistantMessageContext() }\"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n [ngComponentOutlet]=\"assistantMessageComponent()\"\n [ngComponentOutletInputs]=\"{\n assistantMessageContext: {\n message: message,\n config: assistantMessageDisplayConfig(),\n isMessageLoading: isLoadingAiResponse() && i === messages$.length - 1,\n messageDisplayIndex: messages$.length - 1 - i\n }\n }\"\n ></ng-container>\n }\n\n @let isLastMessage = i === messages$.length - 1;\n\n @if (message.role === 'user') {\n <c8y-ai-chat-message-action\n icon=\"pencil\"\n [tooltip]=\"'Edit and resend this message' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"reprompt(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n message.role === 'assistant' &&\n i > 0 &&\n chatConfig()?.showUsagePerMessage &&\n message.usage\n ) {\n <c8y-ai-chat-message-action [custom]=\"true\">\n <span\n class=\"tag tag--info m-l-auto\"\n [tooltip]=\"\n 'Input tokens: {{ input }} \\nOutput tokens: {{ output }}'\n | translate\n : {\n input: message.usage.inputTokens || 0 | c8yNumber: 'floor' : '1.0-0',\n output: message.usage.outputTokens || 0 | c8yNumber: 'floor' : '1.0-0'\n }\n \"\n >\n {{ 'Tokens used: {{total}}' | translate: { total: message.usage.totalTokens || 0 |\n c8yNumber: 'floor' : '1.0-0' } }}\n </span>\n </c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && i > 0 && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-up\"\n [tooltip]=\"'This is useful' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"rate(message, true)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && i > 0 && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-down\"\n [tooltip]=\"'This is not useful' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"rate(message, false)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n message.role === 'assistant' &&\n !isLoadingAiResponse() &&\n chatConfig()?.showDeleteAction &&\n isLastMessage\n ) {\n <c8y-ai-chat-message-action\n icon=\"delete-bin\"\n [tooltip]=\"'Delete last exchange' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"deleteLastExchange()\"\n ></c8y-ai-chat-message-action>\n }\n\n <!-- Only allow regenerating the last message, otherwise we could be deleting a lot of useful message history -->\n @if (message.role === 'assistant' && i > 0 && isLastMessage && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"refresh\"\n [tooltip]=\"'Regenerate this response' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"reload(message)\"\n ></c8y-ai-chat-message-action>\n }\n </c8y-ai-chat-message>\n }\n\n @let agentErrorMsg = agentRequestError();\n @if (agentErrorMsg) {\n <c8y-ai-chat-message [message]=\"{ role: 'assistant', content: agentErrorMsg }\">\n <div\n class=\"alert alert-danger d-flex a-i-center gap-8\"\n role=\"alert\"\n >\n <!-- Since errors come from the backend the only translation is for the fallback error message supplied by the UI. -->\n <div class=\"flex-grow text-pre-wrap\">{{ agentErrorMsg | translate }}</div>\n </div>\n </c8y-ai-chat-message>\n }\n\n <ng-template #suggestionsRef>\n @if (!isLoadingAiResponse()) {\n <!-- As soon as we have any suggestions (even empty) these take priority over what we restored from history -->\n @let activeSuggestions = suggestions() === undefined ? _restoredSuggestions : suggestions();\n @for (suggestion of activeSuggestions; track $index) {\n <c8y-ai-chat-suggestion\n [icon]=\"suggestion.icon || 'c8y-bulb'\"\n [useAiButtons]=\"true\"\n [prompt]=\"suggestion.prompt\"\n [label]=\"suggestion.label ?? suggestion.prompt\"\n (suggestionClicked)=\"sendMessage($event)\"\n [disabled]=\"isLoadingAiResponse()\"\n ></c8y-ai-chat-suggestion>\n }\n }\n </ng-template>\n </c8y-ai-chat>\n}\n", styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fade-in-out{animation:fadeIn .2s ease-in}.fade-in-out.ng-leave-active{animation:fadeOut .2s ease-out}.hidden-copy-label{display:block;font-size:0;line-height:0;-webkit-user-select:text;user-select:text}\n"], dependencies: [{ kind: "component", type: AiChatComponent, selector: "c8y-ai-chat", inputs: ["isLoading", "disabled", "prompt", "suggestionsTemplate", "welcomeTemplate", "cumulativeUsage", "config"], outputs: ["onMessage", "onCancel"] }, { kind: "component", type: AiChatSuggestionComponent, selector: "c8y-ai-chat-suggestion", inputs: ["label", "prompt", "icon", "useAiButtons", "disabled"], outputs: ["suggestionClicked"] }, { kind: "component", type: AiChatMessageComponent, selector: "c8y-ai-chat-message", inputs: ["role", "message"] }, { kind: "component", type: AiChatMessageActionComponent, selector: "c8y-ai-chat-message-action", inputs: ["custom", "disabled", "tooltip", "icon"], outputs: ["actionClicked"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "ngmodule", type: CollapseModule }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "component", type: GuideDocsComponent, selector: "[c8y-guide-docs]" }, { kind: "directive", type: GuideHrefDirective, selector: "[c8y-guide-href]", inputs: ["c8y-guide-href"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i1.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: "pipe", type: MarkdownToHtmlPipe, name: "markdownToHtml" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: NumberPipe, name: "c8yNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1005
1015
  }
1006
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: AgentChatComponent, decorators: [{
1016
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: AgentChatComponent, decorators: [{
1007
1017
  type: Component,
1008
1018
  args: [{ selector: 'c8y-agent-chat', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
1009
1019
  AiChatComponent,
@@ -1022,7 +1032,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
1022
1032
  GuideHrefDirective,
1023
1033
  TooltipModule,
1024
1034
  NumberPipe
1025
- ], template: "@let agentHealthErrorMsg = _agentHealthError();\n@if (agentHealthErrorMsg) {\n @if (isLoadingAiResponse()) {\n <c8y-loading class=\"m-auto\"></c8y-loading>\n } @else {\n <c8y-ui-empty-state\n class=\"m-auto\"\n [icon]=\"'settings'\"\n [title]=\"'AI agent is not available.' | translate\"\n >\n <span>{{ agentHealthErrorMsg }}</span>\n\n @if (canCreate) {\n <div class=\"text-center m-t-16 m-b-16\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createAgent()\"\n >\n {{ 'Create agent' | translate }}\n </button>\n </div>\n } @else {\n <p\n class=\"text-pre-wrap m-t-8\"\n data-cy=\"agent-health-detailed-messages\"\n >\n <small>{{ agentHealthDetailedMessages() }}</small>\n </p>\n }\n\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/ai\">user documentation</a>.\n </small>\n </p>\n </c8y-ui-empty-state>\n }\n}\n\n@if (!agentHealthErrorMsg) {\n <c8y-ai-chat\n (onMessage)=\"sendMessage($event)\"\n [isLoading]=\"isLoadingAiResponse()\"\n (onCancel)=\"cancel()\"\n [config]=\"chatConfig() ?? {}\"\n [prompt]=\"prompt\"\n [suggestionsTemplate]=\"suggestionsRef\"\n [welcomeTemplate]=\"welcomeTemplate()\"\n [cumulativeUsage]=\"cumulativeUsage()\"\n >\n @let messages$ = messages();\n @for (message of messages$; track $index; let i = $index) {\n <c8y-ai-chat-message [message]=\"message\">\n @if (message.role !== 'user' && model) {\n <!-- Visually hidden label included when users copy-paste from the chat, e.g. to report issues. It's quite helpful to know the model. -->\n <span\n class=\"hidden-copy-label\"\n aria-hidden=\"true\"\n >\n {{ `(Using model: ${model})` }}</span\n >\n }\n\n @if (message.role === 'user') {\n <div\n class=\"message-content\"\n data-cy=\"user-message-content\"\n [innerHTML]=\"message.content | markdownToHtml | async\"\n ></div>\n } @else if (\n message.role === 'assistant' && isLoadingAiResponse() && i === messages$.length - 1\n ) {\n <div>\n <!-- Last assistant message uses reactive computed context -->\n <ng-container\n [ngComponentOutlet]=\"assistantMessageComponent()\"\n [ngComponentOutletInputs]=\"{ assistantMessageContext: lastAssistantMessageContext() }\"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n [ngComponentOutlet]=\"assistantMessageComponent()\"\n [ngComponentOutletInputs]=\"{\n assistantMessageContext: {\n message: message,\n config: assistantMessageDisplayConfig(),\n isMessageLoading: isLoadingAiResponse() && i === messages$.length - 1,\n messageDisplayIndex: messages$.length - 1 - i\n }\n }\"\n ></ng-container>\n }\n\n @let isLastMessage = i === messages$.length - 1;\n\n @if (message.role === 'user') {\n <c8y-ai-chat-message-action\n icon=\"pencil\"\n [tooltip]=\"'Edit and resend this message' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"reprompt(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n message.role === 'assistant' &&\n i > 0 &&\n chatConfig()?.showUsagePerMessage &&\n message.usage\n ) {\n <c8y-ai-chat-message-action [custom]=\"true\">\n <span\n class=\"tag tag--info m-l-auto\"\n [tooltip]=\"\n 'Input tokens: {{ input }} \\nOutput tokens: {{ output }}'\n | translate\n : {\n input: message.usage.inputTokens || 0 | c8yNumber: 'floor' : '1.0-0',\n output: message.usage.outputTokens || 0 | c8yNumber: 'floor' : '1.0-0'\n }\n \"\n >\n {{ 'Tokens used: {{total}}' | translate: { total: message.usage.totalTokens || 0 |\n c8yNumber: 'floor' : '1.0-0' } }}\n </span>\n </c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && i > 0 && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-up\"\n [tooltip]=\"'This is useful' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"rate(message, true)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && i > 0 && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-down\"\n [tooltip]=\"'This is not useful' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"rate(message, false)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n message.role === 'assistant' &&\n !isLoadingAiResponse() &&\n chatConfig()?.showDeleteAction &&\n isLastMessage\n ) {\n <c8y-ai-chat-message-action\n icon=\"delete-bin\"\n [tooltip]=\"'Delete last exchange' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"deleteLastExchange()\"\n ></c8y-ai-chat-message-action>\n }\n\n <!-- Only allow regenerating the last message, otherwise we could be deleting a lot of useful message history -->\n @if (message.role === 'assistant' && i > 0 && isLastMessage && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"refresh\"\n [tooltip]=\"'Regenerate this response' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"reload(message)\"\n ></c8y-ai-chat-message-action>\n }\n </c8y-ai-chat-message>\n }\n\n @let agentErrorMsg = agentRequestError();\n @if (agentErrorMsg) {\n <c8y-ai-chat-message [message]=\"{ role: 'assistant', content: agentErrorMsg }\">\n <div\n class=\"alert alert-danger d-flex a-i-center gap-8\"\n role=\"alert\"\n >\n <i\n class=\"c8y-icon c8y-icon-warning text-danger\"\n aria-hidden=\"true\"\n ></i>\n <!-- Since errors come from the backend the only translation is for the fallback error message supplied by the UI. -->\n <div class=\"flex-grow text-pre-wrap\">{{ agentErrorMsg | translate }}</div>\n </div>\n </c8y-ai-chat-message>\n }\n\n <ng-template #suggestionsRef>\n @if (!isLoadingAiResponse()) {\n <!-- As soon as we have any suggestions (even empty) these take priority over what we restored from history -->\n @let activeSuggestions = suggestions() === undefined ? _restoredSuggestions : suggestions();\n @for (suggestion of activeSuggestions; track $index) {\n <c8y-ai-chat-suggestion\n [icon]=\"suggestion.icon || 'c8y-bulb'\"\n [useAiButtons]=\"true\"\n [prompt]=\"suggestion.prompt\"\n [label]=\"suggestion.label ?? suggestion.prompt\"\n (suggestionClicked)=\"sendMessage($event)\"\n [disabled]=\"isLoadingAiResponse()\"\n ></c8y-ai-chat-suggestion>\n }\n }\n </ng-template>\n </c8y-ai-chat>\n}\n", styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fade-in-out{animation:fadeIn .2s ease-in}.fade-in-out.ng-leave-active{animation:fadeOut .2s ease-out}.hidden-copy-label{display:block;font-size:0;line-height:0;-webkit-user-select:text;user-select:text}\n"] }]
1035
+ ], template: "@let agentHealthErrorMsg = _agentHealthError();\n@if (agentHealthErrorMsg) {\n @if (isLoadingAiResponse()) {\n <c8y-loading class=\"m-auto\"></c8y-loading>\n } @else {\n <c8y-ui-empty-state\n class=\"m-auto\"\n [icon]=\"'settings'\"\n [title]=\"'AI agent is not available.' | translate\"\n >\n <span>{{ agentHealthErrorMsg }}</span>\n\n @if (canCreate) {\n <div class=\"text-center m-t-16 m-b-16\">\n <button\n class=\"btn btn-primary\"\n (click)=\"createAgent()\"\n >\n {{ 'Create agent' | translate }}\n </button>\n </div>\n } @else {\n <p\n class=\"text-pre-wrap m-t-8\"\n data-cy=\"agent-health-detailed-messages\"\n >\n <small>{{ agentHealthDetailedMessages() }}</small>\n </p>\n }\n\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/ai\">user documentation</a>.\n </small>\n </p>\n </c8y-ui-empty-state>\n }\n}\n\n@if (!agentHealthErrorMsg) {\n <c8y-ai-chat\n (onMessage)=\"sendMessage($event)\"\n [isLoading]=\"isLoadingAiResponse()\"\n (onCancel)=\"cancel()\"\n [config]=\"chatConfig() ?? {}\"\n [prompt]=\"prompt\"\n [suggestionsTemplate]=\"suggestionsRef\"\n [welcomeTemplate]=\"welcomeTemplate()\"\n [cumulativeUsage]=\"cumulativeUsage()\"\n >\n @let messages$ = messages();\n @for (message of messages$; track $index; let i = $index) {\n <c8y-ai-chat-message [message]=\"message\">\n @if (message.role !== 'user' && model) {\n <!-- Visually hidden label included when users copy-paste from the chat, e.g. to report issues. It's quite helpful to know the model. -->\n <span\n class=\"hidden-copy-label\"\n aria-hidden=\"true\"\n >\n {{ `(Using model: ${model})` }}</span\n >\n }\n\n @if (message.role === 'user') {\n <div\n class=\"message-content\"\n data-cy=\"user-message-content\"\n [innerHTML]=\"message.content | markdownToHtml | async\"\n ></div>\n } @else if (\n message.role === 'assistant' && isLoadingAiResponse() && i === messages$.length - 1\n ) {\n <div>\n <!-- Last assistant message uses reactive computed context -->\n <ng-container\n [ngComponentOutlet]=\"assistantMessageComponent()\"\n [ngComponentOutletInputs]=\"{ assistantMessageContext: lastAssistantMessageContext() }\"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n [ngComponentOutlet]=\"assistantMessageComponent()\"\n [ngComponentOutletInputs]=\"{\n assistantMessageContext: {\n message: message,\n config: assistantMessageDisplayConfig(),\n isMessageLoading: isLoadingAiResponse() && i === messages$.length - 1,\n messageDisplayIndex: messages$.length - 1 - i\n }\n }\"\n ></ng-container>\n }\n\n @let isLastMessage = i === messages$.length - 1;\n\n @if (message.role === 'user') {\n <c8y-ai-chat-message-action\n icon=\"pencil\"\n [tooltip]=\"'Edit and resend this message' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"reprompt(message)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n message.role === 'assistant' &&\n i > 0 &&\n chatConfig()?.showUsagePerMessage &&\n message.usage\n ) {\n <c8y-ai-chat-message-action [custom]=\"true\">\n <span\n class=\"tag tag--info m-l-auto\"\n [tooltip]=\"\n 'Input tokens: {{ input }} \\nOutput tokens: {{ output }}'\n | translate\n : {\n input: message.usage.inputTokens || 0 | c8yNumber: 'floor' : '1.0-0',\n output: message.usage.outputTokens || 0 | c8yNumber: 'floor' : '1.0-0'\n }\n \"\n >\n {{ 'Tokens used: {{total}}' | translate: { total: message.usage.totalTokens || 0 |\n c8yNumber: 'floor' : '1.0-0' } }}\n </span>\n </c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && i > 0 && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-up\"\n [tooltip]=\"'This is useful' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"rate(message, true)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (message.role === 'assistant' && i > 0 && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"thumbs-down\"\n [tooltip]=\"'This is not useful' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"rate(message, false)\"\n ></c8y-ai-chat-message-action>\n }\n\n @if (\n message.role === 'assistant' &&\n !isLoadingAiResponse() &&\n chatConfig()?.showDeleteAction &&\n isLastMessage\n ) {\n <c8y-ai-chat-message-action\n icon=\"delete-bin\"\n [tooltip]=\"'Delete last exchange' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"deleteLastExchange()\"\n ></c8y-ai-chat-message-action>\n }\n\n <!-- Only allow regenerating the last message, otherwise we could be deleting a lot of useful message history -->\n @if (message.role === 'assistant' && i > 0 && isLastMessage && !isLoadingAiResponse()) {\n <c8y-ai-chat-message-action\n icon=\"refresh\"\n [tooltip]=\"'Regenerate this response' | translate\"\n [disabled]=\"isLoadingAiResponse()\"\n (click)=\"reload(message)\"\n ></c8y-ai-chat-message-action>\n }\n </c8y-ai-chat-message>\n }\n\n @let agentErrorMsg = agentRequestError();\n @if (agentErrorMsg) {\n <c8y-ai-chat-message [message]=\"{ role: 'assistant', content: agentErrorMsg }\">\n <div\n class=\"alert alert-danger d-flex a-i-center gap-8\"\n role=\"alert\"\n >\n <!-- Since errors come from the backend the only translation is for the fallback error message supplied by the UI. -->\n <div class=\"flex-grow text-pre-wrap\">{{ agentErrorMsg | translate }}</div>\n </div>\n </c8y-ai-chat-message>\n }\n\n <ng-template #suggestionsRef>\n @if (!isLoadingAiResponse()) {\n <!-- As soon as we have any suggestions (even empty) these take priority over what we restored from history -->\n @let activeSuggestions = suggestions() === undefined ? _restoredSuggestions : suggestions();\n @for (suggestion of activeSuggestions; track $index) {\n <c8y-ai-chat-suggestion\n [icon]=\"suggestion.icon || 'c8y-bulb'\"\n [useAiButtons]=\"true\"\n [prompt]=\"suggestion.prompt\"\n [label]=\"suggestion.label ?? suggestion.prompt\"\n (suggestionClicked)=\"sendMessage($event)\"\n [disabled]=\"isLoadingAiResponse()\"\n ></c8y-ai-chat-suggestion>\n }\n }\n </ng-template>\n </c8y-ai-chat>\n}\n", styles: ["@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fade-in-out{animation:fadeIn .2s ease-in}.fade-in-out.ng-leave-active{animation:fadeOut .2s ease-out}.hidden-copy-label{display:block;font-size:0;line-height:0;-webkit-user-select:text;user-select:text}\n"] }]
1026
1036
  }], propDecorators: { agent: [{ type: i0.Input, args: [{ isSignal: true, alias: "agent", required: true }] }], suggestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "suggestions", required: false }] }], chatConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "chatConfig", required: false }] }], welcomeTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "welcomeTemplate", required: false }] }], autoCreateAgents: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoCreateAgents", required: false }] }], variables: [{ type: i0.Input, args: [{ isSignal: true, alias: "variables", required: false }] }], assistantMessageComponent: [{ type: i0.Input, args: [{ isSignal: true, alias: "assistantMessageComponent", required: false }] }], assistantMessageDisplayConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "assistantMessageDisplayConfig", required: false }] }], preprocessAgentMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "preprocessAgentMessage", required: false }] }], pruneMessagesForAgent: [{ type: i0.Input, args: [{ isSignal: true, alias: "pruneMessagesForAgent", required: false }] }], skipHealthCheck: [{ type: i0.Input, args: [{ isSignal: true, alias: "skipHealthCheck", required: false }] }], initialChatHistory: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialChatHistory", required: false }] }], groundingContextProvider: [{ type: i0.Input, args: [{ isSignal: true, alias: "groundingContextProvider", required: false }] }], userAnalyticsContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "userAnalyticsContext", required: false }] }], onMessageFinish: [{ type: i0.Output, args: ["onMessageFinish"] }], onToolResult: [{ type: i0.Output, args: ["onToolResult"] }], onFeedback: [{ type: i0.Output, args: ["onFeedback"] }], onMessagesChange: [{ type: i0.Output, args: ["onMessagesChange"] }], assistantMessageComponents: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => AiChatAssistantMessageComponent), { isSignal: true }] }] } });
1027
1037
 
1028
1038
  class WidgetAiChatSectionComponent {
@@ -1108,10 +1118,10 @@ class WidgetAiChatSectionComponent {
1108
1118
  this.alertService.danger(gettext('There was an error processing the AI response.'));
1109
1119
  }
1110
1120
  }
1111
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WidgetAiChatSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1112
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: WidgetAiChatSectionComponent, isStandalone: true, selector: "c8y-widget-ai-chat-section", inputs: { loadComponentConfig: "loadComponentConfig", suggestions: "suggestions", agent: "agent", chatConfig: "chatConfig", useContextAsVariable: "useContextAsVariable", contextVariableName: "contextVariableName", variables: "variables", onToolResult: "onToolResult" }, ngImport: i0, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n #agentChat\n [chatConfig]=\"chatConfig\"\n [suggestions]=\"agentChat.isWelcoming() ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n (onToolResult)=\"toolResultHandler($event)\"\n [preprocessAgentMessage]=\"_componentConfig().preprocessAgentMessage\"\n [pruneMessagesForAgent]=\"_componentConfig().pruneMessagesForAgent\"\n [assistantMessageDisplayConfig]=\"_componentConfig().assistantMessageDisplayConfig || {}\"\n></c8y-agent-chat>\n", dependencies: [{ kind: "component", type: AgentChatComponent, selector: "c8y-agent-chat", inputs: ["agent", "suggestions", "chatConfig", "welcomeTemplate", "autoCreateAgents", "variables", "assistantMessageComponent", "assistantMessageDisplayConfig", "preprocessAgentMessage", "pruneMessagesForAgent", "skipHealthCheck", "initialChatHistory", "groundingContextProvider", "userAnalyticsContext"], outputs: ["onMessageFinish", "onToolResult", "onFeedback", "onMessagesChange"] }, { kind: "component", type: WidgetConfigFeedbackComponent, selector: "c8y-widget-config-feedback" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
1121
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: WidgetAiChatSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1122
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.25", type: WidgetAiChatSectionComponent, isStandalone: true, selector: "c8y-widget-ai-chat-section", inputs: { loadComponentConfig: "loadComponentConfig", suggestions: "suggestions", agent: "agent", chatConfig: "chatConfig", useContextAsVariable: "useContextAsVariable", contextVariableName: "contextVariableName", variables: "variables", onToolResult: "onToolResult" }, ngImport: i0, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n #agentChat\n [chatConfig]=\"chatConfig\"\n [suggestions]=\"agentChat.isWelcoming() ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n (onToolResult)=\"toolResultHandler($event)\"\n [preprocessAgentMessage]=\"_componentConfig().preprocessAgentMessage\"\n [pruneMessagesForAgent]=\"_componentConfig().pruneMessagesForAgent\"\n [assistantMessageDisplayConfig]=\"_componentConfig().assistantMessageDisplayConfig || {}\"\n></c8y-agent-chat>\n", dependencies: [{ kind: "component", type: AgentChatComponent, selector: "c8y-agent-chat", inputs: ["agent", "suggestions", "chatConfig", "welcomeTemplate", "autoCreateAgents", "variables", "assistantMessageComponent", "assistantMessageDisplayConfig", "preprocessAgentMessage", "pruneMessagesForAgent", "skipHealthCheck", "initialChatHistory", "groundingContextProvider", "userAnalyticsContext"], outputs: ["onMessageFinish", "onToolResult", "onFeedback", "onMessagesChange"] }, { kind: "component", type: WidgetConfigFeedbackComponent, selector: "c8y-widget-config-feedback" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
1113
1123
  }
1114
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WidgetAiChatSectionComponent, decorators: [{
1124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.25", ngImport: i0, type: WidgetAiChatSectionComponent, decorators: [{
1115
1125
  type: Component,
1116
1126
  args: [{ selector: 'c8y-widget-ai-chat-section', imports: [AgentChatComponent, C8yTranslatePipe, WidgetConfigFeedbackComponent, AsyncPipe], standalone: true, template: "<c8y-widget-config-feedback>\n <div\n class=\"m-l-4 btn-ai btn-ai-hint btn-sm\"\n [title]=\"'AI code assistant' | translate\"\n >\n <span></span>\n </div>\n</c8y-widget-config-feedback>\n\n<c8y-agent-chat\n #agentChat\n [chatConfig]=\"chatConfig\"\n [suggestions]=\"agentChat.isWelcoming() ? suggestions : []\"\n [agent]=\"agent\"\n [variables]=\"variables | async\"\n (onToolResult)=\"toolResultHandler($event)\"\n [preprocessAgentMessage]=\"_componentConfig().preprocessAgentMessage\"\n [pruneMessagesForAgent]=\"_componentConfig().pruneMessagesForAgent\"\n [assistantMessageDisplayConfig]=\"_componentConfig().assistantMessageDisplayConfig || {}\"\n></c8y-agent-chat>\n" }]
1117
1127
  }], propDecorators: { loadComponentConfig: [{