@c8y/ngx-components 1022.34.0 → 1022.44.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (943) hide show
  1. package/actility-device-registration/actility-device-registration.component.d.ts.map +1 -1
  2. package/actility-device-registration/actility-device-registration.service.d.ts.map +1 -1
  3. package/alarms/alarm-details.component.d.ts.map +1 -1
  4. package/alarms/alarm-info.component.d.ts.map +1 -1
  5. package/alarms/alarm-severity-to-icon-class.pipe.d.ts +9 -0
  6. package/alarms/alarm-severity-to-icon-class.pipe.d.ts.map +1 -0
  7. package/alarms/alarms-icon.component.d.ts.map +1 -1
  8. package/alarms/alarms-interval-refresh.component.d.ts.map +1 -1
  9. package/alarms/alarms-list.component.d.ts.map +1 -1
  10. package/alarms/alarms-view.service.d.ts.map +1 -1
  11. package/alarms/alarms.component.d.ts.map +1 -1
  12. package/alarms/alarms.helper.d.ts.map +1 -1
  13. package/alarms/alarms.model.d.ts.map +1 -1
  14. package/alarms/cockpit/index.d.ts.map +1 -1
  15. package/alarms/devicemanagement/index.d.ts.map +1 -1
  16. package/alarms/index.d.ts +1 -0
  17. package/alarms/index.d.ts.map +1 -1
  18. package/asset-properties/asset-properties.model.d.ts +77 -1
  19. package/asset-properties/asset-properties.model.d.ts.map +1 -1
  20. package/asset-properties/asset-properties.service.d.ts +17 -0
  21. package/asset-properties/asset-properties.service.d.ts.map +1 -1
  22. package/asset-properties/asset-property-list/asset-property-collapse-button-title.pipe.d.ts +14 -0
  23. package/asset-properties/asset-property-list/asset-property-collapse-button-title.pipe.d.ts.map +1 -0
  24. package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts +2 -1
  25. package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts.map +1 -1
  26. package/asset-properties/asset-property-list/asset-property-list.component.d.ts +52 -13
  27. package/asset-properties/asset-property-list/asset-property-list.component.d.ts.map +1 -1
  28. package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts +7 -3
  29. package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts.map +1 -1
  30. package/asset-properties/asset-property-list/tree-data-source.d.ts +1 -0
  31. package/asset-properties/asset-property-list/tree-data-source.d.ts.map +1 -1
  32. package/asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.d.ts.map +1 -1
  33. package/asset-properties/computed-properties-config/computed-properties-config.component.d.ts +39 -0
  34. package/asset-properties/computed-properties-config/computed-properties-config.component.d.ts.map +1 -0
  35. package/asset-properties/computed-properties.service.d.ts +27 -0
  36. package/asset-properties/computed-properties.service.d.ts.map +1 -0
  37. package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts +11 -6
  38. package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts.map +1 -1
  39. package/asset-properties/custom-properties-drawer.service.d.ts +2 -1
  40. package/asset-properties/custom-properties-drawer.service.d.ts.map +1 -1
  41. package/asset-properties/index.d.ts +1 -0
  42. package/asset-properties/index.d.ts.map +1 -1
  43. package/assets-navigator/asset-node.d.ts.map +1 -1
  44. package/assets-navigator/asset-node.service.d.ts.map +1 -1
  45. package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
  46. package/assets-navigator/asset-selector/asset-selector.model.d.ts +1 -2
  47. package/assets-navigator/asset-selector/asset-selector.model.d.ts.map +1 -1
  48. package/assets-navigator/asset-selector/miller-view.component.d.ts +17 -5
  49. package/assets-navigator/asset-selector/miller-view.component.d.ts.map +1 -1
  50. package/assets-navigator/asset-selector/unassigned-devices-node.d.ts.map +1 -1
  51. package/assets-navigator/load-more-node.d.ts.map +1 -1
  52. package/auth-configuration/basic-settings/login-settings.component.d.ts.map +1 -1
  53. package/auth-configuration/basic-settings/session-configuration.component.d.ts.map +1 -1
  54. package/auth-configuration/factories/navigation.factory.d.ts.map +1 -1
  55. package/auth-configuration/factories/tabs.factory.d.ts.map +1 -1
  56. package/auth-configuration/sso-configuration/sso-configuration.component.d.ts.map +1 -1
  57. package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.d.ts.map +1 -1
  58. package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
  59. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
  60. package/binary-file-download/binary-file-download.service.d.ts.map +1 -1
  61. package/bookmarks/bookmarks.component.d.ts.map +1 -1
  62. package/bookmarks/bookmarks.service.d.ts.map +1 -1
  63. package/bookmarks/edit-bookmarks/edit-bookmarks.component.d.ts.map +1 -1
  64. package/branding/dark-theme/dark-theme-tab.factory.d.ts.map +1 -1
  65. package/branding/extra-css-branding-editor/extra-css-branding-editor-tab.factory.d.ts.map +1 -1
  66. package/branding/plain-branding-editor/plain-branding-editor-tab.factory.d.ts.map +1 -1
  67. package/branding/shared/lazy/branding-form/branding-form.component.d.ts.map +1 -1
  68. package/branding/shared/lazy/branding-import-modal/branding-import-modal.component.d.ts.map +1 -1
  69. package/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.d.ts.map +1 -1
  70. package/cockpit-config/cockpit-config.guard.d.ts.map +1 -1
  71. package/cockpit-config/cockpit-configuration.component.d.ts.map +1 -1
  72. package/computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.d.ts +8 -0
  73. package/computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.d.ts.map +1 -0
  74. package/computed-asset-properties/alarm-count/alarm-count-config.component.d.ts +26 -0
  75. package/computed-asset-properties/alarm-count/alarm-count-config.component.d.ts.map +1 -0
  76. package/computed-asset-properties/alarm-count/alarm-count-today-computed-property.d.ts +8 -0
  77. package/computed-asset-properties/alarm-count/alarm-count-today-computed-property.d.ts.map +1 -0
  78. package/computed-asset-properties/alarm-count/alarm-count-value.d.ts +17 -0
  79. package/computed-asset-properties/alarm-count/alarm-count-value.d.ts.map +1 -0
  80. package/computed-asset-properties/alarm-count/alarm-count.model.d.ts +6 -0
  81. package/computed-asset-properties/alarm-count/alarm-count.model.d.ts.map +1 -0
  82. package/computed-asset-properties/c8y-ngx-components-computed-asset-properties.d.ts.map +1 -0
  83. package/computed-asset-properties/child-count/child-assets-count-computed-property.d.ts +14 -0
  84. package/computed-asset-properties/child-count/child-assets-count-computed-property.d.ts.map +1 -0
  85. package/computed-asset-properties/child-count/child-count-value.d.ts +14 -0
  86. package/computed-asset-properties/child-count/child-count-value.d.ts.map +1 -0
  87. package/computed-asset-properties/child-count/child-devices-count-computed-property.d.ts +14 -0
  88. package/computed-asset-properties/child-count/child-devices-count-computed-property.d.ts.map +1 -0
  89. package/computed-asset-properties/common/realtime-value-base.d.ts +32 -0
  90. package/computed-asset-properties/common/realtime-value-base.d.ts.map +1 -0
  91. package/computed-asset-properties/common/realtime-value-handler.d.ts +19 -0
  92. package/computed-asset-properties/common/realtime-value-handler.d.ts.map +1 -0
  93. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.d.ts +7 -0
  94. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.d.ts.map +1 -0
  95. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.d.ts +21 -0
  96. package/computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.d.ts.map +1 -0
  97. package/computed-asset-properties/configuration-snapshot/configuration-snapshot.model.d.ts +8 -0
  98. package/computed-asset-properties/configuration-snapshot/configuration-snapshot.model.d.ts.map +1 -0
  99. package/computed-asset-properties/event-count/event-count-3-months.d.ts +8 -0
  100. package/computed-asset-properties/event-count/event-count-3-months.d.ts.map +1 -0
  101. package/computed-asset-properties/event-count/event-count-config.component.d.ts +18 -0
  102. package/computed-asset-properties/event-count/event-count-config.component.d.ts.map +1 -0
  103. package/computed-asset-properties/event-count/event-count-today.d.ts +8 -0
  104. package/computed-asset-properties/event-count/event-count-today.d.ts.map +1 -0
  105. package/computed-asset-properties/event-count/event-count-value.d.ts +17 -0
  106. package/computed-asset-properties/event-count/event-count-value.d.ts.map +1 -0
  107. package/computed-asset-properties/event-count/event-count.model.d.ts +4 -0
  108. package/computed-asset-properties/event-count/event-count.model.d.ts.map +1 -0
  109. package/computed-asset-properties/index.d.ts +3 -0
  110. package/computed-asset-properties/index.d.ts.map +1 -0
  111. package/computed-asset-properties/last-device-message/last-device-message-computed-property.d.ts +3 -0
  112. package/computed-asset-properties/last-device-message/last-device-message-computed-property.d.ts.map +1 -0
  113. package/computed-asset-properties/last-device-message/last-device-message-value.d.ts +13 -0
  114. package/computed-asset-properties/last-device-message/last-device-message-value.d.ts.map +1 -0
  115. package/computed-asset-properties/last-measurement/last-measurement-computed-property.d.ts +8 -0
  116. package/computed-asset-properties/last-measurement/last-measurement-computed-property.d.ts.map +1 -0
  117. package/computed-asset-properties/last-measurement/last-measurement-config.component.d.ts +48 -0
  118. package/computed-asset-properties/last-measurement/last-measurement-config.component.d.ts.map +1 -0
  119. package/computed-asset-properties/last-measurement/last-measurement-value.d.ts +13 -0
  120. package/computed-asset-properties/last-measurement/last-measurement-value.d.ts.map +1 -0
  121. package/computed-asset-properties/last-measurement/last-measurement.model.d.ts +28 -0
  122. package/computed-asset-properties/last-measurement/last-measurement.model.d.ts.map +1 -0
  123. package/computed-asset-properties/strategies/alarm-count-strategy.d.ts +17 -0
  124. package/computed-asset-properties/strategies/alarm-count-strategy.d.ts.map +1 -0
  125. package/computed-asset-properties/strategies/child-count-strategy.d.ts +14 -0
  126. package/computed-asset-properties/strategies/child-count-strategy.d.ts.map +1 -0
  127. package/computed-asset-properties/strategies/count-strategy-base.d.ts +12 -0
  128. package/computed-asset-properties/strategies/count-strategy-base.d.ts.map +1 -0
  129. package/computed-asset-properties/strategies/event-count-strategy.d.ts +16 -0
  130. package/computed-asset-properties/strategies/event-count-strategy.d.ts.map +1 -0
  131. package/computed-asset-properties/strategies/last-device-message-strategy.d.ts +20 -0
  132. package/computed-asset-properties/strategies/last-device-message-strategy.d.ts.map +1 -0
  133. package/computed-asset-properties/strategies/last-measurement-strategy.d.ts +16 -0
  134. package/computed-asset-properties/strategies/last-measurement-strategy.d.ts.map +1 -0
  135. package/connectivity/abstract-connectivity-node.factory.d.ts.map +1 -1
  136. package/connectivity/actility/actility-tab.factory.d.ts.map +1 -1
  137. package/connectivity/sigfox/sigfox-tab.factory.d.ts.map +1 -1
  138. package/connectivity/sim/sim.module.d.ts.map +1 -1
  139. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.component.d.ts.map +1 -1
  140. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.model.d.ts.map +1 -1
  141. package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.module.d.ts.map +1 -1
  142. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  143. package/context-dashboard/context-dashboard.model.d.ts +16 -0
  144. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  145. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  146. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  147. package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
  148. package/context-dashboard/dashboard-details-tabs.factory.d.ts.map +1 -1
  149. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
  150. package/context-dashboard/dashboard-settings/dashboard-version-history.component.d.ts.map +1 -1
  151. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
  152. package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts.map +1 -1
  153. package/context-dashboard/device-info-dashboard/device-info-dashboard.module.d.ts.map +1 -1
  154. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.d.ts.map +1 -1
  155. package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.d.ts.map +1 -1
  156. package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
  157. package/context-dashboard/widget-config/appearance-settings.component.d.ts.map +1 -1
  158. package/context-dashboard/widget-config.service.d.ts +11 -1
  159. package/context-dashboard/widget-config.service.d.ts.map +1 -1
  160. package/core/action/action.service.d.ts +1 -1
  161. package/core/action-bar/action-bar.service.d.ts +1 -1
  162. package/core/authentication/simplified-auth.service.d.ts +1 -1
  163. package/core/authentication/simplified-auth.service.d.ts.map +1 -1
  164. package/core/breadcrumb/breadcrumb.service.d.ts +1 -1
  165. package/core/common/date.pipe.d.ts.map +1 -1
  166. package/core/common/extension-hooks.d.ts.map +1 -1
  167. package/core/common/options.service.d.ts +1 -1
  168. package/core/common/service-registry.service.d.ts +1 -1
  169. package/core/common/ui-state.service.d.ts +7 -7
  170. package/core/common/ui-state.service.d.ts.map +1 -1
  171. package/core/common/user-preferences/user-preferences.service.d.ts +4 -4
  172. package/core/common/user-preferences/user-preferences.service.d.ts.map +1 -1
  173. package/core/dashboard/widgets-dashboard.component.d.ts +1 -1
  174. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  175. package/core/data-grid/action-controls-extension.service.d.ts +1 -1
  176. package/core/data-grid/filter-chip/filter-mapper.factory.d.ts +1 -1
  177. package/core/date-picker/date-picker.component.d.ts.map +1 -1
  178. package/core/docs/docs.models.d.ts +1 -1
  179. package/core/docs/docs.module.d.ts +1 -1
  180. package/core/docs/help-and-support-outlet/help-and-support-outlet.module.d.ts +1 -1
  181. package/core/docs/legal-notices-outlet/legal-notices-outlet.module.d.ts +1 -1
  182. package/core/docs/support-outlet/support-outlet.component.d.ts +4 -3
  183. package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
  184. package/core/docs/support-outlet/support-outlet.module.d.ts +1 -1
  185. package/core/drawer/drawer.service.d.ts +1 -1
  186. package/core/dynamic-component/dynamic-component.model.d.ts +18 -4
  187. package/core/dynamic-component/dynamic-component.model.d.ts.map +1 -1
  188. package/core/dynamic-forms/i18n/translate.extension.d.ts.map +1 -1
  189. package/core/feedback-form/feedback-form.component.d.ts +27 -0
  190. package/core/feedback-form/feedback-form.component.d.ts.map +1 -0
  191. package/core/feedback-form/feedback-form.model.d.ts +6 -0
  192. package/core/feedback-form/feedback-form.model.d.ts.map +1 -0
  193. package/core/feedback-form/index.d.ts +2 -0
  194. package/core/feedback-form/index.d.ts.map +1 -0
  195. package/core/i18n/gettext.d.ts +4 -1
  196. package/core/i18n/gettext.d.ts.map +1 -1
  197. package/core/i18n/pattern-messages.data.d.ts +61 -0
  198. package/core/i18n/pattern-messages.data.d.ts.map +1 -1
  199. package/core/i18n/patterns-message.hook.d.ts +1 -1
  200. package/core/index.d.ts +1 -0
  201. package/core/index.d.ts.map +1 -1
  202. package/core/modal/modal.service.d.ts +0 -1
  203. package/core/modal/modal.service.d.ts.map +1 -1
  204. package/core/navigator/navigator-bottom/navigator-bottom.module.d.ts +1 -1
  205. package/core/navigator/navigator-top/navigator-top.module.d.ts +1 -1
  206. package/core/navigator/navigator.module.d.ts +1 -1
  207. package/core/navigator/navigator.service.d.ts +1 -1
  208. package/core/plugins/index.d.ts +1 -0
  209. package/core/plugins/index.d.ts.map +1 -1
  210. package/core/plugins/plugins-injection-token.d.ts +14 -0
  211. package/core/plugins/plugins-injection-token.d.ts.map +1 -0
  212. package/core/plugins/plugins-loader.service.d.ts +7 -21
  213. package/core/plugins/plugins-loader.service.d.ts.map +1 -1
  214. package/core/plugins/plugins-resolve.service.d.ts +1 -0
  215. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  216. package/core/preview-feature/preview-feature.component.d.ts.map +1 -1
  217. package/core/preview-feature/preview-feature.service.d.ts +1 -1
  218. package/core/provider-configuration/provider-configuration-hook.d.ts +1 -1
  219. package/core/query-param-handler/index.d.ts +1 -1
  220. package/core/query-param-handler/query-param-bottom-drawer.service.d.ts +1 -1
  221. package/core/query-param-handler/query-param-handler.service.d.ts +1 -1
  222. package/core/query-param-handler/query-param-modal-handler.service.d.ts +1 -1
  223. package/core/router/router.service.d.ts +1 -1
  224. package/core/search/search.service.d.ts +1 -1
  225. package/core/stepper/stepper.service.d.ts +1 -1
  226. package/core/tabs/tab.component.d.ts +2 -2
  227. package/core/tabs/tab.component.d.ts.map +1 -1
  228. package/core/tabs/tab.model.d.ts +2 -2
  229. package/core/tabs/tab.model.d.ts.map +1 -1
  230. package/core/tabs/tabs.service.d.ts +1 -1
  231. package/core/tabs/tabs.service.d.ts.map +1 -1
  232. package/core/ui-settings/ui-settings.module.d.ts +1 -1
  233. package/core/user/change-current-user-password.service.d.ts +10 -0
  234. package/core/user/change-current-user-password.service.d.ts.map +1 -0
  235. package/core/user/index.d.ts +1 -0
  236. package/core/user/index.d.ts.map +1 -1
  237. package/core/user/user-details-drawer/user-details-drawer.module.d.ts +1 -1
  238. package/core/user/user-menu.service.d.ts +1 -1
  239. package/core/user/user.module.d.ts +1 -1
  240. package/core/version/version.model.d.ts +1 -1
  241. package/core/version/version.module.d.ts +1 -1
  242. package/core/wizard/wizard.model.d.ts +1 -1
  243. package/dashboard-details-advanced-tab/advanced-tab.factory.d.ts.map +1 -1
  244. package/dashboard-details-advanced-tab/assign-widget-assets/assign-widget-asset-modal.component.d.ts.map +1 -1
  245. package/dashboard-details-advanced-tab/dashboard-json-editor/dashboard-json-editor.component.d.ts.map +1 -1
  246. package/dashboard-details-advanced-tab/dashboard-json-editor/import-export-widgets.service.d.ts.map +1 -1
  247. package/dashboard-manager/dashboard-manager-tabs.factory.d.ts.map +1 -1
  248. package/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
  249. package/dashboard-manager/devicemanagement/index.d.ts +1 -1
  250. package/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.d.ts.map +1 -1
  251. package/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.d.ts.map +1 -1
  252. package/dashboard-manager/type-dashboards-list/device-type-value.grid-column.d.ts.map +1 -1
  253. package/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
  254. package/data-grid-columns/asset-type/asset-type-grid-column.d.ts.map +1 -1
  255. package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
  256. package/datapoint-explorer/datapoint-explorer-navigation-factory.d.ts.map +1 -1
  257. package/datapoint-explorer/devicemanagement/index.d.ts +3 -0
  258. package/datapoint-explorer/devicemanagement/index.d.ts.map +1 -1
  259. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts +4 -2
  260. package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -1
  261. package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts.map +1 -1
  262. package/datapoint-explorer/view/datapoint-explorer.component.d.ts +7 -3
  263. package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -1
  264. package/datapoint-explorer/view/datapoint-explorer.model.d.ts +1 -0
  265. package/datapoint-explorer/view/datapoint-explorer.model.d.ts.map +1 -1
  266. package/datapoint-explorer/view/index.d.ts +3 -0
  267. package/datapoint-explorer/view/index.d.ts.map +1 -1
  268. package/datapoint-explorer/view/send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component.d.ts.map +1 -1
  269. package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts.map +1 -1
  270. package/datapoint-library/datapoint-library.module.d.ts.map +1 -1
  271. package/datapoint-library/details/datapoint-library-details.component.d.ts +1 -2
  272. package/datapoint-library/details/datapoint-library-details.component.d.ts.map +1 -1
  273. package/datapoint-library/list/datapoint-library-list.component.d.ts.map +1 -1
  274. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
  275. package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts.map +1 -1
  276. package/datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.d.ts.map +1 -1
  277. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
  278. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -1
  279. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -1
  280. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -1
  281. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
  282. package/default-subscriptions/default-subscriptions-navigation.factory.d.ts.map +1 -1
  283. package/default-subscriptions/default-subscriptions.component.d.ts.map +1 -1
  284. package/device-grid/columns/alarms.cell-renderer.component.d.ts.map +1 -1
  285. package/device-grid/columns/alarms.device-grid-column.d.ts.map +1 -1
  286. package/device-grid/columns/group.device-grid-column.d.ts.map +1 -1
  287. package/device-grid/columns/imei.device-grid-column.d.ts.map +1 -1
  288. package/device-grid/columns/model.device-grid-column.d.ts.map +1 -1
  289. package/device-grid/columns/name.device-grid-column.d.ts.map +1 -1
  290. package/device-grid/columns/registration-date.device-grid-column.d.ts.map +1 -1
  291. package/device-grid/columns/serial-number.device-grid-column.d.ts.map +1 -1
  292. package/device-grid/columns/status.device-grid-column.d.ts.map +1 -1
  293. package/device-grid/columns/system-id.device-grid-column.d.ts.map +1 -1
  294. package/device-grid/columns/type.device-grid-column.d.ts.map +1 -1
  295. package/device-grid/device-grid.component.d.ts.map +1 -1
  296. package/device-grid/device-grid.service.d.ts.map +1 -1
  297. package/device-list/add-smart-group.component.d.ts.map +1 -1
  298. package/device-list/device-list-navigation.factory.d.ts.map +1 -1
  299. package/device-list/devices.breadcrumb-factory.d.ts.map +1 -1
  300. package/device-map/device-map-navigation.factory.d.ts.map +1 -1
  301. package/device-profile/add-device-profile.component.d.ts.map +1 -1
  302. package/device-profile/device-profile-list.component.d.ts.map +1 -1
  303. package/device-profile/device-profile-navigation.factory.d.ts.map +1 -1
  304. package/device-profile/device-profile.component.d.ts.map +1 -1
  305. package/device-profile/device-profile.service.d.ts.map +1 -1
  306. package/device-profile/device-tab-profile/device-tab-profile.component.d.ts.map +1 -1
  307. package/device-profile/select-configuration-modal.component.d.ts.map +1 -1
  308. package/device-protocols/device-protocols.guard.d.ts.map +1 -1
  309. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -1
  310. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
  311. package/device-shell/device-shell.module.d.ts.map +1 -1
  312. package/device-shell/shared/device-shell.service.d.ts.map +1 -1
  313. package/device-shell/shell/shell.component.d.ts.map +1 -1
  314. package/diagnostics/diagnostics.module.d.ts.map +1 -1
  315. package/diagnostics/diagnostics.service.d.ts.map +1 -1
  316. package/echart/charts.component.d.ts +11 -2
  317. package/echart/charts.component.d.ts.map +1 -1
  318. package/echart/index.d.ts +1 -0
  319. package/echart/index.d.ts.map +1 -1
  320. package/echart/models/chart.model.d.ts +5 -0
  321. package/echart/models/chart.model.d.ts.map +1 -1
  322. package/echart/models/datapoints-graph-widget.model.d.ts +2 -0
  323. package/echart/models/datapoints-graph-widget.model.d.ts.map +1 -1
  324. package/echart/select-aggregated-datapoint/select-aggregated-datapoint.component.d.ts +18 -0
  325. package/echart/select-aggregated-datapoint/select-aggregated-datapoint.component.d.ts.map +1 -0
  326. package/echart/services/chart-helpers.service.d.ts +4 -0
  327. package/echart/services/chart-helpers.service.d.ts.map +1 -1
  328. package/echart/services/echarts-options.service.d.ts +4 -5
  329. package/echart/services/echarts-options.service.d.ts.map +1 -1
  330. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  331. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  332. package/ecosystem/application-plugins/apps-to-update-remotes-select.component.d.ts.map +1 -1
  333. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -1
  334. package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
  335. package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -1
  336. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
  337. package/ecosystem/application-properties/application-properties.component.d.ts.map +1 -1
  338. package/ecosystem/application-properties/subscription-modal/subscription-modal.component.d.ts.map +1 -1
  339. package/ecosystem/ecosystem-tabs.factory.d.ts.map +1 -1
  340. package/ecosystem/license-confirm/license-confirm-modal.component.d.ts.map +1 -1
  341. package/ecosystem/license-confirm/license-view.component.d.ts.map +1 -1
  342. package/ecosystem/microservices/add-microservice.component.d.ts.map +1 -1
  343. package/ecosystem/packages/add-package.component.d.ts.map +1 -1
  344. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
  345. package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
  346. package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts.map +1 -1
  347. package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
  348. package/ecosystem/plugin-setup-stepper/plugin-setup-stepper.module.d.ts.map +1 -1
  349. package/ecosystem/shared/add-application.component.d.ts.map +1 -1
  350. package/ecosystem/shared/application-card.component.d.ts.map +1 -1
  351. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -1
  352. package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
  353. package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
  354. package/ecosystem/shared/package-availability.service.d.ts.map +1 -1
  355. package/ecosystem/shared/package-version-select/package-version-select.component.d.ts.map +1 -1
  356. package/ecosystem/shared/upload-archive.component.d.ts.map +1 -1
  357. package/editor/editor.component.d.ts +15 -0
  358. package/editor/editor.component.d.ts.map +1 -1
  359. package/exports/index.d.ts +1 -1
  360. package/exports/index.d.ts.map +1 -1
  361. package/exports/list/exports-grid.service.d.ts.map +1 -1
  362. package/exports/list/exports-list/exports-list.component.d.ts.map +1 -1
  363. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +2 -1
  364. package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
  365. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +8 -7
  366. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  367. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +2 -1
  368. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
  369. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +2 -1
  370. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
  371. package/fesm2022/c8y-ngx-components-alarms.mjs +40 -2
  372. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  373. package/fesm2022/c8y-ngx-components-asset-properties.mjs +608 -97
  374. package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
  375. package/fesm2022/c8y-ngx-components-asset-property-grid.component-CRnyUbyz.mjs.map +1 -1
  376. package/fesm2022/c8y-ngx-components-assets-navigator.mjs +70 -23
  377. package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
  378. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -1
  379. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  380. package/fesm2022/c8y-ngx-components-binary-file-download.mjs +2 -1
  381. package/fesm2022/c8y-ngx-components-binary-file-download.mjs.map +1 -1
  382. package/fesm2022/c8y-ngx-components-bookmarks.mjs +2 -1
  383. package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
  384. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +2 -1
  385. package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs.map +1 -1
  386. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +3 -3
  387. package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs.map +1 -1
  388. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +2 -1
  389. package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs.map +1 -1
  390. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +22 -12
  391. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  392. package/fesm2022/c8y-ngx-components-child-devices.mjs +2 -1
  393. package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
  394. package/fesm2022/c8y-ngx-components-cockpit-config.mjs +2 -1
  395. package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
  396. package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BOpIFCYh.mjs +68 -0
  397. package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BOpIFCYh.mjs.map +1 -0
  398. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-D8otkLI8.mjs +73 -0
  399. package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-D8otkLI8.mjs.map +1 -0
  400. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-AVm6qa9k.mjs +44 -0
  401. package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-AVm6qa9k.mjs.map +1 -0
  402. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CtUoKGuU.mjs +91 -0
  403. package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CtUoKGuU.mjs.map +1 -0
  404. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +643 -0
  405. package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs.map +1 -0
  406. package/fesm2022/c8y-ngx-components-connectivity.mjs +2 -1
  407. package/fesm2022/c8y-ngx-components-connectivity.mjs.map +1 -1
  408. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +2 -1
  409. package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
  410. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs → c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BkcNSexF.mjs} +3 -2
  411. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BkcNSexF.mjs.map +1 -0
  412. package/fesm2022/{c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs → c8y-ngx-components-context-dashboard-dashboard-version-history.component-D9W68e7h.mjs} +3 -2
  413. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-version-history.component-D9W68e7h.mjs.map +1 -0
  414. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +43 -10
  415. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  416. package/fesm2022/{c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CwfVxTSx.mjs → c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0lATUjO.mjs} +12 -8
  417. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0lATUjO.mjs.map +1 -0
  418. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +4 -3
  419. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs.map +1 -1
  420. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +2 -1
  421. package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
  422. package/fesm2022/c8y-ngx-components-data-broker.mjs +2 -1
  423. package/fesm2022/c8y-ngx-components-data-broker.mjs.map +1 -1
  424. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +2 -1
  425. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
  426. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +2 -1
  427. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
  428. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +38 -9
  429. package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -1
  430. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +61 -46
  431. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  432. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +2 -1
  433. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
  434. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +2 -1
  435. package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
  436. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +2 -1
  437. package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
  438. package/fesm2022/c8y-ngx-components-datapoint-library.mjs +2 -1
  439. package/fesm2022/c8y-ngx-components-datapoint-library.mjs.map +1 -1
  440. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -1
  441. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  442. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +2 -1
  443. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  444. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +2 -1
  445. package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
  446. package/fesm2022/c8y-ngx-components-device-grid.mjs +3 -3
  447. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  448. package/fesm2022/c8y-ngx-components-device-list.mjs +2 -1
  449. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  450. package/fesm2022/c8y-ngx-components-device-map.mjs +2 -1
  451. package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
  452. package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -1
  453. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  454. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -2
  455. package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
  456. package/fesm2022/c8y-ngx-components-device-protocols.mjs +2 -1
  457. package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
  458. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +2 -1
  459. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  460. package/fesm2022/c8y-ngx-components-device-shell.mjs +2 -1
  461. package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
  462. package/fesm2022/c8y-ngx-components-diagnostics.mjs +2 -1
  463. package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
  464. package/fesm2022/c8y-ngx-components-echart-models.mjs +9 -2
  465. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  466. package/fesm2022/c8y-ngx-components-echart.mjs +319 -140
  467. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  468. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +2 -1
  469. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  470. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +2 -1
  471. package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
  472. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +2 -1
  473. package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs.map +1 -1
  474. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -1
  475. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  476. package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -1
  477. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  478. package/fesm2022/c8y-ngx-components-editor.mjs +15 -0
  479. package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
  480. package/fesm2022/c8y-ngx-components-events.mjs +1 -1
  481. package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
  482. package/fesm2022/c8y-ngx-components-exports-list.mjs +2 -1
  483. package/fesm2022/c8y-ngx-components-exports-list.mjs.map +1 -1
  484. package/fesm2022/c8y-ngx-components-exports.mjs +2 -1
  485. package/fesm2022/c8y-ngx-components-exports.mjs.map +1 -1
  486. package/fesm2022/c8y-ngx-components-file-preview.mjs +2 -1
  487. package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
  488. package/fesm2022/c8y-ngx-components-files-repository.mjs +2 -1
  489. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  490. package/fesm2022/c8y-ngx-components-icon-selector.mjs +2 -1
  491. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  492. package/fesm2022/c8y-ngx-components-location.mjs +2 -1
  493. package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
  494. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +2 -1
  495. package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
  496. package/fesm2022/c8y-ngx-components-map.mjs +2 -1
  497. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  498. package/fesm2022/c8y-ngx-components-messaging-management.mjs +2 -1
  499. package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
  500. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +2 -1
  501. package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
  502. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +2 -1
  503. package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
  504. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +2 -1
  505. package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
  506. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +2 -1
  507. package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
  508. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +2 -1
  509. package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
  510. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +2 -1
  511. package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs.map +1 -1
  512. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +2 -1
  513. package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
  514. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +2 -1
  515. package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
  516. package/fesm2022/c8y-ngx-components-operations-shared.mjs +2 -1
  517. package/fesm2022/c8y-ngx-components-operations-shared.mjs.map +1 -1
  518. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +4 -4
  519. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
  520. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +4 -4
  521. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
  522. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +4 -4
  523. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  524. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +4 -4
  525. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  526. package/fesm2022/c8y-ngx-components-operations.mjs +2 -1
  527. package/fesm2022/c8y-ngx-components-operations.mjs.map +1 -1
  528. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +2 -1
  529. package/fesm2022/c8y-ngx-components-pending-mo-request.mjs.map +1 -1
  530. package/fesm2022/c8y-ngx-components-platform-configuration.mjs +2 -1
  531. package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
  532. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -1
  533. package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
  534. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs +1 -1
  535. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs.map +1 -1
  536. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +2 -1
  537. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  538. package/fesm2022/c8y-ngx-components-register-device.mjs +2 -1
  539. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  540. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +3 -3
  541. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
  542. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +2 -1
  543. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -1
  544. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +2 -1
  545. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
  546. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +2 -1
  547. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -1
  548. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +2 -1
  549. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -1
  550. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +3 -3
  551. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
  552. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +2 -1
  553. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -1
  554. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +2 -1
  555. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  556. package/fesm2022/c8y-ngx-components-replace-device.mjs +2 -1
  557. package/fesm2022/c8y-ngx-components-replace-device.mjs.map +1 -1
  558. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +2 -1
  559. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  560. package/fesm2022/c8y-ngx-components-reports.mjs +2 -1
  561. package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
  562. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -1
  563. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  564. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -1
  565. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  566. package/fesm2022/c8y-ngx-components-repository-shared.mjs +3 -2
  567. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  568. package/fesm2022/c8y-ngx-components-repository-software.mjs +2 -1
  569. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  570. package/fesm2022/c8y-ngx-components-search.mjs +2 -1
  571. package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
  572. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +2 -1
  573. package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
  574. package/fesm2022/c8y-ngx-components-sensor-phone.mjs +3 -2
  575. package/fesm2022/c8y-ngx-components-sensor-phone.mjs.map +1 -1
  576. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +2 -1
  577. package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs.map +1 -1
  578. package/fesm2022/c8y-ngx-components-services-shared.mjs +1 -1
  579. package/fesm2022/c8y-ngx-components-services-shared.mjs.map +1 -1
  580. package/fesm2022/c8y-ngx-components-services.mjs +2 -1
  581. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  582. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +2 -1
  583. package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
  584. package/fesm2022/c8y-ngx-components-sms-gateway.mjs +3 -2
  585. package/fesm2022/c8y-ngx-components-sms-gateway.mjs.map +1 -1
  586. package/fesm2022/c8y-ngx-components-sub-assets.mjs +2 -1
  587. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  588. package/fesm2022/c8y-ngx-components-tenants.mjs +37 -37
  589. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  590. package/fesm2022/c8y-ngx-components-tracking.mjs +2 -1
  591. package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
  592. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +5 -5
  593. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  594. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +2 -1
  595. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  596. package/fesm2022/c8y-ngx-components-upgrade.mjs +10 -3
  597. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  598. package/fesm2022/c8y-ngx-components-user-roles.mjs +2 -1
  599. package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
  600. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +2 -1
  601. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  602. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +2 -1
  603. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  604. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +2 -1
  605. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  606. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs +2 -1
  607. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs.map +1 -1
  608. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +2 -1
  609. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -1
  610. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs +2 -1
  611. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs.map +1 -1
  612. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs +2 -1
  613. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs.map +1 -1
  614. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +2 -1
  615. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
  616. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +2 -1
  617. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
  618. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs +2 -1
  619. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs.map +1 -1
  620. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs +1 -1
  621. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
  622. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs +2 -1
  623. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs.map +1 -1
  624. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +3 -3
  625. package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
  626. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs +3 -6
  627. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs.map +1 -1
  628. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +2 -1
  629. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
  630. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +2 -1
  631. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  632. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs +2 -1
  633. package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs.map +1 -1
  634. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +2 -1
  635. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  636. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +2 -2
  637. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
  638. package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs +2 -1
  639. package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs.map +1 -1
  640. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +2 -1
  641. package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -1
  642. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs +2 -1
  643. package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs.map +1 -1
  644. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs +2 -1
  645. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs.map +1 -1
  646. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -1
  647. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  648. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +2 -1
  649. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -1
  650. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +9 -6
  651. package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
  652. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +15 -7
  653. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  654. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
  655. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  656. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +2 -1
  657. package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
  658. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +2 -1
  659. package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
  660. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +2 -1
  661. package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
  662. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +13 -8
  663. package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
  664. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +2 -1
  665. package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
  666. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +2 -1
  667. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  668. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -1
  669. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  670. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +2 -1
  671. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  672. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +2 -1
  673. package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
  674. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +2 -1
  675. package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
  676. package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs +3 -10
  677. package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs.map +1 -1
  678. package/fesm2022/c8y-ngx-components.mjs +694 -504
  679. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  680. package/file-preview/file-preview.component.d.ts.map +1 -1
  681. package/files-repository/files-repository-navigation.factory.d.ts.map +1 -1
  682. package/files-repository/files-repository-upload.component.d.ts.map +1 -1
  683. package/files-repository/files-repository.component.d.ts.map +1 -1
  684. package/files-repository/files-repository.service.d.ts +1 -2
  685. package/files-repository/files-repository.service.d.ts.map +1 -1
  686. package/icon-selector/icon-selector-modal/icon-selector-modal.component.d.ts.map +1 -1
  687. package/icon-selector/icon-selector.component.d.ts.map +1 -1
  688. package/locales/de.po +138 -12
  689. package/locales/es.po +138 -12
  690. package/locales/fr.po +138 -12
  691. package/locales/ja_JP.po +132 -12
  692. package/locales/ko.po +137 -12
  693. package/locales/locales.pot +103 -12
  694. package/locales/nl.po +138 -12
  695. package/locales/pl.po +138 -12
  696. package/locales/pt_BR.po +138 -12
  697. package/locales/zh_CN.po +137 -12
  698. package/locales/zh_TW.po +137 -12
  699. package/location/location-tab.factory.d.ts.map +1 -1
  700. package/location/location.component.d.ts.map +1 -1
  701. package/loriot-device-registration/loriot-device-registration.component.d.ts.map +1 -1
  702. package/loriot-device-registration/loriot-provider.service.d.ts.map +1 -1
  703. package/map/map.component.d.ts.map +1 -1
  704. package/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.d.ts.map +1 -1
  705. package/messaging-management/messaging/shared/usage/usage.component.d.ts.map +1 -1
  706. package/messaging-management/messaging/topic/topic-list-view.component.d.ts.map +1 -1
  707. package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.d.ts.map +1 -1
  708. package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.d.ts.map +1 -1
  709. package/messaging-management/messaging/topic/topics-data-grid.service.d.ts.map +1 -1
  710. package/messaging-management/navigator/messaging-navigator-factory.d.ts.map +1 -1
  711. package/messaging-management/navigator/topic-details-tab.factory.d.ts.map +1 -1
  712. package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts.map +1 -1
  713. package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts.map +1 -1
  714. package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
  715. package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts.map +1 -1
  716. package/operations/bulk-single-operations-list/single-operation-item.component.d.ts.map +1 -1
  717. package/operations/bulk-single-operations-list/single-operations-list.component.d.ts.map +1 -1
  718. package/operations/factories/bulk-operations-tab.factory.d.ts.map +1 -1
  719. package/operations/grid-columns/creation-time.grid-column.d.ts.map +1 -1
  720. package/operations/grid-columns/device.grid-column.d.ts.map +1 -1
  721. package/operations/grid-columns/failure-reason.grid-column.d.ts.map +1 -1
  722. package/operations/grid-columns/status.grid-column.d.ts.map +1 -1
  723. package/operations/operations-list/device-control.feature.d.ts.map +1 -1
  724. package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
  725. package/operations/operations-list/operations-list.component.d.ts.map +1 -1
  726. package/operations/operations-list/single-operations-tab.factory.d.ts.map +1 -1
  727. package/operations/operations-list-item-details/operation-details-tabs.component.d.ts.map +1 -1
  728. package/operations/shared/nav.factory.d.ts.map +1 -1
  729. package/operations/shared/operations.service.d.ts.map +1 -1
  730. package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts.map +1 -1
  731. package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts.map +1 -1
  732. package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts.map +1 -1
  733. package/operations/stepper-bulk-type-software/select-software-step.component.d.ts.map +1 -1
  734. package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts.map +1 -1
  735. package/package.json +1 -1
  736. package/pending-mo-request/pending-mo-request-interceptor.d.ts.map +1 -1
  737. package/pending-mo-request/pending-mo-request.service.d.ts.map +1 -1
  738. package/platform-configuration/platform-configuration-form-provider.service.d.ts.map +1 -1
  739. package/protocol-lpwan/lpwan-protocol.module.d.ts.map +1 -1
  740. package/protocol-lpwan/lpwan-set-connections.component.d.ts.map +1 -1
  741. package/protocol-lpwan/lpwan-set-device-protocol.component.d.ts.map +1 -1
  742. package/protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.d.ts.map +1 -1
  743. package/protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.d.ts.map +1 -1
  744. package/protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.d.ts.map +1 -1
  745. package/protocol-lpwan/multiple-lns-connectors/no-connections-found.component.d.ts.map +1 -1
  746. package/protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.d.ts.map +1 -1
  747. package/protocol-opcua/opcua-address-space.component.d.ts.map +1 -1
  748. package/protocol-opcua/opcua-device-protocol-detail.component.d.ts.map +1 -1
  749. package/protocol-opcua/opcua-server-config.component.d.ts.map +1 -1
  750. package/protocol-opcua/opcua-servers.component.d.ts.map +1 -1
  751. package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
  752. package/register-device/device-registration-view.component.d.ts.map +1 -1
  753. package/register-device/extensible/base-extensible-device-registration.service.d.ts.map +1 -1
  754. package/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.d.ts.map +1 -1
  755. package/register-device/extensible/bulk/extensible-bulk-device-registration.service.d.ts.map +1 -1
  756. package/register-device/extensible/single/extensible-device-registration-modal.component.d.ts.map +1 -1
  757. package/register-device/extensible/single/extensible-device-registration-stepper.component.d.ts.map +1 -1
  758. package/register-device/extensible/single/extensible-device-registration.service.d.ts.map +1 -1
  759. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  760. package/register-device/register-device-navigation.factory.d.ts.map +1 -1
  761. package/register-device/register-device.service.d.ts.map +1 -1
  762. package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -1
  763. package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -1
  764. package/remote-access/passthrough/index.d.ts +1 -1
  765. package/remote-access/passthrough/index.d.ts.map +1 -1
  766. package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -1
  767. package/remote-access/ssh/index.d.ts.map +1 -1
  768. package/remote-access/telnet/index.d.ts.map +1 -1
  769. package/remote-access/vnc/index.d.ts.map +1 -1
  770. package/replace-device/replace-device-grid-action.factory.d.ts.map +1 -1
  771. package/replace-device/replace-device-wizard/replace-device-wizard.component.d.ts.map +1 -1
  772. package/replace-device/replace-device-wizard/replace-device-wizard.service.d.ts.map +1 -1
  773. package/replace-device/replace-device.service.d.ts.map +1 -1
  774. package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
  775. package/report-dashboard/report-dashboard-navigation.factory.d.ts.map +1 -1
  776. package/reports/export-schedules.component.d.ts.map +1 -1
  777. package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts.map +1 -1
  778. package/repository/configuration/device-tab/save-to-repository.component.d.ts.map +1 -1
  779. package/repository/configuration/device-tab/text-based-configuration.component.d.ts.map +1 -1
  780. package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
  781. package/repository/configuration/list/configuration-list.component.d.ts.map +1 -1
  782. package/repository/configuration/list/configuration-repository-navigation-factory.d.ts.map +1 -1
  783. package/repository/firmware/device-tab/firmware-device-tab.component.d.ts.map +1 -1
  784. package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts.map +1 -1
  785. package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
  786. package/repository/firmware/list/add-firmware-patch-modal.component.d.ts.map +1 -1
  787. package/repository/firmware/list/firmware-details.component.d.ts.map +1 -1
  788. package/repository/firmware/list/firmware-list.component.d.ts.map +1 -1
  789. package/repository/firmware/list/firmware-repository-navigation-factory.d.ts.map +1 -1
  790. package/repository/shared/columns/description.grid-column.d.ts.map +1 -1
  791. package/repository/shared/columns/device-type.grid-column.d.ts.map +1 -1
  792. package/repository/shared/columns/file.grid-column.d.ts.map +1 -1
  793. package/repository/shared/columns/name.grid-column.d.ts.map +1 -1
  794. package/repository/shared/columns/type.filtering-form-renderer.component.d.ts.map +1 -1
  795. package/repository/shared/columns/type.grid-column.d.ts.map +1 -1
  796. package/repository/shared/columns/versions.grid-column.d.ts.map +1 -1
  797. package/repository/shared/repository.service.d.ts.map +1 -1
  798. package/repository/shared/select-modal/repository-select-modal.component.d.ts +1 -1
  799. package/repository/shared/select-modal/repository-select-modal.component.d.ts.map +1 -1
  800. package/repository/shared/software-type/software-type.component.d.ts.map +1 -1
  801. package/repository/software/device-tab/installed-software.component.d.ts.map +1 -1
  802. package/repository/software/device-tab/software-repository-device-tab.module.d.ts.map +1 -1
  803. package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
  804. package/repository/software/list/software-details.component.d.ts.map +1 -1
  805. package/repository/software/list/software-list.component.d.ts.map +1 -1
  806. package/repository/software/list/software-repository-navigation-factory.d.ts.map +1 -1
  807. package/search/columns/asset-type-search-grid-column.d.ts.map +1 -1
  808. package/search/search-grid.component.d.ts.map +1 -1
  809. package/search/search-results.component.d.ts.map +1 -1
  810. package/sensor-phone/connect-smartphone.factory.d.ts.map +1 -1
  811. package/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.d.ts.map +1 -1
  812. package/sensor-phone/sensor-phone-modal/sensor-phone.service.d.ts.map +1 -1
  813. package/services/service-command-tab/service-command.feature.d.ts.map +1 -1
  814. package/services/services-device-tab/columns/last-updated-date.device-grid-column.d.ts.map +1 -1
  815. package/services/services-device-tab/columns/name.grid-column.d.ts.map +1 -1
  816. package/services/services-device-tab/columns/service-type.grid-column.d.ts.map +1 -1
  817. package/services/services-device-tab/columns/status.grid-column.d.ts.map +1 -1
  818. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  819. package/services/services-device-tab/services-device-tab.module.d.ts.map +1 -1
  820. package/services/services-device-tab/services.breadcrumb-factory.d.ts.map +1 -1
  821. package/services/shared/service-command.service.d.ts.map +1 -1
  822. package/services/status-options/status-options.model.d.ts.map +1 -1
  823. package/sigfox-device-registration/sigfox-device-registration.component.d.ts.map +1 -1
  824. package/sigfox-device-registration/sigfox-provider.service.d.ts.map +1 -1
  825. package/sms-gateway/sms-gateway.module.d.ts.map +1 -1
  826. package/sub-assets/add-group/add-group.component.d.ts.map +1 -1
  827. package/sub-assets/asset-properties-item.component.d.ts.map +1 -1
  828. package/sub-assets/asset-properties.component.d.ts.map +1 -1
  829. package/sub-assets/assign-devices/assign-child-devices.component.d.ts.map +1 -1
  830. package/sub-assets/assign-devices/assign-devices.component.d.ts.map +1 -1
  831. package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts.map +1 -1
  832. package/sub-assets/group-info.component.d.ts.map +1 -1
  833. package/sub-assets/sub-assets-grid.component.d.ts.map +1 -1
  834. package/sub-assets/sub-assets.module.d.ts.map +1 -1
  835. package/sub-assets/sub-assets.service.d.ts.map +1 -1
  836. package/sub-assets/unassign-assets-modal/unassign-modal.component.d.ts.map +1 -1
  837. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -1
  838. package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -1
  839. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -1
  840. package/tenants/tenant-list/creation-time.filtering-form-renderer.component.d.ts.map +1 -1
  841. package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
  842. package/tenants/tenants-navigation.factory.d.ts.map +1 -1
  843. package/tenants/tenants.module.d.ts.map +1 -1
  844. package/tracking/tracking.feature.d.ts.map +1 -1
  845. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -1
  846. package/trusted-certificates/crl/crl-check-settings.component.d.ts.map +1 -1
  847. package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
  848. package/trusted-certificates/factories/tabs.factory.d.ts.map +1 -1
  849. package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts.map +1 -1
  850. package/trusted-certificates/list/add-trusted-certificate.component.d.ts.map +1 -1
  851. package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
  852. package/upgrade/auth-bridge.service.d.ts.map +1 -1
  853. package/upgrade/bridge.service.d.ts.map +1 -1
  854. package/upgrade/ng1/downgraded.services.d.ts +1 -0
  855. package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
  856. package/upgrade/ng1/index.d.ts.map +1 -1
  857. package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts.map +1 -1
  858. package/widgets/cockpit/index.d.ts +4 -4
  859. package/widgets/definitions/alarms/alarm-list/index.d.ts +1 -1
  860. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  861. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +1 -1
  862. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  863. package/widgets/definitions/alarms/recent-alarms/index.d.ts +1 -1
  864. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  865. package/widgets/definitions/applications/index.d.ts +1 -1
  866. package/widgets/definitions/applications/index.d.ts.map +1 -1
  867. package/widgets/definitions/asset-notes/index.d.ts +1 -1
  868. package/widgets/definitions/asset-notes/index.d.ts.map +1 -1
  869. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts +1 -1
  870. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts.map +1 -1
  871. package/widgets/definitions/cockpit-welcome/index.d.ts +1 -1
  872. package/widgets/definitions/cockpit-welcome/index.d.ts.map +1 -1
  873. package/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.d.ts.map +1 -1
  874. package/widgets/definitions/datapoints-graph/index.d.ts +1 -1
  875. package/widgets/definitions/datapoints-table/index.d.ts +1 -1
  876. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
  877. package/widgets/definitions/device-control-message/index.d.ts +1 -1
  878. package/widgets/definitions/device-control-message/index.d.ts.map +1 -1
  879. package/widgets/definitions/help-and-service/index.d.ts +1 -1
  880. package/widgets/definitions/help-and-service/index.d.ts.map +1 -1
  881. package/widgets/definitions/html-widget/html-widget.factory.d.ts.map +1 -1
  882. package/widgets/definitions/html-widget/index.d.ts +1 -1
  883. package/widgets/definitions/image/index.d.ts +5 -3
  884. package/widgets/definitions/image/index.d.ts.map +1 -1
  885. package/widgets/definitions/info-gauge/index.d.ts +2 -3
  886. package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
  887. package/widgets/definitions/kpi/index.d.ts +1 -1
  888. package/widgets/definitions/kpi/index.d.ts.map +1 -1
  889. package/widgets/definitions/linear-gauge/index.d.ts +1 -1
  890. package/widgets/definitions/linear-gauge/index.d.ts.map +1 -1
  891. package/widgets/definitions/map/index.d.ts +1 -1
  892. package/widgets/definitions/map/index.d.ts.map +1 -1
  893. package/widgets/definitions/markdown/index.d.ts +5 -3
  894. package/widgets/definitions/markdown/index.d.ts.map +1 -1
  895. package/widgets/definitions/quick-links/index.d.ts +1 -1
  896. package/widgets/definitions/quick-links/index.d.ts.map +1 -1
  897. package/widgets/definitions/radial-gauge/index.d.ts +1 -1
  898. package/widgets/definitions/radial-gauge/index.d.ts.map +1 -1
  899. package/widgets/definitions/silo/index.d.ts +1 -1
  900. package/widgets/definitions/silo/index.d.ts.map +1 -1
  901. package/widgets/definitions/three-d-rotation/index.d.ts +1 -1
  902. package/widgets/definitions/three-d-rotation/index.d.ts.map +1 -1
  903. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  904. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  905. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  906. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  907. package/widgets/implementations/cockpit-welcome/welcome.component.d.ts +3 -2
  908. package/widgets/implementations/cockpit-welcome/welcome.component.d.ts.map +1 -1
  909. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts +4 -1
  910. package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts.map +1 -1
  911. package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts +2 -1
  912. package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts.map +1 -1
  913. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
  914. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -1
  915. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
  916. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -1
  917. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -1
  918. package/widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.d.ts.map +1 -1
  919. package/widgets/implementations/device-management-welcome/welcome.component.d.ts.map +1 -1
  920. package/widgets/implementations/help-and-service-widget/help-and-service-view/help-and-service-view.component.d.ts.map +1 -1
  921. package/widgets/implementations/html-widget/advanced-settings/advanced-settings.component.d.ts.map +1 -1
  922. package/widgets/implementations/html-widget/html-widget-config.service.d.ts.map +1 -1
  923. package/widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.d.ts +5 -3
  924. package/widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.d.ts.map +1 -1
  925. package/widgets/implementations/image/image-widget-config/image-widget-config.component.d.ts.map +1 -1
  926. package/widgets/implementations/image/image-widget.service.d.ts +1 -2
  927. package/widgets/implementations/image/image-widget.service.d.ts.map +1 -1
  928. package/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.d.ts.map +1 -1
  929. package/widgets/implementations/linear-gauge/linear-gauge-widget-view/linear-gauge-widget-view.component.d.ts.map +1 -1
  930. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  931. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
  932. package/widgets/implementations/markdown/markdown-widget-config/markdown-widget-config.component.d.ts.map +1 -1
  933. package/widgets/implementations/markdown/markdown-widget.service.d.ts.map +1 -1
  934. package/widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config.component.d.ts.map +1 -1
  935. package/widgets/import-export-config/config-target-export.d.ts +3 -1
  936. package/widgets/import-export-config/config-target-export.d.ts.map +1 -1
  937. package/widgets/import-export-config/config-target-import.d.ts +3 -1
  938. package/widgets/import-export-config/config-target-import.d.ts.map +1 -1
  939. package/widgets/import-export-config/device-import-export.d.ts +3 -1
  940. package/widgets/import-export-config/device-import-export.d.ts.map +1 -1
  941. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs.map +0 -1
  942. package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs.map +0 -1
  943. package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-CwfVxTSx.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-widgets-implementations-quick-links.mjs","sources":["../../widgets/implementations/quick-links/quick-links.model.ts","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config-add-link.component.ts","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config-add-link.component.html","../../widgets/implementations/quick-links/quick-links.service.ts","../../widgets/implementations/quick-links/relative-url-parser.pipe.ts","../../widgets/implementations/quick-links/quick-links-widget-view/quick-links-widget-view.component.ts","../../widgets/implementations/quick-links/quick-links-widget-view/quick-links-widget-view.component.html","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config-list.component.ts","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config-list.component.html","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config.component.ts","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config.component.html","../../widgets/implementations/quick-links/c8y-ngx-components-widgets-implementations-quick-links.ts"],"sourcesContent":["import { IApplication } from '@c8y/client';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { ValidationPattern } from '@c8y/ngx-components';\n\nexport interface IQuickLink {\n icon: string;\n label: string;\n url: string;\n newTab: boolean;\n app?: IApplication;\n}\n\nexport type QuickLinksConfig = {\n links: IQuickLink[];\n displayOption: DisplayOptionType;\n translateLinkLabels: boolean;\n};\n\nexport const QuickLinkDisplayOption = {\n GRID: 'Grid',\n LIST: 'List'\n} as const;\n\nexport type DisplayOptionType =\n (typeof QuickLinkDisplayOption)[keyof typeof QuickLinkDisplayOption];\n\nexport const DEFAULT_DISPLAY_OPTION_VALUE = QuickLinkDisplayOption.GRID;\nexport const DEFAULT_QUICK_LINK_ICON = 'link';\n\nexport const HELP_AND_SERVICE_WIDGET_ID = defaultWidgetIds.HELP_AND_SERVICE;\nexport const APPLICATIONS_WIDGET_ID = defaultWidgetIds.APPLICATIONS;\nexport const QUICK_LINKS_DEVICE_MANAGEMENT_ID = defaultWidgetIds.DEVICE_MANAGEMENT_WELCOME;\n\nexport type ConvertibleWidgetID =\n | typeof HELP_AND_SERVICE_WIDGET_ID\n | typeof APPLICATIONS_WIDGET_ID\n | typeof QUICK_LINKS_DEVICE_MANAGEMENT_ID;\n\nexport type DefaultDeviceManagementQuickLinkDefinition = {\n navPath: string[];\n overrides?: QuickLinkOverrides;\n};\ninterface QuickLinkOverrides {\n label?: string;\n icon?: string;\n url?: string;\n}\n\nexport const URL_VALIDATOR_PATTERN = ValidationPattern.rules.quickLinkUrl.pattern;\n\nexport type WidgetConversionConfig = {\n convertWidget: () => void;\n};\n","import { Component, inject, OnInit, output } from '@angular/core';\nimport { C8yTranslatePipe, ChangeIconComponent } from '@c8y/ngx-components';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconSelectorService } from '@c8y/ngx-components/icon-selector';\nimport { DEFAULT_QUICK_LINK_ICON, IQuickLink, URL_VALIDATOR_PATTERN } from '../quick-links.model';\n\n@Component({\n selector: 'c8y-quick-links-widget-config-add-link',\n imports: [TooltipModule, C8yTranslatePipe, ReactiveFormsModule, ChangeIconComponent],\n templateUrl: './quick-links-widget-config-add-link.component.html'\n})\nexport class QuickLinksWidgetConfigAddLinkComponent implements OnInit {\n onQuickLinkCreated = output<IQuickLink>();\n onCancel = output<void>();\n\n addLinkFormGroup: ReturnType<QuickLinksWidgetConfigAddLinkComponent['initForm']>;\n\n private readonly iconSelector = inject(IconSelectorService);\n private readonly fb = inject(FormBuilder);\n\n ngOnInit() {\n this.addLinkFormGroup = this.initForm();\n }\n\n async changeLinkIcon(): Promise<void> {\n try {\n const newIcon = await this.iconSelector.selectIcon();\n this.addLinkFormGroup.controls.icon.setValue(newIcon);\n } catch {\n // nothing to do\n }\n }\n\n createQuickLink(): void {\n this.onQuickLinkCreated.emit(this.addLinkFormGroup.value as IQuickLink);\n\n this.addLinkFormGroup.reset();\n this.addLinkFormGroup.controls.icon.setValue(DEFAULT_QUICK_LINK_ICON);\n }\n\n private initForm() {\n const controls = {\n icon: [DEFAULT_QUICK_LINK_ICON, [Validators.required]],\n label: ['', [Validators.required, Validators.maxLength(50)]],\n url: ['', [Validators.required, Validators.pattern(URL_VALIDATOR_PATTERN)]],\n newTab: [false, [Validators.required]]\n };\n\n return this.fb.group(controls);\n }\n}\n","<form\n [formGroup]=\"addLinkFormGroup\"\n>\n <div class=\"d-flex a-i-center gap-24\">\n <div class=\"form-group\">\n <label>{{ 'Icon' | translate }}</label>\n <c8y-change-icon\n class=\"form-control\"\n [currentIcon]=\"addLinkFormGroup.controls.icon.value\"\n (onButtonClick)=\"changeLinkIcon()\"\n ></c8y-change-icon>\n </div>\n <div class=\"form-group flex-grow\">\n <label for=\"ql-label\">{{ 'Label' | translate }}</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"label\"\n maxlength=\"50\"\n id=\"ql-label\"\n [placeholder]=\"'e.g. my Quick Link' | translate\"\n />\n </div>\n </div>\n <div class=\"d-flex a-i-center gap-24\">\n <div class=\"form-group flex-grow\">\n <label for=\"ql-url\">{{ 'URL' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"ql-url\"\n type=\"text\"\n formControlName=\"url\"\n maxlength=\"150\"\n [placeholder]=\"'e.g. http://www.example.com' | translate\"\n />\n </div>\n <div class=\"form-group flex-noshrink\">\n <label>&nbsp;</label>\n <label class=\"c8y-checkbox\" title=\"{{ 'Open the link in a new browser tab' | translate }}\">\n <input\n type=\"checkbox\"\n formControlName=\"newTab\"\n checked=\"checked\"\n [attr.aria-label]=\"'Open in new tab' | translate\"\n />\n <span></span>\n <span>{{ 'New tab' | translate }}</span>\n </label>\n </div>\n </div>\n</form>\n\n<button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"onCancel.emit();\"\n>\n {{ 'Cancel' | translate }}\n</button>\n<button\n class=\"btn btn-primary\"\n title=\"{{ 'Create a quick link' | translate }}\"\n type=\"button\"\n (click)=\"createQuickLink()\"\n [disabled]=\"addLinkFormGroup.invalid\"\n>\n {{ 'Add quick link' | translate }}\n</button>\n","import { inject, Injectable } from '@angular/core';\nimport { combineLatest, Observable, of } from 'rxjs';\nimport {\n DocLink,\n DocLinkWithLabel,\n DocsService,\n gettext,\n NavigatorNode,\n NavigatorService,\n sortByPriority\n} from '@c8y/ngx-components';\nimport { combineLatestWith, map, switchMap } from 'rxjs/operators';\nimport { DefaultDeviceManagementQuickLinkDefinition, IQuickLink } from './quick-links.model';\n\n/**\n * Service for managing quick links in Cockpit and Device Management applications.\n * It fetches, processes, and provides quick links to relevant documentation and navigation nodes.\n */\n@Injectable({ providedIn: 'root' })\nexport class QuickLinksService {\n private navNodes: NavigatorNode[];\n\n private readonly docsService = inject(DocsService);\n private readonly navigatorService = inject(NavigatorService);\n\n private readonly labelsToFilterOutInDeviceManagement = [\n 'Add user',\n 'Add device',\n 'Cockpit',\n 'Legal notices'\n ];\n\n /**\n * Retrieves the default quick links for Cockpit Application.\n *\n * @returns An observable emitting an array of quick links.\n */\n getDefaultQuickLinks$(): Observable<IQuickLink[]> {\n return this.getDocLinks$().pipe(\n map(docLinks =>\n docLinks.map(docLink => ({\n icon: docLink.icon,\n label: docLink.label,\n url: docLink.url,\n newTab: docLink.target === '_blank'\n }))\n )\n );\n }\n\n /**\n * Retrieves default quick links for Device Management Application\n *\n * @returns An observable emitting an array of quick links for device management.\n */\n getQuickLinksForDeviceManagement$(): Observable<IQuickLink[]> {\n return this.getSortedDocLinksForDeviceManagement().pipe(\n map(docLinks =>\n docLinks.map(docLink => ({\n icon: docLink.icon,\n label: docLink.label,\n url: docLink.url,\n newTab: docLink.target === '_blank'\n }))\n )\n );\n }\n\n /**\n * Fetches documentation links for Cockpit Application and sorts them by priority.\n *\n * @returns An observable emitting an array of documentation links.\n */\n private getDocLinks$(): Observable<DocLink[]> {\n return combineLatest([this.docsService.items$, this.navigatorService.items$]).pipe(\n map(([links, navigatorNodes]) => this.handleDocLinks([...links], navigatorNodes)),\n map(docLinks => sortByPriority(docLinks))\n );\n }\n\n /**\n * Processes and modifies documentation links.\n *\n * @param links - Array of documentation links.\n * @param navigatorNodes - Array of navigation nodes.\n *\n * @returns An array of processed documentation links.\n */\n private handleDocLinks(links: DocLink[], navigatorNodes: NavigatorNode[]): DocLink[] {\n const groupLink = this.createAddGroupDocLink(navigatorNodes);\n\n if (groupLink) {\n links.push(groupLink);\n }\n return this.replaceDocsLinksWithMainOne(links);\n }\n\n /**\n * Creates a quick link for adding a group if the \"Groups\" node is present.\n *\n * @param navigatorNodes - Array of navigation nodes.\n * @returns A `DocLink` for adding a group or `undefined`.\n */\n private createAddGroupDocLink(navigatorNodes: NavigatorNode[]): DocLink | undefined {\n let docLink: DocLink;\n const groupsNodeLabel = gettext('Groups');\n const groupsNode = this.findNavigatorNode(groupsNodeLabel, navigatorNodes);\n\n if (groupsNode) {\n docLink = {\n type: 'quicklink',\n icon: 'c8y-icon c8y-icon-group-add',\n label: gettext('Add group'),\n target: null,\n url: '/group?showAddGroup=true'\n };\n }\n return docLink;\n }\n\n /**\n * Retrieves additional documentation links related to device management.\n *\n * @returns An observable that emits a list of processed documentation links.\n */\n private getAdditionalDocLinksForDeviceManagement$(): Observable<DocLink[]> {\n return this.docsService.items$.pipe(\n map(docLinks => this.prepareDocLinksForDeviceManagement(docLinks))\n );\n }\n\n /**\n * Prepares documentation links by replacing some links with a main one and filtering out irrelevant links.\n *\n * @param links - The list of documentation links to process.\n * @returns The processed list of documentation links.\n */\n private prepareDocLinksForDeviceManagement(links: DocLink[]): DocLink[] {\n const _links = this.replaceDocsLinksWithMainOne(links);\n\n return this.filterOutDocsLinksForDeviceManagement(_links);\n }\n\n /**\n * Filters out documentation links that should not be included in device management.\n *\n * @param links - The list of documentation links to filter.\n * @returns The filtered list of documentation links.\n */\n private filterOutDocsLinksForDeviceManagement(links: DocLink[]): DocLink[] {\n const filteredLinks = links.filter(\n link =>\n !this.labelsToFilterOutInDeviceManagement.includes(link.label) &&\n !link.url.includes('/apps/')\n );\n\n const additionalLinks = this.docsService\n .getItemsFromHookDocs()\n .filter(doc => this.labelsToFilterOutInDeviceManagement.includes(doc.label));\n\n return sortByPriority([...filteredLinks, ...additionalLinks]);\n }\n\n /**\n * Replaces the first occurrence of a documentation link with a main user guide link.\n *\n * @param links - The list of documentation links to process.\n * @returns The modified list of documentation links.\n */\n private replaceDocsLinksWithMainOne(links: DocLink[]): DocLink[] {\n const DOCS_PATH = '/docs/';\n const docsLinkRegex = /\\/docs\\/(?!legal-notices)/;\n let firstDocsLink = true;\n return links.reduce((acc, link) => {\n const isDocsLink = link.url && docsLinkRegex.test(link.url);\n if (isDocsLink) {\n if (firstDocsLink) {\n firstDocsLink = false;\n // Replace the first /docs/ link with the main one\n acc.push({\n icon: 'book-shelf',\n label: gettext('User documentation'),\n url: this.docsService.getUserGuideLink(DOCS_PATH),\n type: 'doc',\n target: '_blank'\n } as DocLinkWithLabel);\n }\n } else {\n acc.push({\n ...link,\n target: this.isLinkForCurrentApp(link) ? null : '_blank'\n });\n }\n return acc;\n }, []);\n }\n\n /**\n * Checks if a URL is valid.\n *\n * @param url - The URL string to validate.\n * @returns `true` if the URL is valid, otherwise `false`.\n */\n private isValidURL(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Determines if a link belongs to the current application.\n *\n * @param link - The documentation link to check.\n * @returns `true` if the link is for the current app, otherwise `false`.\n */\n private isLinkForCurrentApp(link: DocLink): boolean {\n const { url } = link;\n if (!url) return false;\n\n if (!this.isValidURL(url)) {\n return !url.startsWith('/apps/');\n }\n return false;\n }\n\n /**\n * Finds a navigation node by its label.\n *\n * @param nodeName - Label of the node to find.\n * @param navNodes - Array of navigation nodes.\n *\n * @returns The found navigation node.\n */\n private findNavigatorNode(nodeName: string, navNodes: NavigatorNode[] = []): NavigatorNode {\n return navNodes.find((node: NavigatorNode) => node.label === nodeName);\n }\n\n /**\n * Retrieves the default quick links for device management.\n *\n * This method returns an array of predefined quick link definitions\n * used for navigation within the device management section of the application.\n *\n * Each quick link is defined by a navigation path (`navPath`), and optionally\n * includes override properties such as a custom label, icon, or URL.\n *\n * @returns An array of quick link definitions.\n */\n private getDefaultQuickLinksForDeviceManagement(): DefaultDeviceManagementQuickLinkDefinition[] {\n return [\n { navPath: ['Devices', 'All devices'] },\n { navPath: ['Devices', 'Registration'], overrides: { label: gettext('Register device') } },\n {\n navPath: ['Groups'],\n overrides: {\n label: gettext('Add group'),\n icon: 'c8y-group-add',\n url: '/group?showAddGroup=true'\n }\n },\n {\n navPath: ['Management', 'Device profiles'],\n overrides: { label: gettext('Add device profile') }\n },\n {\n navPath: ['Management', 'Software repository'],\n overrides: { label: gettext('Add software') }\n },\n {\n navPath: ['Management', 'Firmware repository'],\n overrides: { label: gettext('Add firmware') }\n }\n ];\n }\n\n /**\n * Fetches documentation links for Device Management Application and sorts them by priority.\n *\n * @returns An observable emitting an array of documentation links.\n */\n private getSortedDocLinksForDeviceManagement(): Observable<DocLink[]> {\n return this.navigatorService.items$.pipe(\n switchMap(navNodes => {\n return of(\n this.getDefaultQuickLinksForDeviceManagement()\n .map(({ navPath, overrides }) =>\n this.createDocLinkToNavNode(navPath, overrides, navNodes)\n )\n .filter(Boolean)\n );\n }),\n combineLatestWith(this.getAdditionalDocLinksForDeviceManagement$()),\n map(([links, additionalLinks]) => [...links, ...additionalLinks]),\n map(docLinks => sortByPriority(docLinks))\n );\n }\n\n /**\n * Creates a document link based on the given navigation node path labels.\n *\n * @param navNodePathLabels - An array of strings representing the path labels used to find the navigation node.\n * @param quickLinkOverrides - An optional partial object of `DocLink` properties that can override the defaults.\n * @param navNodes - An array of `NavigatorNode` objects to search within for the navigation node.\n *\n * @returns A `DocLink` object with the details of the found navigation node, or `undefined` if no matching node is found.\n */\n private createDocLinkToNavNode(\n navNodePathLabels: string[],\n quickLinkOverrides: Partial<DocLink> = {},\n navNodes: NavigatorNode[]\n ): DocLink | undefined {\n const navNode = this.findVisibleNavNode(navNodePathLabels, navNodes);\n\n if (!navNode) {\n return;\n }\n\n return {\n icon: navNode.icon,\n type: 'doc',\n label: navNode.label,\n priority: navNode.priority,\n url: this.ensureLeadingSlash(navNode.path),\n ...quickLinkOverrides\n } as DocLink;\n }\n\n /**\n * Ensures the given path starts with a leading slash.\n *\n * @param path - The path to check.\n * @returns The path with a leading slash.\n */\n private ensureLeadingSlash(path: string): string {\n return path.startsWith('/') ? path : `/${path}`;\n }\n\n /**\n * Recursively searches for a visible navigation node that matches the given path labels.\n *\n * @param navNodePathLabels - An array of labels representing the navigation path.\n * This array is mutated as elements are shifted during recursion.\n * @param navNodes - An array of `NavigatorNode` objects to search within. Defaults to `this.navNodes`.\n *\n * @returns The found `NavigatorNode`.\n */\n private findVisibleNavNode(\n navNodePathLabels: string[],\n navNodes: NavigatorNode[] = this.navNodes\n ): NavigatorNode {\n const currentLabel = navNodePathLabels.shift();\n const navNode = navNodes.find(navNode => !navNode.hidden && navNode.label === currentLabel);\n if (navNode && navNodePathLabels.length > 0) {\n return this.findVisibleNavNode(navNodePathLabels, navNode.children);\n }\n return navNode;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'relativeUrlParser'\n})\nexport class RelativeUrlParserPipe implements PipeTransform {\n transform(url: string): string {\n if (!url) {\n return '';\n }\n\n if (this.isAppUrl(url) || this.isFullUrl(url)) {\n return url;\n }\n\n if (this.isQueryParameter(url)) {\n return `${window.location.hash}${url}`;\n }\n\n if (this.isRelativeToBaseUrl(url)) {\n return url;\n }\n\n if (this.isRelativeUrl(url)) {\n return `#${url}`;\n }\n\n return url;\n }\n\n private isFullUrl(url: string): boolean {\n return url.startsWith('http') || url.startsWith('https');\n }\n\n private isRelativeToBaseUrl(url: string): boolean {\n return url.startsWith('#');\n }\n\n private isRelativeUrl(url: string): boolean {\n return url.startsWith('/');\n }\n\n private isAppUrl(url: string): boolean {\n return url.startsWith('/apps');\n }\n\n private isQueryParameter(url: string): boolean {\n return url.startsWith('?');\n }\n}\n","import { Component, inject, input, OnInit } from '@angular/core';\nimport {\n AppHrefPipe,\n AppIconComponent,\n AppSwitcherService,\n C8yTranslatePipe,\n DashboardChildComponent,\n EmptyStateComponent,\n HumanizeAppNamePipe,\n IconDirective\n} from '@c8y/ngx-components';\nimport { CommonModule as NgCommonModule } from '@angular/common';\n\nimport {\n APPLICATIONS_WIDGET_ID,\n ConvertibleWidgetID,\n DEFAULT_DISPLAY_OPTION_VALUE,\n DEFAULT_QUICK_LINK_ICON,\n QuickLinkDisplayOption,\n HELP_AND_SERVICE_WIDGET_ID,\n QUICK_LINKS_DEVICE_MANAGEMENT_ID,\n QuickLinksConfig,\n WidgetConversionConfig\n} from '../quick-links.model';\nimport { isEmpty } from 'lodash';\nimport { QuickLinksService } from '../quick-links.service';\nimport { RelativeUrlParserPipe } from '../relative-url-parser.pipe';\nimport { firstValueFrom, take } from 'rxjs';\n\n@Component({\n selector: 'c8y-quick-links-widget-view',\n imports: [\n NgCommonModule,\n AppIconComponent,\n RelativeUrlParserPipe,\n EmptyStateComponent,\n IconDirective,\n C8yTranslatePipe\n ],\n templateUrl: './quick-links-widget-view.component.html',\n providers: [AppHrefPipe, HumanizeAppNamePipe, RelativeUrlParserPipe]\n})\nexport class QuickLinksWidgetViewComponent implements OnInit {\n config = input<QuickLinksConfig>();\n isPreview = input<boolean>(false);\n\n protected readonly DEFAULT_QUICK_LINK_ICON = DEFAULT_QUICK_LINK_ICON;\n protected readonly DisplayOption = QuickLinkDisplayOption;\n\n private readonly quickLinksService = inject(QuickLinksService);\n private readonly dashboardChild = inject(DashboardChildComponent);\n private readonly appSwitcherService = inject(AppSwitcherService);\n private readonly appHrefPipe = inject(AppHrefPipe);\n private readonly humanizeAppNamePipe = inject(HumanizeAppNamePipe);\n\n ngOnInit(): void {\n this.convertLegacyWidget();\n }\n\n /**\n * The method is responsible for converting legacy widgets into their updated versions if a conversion is required.\n *\n * The widgets are being converted:\n * - Help and Service Widget\n * - Applications Widget\n * - Quick Links - Device Management Widget\n */\n private convertLegacyWidget(): void {\n if (!this.isConversionRequiredForWidget()) {\n return;\n }\n\n const widgetId: ConvertibleWidgetID = this.getWidgetId();\n\n const widgetConversionMap: Record<ConvertibleWidgetID, WidgetConversionConfig> = {\n [HELP_AND_SERVICE_WIDGET_ID]: {\n convertWidget: this.convertHelpAndServiceWidget.bind(this)\n },\n [APPLICATIONS_WIDGET_ID]: {\n convertWidget: this.convertApplicationsWidget.bind(this)\n },\n [QUICK_LINKS_DEVICE_MANAGEMENT_ID]: {\n convertWidget: this.convertDeviceManagementQuickLinksWidget.bind(this)\n }\n };\n\n const widget: WidgetConversionConfig = widgetConversionMap[widgetId];\n\n widget.convertWidget();\n }\n\n /**\n * Converts the Device Management Quick Links widget by assigning default quick links for the device management app\n * and updating the widget configuration with default options.\n */\n private convertDeviceManagementQuickLinksWidget(): void {\n this.quickLinksService\n .getQuickLinksForDeviceManagement$()\n .pipe(take(1))\n .subscribe(quickLinks => (this.config().links = quickLinks));\n\n this.config().displayOption = DEFAULT_DISPLAY_OPTION_VALUE;\n }\n\n /**\n * Converts the Applications widget by assigning default quick links\n * and updating the widget configuration with default options.\n */\n private convertApplicationsWidget(): void {\n this.appSwitcherService.apps$.pipe(take(1)).subscribe(\n async oneCloudApps =>\n (this.config().links = await Promise.all(\n oneCloudApps.map(async app => ({\n label: await firstValueFrom(this.humanizeAppNamePipe.transform(app)),\n url: this.appHrefPipe.transform(app),\n icon: null,\n newTab: false,\n app\n }))\n ))\n );\n\n this.config().displayOption = DEFAULT_DISPLAY_OPTION_VALUE;\n }\n\n /**\n * Converts the Help and Service widget by assigning default quick links\n * and updating the widget configuration with default options.\n */\n private convertHelpAndServiceWidget(): void {\n this.quickLinksService\n .getDefaultQuickLinks$()\n .pipe(take(1))\n .subscribe(quickLinks => (this.config().links = quickLinks));\n\n this.config().displayOption = DEFAULT_DISPLAY_OPTION_VALUE;\n }\n\n /**\n * Determines whether conversion is required for the widget.\n * Conversion is needed if the widget configuration is empty and a valid widget ID exists.\n *\n * @returns `true` if conversion is required, otherwise `false`.\n */\n private isConversionRequiredForWidget(): boolean {\n return isEmpty(this.config()) && !!this.getWidgetId();\n }\n\n /**\n * Retrieves the widget ID from the dashboard child data.\n * If `componentId` is available, it is returned; otherwise, the widget's `name` is used.\n *\n * @returns The widget ID as a `ConvertibleWidgetID`, based on `componentId` or `name`.\n */\n private getWidgetId(): ConvertibleWidgetID {\n return this.dashboardChild['data']?.componentId\n ? this.dashboardChild['data']?.componentId\n : this.dashboardChild['data']?.name;\n }\n}\n","@let links = config().links;\n@let pointerNoneStylesPreview = isPreview() ? { 'pointer-events': 'none' } : null;\n\n@if (config().displayOption === DisplayOption.GRID) {\n @if (links?.length) {\n <div class=\"card-group-block interact-grid border-top m-b-0\">\n @for (link of links; track link) {\n @let linkLabel = config().translateLinkLabels ? (link.label | translate) : link.label;\n <a\n class=\"card card--btn pointer\"\n [ngStyle]=\"pointerNoneStylesPreview\"\n [title]=\"linkLabel\"\n [ngClass]=\"{\n disabled: isPreview()\n }\"\n data-cy=\"c8y-quick-links-widget-view--quick-link-card\"\n [attr.role]=\"isPreview() ? null : 'button'\"\n [target]=\"!isPreview() && link.newTab ? '_blank' : '_self'\"\n [attr.rel]=\"isPreview() ? null : 'noopener noreferrer'\"\n [attr.href]=\"isPreview() ? null : (link.url | relativeUrlParser)\"\n >\n @if (link.newTab && !isPreview()) {\n <div\n class=\"card-actions showOnHover\"\n title=\"{{ 'Open in new tab' | translate }}\"\n >\n <span class=\"dropdown-toggle c8y-dropdown\">\n <i c8yIcon=\"external-link\"></i>\n </span>\n </div>\n }\n\n <div class=\"card-block text-center\">\n <div class=\"icon-32\">\n @if (link.icon) {\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"link.icon\"\n ></i>\n } @else {\n <c8y-app-icon\n [name]=\"link.app.name\"\n [app]=\"link.app\"\n [contextPath]=\"link.app.contextPath\"\n ></c8y-app-icon>\n }\n </div>\n <small class=\"text-muted\">\n {{ linkLabel }}\n </small>\n </div>\n </a>\n }\n </div>\n } @else {\n <c8y-ui-empty-state\n [icon]=\"DEFAULT_QUICK_LINK_ICON\"\n [title]=\"'No quick links to display.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n} @else {\n @if (links?.length) {\n <div class=\"separator-top\">\n @for (link of links; track link) {\n @let linkLabel = config().translateLinkLabels ? (link.label | translate) : link.label;\n <a\n class=\"d-flex a-i-center btn-clean gap-8 p-16 text-truncate separator-bottom\"\n [ngStyle]=\"pointerNoneStylesPreview\"\n [title]=\"linkLabel\"\n data-cy=\"c8y-quick-links-widget-view--quick-link-list-item\"\n [attr.role]=\"isPreview() ? null : 'button'\"\n [target]=\"!isPreview() && link.newTab ? '_blank' : '_self'\"\n [attr.rel]=\"isPreview() ? null : 'noopener noreferrer'\"\n [attr.href]=\"isPreview() ? null : (link.url | relativeUrlParser)\"\n >\n @if (link.icon) {\n <i\n class=\"c8y-icon-duocolor icon-24\"\n [c8yIcon]=\"link.icon\"\n ></i>\n } @else {\n <c8y-app-icon\n [name]=\"link.app.name\"\n [app]=\"link.app\"\n [contextPath]=\"link.app.contextPath\"\n ></c8y-app-icon>\n }\n\n <span\n class=\"text-truncate\"\n [title]=\"linkLabel\"\n >\n {{ linkLabel }}\n </span>\n @if (link.newTab) {\n <i\n class=\"text-muted m-l-auto showOnHover\"\n [c8yIcon]=\"'external-link'\"\n title=\"{{ 'Open in new tab' | translate }}\"\n ></i>\n }\n </a>\n }\n </div>\n } @else {\n <c8y-ui-empty-state\n [icon]=\"DEFAULT_QUICK_LINK_ICON\"\n [title]=\"'No quick links to display.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n}\n","import { Component, inject, input, WritableSignal } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport {\n AppIconComponent,\n C8yTranslateModule,\n DynamicFormsModule,\n FormsModule,\n IconDirective,\n ListGroupModule,\n ChangeIconComponent\n} from '@c8y/ngx-components';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { IQuickLink, QuickLinksConfig } from '../quick-links.model';\nimport { IconSelectorService } from '@c8y/ngx-components/icon-selector';\nimport { IApplication } from '@c8y/client';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'c8y-quick-links-widget-config-list',\n host: {\n class: 'd-contents'\n },\n imports: [\n FormsModule,\n DragDropModule,\n TooltipModule,\n PopoverModule,\n ListGroupModule,\n DynamicFormsModule,\n AppIconComponent,\n C8yTranslateModule,\n IconDirective,\n ChangeIconComponent,\n NgClass\n ],\n templateUrl: './quick-links-widget-config-list.component.html'\n})\nexport class QuickLinksWidgetConfigListComponent {\n quickLinksForm = input<FormGroup>();\n config = input<QuickLinksConfig>();\n quickLinksFormArray = input<FormArray>();\n appsNameChanged = input<WritableSignal<IApplication[]>>();\n\n private readonly iconSelector = inject(IconSelectorService);\n\n drop(event: CdkDragDrop<IQuickLink[]>): void {\n moveItemInArray(this.config().links, event.previousIndex, event.currentIndex);\n moveItemInArray(this.quickLinksFormArray().controls, event.previousIndex, event.currentIndex);\n }\n\n async changeLinkIcon(linkForm: AbstractControl<any, any>): Promise<void> {\n try {\n const isIconPresent = !!linkForm.get('icon')?.value;\n const newIcon = await this.iconSelector.selectIcon();\n\n if (newIcon) {\n linkForm.patchValue({ icon: newIcon });\n this.config().links = this.getQuickLinks();\n }\n\n const isAppIconChange = !!linkForm.get('app')?.value;\n if (isAppIconChange && !isIconPresent) {\n this.appsNameChanged().update(apps => [...apps, linkForm.get('app')?.value]);\n }\n } catch {\n // Nothing to do if the user cancels icon selection\n }\n }\n\n removeLink(index: number): void {\n const quickLinksFormArray = this.quickLinksForm().get('quickLinks') as FormArray;\n quickLinksFormArray.removeAt(index);\n this.config().links = this.getQuickLinks();\n }\n\n getQuickLinks(): IQuickLink[] {\n return this.quickLinksForm().getRawValue().quickLinks as IQuickLink[];\n }\n}\n","<c8y-list-group\n class=\"cdk-droplist no-border-last\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"getQuickLinks().length < 2\"\n>\n <form\n class=\"d-contents\"\n [formGroup]=\"quickLinksForm()\"\n >\n <div\n class=\"d-contents\"\n [formArrayName]=\"'quickLinks'\"\n >\n @for (link of quickLinksFormArray().controls; track link; let i = $index) {\n @let linkValue = link.getRawValue();\n\n <c8y-li\n [dense]=\"true\"\n [formGroupName]=\"i\"\n cdkDrag\n >\n <c8y-li-drag-handle\n title=\"{{ 'Drag to reorder' | translate }}\"\n cdkDragHandle\n >\n <i c8yIcon=\"drag-reorder\"></i>\n </c8y-li-drag-handle>\n <c8y-li-icon\n class=\"icon-24 p-relative changeIcon a-s-stretch\"\n [ngClass]=\"{\n 'm-l-16': getQuickLinks().length < 2\n }\"\n >\n @if (linkValue.icon) {\n <c8y-change-icon\n [currentIcon]=\"linkValue.icon\"\n (onButtonClick)=\"changeLinkIcon(link)\"\n ></c8y-change-icon>\n } @else {\n <c8y-change-icon (onButtonClick)=\"changeLinkIcon(link)\">\n <c8y-app-icon\n [name]=\"linkValue.app.name\"\n [app]=\"linkValue.app\"\n [contextPath]=\"linkValue.app.contextPath\"\n ></c8y-app-icon>\n </c8y-change-icon>\n }\n </c8y-li-icon>\n\n <div class=\"d-flex gap-8 a-i-center\">\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n formControlName=\"label\"\n [placeholder]=\"'e.g. my Quick Link' | translate\"\n />\n <span></span>\n </div>\n\n <button\n class=\"showOnHover btn-dot btn-dot--danger m-l-auto\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n placement=\"top\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"removeLink(i)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n <c8y-list-item-collapse>\n <div class=\"d-flex a-i-center gap-24\">\n <div class=\"form-group flex-grow\">\n <label for=\"ql-url\">{{ 'URL' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"ql-url\"\n type=\"text\"\n formControlName=\"url\"\n maxlength=\"150\"\n [placeholder]=\"'e.g. https://www.example.com' | translate\"\n />\n </div>\n <div class=\"form-group flex-noshrink\">\n <label>&nbsp;</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Open the link in a new browser tab' | translate }}\"\n >\n <input\n [attr.aria-label]=\"'Open in new tab' | translate\"\n type=\"checkbox\"\n formControlName=\"newTab\"\n checked=\"checked\"\n />\n <span></span>\n <span>{{ 'New tab' | translate }}</span>\n </label>\n </div>\n </div>\n </c8y-list-item-collapse>\n </c8y-li>\n }\n </div>\n </form>\n</c8y-list-group>\n","import {\n Component,\n inject,\n input,\n OnDestroy,\n OnInit,\n signal,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport {\n C8yTranslateModule,\n DashboardChildComponent,\n DashboardComponent,\n EmptyStateComponent,\n gettext,\n HumanizeAppNamePipe,\n InterAppService,\n ModalService,\n OnBeforeSave,\n Status,\n SupportedApps,\n IconDirective\n} from '@c8y/ngx-components';\nimport { CommonModule as NgCommonModule } from '@angular/common';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport {\n DEFAULT_DISPLAY_OPTION_VALUE,\n DEFAULT_QUICK_LINK_ICON,\n QuickLinkDisplayOption,\n DisplayOptionType,\n IQuickLink,\n QuickLinksConfig,\n URL_VALIDATOR_PATTERN\n} from '../quick-links.model';\nimport { QuickLinksWidgetConfigAddLinkComponent } from './quick-links-widget-config-add-link.component';\nimport { forkJoin, lastValueFrom, of, Subject, switchMap, take } from 'rxjs';\nimport { QuickLinksWidgetViewComponent } from '../quick-links-widget-view/quick-links-widget-view.component';\nimport { QuickLinksService } from '../quick-links.service';\nimport { IApplication } from '@c8y/client';\nimport { FormArray, FormBuilder, FormsModule, Validators } from '@angular/forms';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport {\n ContextDashboardService,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport { QuickLinksWidgetConfigListComponent } from './quick-links-widget-config-list.component';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'c8y-quick-links-widget-config',\n imports: [\n NgCommonModule,\n TooltipModule,\n PopoverModule,\n QuickLinksWidgetConfigAddLinkComponent,\n QuickLinksWidgetViewComponent,\n QuickLinksWidgetConfigListComponent,\n C8yTranslateModule,\n EmptyStateComponent,\n FormsModule,\n IconDirective,\n CollapseModule\n ],\n templateUrl: './quick-links-widget-config.component.html',\n providers: [DashboardChildComponent, DashboardComponent]\n})\nexport class QuickLinksWidgetConfigComponent implements OnInit, OnBeforeSave, OnDestroy {\n config = input<QuickLinksConfig>();\n\n quickLinksForm: ReturnType<QuickLinksWidgetConfigComponent['initForm']>;\n selectedDisplayOption: DisplayOptionType = DEFAULT_DISPLAY_OPTION_VALUE;\n appsNameChanged = signal<IApplication[]>([]);\n addLinkIsCollapsed = true;\n\n @ViewChild('quickLinksPreview')\n set previewSet(template: TemplateRef<any>) {\n if (template) {\n this.widgetConfigService.setPreview(template);\n return;\n }\n this.widgetConfigService.setPreview(null);\n }\n\n private destroy$ = new Subject<void>();\n\n readonly DEFAULT_QUICK_LINK_ICON = DEFAULT_QUICK_LINK_ICON;\n readonly DisplayOption = QuickLinkDisplayOption;\n private readonly CHANGE_DEFAULT_ICON_LABEL = gettext('You have changed the quick link icon for:');\n private readonly SAVE_CHANGES_LABEL = gettext(\n 'Please note that this action is irreversible. Do you want to save your changes?'\n );\n\n get quickLinksFormArray(): FormArray {\n return this.quickLinksForm.get('quickLinks') as FormArray;\n }\n\n private readonly quickLinksService = inject(QuickLinksService);\n private readonly modalService = inject(ModalService);\n private readonly humanizeAppNamePipe = inject(HumanizeAppNamePipe);\n private readonly interAppService = inject(InterAppService);\n private readonly formBuilder = inject(FormBuilder);\n private readonly contextDashboardService = inject(ContextDashboardService);\n private readonly translateService = inject(TranslateService);\n private readonly widgetConfigService = inject(WidgetConfigService);\n\n ngOnInit(): void {\n this.onInitConfig();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n getQuickLinks(): IQuickLink[] {\n return this.quickLinksForm.getRawValue().quickLinks as IQuickLink[];\n }\n\n addQuickLink(link: IQuickLink): void {\n const quickLinkForm = this.formBuilder.group({\n icon: [link?.icon],\n label: [link?.label || '', [Validators.required, Validators.maxLength(50)]],\n url: [link?.url || '', [Validators.required, Validators.pattern(URL_VALIDATOR_PATTERN)]],\n newTab: [link?.newTab || false],\n app: [link?.app]\n });\n\n this.quickLinksFormArray.push(quickLinkForm);\n\n this.config().links = this.getQuickLinks();\n }\n\n async onBeforeSave(config?: QuickLinksConfig): Promise<boolean> {\n try {\n await this.confirmAppIconChanges();\n\n config.links = this.getQuickLinks();\n config.displayOption = this.selectedDisplayOption;\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n assignLinksToConfig(): void {\n this.interAppService\n .isCurrentApp$(SupportedApps.devicemanagement)\n .pipe(\n take(1),\n switchMap(isDeviceManagement =>\n isDeviceManagement\n ? this.quickLinksService.getQuickLinksForDeviceManagement$()\n : this.quickLinksService.getDefaultQuickLinks$()\n )\n )\n .subscribe(quickLinks => (this.config().links = quickLinks));\n }\n\n resetLinks(): void {\n this.quickLinksForm = this.initForm();\n this.assignLinksToConfig();\n this.config().links.forEach(link => this.addQuickLink(link));\n }\n\n private onInitConfig(): void {\n this.setupQuickLinksForm();\n\n if (!this.config().links) {\n this.assignLinksToConfig();\n }\n\n this.config().links.forEach(link => this.addQuickLink(link));\n\n if (!this.config().displayOption) {\n this.config().displayOption = this.selectedDisplayOption;\n return;\n }\n this.selectedDisplayOption = this.config().displayOption;\n }\n\n private setupQuickLinksForm(): void {\n this.quickLinksForm = this.initForm();\n\n this.quickLinksForm.statusChanges\n .pipe(debounceTime(30), takeUntil(this.destroy$))\n .subscribe(status => (this.contextDashboardService.formDisabled$ = of(status === 'INVALID')));\n }\n\n private async confirmAppIconChanges(): Promise<void> {\n if (this.appsNameChanged().length > 0) {\n const appNameObservables = this.appsNameChanged().map(app =>\n this.humanizeAppNamePipe.transform(app).pipe(take(1))\n );\n\n const appNames = await lastValueFrom(forkJoin(appNameObservables));\n\n const CHANGE_DEFAULT_ICON_LABEL_TRANSLATED = this.translateService.instant(\n this.CHANGE_DEFAULT_ICON_LABEL\n );\n const SAVE_CHANGES_LABEL_TRANSLATED = this.translateService.instant(this.SAVE_CHANGES_LABEL);\n\n const modalMessage = `${CHANGE_DEFAULT_ICON_LABEL_TRANSLATED} ${appNames.join(', ')}. ${SAVE_CHANGES_LABEL_TRANSLATED}`;\n\n await this.modalService.confirm(\n gettext('Confirm Quick Link Icon Change'),\n modalMessage,\n Status.INFO,\n {\n ok: gettext('Save')\n }\n );\n }\n }\n\n private initForm() {\n return this.formBuilder.group({\n quickLinks: this.formBuilder.array([])\n });\n }\n}\n","<div class=\"col-md-12 a-s-stretch inner-scroll p-0 bg-level-1\">\n <div class=\"separator-bottom sticky-top bg-inherit\">\n <div class=\"p-l-16 p-r-16 p-b-8 p-t-8 d-flex gap-16 a-i-center\">\n <span class=\"text-medium\">\n {{ 'Links' | translate }}\n </span>\n <div class=\"m-l-auto\">\n <button\n class=\"btn btn-clean btn-sm\"\n title=\"{{ 'Add a quick link' | translate }}\"\n type=\"button\"\n (click)=\"addLinkIsCollapsed = !addLinkIsCollapsed\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add a quick link' | translate }}\n </button>\n\n <button\n class=\"btn btn-clean btn-sm\"\n title=\"{{ 'Reset links' | translate }}\"\n [popover]=\"confirmPopover\"\n placement=\"bottom\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [outsideClick]=\"true\"\n #pop=\"bs-popover\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n {{ 'Reset links' | translate }}\n </button>\n <ng-template #confirmPopover>\n <p class=\"m-b-8\">\n {{\n 'Resetting links removes all custom links and resets the widget to its default state.'\n | translate\n }}\n </p>\n <button\n class=\"btn btn-default btn-sm\"\n (click)=\"pop.hide()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n (click)=\"resetLinks(); pop.hide()\"\n >\n {{ 'Reset links' | translate }}\n </button>\n </ng-template>\n </div>\n </div>\n <div\n class=\"collapse bg-level-1\"\n #collapse=\"bs-collapse\"\n [collapse]=\"addLinkIsCollapsed\"\n [isAnimated]=\"true\"\n >\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <c8y-quick-links-widget-config-add-link\n (onQuickLinkCreated)=\"addQuickLink($event); addLinkIsCollapsed = true\"\n (onCancel)=\"addLinkIsCollapsed = true\"\n ></c8y-quick-links-widget-config-add-link>\n </div>\n </div>\n </div>\n\n @if (config().links.length) {\n <c8y-quick-links-widget-config-list\n [quickLinksForm]=\"quickLinksForm\"\n [config]=\"config()\"\n [quickLinksFormArray]=\"quickLinksFormArray\"\n [appsNameChanged]=\"appsNameChanged\"\n ></c8y-quick-links-widget-config-list>\n } @else {\n <c8y-ui-empty-state\n [icon]=\"DEFAULT_QUICK_LINK_ICON\"\n [title]=\"'No quick links to display' | translate\"\n [horizontal]=\"true\"\n >\n <div>\n <button\n class=\"btn btn-primary m-t-16\"\n title=\"{{ 'Reset links' | translate }}\"\n type=\"button\"\n (click)=\"resetLinks()\"\n translate\n >\n Reset links\n </button>\n </div>\n </c8y-ui-empty-state>\n }\n</div>\n\n<div class=\"col-md-12\">\n <div class=\"p-l-24 p-r-24 p-b-8 p-t-16 d-flex gap-8 a-i-center separator-top\">\n <label\n class=\"c8y-checkbox m-l-auto\"\n title=\"{{ 'Translate labels if possible' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"config().translateLinkLabels\"\n />\n <span></span>\n <span>{{ 'Translate labels if possible' | translate }}</span>\n </label>\n\n <label class=\"m-l-auto m-b-0 text-label-small\">{{ 'Display as' | translate }}</label>\n <div class=\"c8y-select-wrapper form-group-sm\">\n <select\n class=\"form-control\"\n title=\"{{ 'Refresh options`options for refreshing a view`' | translate }}\"\n [(ngModel)]=\"selectedDisplayOption\"\n >\n <option [value]=\"DisplayOption.GRID\">\n {{ DisplayOption.GRID | translate }}\n </option>\n <option [value]=\"DisplayOption.LIST\">\n {{ DisplayOption.LIST | translate }}\n </option>\n </select>\n </div>\n </div>\n <ng-template #quickLinksPreview>\n <c8y-quick-links-widget-view\n [config]=\"{\n links: getQuickLinks(),\n displayOption: selectedDisplayOption,\n translateLinkLabels: config().translateLinkLabels\n }\"\n [isPreview]=\"true\"\n ></c8y-quick-links-widget-view>\n </ng-template>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgCommonModule","i1","switchMap","FormsModule","i3","i4"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-widgets-implementations-quick-links.mjs","sources":["../../widgets/implementations/quick-links/quick-links.model.ts","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config-add-link.component.ts","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config-add-link.component.html","../../widgets/implementations/quick-links/quick-links.service.ts","../../widgets/implementations/quick-links/relative-url-parser.pipe.ts","../../widgets/implementations/quick-links/quick-links-widget-view/quick-links-widget-view.component.ts","../../widgets/implementations/quick-links/quick-links-widget-view/quick-links-widget-view.component.html","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config-list.component.ts","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config-list.component.html","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config.component.ts","../../widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config.component.html","../../widgets/implementations/quick-links/c8y-ngx-components-widgets-implementations-quick-links.ts"],"sourcesContent":["import { IApplication } from '@c8y/client';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { ValidationPattern } from '@c8y/ngx-components';\n\nexport interface IQuickLink {\n icon: string;\n label: string;\n url: string;\n newTab: boolean;\n app?: IApplication;\n}\n\nexport type QuickLinksConfig = {\n links: IQuickLink[];\n displayOption: DisplayOptionType;\n translateLinkLabels: boolean;\n};\n\nexport const QuickLinkDisplayOption = {\n GRID: 'Grid',\n LIST: 'List'\n} as const;\n\nexport type DisplayOptionType =\n (typeof QuickLinkDisplayOption)[keyof typeof QuickLinkDisplayOption];\n\nexport const DEFAULT_DISPLAY_OPTION_VALUE = QuickLinkDisplayOption.GRID;\nexport const DEFAULT_QUICK_LINK_ICON = 'link';\n\nexport const HELP_AND_SERVICE_WIDGET_ID = defaultWidgetIds.HELP_AND_SERVICE;\nexport const APPLICATIONS_WIDGET_ID = defaultWidgetIds.APPLICATIONS;\nexport const QUICK_LINKS_DEVICE_MANAGEMENT_ID = defaultWidgetIds.DEVICE_MANAGEMENT_WELCOME;\n\nexport type ConvertibleWidgetID =\n | typeof HELP_AND_SERVICE_WIDGET_ID\n | typeof APPLICATIONS_WIDGET_ID\n | typeof QUICK_LINKS_DEVICE_MANAGEMENT_ID;\n\nexport type DefaultDeviceManagementQuickLinkDefinition = {\n navPath: string[];\n overrides?: QuickLinkOverrides;\n};\ninterface QuickLinkOverrides {\n label?: string;\n icon?: string;\n url?: string;\n}\n\nexport const URL_VALIDATOR_PATTERN = ValidationPattern.rules.quickLinkUrl.pattern;\n\nexport type WidgetConversionConfig = {\n convertWidget: () => void;\n};\n","import { Component, inject, OnInit, output } from '@angular/core';\nimport { C8yTranslatePipe, ChangeIconComponent } from '@c8y/ngx-components';\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconSelectorService } from '@c8y/ngx-components/icon-selector';\nimport { DEFAULT_QUICK_LINK_ICON, IQuickLink, URL_VALIDATOR_PATTERN } from '../quick-links.model';\n\n@Component({\n selector: 'c8y-quick-links-widget-config-add-link',\n imports: [TooltipModule, C8yTranslatePipe, ReactiveFormsModule, ChangeIconComponent],\n templateUrl: './quick-links-widget-config-add-link.component.html'\n})\nexport class QuickLinksWidgetConfigAddLinkComponent implements OnInit {\n onQuickLinkCreated = output<IQuickLink>();\n onCancel = output<void>();\n\n addLinkFormGroup: ReturnType<QuickLinksWidgetConfigAddLinkComponent['initForm']>;\n\n private readonly iconSelector = inject(IconSelectorService);\n private readonly fb = inject(FormBuilder);\n\n ngOnInit() {\n this.addLinkFormGroup = this.initForm();\n }\n\n async changeLinkIcon(): Promise<void> {\n try {\n const newIcon = await this.iconSelector.selectIcon();\n this.addLinkFormGroup.controls.icon.setValue(newIcon);\n } catch {\n // nothing to do\n }\n }\n\n createQuickLink(): void {\n this.onQuickLinkCreated.emit(this.addLinkFormGroup.value as IQuickLink);\n\n this.addLinkFormGroup.reset();\n this.addLinkFormGroup.controls.icon.setValue(DEFAULT_QUICK_LINK_ICON);\n }\n\n private initForm() {\n const controls = {\n icon: [DEFAULT_QUICK_LINK_ICON, [Validators.required]],\n label: ['', [Validators.required, Validators.maxLength(50)]],\n url: ['', [Validators.required, Validators.pattern(URL_VALIDATOR_PATTERN)]],\n newTab: [false, [Validators.required]]\n };\n\n return this.fb.group(controls);\n }\n}\n","<form\n [formGroup]=\"addLinkFormGroup\"\n>\n <div class=\"d-flex a-i-center gap-24\">\n <div class=\"form-group\">\n <label>{{ 'Icon' | translate }}</label>\n <c8y-change-icon\n class=\"form-control\"\n [currentIcon]=\"addLinkFormGroup.controls.icon.value\"\n (onButtonClick)=\"changeLinkIcon()\"\n ></c8y-change-icon>\n </div>\n <div class=\"form-group flex-grow\">\n <label for=\"ql-label\">{{ 'Label' | translate }}</label>\n <input\n class=\"form-control\"\n type=\"text\"\n formControlName=\"label\"\n maxlength=\"50\"\n id=\"ql-label\"\n [placeholder]=\"'e.g. my Quick Link' | translate\"\n />\n </div>\n </div>\n <div class=\"d-flex a-i-center gap-24\">\n <div class=\"form-group flex-grow\">\n <label for=\"ql-url\">{{ 'URL' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"ql-url\"\n type=\"text\"\n formControlName=\"url\"\n maxlength=\"150\"\n [placeholder]=\"'e.g. http://www.example.com' | translate\"\n />\n </div>\n <div class=\"form-group flex-noshrink\">\n <label>&nbsp;</label>\n <label class=\"c8y-checkbox\" title=\"{{ 'Open the link in a new browser tab' | translate }}\">\n <input\n type=\"checkbox\"\n formControlName=\"newTab\"\n checked=\"checked\"\n [attr.aria-label]=\"'Open in new tab' | translate\"\n />\n <span></span>\n <span>{{ 'New tab' | translate }}</span>\n </label>\n </div>\n </div>\n</form>\n\n<button\n class=\"btn btn-default\"\n type=\"button\"\n (click)=\"onCancel.emit();\"\n>\n {{ 'Cancel' | translate }}\n</button>\n<button\n class=\"btn btn-primary\"\n title=\"{{ 'Create a quick link' | translate }}\"\n type=\"button\"\n (click)=\"createQuickLink()\"\n [disabled]=\"addLinkFormGroup.invalid\"\n>\n {{ 'Add quick link' | translate }}\n</button>\n","import { inject, Injectable } from '@angular/core';\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n DocLink,\n DocLinkWithLabel,\n DocsService,\n NavigatorNode,\n NavigatorService,\n sortByPriority\n} from '@c8y/ngx-components';\nimport { combineLatestWith, map, switchMap } from 'rxjs/operators';\nimport { DefaultDeviceManagementQuickLinkDefinition, IQuickLink } from './quick-links.model';\n\n/**\n * Service for managing quick links in Cockpit and Device Management applications.\n * It fetches, processes, and provides quick links to relevant documentation and navigation nodes.\n */\n@Injectable({ providedIn: 'root' })\nexport class QuickLinksService {\n private navNodes: NavigatorNode[];\n\n private readonly docsService = inject(DocsService);\n private readonly navigatorService = inject(NavigatorService);\n\n private readonly labelsToFilterOutInDeviceManagement = [\n 'Add user',\n 'Add device',\n 'Cockpit',\n 'Legal notices'\n ];\n\n /**\n * Retrieves the default quick links for Cockpit Application.\n *\n * @returns An observable emitting an array of quick links.\n */\n getDefaultQuickLinks$(): Observable<IQuickLink[]> {\n return this.getDocLinks$().pipe(\n map(docLinks =>\n docLinks.map(docLink => ({\n icon: docLink.icon,\n label: docLink.label,\n url: docLink.url,\n newTab: docLink.target === '_blank'\n }))\n )\n );\n }\n\n /**\n * Retrieves default quick links for Device Management Application\n *\n * @returns An observable emitting an array of quick links for device management.\n */\n getQuickLinksForDeviceManagement$(): Observable<IQuickLink[]> {\n return this.getSortedDocLinksForDeviceManagement().pipe(\n map(docLinks =>\n docLinks.map(docLink => ({\n icon: docLink.icon,\n label: docLink.label,\n url: docLink.url,\n newTab: docLink.target === '_blank'\n }))\n )\n );\n }\n\n /**\n * Fetches documentation links for Cockpit Application and sorts them by priority.\n *\n * @returns An observable emitting an array of documentation links.\n */\n private getDocLinks$(): Observable<DocLink[]> {\n return combineLatest([this.docsService.items$, this.navigatorService.items$]).pipe(\n map(([links, navigatorNodes]) => this.handleDocLinks([...links], navigatorNodes)),\n map(docLinks => sortByPriority(docLinks))\n );\n }\n\n /**\n * Processes and modifies documentation links.\n *\n * @param links - Array of documentation links.\n * @param navigatorNodes - Array of navigation nodes.\n *\n * @returns An array of processed documentation links.\n */\n private handleDocLinks(links: DocLink[], navigatorNodes: NavigatorNode[]): DocLink[] {\n const groupLink = this.createAddGroupDocLink(navigatorNodes);\n\n if (groupLink) {\n links.push(groupLink);\n }\n return this.replaceDocsLinksWithMainOne(links);\n }\n\n /**\n * Creates a quick link for adding a group if the \"Groups\" node is present.\n *\n * @param navigatorNodes - Array of navigation nodes.\n * @returns A `DocLink` for adding a group or `undefined`.\n */\n private createAddGroupDocLink(navigatorNodes: NavigatorNode[]): DocLink | undefined {\n let docLink: DocLink;\n const groupsNodeLabel = gettext('Groups');\n const groupsNode = this.findNavigatorNode(groupsNodeLabel, navigatorNodes);\n\n if (groupsNode) {\n docLink = {\n type: 'quicklink',\n icon: 'c8y-icon c8y-icon-group-add',\n label: gettext('Add group'),\n target: null,\n url: '/group?showAddGroup=true'\n };\n }\n return docLink;\n }\n\n /**\n * Retrieves additional documentation links related to device management.\n *\n * @returns An observable that emits a list of processed documentation links.\n */\n private getAdditionalDocLinksForDeviceManagement$(): Observable<DocLink[]> {\n return this.docsService.items$.pipe(\n map(docLinks => this.prepareDocLinksForDeviceManagement(docLinks))\n );\n }\n\n /**\n * Prepares documentation links by replacing some links with a main one and filtering out irrelevant links.\n *\n * @param links - The list of documentation links to process.\n * @returns The processed list of documentation links.\n */\n private prepareDocLinksForDeviceManagement(links: DocLink[]): DocLink[] {\n const _links = this.replaceDocsLinksWithMainOne(links);\n\n return this.filterOutDocsLinksForDeviceManagement(_links);\n }\n\n /**\n * Filters out documentation links that should not be included in device management.\n *\n * @param links - The list of documentation links to filter.\n * @returns The filtered list of documentation links.\n */\n private filterOutDocsLinksForDeviceManagement(links: DocLink[]): DocLink[] {\n const filteredLinks = links.filter(\n link =>\n !this.labelsToFilterOutInDeviceManagement.includes(link.label) &&\n !link.url.includes('/apps/')\n );\n\n const additionalLinks = this.docsService\n .getItemsFromHookDocs()\n .filter(doc => this.labelsToFilterOutInDeviceManagement.includes(doc.label));\n\n return sortByPriority([...filteredLinks, ...additionalLinks]);\n }\n\n /**\n * Replaces the first occurrence of a documentation link with a main user guide link.\n *\n * @param links - The list of documentation links to process.\n * @returns The modified list of documentation links.\n */\n private replaceDocsLinksWithMainOne(links: DocLink[]): DocLink[] {\n const DOCS_PATH = '/docs/';\n const docsLinkRegex = /\\/docs\\/(?!legal-notices)/;\n let firstDocsLink = true;\n return links.reduce((acc, link) => {\n const isDocsLink = link.url && docsLinkRegex.test(link.url);\n if (isDocsLink) {\n if (firstDocsLink) {\n firstDocsLink = false;\n // Replace the first /docs/ link with the main one\n acc.push({\n icon: 'book-shelf',\n label: gettext('User documentation'),\n url: this.docsService.getUserGuideLink(DOCS_PATH),\n type: 'doc',\n target: '_blank'\n } as DocLinkWithLabel);\n }\n } else {\n acc.push({\n ...link,\n target: this.isLinkForCurrentApp(link) ? null : '_blank'\n });\n }\n return acc;\n }, []);\n }\n\n /**\n * Checks if a URL is valid.\n *\n * @param url - The URL string to validate.\n * @returns `true` if the URL is valid, otherwise `false`.\n */\n private isValidURL(url: string): boolean {\n try {\n new URL(url);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Determines if a link belongs to the current application.\n *\n * @param link - The documentation link to check.\n * @returns `true` if the link is for the current app, otherwise `false`.\n */\n private isLinkForCurrentApp(link: DocLink): boolean {\n const { url } = link;\n if (!url) return false;\n\n if (!this.isValidURL(url)) {\n return !url.startsWith('/apps/');\n }\n return false;\n }\n\n /**\n * Finds a navigation node by its label.\n *\n * @param nodeName - Label of the node to find.\n * @param navNodes - Array of navigation nodes.\n *\n * @returns The found navigation node.\n */\n private findNavigatorNode(nodeName: string, navNodes: NavigatorNode[] = []): NavigatorNode {\n return navNodes.find((node: NavigatorNode) => node.label === nodeName);\n }\n\n /**\n * Retrieves the default quick links for device management.\n *\n * This method returns an array of predefined quick link definitions\n * used for navigation within the device management section of the application.\n *\n * Each quick link is defined by a navigation path (`navPath`), and optionally\n * includes override properties such as a custom label, icon, or URL.\n *\n * @returns An array of quick link definitions.\n */\n private getDefaultQuickLinksForDeviceManagement(): DefaultDeviceManagementQuickLinkDefinition[] {\n return [\n { navPath: ['Devices', 'All devices'] },\n { navPath: ['Devices', 'Registration'], overrides: { label: gettext('Register device') } },\n {\n navPath: ['Groups'],\n overrides: {\n label: gettext('Add group'),\n icon: 'c8y-group-add',\n url: '/group?showAddGroup=true'\n }\n },\n {\n navPath: ['Management', 'Device profiles'],\n overrides: { label: gettext('Add device profile') }\n },\n {\n navPath: ['Management', 'Software repository'],\n overrides: { label: gettext('Add software') }\n },\n {\n navPath: ['Management', 'Firmware repository'],\n overrides: { label: gettext('Add firmware') }\n }\n ];\n }\n\n /**\n * Fetches documentation links for Device Management Application and sorts them by priority.\n *\n * @returns An observable emitting an array of documentation links.\n */\n private getSortedDocLinksForDeviceManagement(): Observable<DocLink[]> {\n return this.navigatorService.items$.pipe(\n switchMap(navNodes => {\n return of(\n this.getDefaultQuickLinksForDeviceManagement()\n .map(({ navPath, overrides }) =>\n this.createDocLinkToNavNode(navPath, overrides, navNodes)\n )\n .filter(Boolean)\n );\n }),\n combineLatestWith(this.getAdditionalDocLinksForDeviceManagement$()),\n map(([links, additionalLinks]) => [...links, ...additionalLinks]),\n map(docLinks => sortByPriority(docLinks))\n );\n }\n\n /**\n * Creates a document link based on the given navigation node path labels.\n *\n * @param navNodePathLabels - An array of strings representing the path labels used to find the navigation node.\n * @param quickLinkOverrides - An optional partial object of `DocLink` properties that can override the defaults.\n * @param navNodes - An array of `NavigatorNode` objects to search within for the navigation node.\n *\n * @returns A `DocLink` object with the details of the found navigation node, or `undefined` if no matching node is found.\n */\n private createDocLinkToNavNode(\n navNodePathLabels: string[],\n quickLinkOverrides: Partial<DocLink> = {},\n navNodes: NavigatorNode[]\n ): DocLink | undefined {\n const navNode = this.findVisibleNavNode(navNodePathLabels, navNodes);\n\n if (!navNode) {\n return;\n }\n\n return {\n icon: navNode.icon,\n type: 'doc',\n label: navNode.label,\n priority: navNode.priority,\n url: this.ensureLeadingSlash(navNode.path),\n ...quickLinkOverrides\n } as DocLink;\n }\n\n /**\n * Ensures the given path starts with a leading slash.\n *\n * @param path - The path to check.\n * @returns The path with a leading slash.\n */\n private ensureLeadingSlash(path: string): string {\n return path.startsWith('/') ? path : `/${path}`;\n }\n\n /**\n * Recursively searches for a visible navigation node that matches the given path labels.\n *\n * @param navNodePathLabels - An array of labels representing the navigation path.\n * This array is mutated as elements are shifted during recursion.\n * @param navNodes - An array of `NavigatorNode` objects to search within. Defaults to `this.navNodes`.\n *\n * @returns The found `NavigatorNode`.\n */\n private findVisibleNavNode(\n navNodePathLabels: string[],\n navNodes: NavigatorNode[] = this.navNodes\n ): NavigatorNode {\n const currentLabel = navNodePathLabels.shift();\n const navNode = navNodes.find(navNode => !navNode.hidden && navNode.label === currentLabel);\n if (navNode && navNodePathLabels.length > 0) {\n return this.findVisibleNavNode(navNodePathLabels, navNode.children);\n }\n return navNode;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'relativeUrlParser'\n})\nexport class RelativeUrlParserPipe implements PipeTransform {\n transform(url: string): string {\n if (!url) {\n return '';\n }\n\n if (this.isAppUrl(url) || this.isFullUrl(url)) {\n return url;\n }\n\n if (this.isQueryParameter(url)) {\n return `${window.location.hash}${url}`;\n }\n\n if (this.isRelativeToBaseUrl(url)) {\n return url;\n }\n\n if (this.isRelativeUrl(url)) {\n return `#${url}`;\n }\n\n return url;\n }\n\n private isFullUrl(url: string): boolean {\n return url.startsWith('http') || url.startsWith('https');\n }\n\n private isRelativeToBaseUrl(url: string): boolean {\n return url.startsWith('#');\n }\n\n private isRelativeUrl(url: string): boolean {\n return url.startsWith('/');\n }\n\n private isAppUrl(url: string): boolean {\n return url.startsWith('/apps');\n }\n\n private isQueryParameter(url: string): boolean {\n return url.startsWith('?');\n }\n}\n","import { Component, inject, input, OnInit } from '@angular/core';\nimport {\n AppHrefPipe,\n AppIconComponent,\n AppSwitcherService,\n C8yTranslatePipe,\n DashboardChildComponent,\n EmptyStateComponent,\n HumanizeAppNamePipe,\n IconDirective\n} from '@c8y/ngx-components';\nimport { CommonModule as NgCommonModule } from '@angular/common';\n\nimport {\n APPLICATIONS_WIDGET_ID,\n ConvertibleWidgetID,\n DEFAULT_DISPLAY_OPTION_VALUE,\n DEFAULT_QUICK_LINK_ICON,\n QuickLinkDisplayOption,\n HELP_AND_SERVICE_WIDGET_ID,\n QUICK_LINKS_DEVICE_MANAGEMENT_ID,\n QuickLinksConfig,\n WidgetConversionConfig\n} from '../quick-links.model';\nimport { isEmpty } from 'lodash';\nimport { QuickLinksService } from '../quick-links.service';\nimport { RelativeUrlParserPipe } from '../relative-url-parser.pipe';\nimport { firstValueFrom, take } from 'rxjs';\n\n@Component({\n selector: 'c8y-quick-links-widget-view',\n imports: [\n NgCommonModule,\n AppIconComponent,\n RelativeUrlParserPipe,\n EmptyStateComponent,\n IconDirective,\n C8yTranslatePipe\n ],\n templateUrl: './quick-links-widget-view.component.html',\n providers: [AppHrefPipe, HumanizeAppNamePipe, RelativeUrlParserPipe]\n})\nexport class QuickLinksWidgetViewComponent implements OnInit {\n config = input<QuickLinksConfig>();\n isPreview = input<boolean>(false);\n\n protected readonly DEFAULT_QUICK_LINK_ICON = DEFAULT_QUICK_LINK_ICON;\n protected readonly DisplayOption = QuickLinkDisplayOption;\n\n private readonly quickLinksService = inject(QuickLinksService);\n private readonly dashboardChild = inject(DashboardChildComponent);\n private readonly appSwitcherService = inject(AppSwitcherService);\n private readonly appHrefPipe = inject(AppHrefPipe);\n private readonly humanizeAppNamePipe = inject(HumanizeAppNamePipe);\n\n ngOnInit(): void {\n this.convertLegacyWidget();\n }\n\n /**\n * The method is responsible for converting legacy widgets into their updated versions if a conversion is required.\n *\n * The widgets are being converted:\n * - Help and Service Widget\n * - Applications Widget\n * - Quick Links - Device Management Widget\n */\n private convertLegacyWidget(): void {\n if (!this.isConversionRequiredForWidget()) {\n return;\n }\n\n const widgetId: ConvertibleWidgetID = this.getWidgetId();\n\n const widgetConversionMap: Record<ConvertibleWidgetID, WidgetConversionConfig> = {\n [HELP_AND_SERVICE_WIDGET_ID]: {\n convertWidget: this.convertHelpAndServiceWidget.bind(this)\n },\n [APPLICATIONS_WIDGET_ID]: {\n convertWidget: this.convertApplicationsWidget.bind(this)\n },\n [QUICK_LINKS_DEVICE_MANAGEMENT_ID]: {\n convertWidget: this.convertDeviceManagementQuickLinksWidget.bind(this)\n }\n };\n\n const widget: WidgetConversionConfig = widgetConversionMap[widgetId];\n\n widget.convertWidget();\n }\n\n /**\n * Converts the Device Management Quick Links widget by assigning default quick links for the device management app\n * and updating the widget configuration with default options.\n */\n private convertDeviceManagementQuickLinksWidget(): void {\n this.quickLinksService\n .getQuickLinksForDeviceManagement$()\n .pipe(take(1))\n .subscribe(quickLinks => (this.config().links = quickLinks));\n\n this.config().displayOption = DEFAULT_DISPLAY_OPTION_VALUE;\n }\n\n /**\n * Converts the Applications widget by assigning default quick links\n * and updating the widget configuration with default options.\n */\n private convertApplicationsWidget(): void {\n this.appSwitcherService.apps$.pipe(take(1)).subscribe(\n async oneCloudApps =>\n (this.config().links = await Promise.all(\n oneCloudApps.map(async app => ({\n label: await firstValueFrom(this.humanizeAppNamePipe.transform(app)),\n url: this.appHrefPipe.transform(app),\n icon: null,\n newTab: false,\n app\n }))\n ))\n );\n\n this.config().displayOption = DEFAULT_DISPLAY_OPTION_VALUE;\n }\n\n /**\n * Converts the Help and Service widget by assigning default quick links\n * and updating the widget configuration with default options.\n */\n private convertHelpAndServiceWidget(): void {\n this.quickLinksService\n .getDefaultQuickLinks$()\n .pipe(take(1))\n .subscribe(quickLinks => (this.config().links = quickLinks));\n\n this.config().displayOption = DEFAULT_DISPLAY_OPTION_VALUE;\n }\n\n /**\n * Determines whether conversion is required for the widget.\n * Conversion is needed if the widget configuration is empty and a valid widget ID exists.\n *\n * @returns `true` if conversion is required, otherwise `false`.\n */\n private isConversionRequiredForWidget(): boolean {\n return isEmpty(this.config()) && !!this.getWidgetId();\n }\n\n /**\n * Retrieves the widget ID from the dashboard child data.\n * If `componentId` is available, it is returned; otherwise, the widget's `name` is used.\n *\n * @returns The widget ID as a `ConvertibleWidgetID`, based on `componentId` or `name`.\n */\n private getWidgetId(): ConvertibleWidgetID {\n return this.dashboardChild['data']?.componentId\n ? this.dashboardChild['data']?.componentId\n : this.dashboardChild['data']?.name;\n }\n}\n","@let links = config().links;\n@let pointerNoneStylesPreview = isPreview() ? { 'pointer-events': 'none' } : null;\n\n@if (config().displayOption === DisplayOption.GRID) {\n @if (links?.length) {\n <div class=\"card-group-block interact-grid border-top m-b-0\">\n @for (link of links; track link) {\n @let linkLabel = config().translateLinkLabels ? (link.label | translate) : link.label;\n <a\n class=\"card card--btn pointer\"\n [ngStyle]=\"pointerNoneStylesPreview\"\n [title]=\"linkLabel\"\n [ngClass]=\"{\n disabled: isPreview()\n }\"\n data-cy=\"c8y-quick-links-widget-view--quick-link-card\"\n [attr.role]=\"isPreview() ? null : 'button'\"\n [target]=\"!isPreview() && link.newTab ? '_blank' : '_self'\"\n [attr.rel]=\"isPreview() ? null : 'noopener noreferrer'\"\n [attr.href]=\"isPreview() ? null : (link.url | relativeUrlParser)\"\n >\n @if (link.newTab && !isPreview()) {\n <div\n class=\"card-actions showOnHover\"\n title=\"{{ 'Open in new tab' | translate }}\"\n >\n <span class=\"dropdown-toggle c8y-dropdown\">\n <i c8yIcon=\"external-link\"></i>\n </span>\n </div>\n }\n\n <div class=\"card-block text-center\">\n <div class=\"icon-32\">\n @if (link.icon) {\n <i\n class=\"c8y-icon-duocolor\"\n [c8yIcon]=\"link.icon\"\n ></i>\n } @else {\n <c8y-app-icon\n [name]=\"link.app.name\"\n [app]=\"link.app\"\n [contextPath]=\"link.app.contextPath\"\n ></c8y-app-icon>\n }\n </div>\n <small class=\"text-muted\">\n {{ linkLabel }}\n </small>\n </div>\n </a>\n }\n </div>\n } @else {\n <c8y-ui-empty-state\n [icon]=\"DEFAULT_QUICK_LINK_ICON\"\n [title]=\"'No quick links to display.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n} @else {\n @if (links?.length) {\n <div class=\"separator-top\">\n @for (link of links; track link) {\n @let linkLabel = config().translateLinkLabels ? (link.label | translate) : link.label;\n <a\n class=\"d-flex a-i-center btn-clean gap-8 p-16 text-truncate separator-bottom\"\n [ngStyle]=\"pointerNoneStylesPreview\"\n [title]=\"linkLabel\"\n data-cy=\"c8y-quick-links-widget-view--quick-link-list-item\"\n [attr.role]=\"isPreview() ? null : 'button'\"\n [target]=\"!isPreview() && link.newTab ? '_blank' : '_self'\"\n [attr.rel]=\"isPreview() ? null : 'noopener noreferrer'\"\n [attr.href]=\"isPreview() ? null : (link.url | relativeUrlParser)\"\n >\n @if (link.icon) {\n <i\n class=\"c8y-icon-duocolor icon-24\"\n [c8yIcon]=\"link.icon\"\n ></i>\n } @else {\n <c8y-app-icon\n [name]=\"link.app.name\"\n [app]=\"link.app\"\n [contextPath]=\"link.app.contextPath\"\n ></c8y-app-icon>\n }\n\n <span\n class=\"text-truncate\"\n [title]=\"linkLabel\"\n >\n {{ linkLabel }}\n </span>\n @if (link.newTab) {\n <i\n class=\"text-muted m-l-auto showOnHover\"\n [c8yIcon]=\"'external-link'\"\n title=\"{{ 'Open in new tab' | translate }}\"\n ></i>\n }\n </a>\n }\n </div>\n } @else {\n <c8y-ui-empty-state\n [icon]=\"DEFAULT_QUICK_LINK_ICON\"\n [title]=\"'No quick links to display.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n }\n}\n","import { Component, inject, input, WritableSignal } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport {\n AppIconComponent,\n C8yTranslateModule,\n DynamicFormsModule,\n FormsModule,\n IconDirective,\n ListGroupModule,\n ChangeIconComponent\n} from '@c8y/ngx-components';\nimport { CdkDragDrop, DragDropModule, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { IQuickLink, QuickLinksConfig } from '../quick-links.model';\nimport { IconSelectorService } from '@c8y/ngx-components/icon-selector';\nimport { IApplication } from '@c8y/client';\nimport { NgClass } from '@angular/common';\n\n@Component({\n selector: 'c8y-quick-links-widget-config-list',\n host: {\n class: 'd-contents'\n },\n imports: [\n FormsModule,\n DragDropModule,\n TooltipModule,\n PopoverModule,\n ListGroupModule,\n DynamicFormsModule,\n AppIconComponent,\n C8yTranslateModule,\n IconDirective,\n ChangeIconComponent,\n NgClass\n ],\n templateUrl: './quick-links-widget-config-list.component.html'\n})\nexport class QuickLinksWidgetConfigListComponent {\n quickLinksForm = input<FormGroup>();\n config = input<QuickLinksConfig>();\n quickLinksFormArray = input<FormArray>();\n appsNameChanged = input<WritableSignal<IApplication[]>>();\n\n private readonly iconSelector = inject(IconSelectorService);\n\n drop(event: CdkDragDrop<IQuickLink[]>): void {\n moveItemInArray(this.config().links, event.previousIndex, event.currentIndex);\n moveItemInArray(this.quickLinksFormArray().controls, event.previousIndex, event.currentIndex);\n }\n\n async changeLinkIcon(linkForm: AbstractControl<any, any>): Promise<void> {\n try {\n const isIconPresent = !!linkForm.get('icon')?.value;\n const newIcon = await this.iconSelector.selectIcon();\n\n if (newIcon) {\n linkForm.patchValue({ icon: newIcon });\n this.config().links = this.getQuickLinks();\n }\n\n const isAppIconChange = !!linkForm.get('app')?.value;\n if (isAppIconChange && !isIconPresent) {\n this.appsNameChanged().update(apps => [...apps, linkForm.get('app')?.value]);\n }\n } catch {\n // Nothing to do if the user cancels icon selection\n }\n }\n\n removeLink(index: number): void {\n const quickLinksFormArray = this.quickLinksForm().get('quickLinks') as FormArray;\n quickLinksFormArray.removeAt(index);\n this.config().links = this.getQuickLinks();\n }\n\n getQuickLinks(): IQuickLink[] {\n return this.quickLinksForm().getRawValue().quickLinks as IQuickLink[];\n }\n}\n","<c8y-list-group\n class=\"cdk-droplist no-border-last\"\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\"\n [cdkDropListDisabled]=\"getQuickLinks().length < 2\"\n>\n <form\n class=\"d-contents\"\n [formGroup]=\"quickLinksForm()\"\n >\n <div\n class=\"d-contents\"\n [formArrayName]=\"'quickLinks'\"\n >\n @for (link of quickLinksFormArray().controls; track link; let i = $index) {\n @let linkValue = link.getRawValue();\n\n <c8y-li\n [dense]=\"true\"\n [formGroupName]=\"i\"\n cdkDrag\n >\n <c8y-li-drag-handle\n title=\"{{ 'Drag to reorder' | translate }}\"\n cdkDragHandle\n >\n <i c8yIcon=\"drag-reorder\"></i>\n </c8y-li-drag-handle>\n <c8y-li-icon\n class=\"icon-24 p-relative changeIcon a-s-stretch\"\n [ngClass]=\"{\n 'm-l-16': getQuickLinks().length < 2\n }\"\n >\n @if (linkValue.icon) {\n <c8y-change-icon\n [currentIcon]=\"linkValue.icon\"\n (onButtonClick)=\"changeLinkIcon(link)\"\n ></c8y-change-icon>\n } @else {\n <c8y-change-icon (onButtonClick)=\"changeLinkIcon(link)\">\n <c8y-app-icon\n [name]=\"linkValue.app.name\"\n [app]=\"linkValue.app\"\n [contextPath]=\"linkValue.app.contextPath\"\n ></c8y-app-icon>\n </c8y-change-icon>\n }\n </c8y-li-icon>\n\n <div class=\"d-flex gap-8 a-i-center\">\n <div class=\"input-group input-group-editable\">\n <input\n class=\"form-control\"\n formControlName=\"label\"\n [placeholder]=\"'e.g. my Quick Link' | translate\"\n />\n <span></span>\n </div>\n\n <button\n class=\"showOnHover btn-dot btn-dot--danger m-l-auto\"\n [attr.aria-label]=\"'Delete' | translate\"\n tooltip=\"{{ 'Delete' | translate }}\"\n placement=\"top\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"removeLink(i)\"\n >\n <i c8yIcon=\"minus-circle\"></i>\n </button>\n </div>\n <c8y-list-item-collapse>\n <div class=\"d-flex a-i-center gap-24\">\n <div class=\"form-group flex-grow\">\n <label for=\"ql-url\">{{ 'URL' | translate }}</label>\n <input\n class=\"form-control\"\n id=\"ql-url\"\n type=\"text\"\n formControlName=\"url\"\n maxlength=\"150\"\n [placeholder]=\"'e.g. https://www.example.com' | translate\"\n />\n </div>\n <div class=\"form-group flex-noshrink\">\n <label>&nbsp;</label>\n <label\n class=\"c8y-checkbox\"\n title=\"{{ 'Open the link in a new browser tab' | translate }}\"\n >\n <input\n [attr.aria-label]=\"'Open in new tab' | translate\"\n type=\"checkbox\"\n formControlName=\"newTab\"\n checked=\"checked\"\n />\n <span></span>\n <span>{{ 'New tab' | translate }}</span>\n </label>\n </div>\n </div>\n </c8y-list-item-collapse>\n </c8y-li>\n }\n </div>\n </form>\n</c8y-list-group>\n","import {\n Component,\n inject,\n input,\n OnDestroy,\n OnInit,\n signal,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n C8yTranslateModule,\n DashboardChildComponent,\n DashboardComponent,\n EmptyStateComponent,\n HumanizeAppNamePipe,\n InterAppService,\n ModalService,\n OnBeforeSave,\n Status,\n SupportedApps,\n IconDirective\n} from '@c8y/ngx-components';\nimport { CommonModule as NgCommonModule } from '@angular/common';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport {\n DEFAULT_DISPLAY_OPTION_VALUE,\n DEFAULT_QUICK_LINK_ICON,\n QuickLinkDisplayOption,\n DisplayOptionType,\n IQuickLink,\n QuickLinksConfig,\n URL_VALIDATOR_PATTERN\n} from '../quick-links.model';\nimport { QuickLinksWidgetConfigAddLinkComponent } from './quick-links-widget-config-add-link.component';\nimport { forkJoin, lastValueFrom, of, Subject, switchMap, take } from 'rxjs';\nimport { QuickLinksWidgetViewComponent } from '../quick-links-widget-view/quick-links-widget-view.component';\nimport { QuickLinksService } from '../quick-links.service';\nimport { IApplication } from '@c8y/client';\nimport { FormArray, FormBuilder, FormsModule, Validators } from '@angular/forms';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport {\n ContextDashboardService,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport { QuickLinksWidgetConfigListComponent } from './quick-links-widget-config-list.component';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n selector: 'c8y-quick-links-widget-config',\n imports: [\n NgCommonModule,\n TooltipModule,\n PopoverModule,\n QuickLinksWidgetConfigAddLinkComponent,\n QuickLinksWidgetViewComponent,\n QuickLinksWidgetConfigListComponent,\n C8yTranslateModule,\n EmptyStateComponent,\n FormsModule,\n IconDirective,\n CollapseModule\n ],\n templateUrl: './quick-links-widget-config.component.html',\n providers: [DashboardChildComponent, DashboardComponent]\n})\nexport class QuickLinksWidgetConfigComponent implements OnInit, OnBeforeSave, OnDestroy {\n config = input<QuickLinksConfig>();\n\n quickLinksForm: ReturnType<QuickLinksWidgetConfigComponent['initForm']>;\n selectedDisplayOption: DisplayOptionType = DEFAULT_DISPLAY_OPTION_VALUE;\n appsNameChanged = signal<IApplication[]>([]);\n addLinkIsCollapsed = true;\n\n @ViewChild('quickLinksPreview')\n set previewSet(template: TemplateRef<any>) {\n if (template) {\n this.widgetConfigService.setPreview(template);\n return;\n }\n this.widgetConfigService.setPreview(null);\n }\n\n private destroy$ = new Subject<void>();\n\n readonly DEFAULT_QUICK_LINK_ICON = DEFAULT_QUICK_LINK_ICON;\n readonly DisplayOption = QuickLinkDisplayOption;\n private readonly CHANGE_DEFAULT_ICON_LABEL = gettext('You have changed the quick link icon for:');\n private readonly SAVE_CHANGES_LABEL = gettext(\n 'Please note that this action is irreversible. Do you want to save your changes?'\n );\n\n get quickLinksFormArray(): FormArray {\n return this.quickLinksForm.get('quickLinks') as FormArray;\n }\n\n private readonly quickLinksService = inject(QuickLinksService);\n private readonly modalService = inject(ModalService);\n private readonly humanizeAppNamePipe = inject(HumanizeAppNamePipe);\n private readonly interAppService = inject(InterAppService);\n private readonly formBuilder = inject(FormBuilder);\n private readonly contextDashboardService = inject(ContextDashboardService);\n private readonly translateService = inject(TranslateService);\n private readonly widgetConfigService = inject(WidgetConfigService);\n\n ngOnInit(): void {\n this.onInitConfig();\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n getQuickLinks(): IQuickLink[] {\n return this.quickLinksForm.getRawValue().quickLinks as IQuickLink[];\n }\n\n addQuickLink(link: IQuickLink): void {\n const quickLinkForm = this.formBuilder.group({\n icon: [link?.icon],\n label: [link?.label || '', [Validators.required, Validators.maxLength(50)]],\n url: [link?.url || '', [Validators.required, Validators.pattern(URL_VALIDATOR_PATTERN)]],\n newTab: [link?.newTab || false],\n app: [link?.app]\n });\n\n this.quickLinksFormArray.push(quickLinkForm);\n\n this.config().links = this.getQuickLinks();\n }\n\n async onBeforeSave(config?: QuickLinksConfig): Promise<boolean> {\n try {\n await this.confirmAppIconChanges();\n\n config.links = this.getQuickLinks();\n config.displayOption = this.selectedDisplayOption;\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n assignLinksToConfig(): void {\n this.interAppService\n .isCurrentApp$(SupportedApps.devicemanagement)\n .pipe(\n take(1),\n switchMap(isDeviceManagement =>\n isDeviceManagement\n ? this.quickLinksService.getQuickLinksForDeviceManagement$()\n : this.quickLinksService.getDefaultQuickLinks$()\n )\n )\n .subscribe(quickLinks => (this.config().links = quickLinks));\n }\n\n resetLinks(): void {\n this.quickLinksForm = this.initForm();\n this.assignLinksToConfig();\n this.config().links.forEach(link => this.addQuickLink(link));\n }\n\n private onInitConfig(): void {\n this.setupQuickLinksForm();\n\n if (!this.config().links) {\n this.assignLinksToConfig();\n }\n\n this.config().links.forEach(link => this.addQuickLink(link));\n\n if (!this.config().displayOption) {\n this.config().displayOption = this.selectedDisplayOption;\n return;\n }\n this.selectedDisplayOption = this.config().displayOption;\n }\n\n private setupQuickLinksForm(): void {\n this.quickLinksForm = this.initForm();\n\n this.quickLinksForm.statusChanges\n .pipe(debounceTime(30), takeUntil(this.destroy$))\n .subscribe(status => (this.contextDashboardService.formDisabled$ = of(status === 'INVALID')));\n }\n\n private async confirmAppIconChanges(): Promise<void> {\n if (this.appsNameChanged().length > 0) {\n const appNameObservables = this.appsNameChanged().map(app =>\n this.humanizeAppNamePipe.transform(app).pipe(take(1))\n );\n\n const appNames = await lastValueFrom(forkJoin(appNameObservables));\n\n const CHANGE_DEFAULT_ICON_LABEL_TRANSLATED = this.translateService.instant(\n this.CHANGE_DEFAULT_ICON_LABEL\n );\n const SAVE_CHANGES_LABEL_TRANSLATED = this.translateService.instant(this.SAVE_CHANGES_LABEL);\n\n const modalMessage = `${CHANGE_DEFAULT_ICON_LABEL_TRANSLATED} ${appNames.join(', ')}. ${SAVE_CHANGES_LABEL_TRANSLATED}`;\n\n await this.modalService.confirm(\n gettext('Confirm Quick Link Icon Change'),\n modalMessage,\n Status.INFO,\n {\n ok: gettext('Save')\n }\n );\n }\n }\n\n private initForm() {\n return this.formBuilder.group({\n quickLinks: this.formBuilder.array([])\n });\n }\n}\n","<div class=\"col-md-12 a-s-stretch inner-scroll p-0 bg-level-1\">\n <div class=\"separator-bottom sticky-top bg-inherit\">\n <div class=\"p-l-16 p-r-16 p-b-8 p-t-8 d-flex gap-16 a-i-center\">\n <span class=\"text-medium\">\n {{ 'Links' | translate }}\n </span>\n <div class=\"m-l-auto\">\n <button\n class=\"btn btn-clean btn-sm\"\n title=\"{{ 'Add a quick link' | translate }}\"\n type=\"button\"\n (click)=\"addLinkIsCollapsed = !addLinkIsCollapsed\"\n >\n <i [c8yIcon]=\"'plus-circle'\"></i>\n {{ 'Add a quick link' | translate }}\n </button>\n\n <button\n class=\"btn btn-clean btn-sm\"\n title=\"{{ 'Reset links' | translate }}\"\n [popover]=\"confirmPopover\"\n placement=\"bottom\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [outsideClick]=\"true\"\n #pop=\"bs-popover\"\n >\n <i [c8yIcon]=\"'reset'\"></i>\n {{ 'Reset links' | translate }}\n </button>\n <ng-template #confirmPopover>\n <p class=\"m-b-8\">\n {{\n 'Resetting links removes all custom links and resets the widget to its default state.'\n | translate\n }}\n </p>\n <button\n class=\"btn btn-default btn-sm\"\n (click)=\"pop.hide()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n (click)=\"resetLinks(); pop.hide()\"\n >\n {{ 'Reset links' | translate }}\n </button>\n </ng-template>\n </div>\n </div>\n <div\n class=\"collapse bg-level-1\"\n #collapse=\"bs-collapse\"\n [collapse]=\"addLinkIsCollapsed\"\n [isAnimated]=\"true\"\n >\n <div class=\"p-t-16 p-b-16 p-l-24 p-r-24 separator-bottom\">\n <c8y-quick-links-widget-config-add-link\n (onQuickLinkCreated)=\"addQuickLink($event); addLinkIsCollapsed = true\"\n (onCancel)=\"addLinkIsCollapsed = true\"\n ></c8y-quick-links-widget-config-add-link>\n </div>\n </div>\n </div>\n\n @if (config().links.length) {\n <c8y-quick-links-widget-config-list\n [quickLinksForm]=\"quickLinksForm\"\n [config]=\"config()\"\n [quickLinksFormArray]=\"quickLinksFormArray\"\n [appsNameChanged]=\"appsNameChanged\"\n ></c8y-quick-links-widget-config-list>\n } @else {\n <c8y-ui-empty-state\n [icon]=\"DEFAULT_QUICK_LINK_ICON\"\n [title]=\"'No quick links to display' | translate\"\n [horizontal]=\"true\"\n >\n <div>\n <button\n class=\"btn btn-primary m-t-16\"\n title=\"{{ 'Reset links' | translate }}\"\n type=\"button\"\n (click)=\"resetLinks()\"\n translate\n >\n Reset links\n </button>\n </div>\n </c8y-ui-empty-state>\n }\n</div>\n\n<div class=\"col-md-12\">\n <div class=\"p-l-24 p-r-24 p-b-8 p-t-16 d-flex gap-8 a-i-center separator-top\">\n <label\n class=\"c8y-checkbox m-l-auto\"\n title=\"{{ 'Translate labels if possible' | translate }}\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"config().translateLinkLabels\"\n />\n <span></span>\n <span>{{ 'Translate labels if possible' | translate }}</span>\n </label>\n\n <label class=\"m-l-auto m-b-0 text-label-small\">{{ 'Display as' | translate }}</label>\n <div class=\"c8y-select-wrapper form-group-sm\">\n <select\n class=\"form-control\"\n title=\"{{ 'Refresh options`options for refreshing a view`' | translate }}\"\n [(ngModel)]=\"selectedDisplayOption\"\n >\n <option [value]=\"DisplayOption.GRID\">\n {{ DisplayOption.GRID | translate }}\n </option>\n <option [value]=\"DisplayOption.LIST\">\n {{ DisplayOption.LIST | translate }}\n </option>\n </select>\n </div>\n </div>\n <ng-template #quickLinksPreview>\n <c8y-quick-links-widget-view\n [config]=\"{\n links: getQuickLinks(),\n displayOption: selectedDisplayOption,\n translateLinkLabels: config().translateLinkLabels\n }\"\n [isPreview]=\"true\"\n ></c8y-quick-links-widget-view>\n </ng-template>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgCommonModule","i1","switchMap","FormsModule","i3","i4"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { inject, Injector } from '@angular/core';
2
2
  import { IdentityService, InventoryService } from '@c8y/client';
3
- import { DashboardDetailService } from '@c8y/ngx-components/context-dashboard';
4
3
 
5
4
  async function getExternalIdentityByTargetId(targetId, identityService) {
6
5
  const targetExternalIds = await identityService.list(`${targetId}`);
@@ -70,10 +69,7 @@ async function exportConfigWithDevice(config) {
70
69
  /**
71
70
  * Imports a configuration with asset information adapted to the current context
72
71
  */
73
- async function importConfigWithDevice(config) {
74
- const injector = inject(Injector);
75
- const dashboardDetailsService = injector.get(DashboardDetailService);
76
- const dashboardData = dashboardDetailsService.details;
72
+ async function importConfigWithDevice(config, dashboardData, _options) {
77
73
  // Create a new config object with all properties
78
74
  const importedConfig = { ...config };
79
75
  if (config.device && 'externalIdentity' in config.device) {
@@ -175,7 +171,7 @@ async function processExportedTargetArray(targetObjects = [], context) {
175
171
  /**
176
172
  * Exports widget configuration with all target objects transformed for export
177
173
  */
178
- async function exportConfigWithTargets(config) {
174
+ async function exportConfigWithTargets(config, _dashboardData, _options) {
179
175
  const injector = inject(Injector);
180
176
  const identityService = injector.get(IdentityService);
181
177
  const inventoryService = injector.get(InventoryService);
@@ -196,10 +192,7 @@ async function exportConfigWithTargets(config) {
196
192
  /**
197
193
  * Imports widget configuration with all target objects transformed for the current context
198
194
  */
199
- async function importConfigWithTargets(config) {
200
- const injector = inject(Injector);
201
- const dashboardDetailsService = injector.get(DashboardDetailService);
202
- const dashboardData = dashboardDetailsService.details;
195
+ async function importConfigWithTargets(config, dashboardData, _options) {
203
196
  // Find all properties with target arrays
204
197
  const targetArrayProperties = findTargetArrayProperties(config);
205
198
  if (targetArrayProperties.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-widgets-import-export-config.mjs","sources":["../../widgets/import-export-config/shared-helpers.ts","../../widgets/import-export-config/device-import-export.ts","../../widgets/import-export-config/target-import-export-types.ts","../../widgets/import-export-config/target-transformers.ts","../../widgets/import-export-config/config-target-export.ts","../../widgets/import-export-config/config-target-import.ts","../../widgets/import-export-config/c8y-ngx-components-widgets-import-export-config.ts"],"sourcesContent":["import { inject, Injector } from '@angular/core';\nimport { IdentityService, IExternalIdentity, IManagedObject, InventoryService } from '@c8y/client';\n\nexport type ExportedAsset = IManagedObject & {\n externalIdentity: IExternalIdentity;\n};\n\nexport type ImportedAsset = IManagedObject & {\n suggestedDevice: IManagedObject | null;\n};\n\nexport async function getExternalIdentityByTargetId(\n targetId: string | number,\n identityService: IdentityService\n): Promise<IExternalIdentity> {\n const targetExternalIds = await identityService.list(`${targetId}`);\n return targetExternalIds.data[0] as IExternalIdentity;\n}\n\nexport async function targetDetails(\n targetId: string | number,\n inventoryService: InventoryService\n): Promise<IManagedObject> {\n const targetDetails = await inventoryService.detail(targetId);\n return targetDetails.data;\n}\n\nexport async function resolveSuggestedAsset(\n exportedDevice: ExportedAsset,\n contextDevice: IManagedObject\n): Promise<IManagedObject | null> {\n // 1. check if the exported device is of the same type as the context device\n if (exportedDevice.type === contextDevice.type) {\n return contextDevice;\n }\n\n const injector = inject(Injector);\n const identityService = injector.get(IdentityService);\n const contextAssetExternalIdentity = await getExternalIdentityByTargetId(\n contextDevice.id,\n identityService\n );\n // 2. check if the exported device has the same externalId as the context device\n if (contextAssetExternalIdentity?.externalId === exportedDevice.externalIdentity?.externalId) {\n return contextDevice;\n }\n // 3. If context device is a group, check if the exported device is a child of the context asset\n if (contextDevice.c8y_IsDeviceGroup) {\n const inventoryService = injector.get(InventoryService);\n const children = (await inventoryService.childAssetsList(contextDevice.id, { pageSize: 100 }))\n .data;\n const matchingChild: IManagedObject = children.find((child: IManagedObject) => {\n return child.id === exportedDevice.id && child.type === exportedDevice.type;\n });\n return matchingChild || null;\n }\n\n return null;\n}\n","import { inject, Injector } from '@angular/core';\nimport { IdentityService, IManagedObject, InventoryService } from '@c8y/client';\nimport {\n ExportedAsset,\n getExternalIdentityByTargetId,\n ImportedAsset,\n resolveSuggestedAsset,\n targetDetails\n} from './shared-helpers';\nimport { DashboardDetailService } from '@c8y/ngx-components/context-dashboard';\n\n/**\n * Interface for any configuration that has a device property\n */\nexport interface ConfigWithAsset {\n device?: IManagedObject | null;\n [key: string]: any;\n}\n\n/**\n * Configuration with exported asset information\n */\nexport type ExportedConfigWithAsset<T extends ConfigWithAsset = ConfigWithAsset> = Omit<\n T,\n 'device'\n> & {\n device?: ExportedAsset | null;\n};\n\n/**\n * Configuration with imported asset information\n */\nexport type ImportedConfigWithAsset<T extends ConfigWithAsset = ConfigWithAsset> = Omit<\n T,\n 'device'\n> & {\n device?: ImportedAsset | null;\n};\n\n/**\n * Check if a configuration has a valid device property\n */\nexport function hasAssetProperty(config: any): config is ConfigWithAsset {\n return config && 'device' in config && config.device !== null && config.device !== undefined;\n}\n\n/**\n * Creates a device with external identity information\n */\nasync function createExportedAsset(\n device: IManagedObject,\n identityService: IdentityService,\n inventoryService: InventoryService\n): Promise<ExportedAsset> {\n const deviceDetails = await targetDetails(device.id, inventoryService);\n const externalIdentity = await getExternalIdentityByTargetId(device.id, identityService);\n return { ...deviceDetails, externalIdentity };\n}\n\n/**\n * Exports a configuration with asset information enriched for export\n */\nexport async function exportConfigWithDevice<T extends ConfigWithAsset>(\n config: T\n): Promise<ExportedConfigWithAsset<T>> {\n const injector = inject(Injector);\n const identityService = injector.get(IdentityService);\n const inventoryService = injector.get(InventoryService);\n\n // Create a new config object with all properties\n const exportedConfig = { ...config } as any;\n\n if (hasAssetProperty(config) && config.device?.id) {\n exportedConfig.device = await createExportedAsset(\n config.device,\n identityService,\n inventoryService\n );\n } else {\n // If there's no device or no device.id, maintain the null/undefined\n exportedConfig.device = config.device;\n }\n\n return exportedConfig as ExportedConfigWithAsset<T>;\n}\n\n/**\n * Imports a configuration with asset information adapted to the current context\n */\nexport async function importConfigWithDevice<T extends ConfigWithAsset>(\n config: ExportedConfigWithAsset<T>\n): Promise<ImportedConfigWithAsset<T>> {\n const injector = inject(Injector);\n const dashboardDetailsService = injector.get(DashboardDetailService);\n const dashboardData = dashboardDetailsService.details;\n\n // Create a new config object with all properties\n const importedConfig = { ...config } as any;\n\n if (config.device && 'externalIdentity' in config.device) {\n const suggestedDevice = await resolveSuggestedAsset(config.device, dashboardData.context);\n\n // Remove externalIdentity and add suggestedDevice\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { externalIdentity, ...deviceWithoutExternalId } = config.device;\n importedConfig.device = { ...deviceWithoutExternalId, suggestedDevice };\n } else {\n // If the device doesn't have externalIdentity, maintain it as is\n importedConfig.device = config.device;\n }\n\n return importedConfig as ImportedConfigWithAsset<T>;\n}\n","import { IIdentified } from '@c8y/client';\nimport { ExportedAsset, ImportedAsset } from './shared-helpers';\n\n/**\n * Type for any object that has a __target property\n */\nexport interface WithTarget {\n __target: IIdentified | null;\n [key: string]: any;\n}\n\n/**\n * Represents a target-based object with export information\n */\nexport type ExportedTargetObject<T extends WithTarget = WithTarget> = Omit<T, '__target'> & {\n __target: ExportedAsset;\n};\n\n/**\n * Represents a target-based object with import information\n */\nexport type ImportedTargetObject<T extends WithTarget = WithTarget> = Omit<T, '__target'> & {\n __target: ImportedAsset;\n};\n\n/**\n * Helper type to identify arrays of objects with __target property\n */\nexport type TargetObjectArray = WithTarget[];\n\n/**\n * Transforms a type to replace arrays of objects with __target property to ExportedTargetObject[]\n */\nexport type WithExportedTargets<T> = {\n [K in keyof T]: T[K] extends TargetObjectArray ? ExportedTargetObject<T[K][number]>[] : T[K];\n};\n\n/**\n * Transforms a type to replace arrays of objects with __target property to ImportedTargetObject[]\n */\nexport type WithImportedTargets<T> = {\n [K in keyof T]: T[K] extends TargetObjectArray ? ImportedTargetObject<T[K][number]>[] : T[K];\n};\n\n/**\n * Generic config type that can have any properties with target objects\n */\nexport interface ConfigWithTargets {\n [key: string]: any;\n}\n\n/**\n * Configuration type with target objects prepared for export\n */\nexport type ExportedConfigWithTargets<T extends ConfigWithTargets = ConfigWithTargets> =\n WithExportedTargets<T>;\n\n/**\n * Configuration type with target objects prepared for import\n */\nexport type ImportedConfigWithTargets<T extends ConfigWithTargets = ConfigWithTargets> =\n WithImportedTargets<T>;\n\n/**\n * Helper function to check if a value is an array of objects with __target property\n */\nexport function isTargetObjectArray(value: any): value is TargetObjectArray {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'object' &&\n value[0] !== null &&\n '__target' in value[0]\n );\n}\n\n/**\n * Find all property names in an object that contain arrays of objects with __target property\n */\nexport function findTargetArrayProperties(config: ConfigWithTargets): string[] {\n return Object.entries(config)\n .filter(([_, value]) => isTargetObjectArray(value))\n .map(([key]) => key);\n}\n","import { IdentityService, IManagedObject, InventoryService } from '@c8y/client';\nimport {\n getExternalIdentityByTargetId,\n resolveSuggestedAsset,\n targetDetails\n} from './shared-helpers';\nimport {\n WithTarget,\n ExportedTargetObject,\n ImportedTargetObject\n} from './target-import-export-types';\n\n/**\n * Transforms a single target object for export\n */\nexport async function createExportedTargetObject<T extends WithTarget>(\n targetObject: T,\n identityService: IdentityService,\n inventoryService: InventoryService\n): Promise<ExportedTargetObject<T>> {\n if (!targetObject.__target?.id) {\n return {\n ...targetObject,\n __target: null as any // Handle null case\n } as ExportedTargetObject<T>;\n }\n\n const externalIdentity = await getExternalIdentityByTargetId(\n targetObject.__target.id,\n identityService\n );\n const details = await targetDetails(targetObject.__target.id, inventoryService);\n\n return {\n ...targetObject,\n __target: {\n ...details,\n externalIdentity\n }\n } as ExportedTargetObject<T>;\n}\n\n/**\n * Transforms a single exported target object for import\n */\nexport async function createImportedTargetObject<T extends WithTarget>(\n exportedTargetObject: ExportedTargetObject<T>,\n context: IManagedObject\n): Promise<ImportedTargetObject<T>> {\n if (!exportedTargetObject.__target) {\n return {\n ...exportedTargetObject,\n __target: {\n suggestedDevice: null\n } as any\n } as ImportedTargetObject<T>;\n }\n\n const suggestedDevice = await resolveSuggestedAsset(exportedTargetObject.__target, context);\n\n // Create a new object without externalIdentity\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { externalIdentity, ...targetWithoutExternalId } = exportedTargetObject.__target;\n\n return {\n ...exportedTargetObject,\n __target: {\n ...targetWithoutExternalId,\n suggestedDevice\n }\n } as ImportedTargetObject<T>;\n}\n\n/**\n * Transforms an array of target objects for export\n */\nexport async function processTargetArrayToExport<T extends WithTarget>(\n targetObjects: T[] | undefined = [],\n identityService: IdentityService,\n inventoryService: InventoryService\n): Promise<ExportedTargetObject<T>[]> {\n if (!targetObjects || !Array.isArray(targetObjects)) {\n return [];\n }\n\n return Promise.all(\n targetObjects.map(obj => createExportedTargetObject(obj, identityService, inventoryService))\n );\n}\n\n/**\n * Transforms an array of exported target objects for import\n */\nexport async function processExportedTargetArray<T extends WithTarget>(\n targetObjects: ExportedTargetObject<T>[] | undefined = [],\n context: IManagedObject\n): Promise<ImportedTargetObject<T>[]> {\n if (!targetObjects || !Array.isArray(targetObjects)) {\n return [];\n }\n\n return Promise.all(targetObjects.map(obj => createImportedTargetObject(obj, context)));\n}\n","import { inject, Injector } from '@angular/core';\nimport { IdentityService, InventoryService } from '@c8y/client';\nimport {\n ConfigWithTargets,\n ExportedConfigWithTargets,\n findTargetArrayProperties\n} from './target-import-export-types';\nimport { processTargetArrayToExport } from './target-transformers';\n\n/**\n * Exports widget configuration with all target objects transformed for export\n */\nexport async function exportConfigWithTargets<T extends ConfigWithTargets>(\n config: T\n): Promise<ExportedConfigWithTargets<T>> {\n const injector = inject(Injector);\n const identityService = injector.get(IdentityService);\n const inventoryService = injector.get(InventoryService);\n\n // Find all properties with target arrays\n const targetArrayProperties = findTargetArrayProperties(config);\n\n if (targetArrayProperties.length === 0) {\n return config as ExportedConfigWithTargets<T>;\n }\n\n // Create a new object with all properties from the original config\n const exportedConfig = { ...config } as Record<string, any>;\n\n // Process each target array property\n await Promise.all(\n targetArrayProperties.map(async prop => {\n exportedConfig[prop] = await processTargetArrayToExport(\n config[prop],\n identityService,\n inventoryService\n );\n })\n );\n\n return exportedConfig as ExportedConfigWithTargets<T>;\n}\n","import { inject, Injector } from '@angular/core';\nimport { DashboardDetailService } from '@c8y/ngx-components/context-dashboard';\nimport {\n ConfigWithTargets,\n ExportedConfigWithTargets,\n findTargetArrayProperties,\n ImportedConfigWithTargets\n} from './target-import-export-types';\nimport { processExportedTargetArray } from './target-transformers';\n\n/**\n * Imports widget configuration with all target objects transformed for the current context\n */\nexport async function importConfigWithTargets<T extends ConfigWithTargets>(\n config: ExportedConfigWithTargets<T>\n): Promise<ImportedConfigWithTargets<T>> {\n const injector = inject(Injector);\n const dashboardDetailsService = injector.get(DashboardDetailService);\n const dashboardData = dashboardDetailsService.details;\n\n // Find all properties with target arrays\n const targetArrayProperties = findTargetArrayProperties(config);\n\n if (targetArrayProperties.length === 0) {\n return config as ImportedConfigWithTargets<T>;\n }\n\n // Create a new object with all properties from the original config\n const importedConfig = { ...config } as Record<string, any>;\n\n // Process each target array property\n await Promise.all(\n targetArrayProperties.map(async prop => {\n importedConfig[prop] = await processExportedTargetArray(config[prop], dashboardData.context);\n })\n );\n\n return importedConfig as ImportedConfigWithTargets<T>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-widgets-import-export-config.mjs","sources":["../../widgets/import-export-config/shared-helpers.ts","../../widgets/import-export-config/device-import-export.ts","../../widgets/import-export-config/target-import-export-types.ts","../../widgets/import-export-config/target-transformers.ts","../../widgets/import-export-config/config-target-export.ts","../../widgets/import-export-config/config-target-import.ts","../../widgets/import-export-config/c8y-ngx-components-widgets-import-export-config.ts"],"sourcesContent":["import { inject, Injector } from '@angular/core';\nimport { IdentityService, IExternalIdentity, IManagedObject, InventoryService } from '@c8y/client';\n\nexport type ExportedAsset = IManagedObject & {\n externalIdentity: IExternalIdentity;\n};\n\nexport type ImportedAsset = IManagedObject & {\n suggestedDevice: IManagedObject | null;\n};\n\nexport async function getExternalIdentityByTargetId(\n targetId: string | number,\n identityService: IdentityService\n): Promise<IExternalIdentity> {\n const targetExternalIds = await identityService.list(`${targetId}`);\n return targetExternalIds.data[0] as IExternalIdentity;\n}\n\nexport async function targetDetails(\n targetId: string | number,\n inventoryService: InventoryService\n): Promise<IManagedObject> {\n const targetDetails = await inventoryService.detail(targetId);\n return targetDetails.data;\n}\n\nexport async function resolveSuggestedAsset(\n exportedDevice: ExportedAsset,\n contextDevice: IManagedObject\n): Promise<IManagedObject | null> {\n // 1. check if the exported device is of the same type as the context device\n if (exportedDevice.type === contextDevice.type) {\n return contextDevice;\n }\n\n const injector = inject(Injector);\n const identityService = injector.get(IdentityService);\n const contextAssetExternalIdentity = await getExternalIdentityByTargetId(\n contextDevice.id,\n identityService\n );\n // 2. check if the exported device has the same externalId as the context device\n if (contextAssetExternalIdentity?.externalId === exportedDevice.externalIdentity?.externalId) {\n return contextDevice;\n }\n // 3. If context device is a group, check if the exported device is a child of the context asset\n if (contextDevice.c8y_IsDeviceGroup) {\n const inventoryService = injector.get(InventoryService);\n const children = (await inventoryService.childAssetsList(contextDevice.id, { pageSize: 100 }))\n .data;\n const matchingChild: IManagedObject = children.find((child: IManagedObject) => {\n return child.id === exportedDevice.id && child.type === exportedDevice.type;\n });\n return matchingChild || null;\n }\n\n return null;\n}\n","import { inject, Injector } from '@angular/core';\nimport { IdentityService, IManagedObject, InventoryService } from '@c8y/client';\nimport {\n ExportedAsset,\n getExternalIdentityByTargetId,\n ImportedAsset,\n resolveSuggestedAsset,\n targetDetails\n} from './shared-helpers';\nimport type { DashboardMetadata } from '@c8y/ngx-components/context-dashboard';\nimport type { WidgetImportExportInjectorOptions } from '@c8y/ngx-components';\n\n/**\n * Interface for any configuration that has a device property\n */\nexport interface ConfigWithAsset {\n device?: IManagedObject | null;\n [key: string]: any;\n}\n\n/**\n * Configuration with exported asset information\n */\nexport type ExportedConfigWithAsset<T extends ConfigWithAsset = ConfigWithAsset> = Omit<\n T,\n 'device'\n> & {\n device?: ExportedAsset | null;\n};\n\n/**\n * Configuration with imported asset information\n */\nexport type ImportedConfigWithAsset<T extends ConfigWithAsset = ConfigWithAsset> = Omit<\n T,\n 'device'\n> & {\n device?: ImportedAsset | null;\n};\n\n/**\n * Check if a configuration has a valid device property\n */\nexport function hasAssetProperty(config: any): config is ConfigWithAsset {\n return config && 'device' in config && config.device !== null && config.device !== undefined;\n}\n\n/**\n * Creates a device with external identity information\n */\nasync function createExportedAsset(\n device: IManagedObject,\n identityService: IdentityService,\n inventoryService: InventoryService\n): Promise<ExportedAsset> {\n const deviceDetails = await targetDetails(device.id, inventoryService);\n const externalIdentity = await getExternalIdentityByTargetId(device.id, identityService);\n return { ...deviceDetails, externalIdentity };\n}\n\n/**\n * Exports a configuration with asset information enriched for export\n */\nexport async function exportConfigWithDevice<T extends ConfigWithAsset>(\n config: T\n): Promise<ExportedConfigWithAsset<T>> {\n const injector = inject(Injector);\n const identityService = injector.get(IdentityService);\n const inventoryService = injector.get(InventoryService);\n\n // Create a new config object with all properties\n const exportedConfig = { ...config } as any;\n\n if (hasAssetProperty(config) && config.device?.id) {\n exportedConfig.device = await createExportedAsset(\n config.device,\n identityService,\n inventoryService\n );\n } else {\n // If there's no device or no device.id, maintain the null/undefined\n exportedConfig.device = config.device;\n }\n\n return exportedConfig as ExportedConfigWithAsset<T>;\n}\n\n/**\n * Imports a configuration with asset information adapted to the current context\n */\nexport async function importConfigWithDevice<T extends ConfigWithAsset>(\n config: ExportedConfigWithAsset<T>,\n dashboardData: DashboardMetadata,\n _options: WidgetImportExportInjectorOptions\n): Promise<ImportedConfigWithAsset<T>> {\n // Create a new config object with all properties\n const importedConfig = { ...config } as any;\n\n if (config.device && 'externalIdentity' in config.device) {\n const suggestedDevice = await resolveSuggestedAsset(config.device, dashboardData.context);\n\n // Remove externalIdentity and add suggestedDevice\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { externalIdentity, ...deviceWithoutExternalId } = config.device;\n importedConfig.device = { ...deviceWithoutExternalId, suggestedDevice };\n } else {\n // If the device doesn't have externalIdentity, maintain it as is\n importedConfig.device = config.device;\n }\n\n return importedConfig as ImportedConfigWithAsset<T>;\n}\n","import { IIdentified } from '@c8y/client';\nimport { ExportedAsset, ImportedAsset } from './shared-helpers';\n\n/**\n * Type for any object that has a __target property\n */\nexport interface WithTarget {\n __target: IIdentified | null;\n [key: string]: any;\n}\n\n/**\n * Represents a target-based object with export information\n */\nexport type ExportedTargetObject<T extends WithTarget = WithTarget> = Omit<T, '__target'> & {\n __target: ExportedAsset;\n};\n\n/**\n * Represents a target-based object with import information\n */\nexport type ImportedTargetObject<T extends WithTarget = WithTarget> = Omit<T, '__target'> & {\n __target: ImportedAsset;\n};\n\n/**\n * Helper type to identify arrays of objects with __target property\n */\nexport type TargetObjectArray = WithTarget[];\n\n/**\n * Transforms a type to replace arrays of objects with __target property to ExportedTargetObject[]\n */\nexport type WithExportedTargets<T> = {\n [K in keyof T]: T[K] extends TargetObjectArray ? ExportedTargetObject<T[K][number]>[] : T[K];\n};\n\n/**\n * Transforms a type to replace arrays of objects with __target property to ImportedTargetObject[]\n */\nexport type WithImportedTargets<T> = {\n [K in keyof T]: T[K] extends TargetObjectArray ? ImportedTargetObject<T[K][number]>[] : T[K];\n};\n\n/**\n * Generic config type that can have any properties with target objects\n */\nexport interface ConfigWithTargets {\n [key: string]: any;\n}\n\n/**\n * Configuration type with target objects prepared for export\n */\nexport type ExportedConfigWithTargets<T extends ConfigWithTargets = ConfigWithTargets> =\n WithExportedTargets<T>;\n\n/**\n * Configuration type with target objects prepared for import\n */\nexport type ImportedConfigWithTargets<T extends ConfigWithTargets = ConfigWithTargets> =\n WithImportedTargets<T>;\n\n/**\n * Helper function to check if a value is an array of objects with __target property\n */\nexport function isTargetObjectArray(value: any): value is TargetObjectArray {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n typeof value[0] === 'object' &&\n value[0] !== null &&\n '__target' in value[0]\n );\n}\n\n/**\n * Find all property names in an object that contain arrays of objects with __target property\n */\nexport function findTargetArrayProperties(config: ConfigWithTargets): string[] {\n return Object.entries(config)\n .filter(([_, value]) => isTargetObjectArray(value))\n .map(([key]) => key);\n}\n","import { IdentityService, IManagedObject, InventoryService } from '@c8y/client';\nimport {\n getExternalIdentityByTargetId,\n resolveSuggestedAsset,\n targetDetails\n} from './shared-helpers';\nimport {\n WithTarget,\n ExportedTargetObject,\n ImportedTargetObject\n} from './target-import-export-types';\n\n/**\n * Transforms a single target object for export\n */\nexport async function createExportedTargetObject<T extends WithTarget>(\n targetObject: T,\n identityService: IdentityService,\n inventoryService: InventoryService\n): Promise<ExportedTargetObject<T>> {\n if (!targetObject.__target?.id) {\n return {\n ...targetObject,\n __target: null as any // Handle null case\n } as ExportedTargetObject<T>;\n }\n\n const externalIdentity = await getExternalIdentityByTargetId(\n targetObject.__target.id,\n identityService\n );\n const details = await targetDetails(targetObject.__target.id, inventoryService);\n\n return {\n ...targetObject,\n __target: {\n ...details,\n externalIdentity\n }\n } as ExportedTargetObject<T>;\n}\n\n/**\n * Transforms a single exported target object for import\n */\nexport async function createImportedTargetObject<T extends WithTarget>(\n exportedTargetObject: ExportedTargetObject<T>,\n context: IManagedObject\n): Promise<ImportedTargetObject<T>> {\n if (!exportedTargetObject.__target) {\n return {\n ...exportedTargetObject,\n __target: {\n suggestedDevice: null\n } as any\n } as ImportedTargetObject<T>;\n }\n\n const suggestedDevice = await resolveSuggestedAsset(exportedTargetObject.__target, context);\n\n // Create a new object without externalIdentity\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { externalIdentity, ...targetWithoutExternalId } = exportedTargetObject.__target;\n\n return {\n ...exportedTargetObject,\n __target: {\n ...targetWithoutExternalId,\n suggestedDevice\n }\n } as ImportedTargetObject<T>;\n}\n\n/**\n * Transforms an array of target objects for export\n */\nexport async function processTargetArrayToExport<T extends WithTarget>(\n targetObjects: T[] | undefined = [],\n identityService: IdentityService,\n inventoryService: InventoryService\n): Promise<ExportedTargetObject<T>[]> {\n if (!targetObjects || !Array.isArray(targetObjects)) {\n return [];\n }\n\n return Promise.all(\n targetObjects.map(obj => createExportedTargetObject(obj, identityService, inventoryService))\n );\n}\n\n/**\n * Transforms an array of exported target objects for import\n */\nexport async function processExportedTargetArray<T extends WithTarget>(\n targetObjects: ExportedTargetObject<T>[] | undefined = [],\n context: IManagedObject\n): Promise<ImportedTargetObject<T>[]> {\n if (!targetObjects || !Array.isArray(targetObjects)) {\n return [];\n }\n\n return Promise.all(targetObjects.map(obj => createImportedTargetObject(obj, context)));\n}\n","import { inject, Injector } from '@angular/core';\nimport { IdentityService, InventoryService } from '@c8y/client';\nimport {\n ConfigWithTargets,\n ExportedConfigWithTargets,\n findTargetArrayProperties\n} from './target-import-export-types';\nimport { processTargetArrayToExport } from './target-transformers';\nimport type { WidgetImportExportInjectorOptions } from '@c8y/ngx-components';\nimport type { DashboardMetadata } from '@c8y/ngx-components/context-dashboard';\n\n/**\n * Exports widget configuration with all target objects transformed for export\n */\nexport async function exportConfigWithTargets<T extends ConfigWithTargets>(\n config: T,\n _dashboardData: DashboardMetadata,\n _options: WidgetImportExportInjectorOptions\n): Promise<ExportedConfigWithTargets<T>> {\n const injector = inject(Injector);\n const identityService = injector.get(IdentityService);\n const inventoryService = injector.get(InventoryService);\n\n // Find all properties with target arrays\n const targetArrayProperties = findTargetArrayProperties(config);\n\n if (targetArrayProperties.length === 0) {\n return config as ExportedConfigWithTargets<T>;\n }\n\n // Create a new object with all properties from the original config\n const exportedConfig = { ...config } as Record<string, any>;\n\n // Process each target array property\n await Promise.all(\n targetArrayProperties.map(async prop => {\n exportedConfig[prop] = await processTargetArrayToExport(\n config[prop],\n identityService,\n inventoryService\n );\n })\n );\n\n return exportedConfig as ExportedConfigWithTargets<T>;\n}\n","import type { DashboardMetadata } from '@c8y/ngx-components/context-dashboard';\nimport {\n ConfigWithTargets,\n ExportedConfigWithTargets,\n findTargetArrayProperties,\n ImportedConfigWithTargets\n} from './target-import-export-types';\nimport { processExportedTargetArray } from './target-transformers';\nimport type { WidgetImportExportInjectorOptions } from '@c8y/ngx-components';\n\n/**\n * Imports widget configuration with all target objects transformed for the current context\n */\nexport async function importConfigWithTargets<T extends ConfigWithTargets>(\n config: ExportedConfigWithTargets<T>,\n dashboardData: DashboardMetadata,\n _options: WidgetImportExportInjectorOptions\n): Promise<ImportedConfigWithTargets<T>> {\n // Find all properties with target arrays\n const targetArrayProperties = findTargetArrayProperties(config);\n\n if (targetArrayProperties.length === 0) {\n return config as ImportedConfigWithTargets<T>;\n }\n\n // Create a new object with all properties from the original config\n const importedConfig = { ...config } as Record<string, any>;\n\n // Process each target array property\n await Promise.all(\n targetArrayProperties.map(async prop => {\n importedConfig[prop] = await processExportedTargetArray(config[prop], dashboardData.context);\n })\n );\n\n return importedConfig as ImportedConfigWithTargets<T>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}