@c8y/ngx-components 1022.35.1 → 1022.44.7
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.
- package/actility-device-registration/actility-device-registration.component.d.ts.map +1 -1
- package/actility-device-registration/actility-device-registration.service.d.ts.map +1 -1
- package/alarms/alarm-details.component.d.ts.map +1 -1
- package/alarms/alarm-info.component.d.ts.map +1 -1
- package/alarms/alarm-severity-to-icon-class.pipe.d.ts +9 -0
- package/alarms/alarm-severity-to-icon-class.pipe.d.ts.map +1 -0
- package/alarms/alarms-icon.component.d.ts.map +1 -1
- package/alarms/alarms-interval-refresh.component.d.ts.map +1 -1
- package/alarms/alarms-list.component.d.ts.map +1 -1
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.component.d.ts.map +1 -1
- package/alarms/alarms.helper.d.ts.map +1 -1
- package/alarms/alarms.model.d.ts.map +1 -1
- package/alarms/cockpit/index.d.ts.map +1 -1
- package/alarms/devicemanagement/index.d.ts.map +1 -1
- package/alarms/index.d.ts +1 -0
- package/alarms/index.d.ts.map +1 -1
- package/asset-properties/asset-properties.model.d.ts +77 -1
- package/asset-properties/asset-properties.model.d.ts.map +1 -1
- package/asset-properties/asset-properties.service.d.ts +17 -0
- package/asset-properties/asset-properties.service.d.ts.map +1 -1
- package/asset-properties/asset-property-list/asset-property-collapse-button-title.pipe.d.ts +14 -0
- package/asset-properties/asset-property-list/asset-property-collapse-button-title.pipe.d.ts.map +1 -0
- package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts +2 -1
- package/asset-properties/asset-property-list/asset-property-icon.pipe.d.ts.map +1 -1
- package/asset-properties/asset-property-list/asset-property-list.component.d.ts +52 -13
- package/asset-properties/asset-property-list/asset-property-list.component.d.ts.map +1 -1
- package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts +7 -3
- package/asset-properties/asset-property-list/asset-property-value.pipe.d.ts.map +1 -1
- package/asset-properties/asset-property-list/tree-data-source.d.ts +1 -0
- package/asset-properties/asset-property-list/tree-data-source.d.ts.map +1 -1
- package/asset-properties/asset-property-selector-drawer/asset-property-selector-drawer.component.d.ts.map +1 -1
- package/asset-properties/computed-properties-config/computed-properties-config.component.d.ts +39 -0
- package/asset-properties/computed-properties-config/computed-properties-config.component.d.ts.map +1 -0
- package/asset-properties/computed-properties.service.d.ts +27 -0
- package/asset-properties/computed-properties.service.d.ts.map +1 -0
- package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts +11 -6
- package/asset-properties/custom-properties-drawer/custom-properties-drawer.component.d.ts.map +1 -1
- package/asset-properties/custom-properties-drawer.service.d.ts +2 -1
- package/asset-properties/custom-properties-drawer.service.d.ts.map +1 -1
- package/asset-properties/index.d.ts +1 -0
- package/asset-properties/index.d.ts.map +1 -1
- package/assets-navigator/asset-node.d.ts.map +1 -1
- package/assets-navigator/asset-node.service.d.ts.map +1 -1
- package/assets-navigator/asset-selector/asset-selector-node.component.d.ts.map +1 -1
- package/assets-navigator/asset-selector/asset-selector.model.d.ts +1 -2
- package/assets-navigator/asset-selector/asset-selector.model.d.ts.map +1 -1
- package/assets-navigator/asset-selector/miller-view.component.d.ts +17 -5
- package/assets-navigator/asset-selector/miller-view.component.d.ts.map +1 -1
- package/assets-navigator/asset-selector/unassigned-devices-node.d.ts.map +1 -1
- package/assets-navigator/load-more-node.d.ts.map +1 -1
- package/auth-configuration/basic-settings/login-settings.component.d.ts.map +1 -1
- package/auth-configuration/basic-settings/session-configuration.component.d.ts.map +1 -1
- package/auth-configuration/factories/navigation.factory.d.ts.map +1 -1
- package/auth-configuration/factories/tabs.factory.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/sso-configuration.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/access-mapping/inventory-roles-modal.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
- package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
- package/binary-file-download/binary-file-download.service.d.ts.map +1 -1
- package/bookmarks/bookmarks.component.d.ts.map +1 -1
- package/bookmarks/bookmarks.service.d.ts.map +1 -1
- package/bookmarks/edit-bookmarks/edit-bookmarks.component.d.ts.map +1 -1
- package/branding/dark-theme/dark-theme-tab.factory.d.ts.map +1 -1
- package/branding/extra-css-branding-editor/extra-css-branding-editor-tab.factory.d.ts.map +1 -1
- package/branding/plain-branding-editor/plain-branding-editor-tab.factory.d.ts.map +1 -1
- package/branding/shared/lazy/branding-form/branding-form.component.d.ts.map +1 -1
- package/branding/shared/lazy/branding-import-modal/branding-import-modal.component.d.ts.map +1 -1
- package/branding/shared/lazy/edit-branding-router-outlet/edit-branding-router-outlet.component.d.ts.map +1 -1
- package/cockpit-config/cockpit-config.guard.d.ts.map +1 -1
- package/cockpit-config/cockpit-configuration.component.d.ts.map +1 -1
- package/computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.d.ts +8 -0
- package/computed-asset-properties/alarm-count/alarm-count-3-months-computed-property.d.ts.map +1 -0
- package/computed-asset-properties/alarm-count/alarm-count-config.component.d.ts +26 -0
- package/computed-asset-properties/alarm-count/alarm-count-config.component.d.ts.map +1 -0
- package/computed-asset-properties/alarm-count/alarm-count-today-computed-property.d.ts +8 -0
- package/computed-asset-properties/alarm-count/alarm-count-today-computed-property.d.ts.map +1 -0
- package/computed-asset-properties/alarm-count/alarm-count-value.d.ts +17 -0
- package/computed-asset-properties/alarm-count/alarm-count-value.d.ts.map +1 -0
- package/computed-asset-properties/alarm-count/alarm-count.model.d.ts +6 -0
- package/computed-asset-properties/alarm-count/alarm-count.model.d.ts.map +1 -0
- package/computed-asset-properties/c8y-ngx-components-computed-asset-properties.d.ts.map +1 -0
- package/computed-asset-properties/child-count/child-assets-count-computed-property.d.ts +14 -0
- package/computed-asset-properties/child-count/child-assets-count-computed-property.d.ts.map +1 -0
- package/computed-asset-properties/child-count/child-count-value.d.ts +14 -0
- package/computed-asset-properties/child-count/child-count-value.d.ts.map +1 -0
- package/computed-asset-properties/child-count/child-devices-count-computed-property.d.ts +14 -0
- package/computed-asset-properties/child-count/child-devices-count-computed-property.d.ts.map +1 -0
- package/computed-asset-properties/common/realtime-value-base.d.ts +32 -0
- package/computed-asset-properties/common/realtime-value-base.d.ts.map +1 -0
- package/computed-asset-properties/common/realtime-value-handler.d.ts +19 -0
- package/computed-asset-properties/common/realtime-value-handler.d.ts.map +1 -0
- package/computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.d.ts +7 -0
- package/computed-asset-properties/configuration-snapshot/configuration-snapshot-computed-property.d.ts.map +1 -0
- package/computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.d.ts +21 -0
- package/computed-asset-properties/configuration-snapshot/configuration-snapshot-config.component.d.ts.map +1 -0
- package/computed-asset-properties/configuration-snapshot/configuration-snapshot.model.d.ts +8 -0
- package/computed-asset-properties/configuration-snapshot/configuration-snapshot.model.d.ts.map +1 -0
- package/computed-asset-properties/event-count/event-count-3-months.d.ts +8 -0
- package/computed-asset-properties/event-count/event-count-3-months.d.ts.map +1 -0
- package/computed-asset-properties/event-count/event-count-config.component.d.ts +18 -0
- package/computed-asset-properties/event-count/event-count-config.component.d.ts.map +1 -0
- package/computed-asset-properties/event-count/event-count-today.d.ts +8 -0
- package/computed-asset-properties/event-count/event-count-today.d.ts.map +1 -0
- package/computed-asset-properties/event-count/event-count-value.d.ts +17 -0
- package/computed-asset-properties/event-count/event-count-value.d.ts.map +1 -0
- package/computed-asset-properties/event-count/event-count.model.d.ts +4 -0
- package/computed-asset-properties/event-count/event-count.model.d.ts.map +1 -0
- package/computed-asset-properties/index.d.ts +3 -0
- package/computed-asset-properties/index.d.ts.map +1 -0
- package/computed-asset-properties/last-device-message/last-device-message-computed-property.d.ts +3 -0
- package/computed-asset-properties/last-device-message/last-device-message-computed-property.d.ts.map +1 -0
- package/computed-asset-properties/last-device-message/last-device-message-value.d.ts +13 -0
- package/computed-asset-properties/last-device-message/last-device-message-value.d.ts.map +1 -0
- package/computed-asset-properties/last-measurement/last-measurement-computed-property.d.ts +8 -0
- package/computed-asset-properties/last-measurement/last-measurement-computed-property.d.ts.map +1 -0
- package/computed-asset-properties/last-measurement/last-measurement-config.component.d.ts +48 -0
- package/computed-asset-properties/last-measurement/last-measurement-config.component.d.ts.map +1 -0
- package/computed-asset-properties/last-measurement/last-measurement-value.d.ts +13 -0
- package/computed-asset-properties/last-measurement/last-measurement-value.d.ts.map +1 -0
- package/computed-asset-properties/last-measurement/last-measurement.model.d.ts +28 -0
- package/computed-asset-properties/last-measurement/last-measurement.model.d.ts.map +1 -0
- package/computed-asset-properties/strategies/alarm-count-strategy.d.ts +17 -0
- package/computed-asset-properties/strategies/alarm-count-strategy.d.ts.map +1 -0
- package/computed-asset-properties/strategies/child-count-strategy.d.ts +14 -0
- package/computed-asset-properties/strategies/child-count-strategy.d.ts.map +1 -0
- package/computed-asset-properties/strategies/count-strategy-base.d.ts +12 -0
- package/computed-asset-properties/strategies/count-strategy-base.d.ts.map +1 -0
- package/computed-asset-properties/strategies/event-count-strategy.d.ts +16 -0
- package/computed-asset-properties/strategies/event-count-strategy.d.ts.map +1 -0
- package/computed-asset-properties/strategies/last-device-message-strategy.d.ts +20 -0
- package/computed-asset-properties/strategies/last-device-message-strategy.d.ts.map +1 -0
- package/computed-asset-properties/strategies/last-measurement-strategy.d.ts +16 -0
- package/computed-asset-properties/strategies/last-measurement-strategy.d.ts.map +1 -0
- package/connectivity/abstract-connectivity-node.factory.d.ts.map +1 -1
- package/connectivity/actility/actility-tab.factory.d.ts.map +1 -1
- package/connectivity/sigfox/sigfox-tab.factory.d.ts.map +1 -1
- package/connectivity/sim/sim.module.d.ts.map +1 -1
- package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/cockpit-home-dashboard/cockpit-dashboard.module.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +16 -0
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-details-tabs.factory.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/dashboard-version-history.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
- package/context-dashboard/device-info-dashboard/device-info-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/device-info-dashboard/device-info-dashboard.module.d.ts.map +1 -1
- package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.component.d.ts.map +1 -1
- package/context-dashboard/device-management-home-dashboard/device-management-home-dashboard.module.d.ts.map +1 -1
- package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
- package/context-dashboard/widget-config/appearance-settings.component.d.ts.map +1 -1
- package/context-dashboard/widget-config.service.d.ts +11 -1
- package/context-dashboard/widget-config.service.d.ts.map +1 -1
- package/core/action/action.service.d.ts +1 -1
- package/core/action-bar/action-bar.service.d.ts +1 -1
- package/core/authentication/simplified-auth.service.d.ts +1 -1
- package/core/authentication/simplified-auth.service.d.ts.map +1 -1
- package/core/bottom-drawer/bottom-drawer.component.d.ts +16 -2
- package/core/bottom-drawer/bottom-drawer.component.d.ts.map +1 -1
- package/core/bottom-drawer/bottom-drawer.service.d.ts +13 -5
- package/core/bottom-drawer/bottom-drawer.service.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.service.d.ts +1 -1
- package/core/common/extension-hooks.d.ts.map +1 -1
- package/core/common/options.service.d.ts +1 -1
- package/core/common/service-registry.service.d.ts +1 -1
- package/core/common/ui-state.service.d.ts +7 -7
- package/core/common/ui-state.service.d.ts.map +1 -1
- package/core/common/user-preferences/user-preferences.service.d.ts +4 -4
- package/core/common/user-preferences/user-preferences.service.d.ts.map +1 -1
- package/core/dashboard/widgets-dashboard.component.d.ts +9 -1
- package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
- package/core/data-grid/action-controls-extension.service.d.ts +1 -1
- package/core/data-grid/filter-chip/filter-mapper.factory.d.ts +1 -1
- package/core/date-picker/date-picker.component.d.ts.map +1 -1
- package/core/docs/docs.models.d.ts +1 -1
- package/core/docs/docs.module.d.ts +1 -1
- package/core/docs/help-and-support-outlet/help-and-support-outlet.module.d.ts +1 -1
- package/core/docs/legal-notices-outlet/legal-notices-outlet.module.d.ts +1 -1
- package/core/docs/support-outlet/support-outlet.component.d.ts +4 -3
- package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
- package/core/docs/support-outlet/support-outlet.module.d.ts +1 -1
- package/core/drawer/drawer.service.d.ts +1 -1
- package/core/dynamic-component/dynamic-component.model.d.ts +18 -4
- package/core/dynamic-component/dynamic-component.model.d.ts.map +1 -1
- package/core/dynamic-forms/i18n/translate.extension.d.ts.map +1 -1
- package/core/feedback-form/feedback-form.component.d.ts +27 -0
- package/core/feedback-form/feedback-form.component.d.ts.map +1 -0
- package/core/feedback-form/feedback-form.model.d.ts +6 -0
- package/core/feedback-form/feedback-form.model.d.ts.map +1 -0
- package/core/feedback-form/index.d.ts +2 -0
- package/core/feedback-form/index.d.ts.map +1 -0
- package/core/i18n/gettext.d.ts +4 -1
- package/core/i18n/gettext.d.ts.map +1 -1
- package/core/i18n/pattern-messages.data.d.ts +61 -0
- package/core/i18n/pattern-messages.data.d.ts.map +1 -1
- package/core/i18n/patterns-message.hook.d.ts +1 -1
- package/core/index.d.ts +1 -0
- package/core/index.d.ts.map +1 -1
- package/core/modal/modal.service.d.ts +0 -1
- package/core/modal/modal.service.d.ts.map +1 -1
- package/core/navigator/navigator-bottom/navigator-bottom.module.d.ts +1 -1
- package/core/navigator/navigator-top/navigator-top.module.d.ts +1 -1
- package/core/navigator/navigator.module.d.ts +1 -1
- package/core/navigator/navigator.service.d.ts +1 -1
- package/core/plugins/index.d.ts +1 -0
- package/core/plugins/index.d.ts.map +1 -1
- package/core/plugins/plugins-injection-token.d.ts +14 -0
- package/core/plugins/plugins-injection-token.d.ts.map +1 -0
- package/core/plugins/plugins-loader.service.d.ts +7 -21
- package/core/plugins/plugins-loader.service.d.ts.map +1 -1
- package/core/plugins/plugins-resolve.service.d.ts +1 -0
- package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
- package/core/preview-feature/preview-feature.component.d.ts.map +1 -1
- package/core/preview-feature/preview-feature.service.d.ts +1 -1
- package/core/provider-configuration/provider-configuration-hook.d.ts +1 -1
- package/core/query-param-handler/index.d.ts +1 -1
- package/core/query-param-handler/query-param-bottom-drawer.service.d.ts +1 -1
- package/core/query-param-handler/query-param-handler.service.d.ts +1 -1
- package/core/query-param-handler/query-param-modal-handler.service.d.ts +1 -1
- package/core/router/router.service.d.ts +1 -1
- package/core/search/search.service.d.ts +1 -1
- package/core/stepper/stepper.service.d.ts +1 -1
- package/core/tabs/tab.component.d.ts +2 -2
- package/core/tabs/tab.component.d.ts.map +1 -1
- package/core/tabs/tab.model.d.ts +2 -2
- package/core/tabs/tab.model.d.ts.map +1 -1
- package/core/tabs/tabs.service.d.ts +1 -1
- package/core/tabs/tabs.service.d.ts.map +1 -1
- package/core/ui-settings/ui-settings.module.d.ts +1 -1
- package/core/user/change-current-user-password.service.d.ts +10 -0
- package/core/user/change-current-user-password.service.d.ts.map +1 -0
- package/core/user/index.d.ts +1 -0
- package/core/user/index.d.ts.map +1 -1
- package/core/user/user-details-drawer/user-details-drawer.module.d.ts +1 -1
- package/core/user/user-menu.service.d.ts +1 -1
- package/core/user/user.module.d.ts +1 -1
- package/core/version/version.model.d.ts +1 -1
- package/core/version/version.module.d.ts +1 -1
- package/core/wizard/wizard.model.d.ts +1 -1
- package/dashboard-details-advanced-tab/advanced-tab.factory.d.ts.map +1 -1
- package/dashboard-details-advanced-tab/assign-widget-assets/assign-widget-asset-modal.component.d.ts.map +1 -1
- package/dashboard-details-advanced-tab/dashboard-json-editor/dashboard-json-editor.component.d.ts.map +1 -1
- package/dashboard-details-advanced-tab/dashboard-json-editor/import-export-widgets.service.d.ts.map +1 -1
- package/dashboard-manager/dashboard-manager-tabs.factory.d.ts.map +1 -1
- package/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
- package/dashboard-manager/devicemanagement/index.d.ts +1 -1
- package/dashboard-manager/type-dashboard-target-assets-grid/type-dashboard-target-assets-grid.component.d.ts.map +1 -1
- package/dashboard-manager/type-dashboard-target-assets-modal/type-dashboard-target-assets-modal.component.d.ts.map +1 -1
- package/dashboard-manager/type-dashboards-list/device-type-value.grid-column.d.ts.map +1 -1
- package/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
- package/data-grid-columns/asset-type/asset-type-grid-column.d.ts.map +1 -1
- package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
- package/datapoint-explorer/datapoint-explorer-navigation-factory.d.ts.map +1 -1
- package/datapoint-explorer/devicemanagement/index.d.ts +3 -0
- package/datapoint-explorer/devicemanagement/index.d.ts.map +1 -1
- package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts +4 -2
- package/datapoint-explorer/view/configuration/workspace-configuration.component.d.ts.map +1 -1
- package/datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.d.ts.map +1 -1
- package/datapoint-explorer/view/datapoint-explorer.model.d.ts +1 -0
- package/datapoint-explorer/view/datapoint-explorer.model.d.ts.map +1 -1
- package/datapoint-explorer/view/index.d.ts +3 -0
- package/datapoint-explorer/view/index.d.ts.map +1 -1
- package/datapoint-explorer/view/send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component.d.ts.map +1 -1
- package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts.map +1 -1
- package/datapoint-library/datapoint-library.module.d.ts.map +1 -1
- package/datapoint-library/details/datapoint-library-details.component.d.ts +1 -2
- package/datapoint-library/details/datapoint-library-details.component.d.ts.map +1 -1
- package/datapoint-library/list/datapoint-library-list.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -1
- 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
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -1
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
- package/default-subscriptions/default-subscriptions-navigation.factory.d.ts.map +1 -1
- package/default-subscriptions/default-subscriptions.component.d.ts.map +1 -1
- package/device-grid/columns/alarms.cell-renderer.component.d.ts.map +1 -1
- package/device-grid/columns/alarms.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/group.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/imei.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/model.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/name.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/registration-date.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/serial-number.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/status.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/system-id.device-grid-column.d.ts.map +1 -1
- package/device-grid/columns/type.device-grid-column.d.ts.map +1 -1
- package/device-grid/device-grid.component.d.ts.map +1 -1
- package/device-grid/device-grid.service.d.ts.map +1 -1
- package/device-list/add-smart-group.component.d.ts.map +1 -1
- package/device-list/device-list-navigation.factory.d.ts.map +1 -1
- package/device-list/devices.breadcrumb-factory.d.ts.map +1 -1
- package/device-map/device-map-navigation.factory.d.ts.map +1 -1
- package/device-profile/add-device-profile.component.d.ts.map +1 -1
- package/device-profile/device-profile-list.component.d.ts.map +1 -1
- package/device-profile/device-profile-navigation.factory.d.ts.map +1 -1
- package/device-profile/device-profile.component.d.ts.map +1 -1
- package/device-profile/device-profile.service.d.ts.map +1 -1
- package/device-profile/device-tab-profile/device-tab-profile.component.d.ts.map +1 -1
- package/device-profile/select-configuration-modal.component.d.ts.map +1 -1
- package/device-protocols/device-protocols.guard.d.ts.map +1 -1
- package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -1
- package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -1
- package/device-shell/device-shell.module.d.ts.map +1 -1
- package/device-shell/shared/device-shell.service.d.ts.map +1 -1
- package/device-shell/shell/shell.component.d.ts.map +1 -1
- package/diagnostics/diagnostics.module.d.ts.map +1 -1
- package/diagnostics/diagnostics.service.d.ts.map +1 -1
- package/echart/services/echarts-options.service.d.ts +2 -3
- package/echart/services/echarts-options.service.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
- package/ecosystem/application-plugins/apps-to-update-remotes-select.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/orphaned-status-cell-renderer.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -1
- package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
- package/ecosystem/application-properties/application-properties.component.d.ts.map +1 -1
- package/ecosystem/application-properties/subscription-modal/subscription-modal.component.d.ts.map +1 -1
- package/ecosystem/ecosystem-tabs.factory.d.ts.map +1 -1
- package/ecosystem/license-confirm/license-confirm-modal.component.d.ts.map +1 -1
- package/ecosystem/license-confirm/license-view.component.d.ts.map +1 -1
- package/ecosystem/microservices/add-microservice.component.d.ts.map +1 -1
- package/ecosystem/packages/add-package.component.d.ts.map +1 -1
- package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
- package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-versions-list/package-versions-list.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
- package/ecosystem/plugin-setup-stepper/plugin-setup-stepper.module.d.ts.map +1 -1
- package/ecosystem/shared/add-application.component.d.ts.map +1 -1
- package/ecosystem/shared/application-card.component.d.ts.map +1 -1
- package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -1
- package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
- package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
- package/ecosystem/shared/package-availability.service.d.ts.map +1 -1
- package/ecosystem/shared/package-version-select/package-version-select.component.d.ts.map +1 -1
- package/ecosystem/shared/upload-archive.component.d.ts.map +1 -1
- package/editor/editor.component.d.ts +16 -0
- package/editor/editor.component.d.ts.map +1 -1
- package/exports/index.d.ts +1 -1
- package/exports/index.d.ts.map +1 -1
- package/exports/list/exports-grid.service.d.ts.map +1 -1
- package/exports/list/exports-list/exports-list.component.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs +2 -1
- package/fesm2022/c8y-ngx-components-actility-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +8 -7
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +2 -1
- package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +2 -1
- package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +40 -2
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-asset-properties.mjs +608 -97
- package/fesm2022/c8y-ngx-components-asset-properties.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-asset-property-grid.component-CRnyUbyz.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +70 -23
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs +2 -1
- package/fesm2022/c8y-ngx-components-binary-file-download.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-bookmarks.mjs +2 -1
- package/fesm2022/c8y-ngx-components-bookmarks.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs +2 -1
- package/fesm2022/c8y-ngx-components-branding-dark-theme.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs +3 -3
- package/fesm2022/c8y-ngx-components-branding-extra-css-branding-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs +2 -1
- package/fesm2022/c8y-ngx-components-branding-plain-branding-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +22 -12
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-child-devices.mjs +2 -1
- package/fesm2022/c8y-ngx-components-child-devices.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs +2 -1
- package/fesm2022/c8y-ngx-components-cockpit-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BOpIFCYh.mjs +68 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties-alarm-count-config.component-BOpIFCYh.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-D8otkLI8.mjs +73 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties-configuration-snapshot-config.component-D8otkLI8.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-AVm6qa9k.mjs +44 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties-event-count-config.component-AVm6qa9k.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CtUoKGuU.mjs +91 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties-last-measurement-config.component-CtUoKGuU.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs +643 -0
- package/fesm2022/c8y-ngx-components-computed-asset-properties.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-connectivity.mjs +2 -1
- package/fesm2022/c8y-ngx-components-connectivity.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs +2 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-cockpit-home-dashboard.mjs.map +1 -1
- 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
- package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-BkcNSexF.mjs.map +1 -0
- 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
- package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-version-history.component-D9W68e7h.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +45 -12
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- 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
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab-dashboard-details-advanced-tab.component-D0lATUjO.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs +4 -3
- package/fesm2022/c8y-ngx-components-dashboard-details-advanced-tab.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs +2 -1
- package/fesm2022/c8y-ngx-components-dashboard-manager.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-broker.mjs +2 -1
- package/fesm2022/c8y-ngx-components-data-broker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +2 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +2 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs +38 -9
- package/fesm2022/c8y-ngx-components-datapoint-explorer-devicemanagement.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +58 -53
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +2 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +2 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs +2 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs +2 -1
- package/fesm2022/c8y-ngx-components-datapoint-library.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +2 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +2 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs +2 -1
- package/fesm2022/c8y-ngx-components-default-subscriptions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +3 -3
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-list.mjs +2 -1
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-map.mjs +2 -1
- package/fesm2022/c8y-ngx-components-device-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +2 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs +3 -2
- package/fesm2022/c8y-ngx-components-device-protocol-object-mappings.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-protocols.mjs +2 -1
- package/fesm2022/c8y-ngx-components-device-protocols.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +2 -1
- package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +2 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs +2 -1
- package/fesm2022/c8y-ngx-components-diagnostics.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +6 -8
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +2 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs +2 -1
- package/fesm2022/c8y-ngx-components-ecosystem-license-confirm.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs +2 -1
- package/fesm2022/c8y-ngx-components-ecosystem-plugin-setup-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-editor.mjs +39 -1
- package/fesm2022/c8y-ngx-components-editor.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-events.mjs +1 -1
- package/fesm2022/c8y-ngx-components-events.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-exports-list.mjs +2 -1
- package/fesm2022/c8y-ngx-components-exports-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-exports.mjs +2 -1
- package/fesm2022/c8y-ngx-components-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-file-preview.mjs +2 -1
- package/fesm2022/c8y-ngx-components-file-preview.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs +2 -1
- package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs +2 -1
- package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-location.mjs +2 -1
- package/fesm2022/c8y-ngx-components-location.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs +2 -1
- package/fesm2022/c8y-ngx-components-loriot-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +2 -1
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs +2 -1
- package/fesm2022/c8y-ngx-components-messaging-management.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-list-item.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-stepper.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-single-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-create-bulk-operation-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list-item-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-shared.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +4 -4
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +4 -4
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +4 -4
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +4 -4
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations.mjs +2 -1
- package/fesm2022/c8y-ngx-components-operations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs +2 -1
- package/fesm2022/c8y-ngx-components-pending-mo-request.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs +2 -1
- package/fesm2022/c8y-ngx-components-platform-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +2 -1
- package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs +2 -1
- package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +2 -1
- package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +2 -1
- package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +2 -1
- package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +2 -1
- package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +3 -3
- package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +2 -1
- package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs +2 -1
- package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-replace-device.mjs +2 -1
- package/fesm2022/c8y-ngx-components-replace-device.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs +2 -1
- package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-reports.mjs +2 -1
- package/fesm2022/c8y-ngx-components-reports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +2 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +3 -2
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +2 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +2 -1
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs +2 -1
- package/fesm2022/c8y-ngx-components-sensor-phone-sensor-phone-modal.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs +3 -2
- package/fesm2022/c8y-ngx-components-sensor-phone.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs +2 -1
- package/fesm2022/c8y-ngx-components-services-service-command-tab.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-services-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-services.mjs +2 -1
- package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs +2 -1
- package/fesm2022/c8y-ngx-components-sigfox-device-registration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs +3 -2
- package/fesm2022/c8y-ngx-components-sms-gateway.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +13 -9
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tenants.mjs +37 -37
- package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs +2 -1
- package/fesm2022/c8y-ngx-components-tracking.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +5 -5
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +2 -1
- package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +10 -3
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-user-roles.mjs +2 -1
- package/fesm2022/c8y-ngx-components-user-roles.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs +3 -3
- package/fesm2022/c8y-ngx-components-widgets-definitions-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs +3 -6
- package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-linear-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-quick-links.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-radial-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-silo.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs +9 -6
- package/fesm2022/c8y-ngx-components-widgets-implementations-cockpit-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-management-welcome.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-help-and-service-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs +13 -8
- package/fesm2022/c8y-ngx-components-widgets-implementations-html-widget.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-image.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-markdown.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs +2 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-quick-links.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs +3 -10
- package/fesm2022/c8y-ngx-components-widgets-import-export-config.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +789 -531
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/file-preview/file-preview.component.d.ts.map +1 -1
- package/files-repository/files-repository-navigation.factory.d.ts.map +1 -1
- package/files-repository/files-repository-upload.component.d.ts.map +1 -1
- package/files-repository/files-repository.component.d.ts.map +1 -1
- package/files-repository/files-repository.service.d.ts +1 -2
- package/files-repository/files-repository.service.d.ts.map +1 -1
- package/icon-selector/icon-selector-modal/icon-selector-modal.component.d.ts.map +1 -1
- package/icon-selector/icon-selector.component.d.ts.map +1 -1
- package/locales/de.po +105 -12
- package/locales/es.po +105 -12
- package/locales/fr.po +105 -12
- package/locales/ja_JP.po +99 -12
- package/locales/ko.po +104 -12
- package/locales/locales.pot +97 -12
- package/locales/nl.po +105 -12
- package/locales/pl.po +105 -12
- package/locales/pt_BR.po +105 -12
- package/locales/zh_CN.po +104 -12
- package/locales/zh_TW.po +104 -12
- package/location/location-tab.factory.d.ts.map +1 -1
- package/location/location.component.d.ts.map +1 -1
- package/loriot-device-registration/loriot-device-registration.component.d.ts.map +1 -1
- package/loriot-device-registration/loriot-provider.service.d.ts.map +1 -1
- package/map/map.component.d.ts.map +1 -1
- package/messaging-management/messaging/namespace-list/namespace-item/namespace-item-card/namespace-item-card.component.d.ts.map +1 -1
- package/messaging-management/messaging/shared/usage/usage.component.d.ts.map +1 -1
- package/messaging-management/messaging/topic/topic-list-view.component.d.ts.map +1 -1
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-data-grid.service.d.ts.map +1 -1
- package/messaging-management/messaging/topic/topic-subscribers-view/topic-subscribers-view.component.d.ts.map +1 -1
- package/messaging-management/messaging/topic/topics-data-grid.service.d.ts.map +1 -1
- package/messaging-management/navigator/messaging-navigator-factory.d.ts.map +1 -1
- package/messaging-management/navigator/topic-details-tab.factory.d.ts.map +1 -1
- package/operations/bulk-operation-list-item/bulk-operation-list-item.component.d.ts.map +1 -1
- package/operations/bulk-operation-list-item/modals/bulk-operations-reschedule-modal.component.d.ts.map +1 -1
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
- package/operations/bulk-operation-stepper/bulk-operation-stepper.component.d.ts.map +1 -1
- package/operations/bulk-single-operations-list/single-operation-item.component.d.ts.map +1 -1
- package/operations/bulk-single-operations-list/single-operations-list.component.d.ts.map +1 -1
- package/operations/factories/bulk-operations-tab.factory.d.ts.map +1 -1
- package/operations/grid-columns/creation-time.grid-column.d.ts.map +1 -1
- package/operations/grid-columns/device.grid-column.d.ts.map +1 -1
- package/operations/grid-columns/failure-reason.grid-column.d.ts.map +1 -1
- package/operations/grid-columns/status.grid-column.d.ts.map +1 -1
- package/operations/operations-list/device-control.feature.d.ts.map +1 -1
- package/operations/operations-list/operations-list-item.component.d.ts.map +1 -1
- package/operations/operations-list/operations-list.component.d.ts.map +1 -1
- package/operations/operations-list/single-operations-tab.factory.d.ts.map +1 -1
- package/operations/operations-list-item-details/operation-details-tabs.component.d.ts.map +1 -1
- package/operations/shared/nav.factory.d.ts.map +1 -1
- package/operations/shared/operations.service.d.ts.map +1 -1
- package/operations/stepper-bulk-type-configuration/stepper-bulk-type-configuration.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-device-profile/stepper-bulk-type-device-profile.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-firmware/stepper-bulk-type-firmware.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-software/select-software-step.component.d.ts.map +1 -1
- package/operations/stepper-bulk-type-software/stepper-bulk-type-software.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/pending-mo-request/pending-mo-request-interceptor.d.ts.map +1 -1
- package/pending-mo-request/pending-mo-request.service.d.ts.map +1 -1
- package/platform-configuration/platform-configuration-form-provider.service.d.ts.map +1 -1
- package/protocol-lpwan/lpwan-protocol.module.d.ts.map +1 -1
- package/protocol-lpwan/lpwan-set-connections.component.d.ts.map +1 -1
- package/protocol-lpwan/lpwan-set-device-protocol.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/actility-multiple-lns-connector.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/connection-info-with-download-csv.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/loriot/loriot-multiple-lns-connector.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/no-connections-found.component.d.ts.map +1 -1
- package/protocol-lpwan/multiple-lns-connectors/sigfox-multiple-lns-connector.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-address-space.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-device-protocol-detail.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-server-config.component.d.ts.map +1 -1
- package/protocol-opcua/opcua-servers.component.d.ts.map +1 -1
- package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/device-registration-view.component.d.ts.map +1 -1
- package/register-device/extensible/base-extensible-device-registration.service.d.ts.map +1 -1
- package/register-device/extensible/bulk/extensible-bulk-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/extensible/bulk/extensible-bulk-device-registration.service.d.ts.map +1 -1
- package/register-device/extensible/single/extensible-device-registration-modal.component.d.ts.map +1 -1
- package/register-device/extensible/single/extensible-device-registration-stepper.component.d.ts.map +1 -1
- package/register-device/extensible/single/extensible-device-registration.service.d.ts.map +1 -1
- package/register-device/general/general-device-registration.component.d.ts.map +1 -1
- package/register-device/register-device-navigation.factory.d.ts.map +1 -1
- package/register-device/register-device.service.d.ts.map +1 -1
- package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -1
- package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -1
- package/remote-access/passthrough/index.d.ts +1 -1
- package/remote-access/passthrough/index.d.ts.map +1 -1
- package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -1
- package/remote-access/ssh/index.d.ts.map +1 -1
- package/remote-access/telnet/index.d.ts.map +1 -1
- package/remote-access/vnc/index.d.ts.map +1 -1
- package/replace-device/replace-device-grid-action.factory.d.ts.map +1 -1
- package/replace-device/replace-device-wizard/replace-device-wizard.component.d.ts.map +1 -1
- package/replace-device/replace-device-wizard/replace-device-wizard.service.d.ts.map +1 -1
- package/replace-device/replace-device.service.d.ts.map +1 -1
- package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
- package/report-dashboard/report-dashboard-navigation.factory.d.ts.map +1 -1
- package/reports/export-schedules.component.d.ts.map +1 -1
- package/repository/configuration/device-tab/configuration-repository-device-tab.module.d.ts.map +1 -1
- package/repository/configuration/device-tab/save-to-repository.component.d.ts.map +1 -1
- package/repository/configuration/device-tab/text-based-configuration.component.d.ts.map +1 -1
- package/repository/configuration/list/configuration-detail.component.d.ts.map +1 -1
- package/repository/configuration/list/configuration-list.component.d.ts.map +1 -1
- package/repository/configuration/list/configuration-repository-navigation-factory.d.ts.map +1 -1
- package/repository/firmware/device-tab/firmware-device-tab.component.d.ts.map +1 -1
- package/repository/firmware/device-tab/firmware-repository-device-tab.module.d.ts.map +1 -1
- package/repository/firmware/list/add-firmware-modal.component.d.ts.map +1 -1
- package/repository/firmware/list/add-firmware-patch-modal.component.d.ts.map +1 -1
- package/repository/firmware/list/firmware-details.component.d.ts.map +1 -1
- package/repository/firmware/list/firmware-list.component.d.ts.map +1 -1
- package/repository/firmware/list/firmware-repository-navigation-factory.d.ts.map +1 -1
- package/repository/shared/columns/description.grid-column.d.ts.map +1 -1
- package/repository/shared/columns/device-type.grid-column.d.ts.map +1 -1
- package/repository/shared/columns/file.grid-column.d.ts.map +1 -1
- package/repository/shared/columns/name.grid-column.d.ts.map +1 -1
- package/repository/shared/columns/type.filtering-form-renderer.component.d.ts.map +1 -1
- package/repository/shared/columns/type.grid-column.d.ts.map +1 -1
- package/repository/shared/columns/versions.grid-column.d.ts.map +1 -1
- package/repository/shared/repository.service.d.ts.map +1 -1
- package/repository/shared/select-modal/repository-select-modal.component.d.ts +1 -1
- package/repository/shared/select-modal/repository-select-modal.component.d.ts.map +1 -1
- package/repository/shared/software-type/software-type.component.d.ts.map +1 -1
- package/repository/software/device-tab/installed-software.component.d.ts.map +1 -1
- package/repository/software/device-tab/software-repository-device-tab.module.d.ts.map +1 -1
- package/repository/software/list/add-software-modal.component.d.ts.map +1 -1
- package/repository/software/list/software-details.component.d.ts.map +1 -1
- package/repository/software/list/software-list.component.d.ts.map +1 -1
- package/repository/software/list/software-repository-navigation-factory.d.ts.map +1 -1
- package/search/columns/asset-type-search-grid-column.d.ts.map +1 -1
- package/search/search-grid.component.d.ts.map +1 -1
- package/search/search-results.component.d.ts.map +1 -1
- package/sensor-phone/connect-smartphone.factory.d.ts.map +1 -1
- package/sensor-phone/sensor-phone-modal/sensor-phone-modal.component.d.ts.map +1 -1
- package/sensor-phone/sensor-phone-modal/sensor-phone.service.d.ts.map +1 -1
- package/services/service-command-tab/service-command.feature.d.ts.map +1 -1
- package/services/services-device-tab/columns/last-updated-date.device-grid-column.d.ts.map +1 -1
- package/services/services-device-tab/columns/name.grid-column.d.ts.map +1 -1
- package/services/services-device-tab/columns/service-type.grid-column.d.ts.map +1 -1
- package/services/services-device-tab/columns/status.grid-column.d.ts.map +1 -1
- package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
- package/services/services-device-tab/services-device-tab.module.d.ts.map +1 -1
- package/services/services-device-tab/services.breadcrumb-factory.d.ts.map +1 -1
- package/services/shared/service-command.service.d.ts.map +1 -1
- package/services/status-options/status-options.model.d.ts.map +1 -1
- package/sigfox-device-registration/sigfox-device-registration.component.d.ts.map +1 -1
- package/sigfox-device-registration/sigfox-provider.service.d.ts.map +1 -1
- package/sms-gateway/sms-gateway.module.d.ts.map +1 -1
- package/sub-assets/add-group/add-group.component.d.ts.map +1 -1
- package/sub-assets/asset-properties-item.component.d.ts.map +1 -1
- package/sub-assets/asset-properties.component.d.ts.map +1 -1
- package/sub-assets/assign-devices/assign-child-devices.component.d.ts.map +1 -1
- package/sub-assets/assign-devices/assign-devices.component.d.ts.map +1 -1
- package/sub-assets/delete-assets-modal/delete-assets-modal.component.d.ts.map +1 -1
- package/sub-assets/group-info.component.d.ts.map +1 -1
- package/sub-assets/sub-assets-grid.component.d.ts.map +1 -1
- package/sub-assets/sub-assets.component.d.ts.map +1 -1
- package/sub-assets/sub-assets.module.d.ts.map +1 -1
- package/sub-assets/sub-assets.service.d.ts.map +1 -1
- package/sub-assets/unassign-assets-modal/unassign-modal.component.d.ts.map +1 -1
- package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -1
- package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -1
- package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -1
- package/tenants/tenant-list/creation-time.filtering-form-renderer.component.d.ts.map +1 -1
- package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
- package/tenants/tenants-navigation.factory.d.ts.map +1 -1
- package/tenants/tenants.module.d.ts.map +1 -1
- package/tracking/tracking.feature.d.ts.map +1 -1
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -1
- package/trusted-certificates/crl/crl-check-settings.component.d.ts.map +1 -1
- package/trusted-certificates/crl/crl-settings.component.d.ts.map +1 -1
- package/trusted-certificates/factories/tabs.factory.d.ts.map +1 -1
- package/trusted-certificates/factories/trusted-certificates-navigation.factory.d.ts.map +1 -1
- package/trusted-certificates/list/add-trusted-certificate.component.d.ts.map +1 -1
- package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
- package/upgrade/auth-bridge.service.d.ts.map +1 -1
- package/upgrade/bridge.service.d.ts.map +1 -1
- package/upgrade/ng1/downgraded.services.d.ts +1 -0
- package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
- package/upgrade/ng1/index.d.ts.map +1 -1
- package/user-roles/roles-asset-tree/roles-asset-tree.component.d.ts.map +1 -1
- package/widgets/cockpit/index.d.ts +4 -4
- package/widgets/definitions/alarms/alarm-list/index.d.ts +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +1 -1
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/recent-alarms/index.d.ts +1 -1
- package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/applications/index.d.ts +1 -1
- package/widgets/definitions/applications/index.d.ts.map +1 -1
- package/widgets/definitions/asset-notes/index.d.ts +1 -1
- package/widgets/definitions/asset-notes/index.d.ts.map +1 -1
- package/widgets/definitions/cockpit-legacy-welcome/index.d.ts +1 -1
- package/widgets/definitions/cockpit-legacy-welcome/index.d.ts.map +1 -1
- package/widgets/definitions/cockpit-welcome/index.d.ts +1 -1
- package/widgets/definitions/cockpit-welcome/index.d.ts.map +1 -1
- package/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.d.ts.map +1 -1
- package/widgets/definitions/datapoints-graph/index.d.ts +1 -1
- package/widgets/definitions/datapoints-table/index.d.ts +1 -1
- package/widgets/definitions/datapoints-table/index.d.ts.map +1 -1
- package/widgets/definitions/device-control-message/index.d.ts +1 -1
- package/widgets/definitions/device-control-message/index.d.ts.map +1 -1
- package/widgets/definitions/help-and-service/index.d.ts +1 -1
- package/widgets/definitions/help-and-service/index.d.ts.map +1 -1
- package/widgets/definitions/html-widget/html-widget.factory.d.ts.map +1 -1
- package/widgets/definitions/html-widget/index.d.ts +1 -1
- package/widgets/definitions/image/index.d.ts +5 -3
- package/widgets/definitions/image/index.d.ts.map +1 -1
- package/widgets/definitions/info-gauge/index.d.ts +2 -3
- package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
- package/widgets/definitions/kpi/index.d.ts +1 -1
- package/widgets/definitions/kpi/index.d.ts.map +1 -1
- package/widgets/definitions/linear-gauge/index.d.ts +1 -1
- package/widgets/definitions/linear-gauge/index.d.ts.map +1 -1
- package/widgets/definitions/map/index.d.ts +1 -1
- package/widgets/definitions/map/index.d.ts.map +1 -1
- package/widgets/definitions/markdown/index.d.ts +5 -3
- package/widgets/definitions/markdown/index.d.ts.map +1 -1
- package/widgets/definitions/quick-links/index.d.ts +1 -1
- package/widgets/definitions/quick-links/index.d.ts.map +1 -1
- package/widgets/definitions/radial-gauge/index.d.ts +1 -1
- package/widgets/definitions/radial-gauge/index.d.ts.map +1 -1
- package/widgets/definitions/silo/index.d.ts +1 -1
- package/widgets/definitions/silo/index.d.ts.map +1 -1
- package/widgets/definitions/three-d-rotation/index.d.ts +1 -1
- package/widgets/definitions/three-d-rotation/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/cockpit-welcome/welcome.component.d.ts +3 -2
- package/widgets/implementations/cockpit-welcome/welcome.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -1
- package/widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.d.ts.map +1 -1
- package/widgets/implementations/device-management-welcome/welcome.component.d.ts.map +1 -1
- package/widgets/implementations/help-and-service-widget/help-and-service-view/help-and-service-view.component.d.ts.map +1 -1
- package/widgets/implementations/html-widget/advanced-settings/advanced-settings.component.d.ts.map +1 -1
- package/widgets/implementations/html-widget/html-widget-config.service.d.ts.map +1 -1
- package/widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.d.ts +5 -3
- package/widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.d.ts.map +1 -1
- package/widgets/implementations/image/image-widget-config/image-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/image/image-widget.service.d.ts +1 -2
- package/widgets/implementations/image/image-widget.service.d.ts.map +1 -1
- package/widgets/implementations/info-gauge/info-gauge-widget-config/info-gauge-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/linear-gauge/linear-gauge-widget-view/linear-gauge-widget-view.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
- package/widgets/implementations/markdown/markdown-widget-config/markdown-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/markdown/markdown-widget.service.d.ts.map +1 -1
- package/widgets/implementations/quick-links/quick-links-widget-config/quick-links-widget-config.component.d.ts.map +1 -1
- package/widgets/import-export-config/config-target-export.d.ts +3 -1
- package/widgets/import-export-config/config-target-export.d.ts.map +1 -1
- package/widgets/import-export-config/config-target-import.d.ts +3 -1
- package/widgets/import-export-config/config-target-import.d.ts.map +1 -1
- package/widgets/import-export-config/device-import-export.d.ts +3 -1
- package/widgets/import-export-config/device-import-export.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-general-settings.component-DjlpSztw.mjs.map +0 -1
- package/fesm2022/c8y-ngx-components-context-dashboard-dashboard-version-history.component-B2zLhv0X.mjs.map +0 -1
- 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-html-widget.mjs","sources":["../../widgets/implementations/html-widget/html-widget.model.ts","../../widgets/implementations/html-widget/webcomponent-template.ts","../../widgets/implementations/html-widget/legacy-template.ts","../../widgets/implementations/html-widget/html-widget-config.service.ts","../../widgets/implementations/html-widget/advanced-settings/advanced-settings.component.ts","../../widgets/implementations/html-widget/advanced-settings/advanced-settings.component.html","../../widgets/implementations/html-widget/html-frame/html-frame.component.ts","../../widgets/implementations/html-widget/html-frame/html-frame.component.html","../../widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.ts","../../widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.html","../../widgets/implementations/html-widget/html-widget-config.component.ts","../../widgets/implementations/html-widget/html-widget-config.component.html","../../widgets/implementations/html-widget/html-widget.component.ts","../../widgets/implementations/html-widget/html-widget.component.html","../../widgets/implementations/html-widget/html-widget-properties-selector/html-widget-properties-selector.component.ts","../../widgets/implementations/html-widget/html-widget-properties-selector/html-widget-properties-selector.component.html","../../widgets/implementations/html-widget/c8y-ngx-components-widgets-implementations-html-widget.ts"],"sourcesContent":["import { IManagedObject } from '@c8y/client';\nimport { WidgetSettings } from '@c8y/ngx-components';\n\nexport interface HtmlWidgetConfig {\n device: IManagedObject;\n settings: WidgetSettings;\n config: HtmlWidget;\n\n /**\n * On HTML WIdget 1.0 this property was used to store the HTML code.\n * It is not used anymore, but we need to keep it for backward compatibility.\n * The HTML code is now stored in the config property.\n * @deprecated Use config.code instead.\n */\n html?: any;\n}\n\nexport type C8yProperties = Array<PathProperty | ComputedProperty>;\n\nexport interface HtmlWidget {\n css: string;\n code: string;\n props?: C8yProperties;\n options: HtmlWidgetOptions;\n legacy: boolean;\n devMode: boolean;\n latestCodeHash?: string;\n}\n\nexport interface HtmlWidgetOptions {\n cssEncapsulation: boolean;\n advancedSecurity: boolean;\n}\n\nexport interface WebcomponentContext extends HTMLElement {\n c8yContext: IManagedObject;\n}\n\nexport interface PathProperty {\n name: string;\n path: string;\n query?: never;\n reducer?: never;\n}\n\nexport interface ComputedProperty {\n name: string;\n path?: never;\n query: string;\n reducer?: string;\n}\n\nexport const INITIAL_HTML_FORMATTED = `<div>\n <h2>Hello from <span class=\"branded\">HTML widget</span></h2>\n <p class=\"m-b-8 m-t-16\">\n You can use HTML and Javascript template literals here: <br>\n \\$\\{this.c8yContext ? this.c8yContext.name : 'No device selected'\\}\n </p>\n\n <a class=\"btn btn-primary m-b-16\" href=\"#/group\">Go to groups</a>\n\n <p>\n Use the CSS editor to customize the CSS. You can use <span class=\"text-bold\">any design-token CSS variable</span> in there.\n </p>\n</div>`;\nexport const INITIAL_CSS_FORMATTED = `\n:host > div {\n padding: var(--c8y-root-component-padding-default);\n}\nspan.branded { \n color: var(--brand-primary, var(--c8y-brand-primary)); \n}`;\n\nexport const defaultWebComponentName = 'DefaultWebComponent';\n\nexport const defaultWebComponentAttributeNameContext = 'c8yContext';\n","import { defaultWebComponentName } from './html-widget.model';\n\nexport const webComponentTemplate = (\n html: string,\n css?: string,\n viewEncapsulation?: boolean,\n name = defaultWebComponentName\n) => `\nimport { LitElement, html, css} from 'lit';\n${!viewEncapsulation ? `import { styleImports } from 'styles';` : ''}\n\nexport default class ${name} extends LitElement {\n static styles = css\\`\n ${css}\n \\`;\n\n static properties = {\n // The managed object this widget is assigned to. Can be null.\n c8yContext: { type: Object },\n };\n\n constructor() {\n super();\n }\n\n render() {\n return html\\`${\n viewEncapsulation\n ? html\n : `\n <style>\n \\${styleImports}\n </style>\n ${html}\n `\n }\\`;\n }\n}\n`;\n","export const legacyTemplate = (html: string, deviceId?: string | number, deviceName?: string) => `\nimport { angular } from 'angular';\n\n// NOTE: This is a legacy template for the HTML widget.\n// It is used to compile the HTML content in the context of the AngularJS application.\n// The template is injected into the AngularJS application and compiled using the AngularJS compiler.\n// The template should only be used for backward compatibility purposes.\n// It is recommended to use a web component instead.\n\nif(!angular) {\n throw new Error('AngularJS is not available. Please make sure to include AngularJS in your project.');\n}\n\nconst $injector = angular.element(document.querySelector('c8y-ui-root')).injector();\nif (!$injector) {\n throw new Error('AngularJS injector is not available. Maybe not an hybrid application?');\n}\n\n// defining a new scope\nconst $rootScope = $injector.get('$rootScope');\nconst $scope = $rootScope.$new(true); \n\n// faking the old angularjs config \n$scope.child = { \n config: {\n ${deviceId ? `device: { id: \"${deviceId}\", name: \"${deviceName}\" },` : ''}\n html: \\`<div ng-controller=\"HtmlWidgetCtrl\">${html}</div>\\`\n }\n};\n\n// load the needed services\nconst $compile = $injector.get('$compile');\nconst $controller = $injector.get('$controller');\n\n// create the element\nconst htmlElement = angular.element($scope.child.config.html);\n\n// The default controller providing the context\n$controller('HtmlWidgetCtrl', { $scope });\n\n// Compile the element\n$compile(htmlElement)($scope);\n\n// Apply the scope changes\n$rootScope.$apply();\n\nexport default htmlElement[0];`;\n","import { inject, Injectable } from '@angular/core';\nimport { AppStateService } from '@c8y/ngx-components';\nimport { CockpitConfig } from '@c8y/ngx-components/cockpit-config';\nimport { ContextWidgetConfig, WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { isEmpty } from 'lodash';\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n Observable,\n of,\n shareReplay,\n startWith,\n Subject,\n switchMap,\n takeUntil,\n withLatestFrom\n} from 'rxjs';\nimport { HtmlWidget, INITIAL_CSS_FORMATTED, INITIAL_HTML_FORMATTED } from './html-widget.model';\nimport { webComponentTemplate } from './webcomponent-template';\nimport { legacyTemplate } from './legacy-template';\n\n@Injectable()\nexport class HtmlWidgetConfigService {\n readonly DEFAULT_AUTO_SAVE_DEBOUNCE = 1000;\n codeChange$ = new Subject<{ value: string; type: 'css' | 'code' }>();\n widgetConfigService = inject(WidgetConfigService);\n appState = inject(AppStateService);\n destroy$ = new Subject<void>();\n\n init$ = this.widgetConfigService.currentConfig$.pipe(\n map(current => {\n if (current.html) {\n current.config = this.mapLegacyConfig(current);\n }\n\n return (current.config || {}) as HtmlWidget;\n }),\n filter(config => !!config),\n withLatestFrom(this.appState.currentApplicationConfig),\n switchMap(([widgetConfig, appConfig]) => this.initConfig(appConfig, widgetConfig)),\n shareReplay(),\n takeUntil(this.destroy$)\n );\n\n config$ = this.init$.pipe(switchMap(initValue => this.configChanged$.pipe(startWith(initValue))));\n\n codeEditorChangeConfig$ = combineLatest([\n this.codeChange$.pipe(startWith(undefined)),\n this.config$\n ]).pipe(\n distinctUntilChanged(),\n takeUntil(this.destroy$),\n debounceTime(this.DEFAULT_AUTO_SAVE_DEBOUNCE),\n map(([change, config]) => {\n if (!change) {\n return config;\n }\n if (change.type === 'css') {\n config.css = change.value;\n } else {\n config.code = change.value;\n }\n return { ...config };\n })\n );\n\n configChanged$ = new Subject<HtmlWidget>();\n\n initConfig(appConfig: CockpitConfig, widgetConfig: HtmlWidget): Observable<HtmlWidget> {\n const defaultToAdvancedMode = appConfig?.htmlWidgetDefaultToAdvancedMode ?? false;\n const isEmptyConfig = isEmpty(widgetConfig);\n if (isEmptyConfig && !defaultToAdvancedMode) {\n widgetConfig = this.initDefaultMode(!appConfig.htmlWidgetDisableSanitization);\n this.save(widgetConfig);\n return of(widgetConfig);\n }\n if (isEmptyConfig) {\n widgetConfig = this.enableAdvancedMode(widgetConfig);\n }\n\n // new config is needed to trigger ngOnChanges\n const newConfig = { ...widgetConfig };\n this.save(newConfig);\n return of(newConfig);\n }\n\n destroy(): void {\n this.destroy$.next();\n this.codeChange$.complete();\n this.configChanged$.complete();\n }\n\n save(config: HtmlWidget) {\n this.widgetConfigService.updateConfig({\n config\n });\n }\n\n changeCode(value: string) {\n this.codeChange$.next({ value, type: 'code' });\n }\n\n changeCss(value: string) {\n this.codeChange$.next({ value, type: 'css' });\n }\n\n enableAdvancedMode(currentConfig: HtmlWidget) {\n const currentHTML = currentConfig?.code || INITIAL_HTML_FORMATTED;\n const currentCSS = currentConfig?.css || INITIAL_CSS_FORMATTED;\n const code = currentConfig?.legacy\n ? legacyTemplate(\n currentHTML,\n this.widgetConfigService.currentConfig?.device?.id,\n this.widgetConfigService.currentConfig?.device?.name\n )\n : webComponentTemplate(currentHTML, currentCSS, false);\n currentConfig = {\n css: '',\n code,\n legacy: false,\n devMode: true,\n options: {\n cssEncapsulation: false,\n advancedSecurity: false\n }\n };\n return currentConfig;\n }\n\n initDefaultMode(advancedSecurity = true): HtmlWidget {\n return {\n css: INITIAL_CSS_FORMATTED,\n code: INITIAL_HTML_FORMATTED,\n legacy: false,\n devMode: false,\n options: {\n cssEncapsulation: false,\n advancedSecurity\n }\n };\n }\n\n private mapLegacyConfig(current: ContextWidgetConfig): HtmlWidget {\n const isAlreadyInAdvancedMode = current?.config?.devMode === true;\n if (isAlreadyInAdvancedMode) {\n return current.config as HtmlWidget;\n }\n\n const isAlreadyMapped = current?.config?.legacy === true;\n if (isAlreadyMapped) {\n return current.config as HtmlWidget;\n }\n\n return {\n code: current.html,\n css: '',\n legacy: true,\n devMode: false,\n options: {\n cssEncapsulation: false,\n advancedSecurity: current.sanitization === 'strict'\n }\n };\n }\n}\n","import { NgIf } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { C8yTranslatePipe, gettext, IconDirective, Permissions } from '@c8y/ngx-components';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { HtmlWidgetConfigService } from '../html-widget-config.service';\nimport { HtmlWidgetConfig, HtmlWidgetOptions } from '../html-widget.model';\n\n@Component({\n standalone: true,\n imports: [IconDirective, NgIf, TooltipModule, PopoverModule, C8yTranslatePipe, FormsModule],\n selector: 'c8y-html-widget-advanced-settings',\n templateUrl: './advanced-settings.component.html'\n})\nexport class AdvancedSettingsComponent {\n widgetConfigService = inject(WidgetConfigService);\n htmlWidgetConfigService = inject(HtmlWidgetConfigService);\n router = inject(Router);\n permissionService = inject(Permissions);\n\n canChangeSettings = false;\n @Input()\n devMode: boolean;\n @Input()\n cssEncapsulation: boolean;\n\n CSS_ENCAPSULATION_HELP_CONTEXT = gettext(\n 'If enabled, the CSS will be encapsulated and no platform styling will be applied.'\n );\n\n ngOnInit(): void {\n this.canChangeSettings = this.permissionService.hasAnyRole([\n Permissions.ROLE_APPLICATION_MANAGEMENT_ADMIN,\n Permissions.ROLE_TENANT_ADMIN\n ]);\n }\n\n disableAdvancedMode() {\n const config = this.htmlWidgetConfigService.initDefaultMode();\n this.htmlWidgetConfigService.save(config);\n this.htmlWidgetConfigService.configChanged$.next(config);\n }\n\n enableAdvancedMode() {\n let { config } = this.widgetConfigService.currentConfig as HtmlWidgetConfig;\n config = this.htmlWidgetConfigService.enableAdvancedMode(config);\n this.htmlWidgetConfigService.save(config);\n this.htmlWidgetConfigService.configChanged$.next(config);\n }\n\n toggleAdvancedMode() {\n this.devMode ? this.disableAdvancedMode() : this.enableAdvancedMode();\n this.devMode = !this.devMode;\n }\n\n async changeOption(option: keyof HtmlWidgetOptions) {\n const { config } = this.widgetConfigService.currentConfig as HtmlWidgetConfig;\n config.options[option] = !config.options[option];\n this.htmlWidgetConfigService.save(config);\n this.htmlWidgetConfigService.configChanged$.next(config);\n }\n}\n","<fieldset class=\"c8y-fieldset m-t-0\">\n <legend>{{ 'Developer mode' | translate }}</legend>\n\n <div class=\"d-flex a-i-center p-b-16\">\n <label class=\"c8y-switch\">\n <input\n type=\"checkbox\"\n [ngModel]=\"devMode\"\n (change)=\"toggleAdvancedMode()\"\n [disabled]=\"!canChangeSettings\"\n />\n <span></span>\n <span>{{ 'Advanced developer mode' | translate }}</span>\n </label>\n\n <button class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"devMode ? disableAdvanced : enableAdvanced\"\n container=\"body\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n\n <ng-template #enableAdvanced>\n <p class=\"text-16 text-bold p-b-8\">\n <i [c8yIcon]=\"'imac-settings'\"></i>\n {{ 'Advanced developer mode' | translate }}\n </p>\n <p class=\"p-b-8\" translate>\n Create custom widgets by modifying a basic WebComponent with HTML and JavaScript. This\n <strong>unsupported</strong>\n feature is ideal for rapid prototyping and simple customizations.\n </p>\n <p class=\"p-b-8\" translate>\n For production environments, we recommend our fully-supported Angular-based\n <a href=\"https://styleguide.cumulocity.com\" target=\"_blank\">Web SDK</a>.\n <br />\n Enable advanced developer mode to start coding!\n </p>\n </ng-template>\n\n <ng-template #disableAdvanced>\n <p class=\"text-16 text-bold p-b-8\">\n {{ 'Advanced developer mode' | translate }}\n </p>\n <p class=\"p-b-8\" translate>\n The advanced developer mode is enabled for this widget allowing to build extensive Web\n Components.\n </p>\n <p class=\"p-b-8\" translate>\n You can disable this mode again, but it will reset the current code.\n </p>\n </ng-template>\n\n <ng-container *ngIf=\"!devMode\">\n <label\n class=\"c8y-switch m-l-auto\"\n >\n <input\n type=\"checkbox\"\n (change)=\"changeOption('cssEncapsulation')\"\n [disabled]=\"!canChangeSettings\"\n [ngModel]=\"cssEncapsulation\"\n />\n <span></span>\n <span>{{ 'CSS encapsulation' | translate }}</span>\n </label>\n <button\n class=\"btn-help m-0\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CSS_ENCAPSULATION_HELP_CONTEXT | translate }}\"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n ></button>\n </ng-container>\n\n </div>\n</fieldset>\n","import { NgClass, NgFor } from '@angular/common';\nimport {\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n SecurityContext,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { Alert } from '@c8y/ngx-components';\nimport { kebabCase } from 'lodash-es';\nimport {\n catchError,\n EMPTY,\n filter,\n from,\n fromEvent,\n isEmpty,\n map,\n merge,\n Observable,\n Subject,\n switchMap,\n takeUntil\n} from 'rxjs';\nimport { defaultWebComponentName, HtmlWidget, WebcomponentContext } from '../html-widget.model';\nimport { webComponentTemplate } from '../webcomponent-template';\nimport { legacyTemplate } from '../legacy-template';\n\n@Component({\n standalone: true,\n imports: [NgFor, NgClass],\n selector: 'c8y-html-frame',\n templateUrl: './html-frame.component.html',\n host: { class: 'd-contents' }\n})\nexport class HtmlFrameComponent implements OnChanges, OnDestroy {\n @Input()\n config: HtmlWidget;\n\n @Input()\n device: IManagedObject | IIdentified;\n\n /**\n * If set to true, it will be ensured that a unique hash is generated\n * for every webcomponent. This is useful if configured as otherwise it might\n * happen that the same code is already used in another webcomponent and the\n * error messages can not be assigned correctly.\n */\n @Input()\n useSalt = false;\n\n alerts: Alert[] = [];\n\n private sanitizer = inject(DomSanitizer);\n private destroy$ = new Subject<void>();\n private hostElement = viewChild<ElementRef<HTMLDivElement>>('hostElement');\n private reload$ = new Subject<void>();\n private latestUrl?: string;\n private htmlContentInitialization$ = this.reload$.pipe(\n filter(() => !!this.hostElement()),\n map(() => this.hostElement().nativeElement),\n switchMap((div: HTMLDivElement) =>\n merge(\n this.listenToErrors(),\n from(this.initDiv(div)).pipe(\n isEmpty(),\n filter(isEmpty => !!isEmpty),\n catchError(error => from([{ text: error, type: 'danger' }]))\n )\n )\n ),\n filter(alert => !!alert),\n takeUntil(this.destroy$)\n );\n private inventoryService = inject(InventoryService);\n\n constructor() {\n this.htmlContentInitialization$.pipe(takeUntil(this.destroy$)).subscribe((alert: Alert) => {\n this.alerts.push(alert);\n console.error(alert.text);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.config?.currentValue ||\n (this.config && changes.device?.previousValue !== changes.device?.currentValue)\n ) {\n this.reloadComponent();\n }\n }\n\n reloadComponent() {\n this.alerts = [];\n const div = this.hostElement();\n div.nativeElement.innerHTML = '';\n this.reload$.next();\n }\n\n async initDiv(divHostElement: HTMLDivElement) {\n const code = this.getCode();\n const hash = await this.generateHash(code, this.useSalt);\n const webComponentName = kebabCase(defaultWebComponentName) + hash;\n const context: IManagedObject = await this.getContext(this.device);\n\n if (customElements.get(webComponentName)) {\n return this.createWebComponent(webComponentName, divHostElement, context);\n }\n\n const url = this.generateUrl(code);\n const defaultModule = await this.loadScript(url);\n\n // if the default module is a string, we will not use a webcomponent\n // instead we will simply parse the string and add it to the div\n // this is the case for legacy HTML widgets\n if (typeof defaultModule.default === 'string') {\n divHostElement.innerHTML = defaultModule.default;\n return EMPTY;\n }\n\n // same goes for an HTML Element\n if (defaultModule.default instanceof HTMLElement) {\n divHostElement.appendChild(defaultModule.default);\n\n // Find and execute scripts\n const scripts = divHostElement.querySelectorAll('script');\n scripts.forEach(script => {\n const newScript = document.createElement('script');\n Array.from(script.attributes).forEach(attr => {\n newScript.setAttribute(attr.name, attr.value);\n });\n newScript.textContent = script.textContent;\n script.parentNode.replaceChild(newScript, script);\n });\n return EMPTY;\n }\n\n // as a race condition can happen on loading, we need\n // to check again if the web component is already defined\n if (!customElements.get(webComponentName)) {\n customElements.define(webComponentName, defaultModule.default);\n }\n this.createWebComponent(webComponentName, divHostElement, context);\n return EMPTY;\n }\n\n private async getContext(\n device: IManagedObject | IIdentified | undefined\n ): Promise<IManagedObject> {\n if (!device) {\n return;\n }\n\n if (!device.self) {\n const { data } = await this.inventoryService.detail(device.id);\n return data;\n }\n return device as IManagedObject;\n }\n\n private async loadScript(url: string): Promise<{ default: any }> {\n const module = await import(/* webpackIgnore: true */ url);\n if (!module.default) {\n throw 'No default export found. Add an \"export default\" statement to your code.';\n }\n\n return module;\n }\n\n private generateUrl(script: string): string {\n const blob = new Blob([script], { type: 'application/javascript' });\n const url = URL.createObjectURL(blob);\n if (this.latestUrl) {\n URL.revokeObjectURL(this.latestUrl);\n }\n this.latestUrl = url;\n return url;\n }\n\n private listenToErrors(): Observable<Alert> {\n const errorEvents$ = fromEvent<ErrorEvent>(window, 'error').pipe(\n filter(event => event.filename?.includes(this.latestUrl)),\n map(event => this.mapErrorEventToAlert(event))\n );\n\n const rejectionEvents$ = fromEvent<PromiseRejectionEvent>(window, 'unhandledrejection').pipe(\n filter(event => event.reason?.stack?.includes(this.latestUrl)),\n map(event => this.mapErrorEventToAlert(event)),\n takeUntil(this.destroy$)\n );\n\n return merge(errorEvents$, rejectionEvents$);\n }\n\n private createWebComponent(\n webComponentName: string,\n divHostElement: HTMLDivElement,\n context: IManagedObject\n ) {\n const webComponent: WebcomponentContext = document.createElement<any>(webComponentName);\n webComponent.c8yContext = context;\n divHostElement.appendChild(webComponent);\n return webComponent;\n }\n\n private mapErrorEventToAlert(event: PromiseRejectionEvent | ErrorEvent): Alert {\n const hasReason = 'reason' in event;\n if (hasReason && event.reason?.name === ReferenceError.name) {\n const undefinedVar = event.reason.message.split(' ')[0];\n return { text: undefinedVar + ' is not defined', type: 'info' };\n }\n return { text: hasReason ? event.reason.message : event.message, type: 'danger' };\n }\n\n private getCode() {\n const isDevMode = this.config.devMode;\n if (isDevMode) {\n return this.config.code;\n }\n return this.createDefaultWebcomponentCode();\n }\n\n private async generateHash(value: string, useSalt: boolean): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(value + (useSalt ? Math.random() : ''));\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');\n return hashHex;\n }\n\n private createDefaultWebcomponentCode(): string {\n if (this.config.legacy) {\n const legacyWebComponent = legacyTemplate(\n this.config.options.advancedSecurity\n ? this.sanitizer.sanitize(SecurityContext.HTML, this.config.code)\n : this.config.code,\n this.device?.id,\n this.device?.name\n );\n return legacyWebComponent;\n }\n\n const webComponentScript = webComponentTemplate(\n this.config.options.advancedSecurity\n ? this.sanitizer.sanitize(SecurityContext.HTML, this.config.code)\n : this.config.code,\n this.config.options.advancedSecurity\n ? this.sanitizer.sanitize(SecurityContext.STYLE, this.config.css)\n : this.config.css,\n this.config.options.cssEncapsulation\n );\n return webComponentScript;\n }\n}\n","<ng-container *ngFor=\"let alert of alerts\">\n <div\n class=\"alert m-8\"\n role=\"alert\"\n [ngClass]=\"{\n 'alert-danger': alert.type === 'danger',\n 'alert-warning': alert.type === 'warning',\n 'alert-info': alert.type === 'info',\n 'alert-success': alert.type === 'success'\n }\"\n >\n <p><strong translate>There was an issue in the HTML widget:</strong></p>\n <pre>{{ alert.text }}</pre>\n </div>\n</ng-container>\n<div\n class=\"fit-w fit-h\"\n #hostElement\n></div>\n","import { NgIf } from '@angular/common';\nimport { Component, inject, Input, OnDestroy, SimpleChanges } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n C8yTranslatePipe,\n gettext,\n IconDirective,\n LoadingComponent,\n TabsModule\n} from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { WidgetConfigFeedbackComponent } from '@c8y/ngx-components/context-dashboard';\nimport { EditorComponent } from '@c8y/ngx-components/editor';\nimport { editor, KeyCode, KeyMod } from 'monaco-editor';\nimport { Subject } from 'rxjs';\nimport { HtmlWidgetConfigService } from '../html-widget-config.service';\nimport { HtmlWidget } from '../html-widget.model';\nimport { AdvancedSettingsComponent } from '../advanced-settings/advanced-settings.component';\n\n@Component({\n standalone: true,\n imports: [\n EditorComponent,\n FormsModule,\n IconDirective,\n C8yTranslatePipe,\n NgIf,\n WidgetConfigFeedbackComponent,\n TabsModule,\n TooltipModule,\n PopoverModule,\n LoadingComponent,\n AdvancedSettingsComponent\n ],\n selector: 'c8y-widget-code-editor',\n templateUrl: './widget-code-editor.component.html'\n})\nexport class WidgetCodeEditorComponent implements OnDestroy {\n @Input()\n mode: 'code' | 'css' = 'code';\n\n @Input()\n config: HtmlWidget;\n\n configService = inject(HtmlWidgetConfigService);\n\n editor: editor.IStandaloneCodeEditor;\n isAutoSaveEnabled = true;\n language: 'html' | 'css' | 'javascript' = 'html';\n value: string;\n isLoading = false;\n\n readonly TAB_WEBCOMPONENT_LABEL = gettext('Web Component`Tab label of HTML Widget`');\n readonly TAB_HTML_LABEL = gettext('HTML`Tab label of HTML Widget`');\n readonly TAB_CSS_LABEL = gettext('CSS`Tab label of HTML Widget`');\n readonly BUTTON_DISABLE_AUTOSAVE_LABEL = gettext(\n 'Disable auto save`An action you can do on the html widget editor`'\n );\n readonly BUTTON_ENABLE_AUTOSAVE_LABEL = gettext(\n 'Enable auto save`An action you can do on the html widget editor`'\n );\n readonly TAB_OUTLET_NAME = 'html-widget-tab-outlet';\n\n private destroy$ = new Subject<void>();\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.config?.currentValue) {\n this.loadCode();\n }\n }\n\n loadCode() {\n this.isLoading = true;\n const isInDevMode = this.config?.devMode;\n this.language = 'html';\n\n if (isInDevMode) {\n this.language = 'javascript';\n }\n\n if (this.mode === 'css') {\n this.language = 'css';\n }\n\n this.value = this.mode === 'code' ? this.config.code : this.config.css;\n\n this.isLoading = false;\n\n if (this.editor) {\n queueMicrotask(() => this.formatCode());\n }\n }\n\n switchMode(mode: 'code' | 'css') {\n this.mode = mode;\n this.loadCode();\n }\n\n editorLoaded(editor: editor.IStandaloneCodeEditor) {\n this.editor = editor;\n\n this.editor.addCommand(KeyMod.CtrlCmd | KeyCode.KeyS, () => {\n this.saveCode();\n });\n }\n\n formatCode() {\n this.editor.getAction('editor.action.formatDocument').run();\n }\n\n redo() {\n this.editor.trigger('keyboard', 'redo', null);\n }\n\n undo() {\n this.editor.trigger('keyboard', 'undo', null);\n }\n\n changeCode($event: string) {\n if (this.isAutoSaveEnabled) {\n this.saveCode($event);\n }\n }\n\n saveCode(codeStr?: string) {\n const code = codeStr || this.editor.getValue();\n if (this.mode === 'code') {\n this.configService.changeCode(code);\n return;\n }\n this.configService.changeCss(code);\n }\n}\n","<c8y-widget-config-feedback>\n <div class=\"d-flex\">\n <span\n class=\"tag tag--warning text-12\"\n *ngIf=\"config?.devMode && !config?.legacy\"\n translate\n >\n Advanced developer mode\n </span>\n </div>\n <div class=\"d-flex\">\n <span\n class=\"tag tag--warning text-12\"\n [title]=\"\n 'This widget is in legacy mode. Consider to upgrade this to a new HTML widget. Read our documentation on details to transform your widget'\n | translate\n \"\n *ngIf=\"config?.legacy\"\n translate\n >\n Legacy mode\n </span>\n </div>\n</c8y-widget-config-feedback>\n\n<div class=\"d-flex d-col fit-h fit-w\">\n <c8y-html-widget-advanced-settings\n [devMode]=\"config?.devMode\"\n [cssEncapsulation]=\"config?.options?.cssEncapsulation\"\n ></c8y-html-widget-advanced-settings>\n\n <fieldset class=\"c8y-fieldset p-0 overflow-hidden\">\n <legend class=\"m-l-16 p-l-0\">{{ 'Code' | translate }}</legend>\n\n <div class=\"btn-group btn-group-sm m-l-0 p-t-8 p-b-8 p-l-16 p-r-16 fit-w d-flex\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Undo' | translate\"\n [tooltip]=\"'Undo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"undo()\"\n >\n <i [c8yIcon]=\"'undo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Redo' | translate\"\n [tooltip]=\"'Redo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"redo()\"\n >\n <i [c8yIcon]=\"'redo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Format code' | translate\"\n [tooltip]=\"'Format code' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"formatCode()\"\n >\n <i [c8yIcon]=\"'format-align-left'\"></i>\n </button>\n\n <label class=\"c8y-switch m-l-auto\">\n <input\n type=\"checkbox\"\n [checked]=\"isAutoSaveEnabled\"\n (change)=\"isAutoSaveEnabled = !isAutoSaveEnabled\"\n />\n <span></span>\n <span translate>Auto save</span>\n </label>\n </div>\n\n <div\n class=\"btn-toolbar m-0 p-relative\"\n role=\"toolbar\"\n >\n <c8y-tabs-outlet\n class=\"elevation-none\"\n [outletName]=\"TAB_OUTLET_NAME\"\n [orientation]=\"'horizontal'\"\n [openFirstTab]=\"false\"\n ></c8y-tabs-outlet>\n <c8y-tab\n [icon]=\"'code'\"\n [label]=\"(config?.devMode ? TAB_WEBCOMPONENT_LABEL : TAB_HTML_LABEL) | translate\"\n [priority]=\"100\"\n [showAlways]=\"true\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'code'\"\n (onSelect)=\"switchMode('code')\"\n ></c8y-tab>\n <c8y-tab\n [icon]=\"'c8y-css'\"\n [label]=\"TAB_CSS_LABEL | translate\"\n [priority]=\"0\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'css'\"\n (onSelect)=\"switchMode('css')\"\n *ngIf=\"!config?.devMode && !config?.legacy\"\n ></c8y-tab>\n </div>\n\n <ng-container *ngIf=\"!isLoading; else loading\">\n <c8y-editor\n class=\"flex-grow d-block\"\n style=\"height: 450px\"\n *ngIf=\"!(mode === 'css' && config?.devMode)\"\n [ngModel]=\"value\"\n (ngModelChange)=\"changeCode($event)\"\n [editorOptions]=\"{\n language,\n tabSize: 2,\n insertSpaces: true,\n minimap: { enabled: false }\n }\"\n (editorInit)=\"editorLoaded($event)\"\n ></c8y-editor>\n </ng-container>\n <ng-template #loading>\n <c8y-loading></c8y-loading>\n </ng-template>\n </fieldset>\n</div>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { OptionsService } from '@c8y/ngx-components';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { HtmlFrameComponent } from './html-frame/html-frame.component';\nimport { HtmlWidgetConfigService } from './html-widget-config.service';\nimport { WidgetCodeEditorComponent } from './widget-code-editor-section/widget-code-editor.component';\n\n@Component({\n selector: 'c8y-html-widget-config',\n templateUrl: './html-widget-config.component.html',\n standalone: true,\n imports: [RouterModule, FormsModule, AsyncPipe, HtmlFrameComponent, WidgetCodeEditorComponent]\n})\nexport class HtmlWidgetConfigComponent implements OnDestroy {\n @ViewChild('htmlPreview')\n set htmlPreviewTemplate(template: TemplateRef<any>) {\n if (template) {\n this.widgetConfigService.setPreview(template);\n } else {\n this.widgetConfigService.setPreview(null);\n }\n }\n options = inject(OptionsService);\n htmlWidgetConfigService = inject(HtmlWidgetConfigService);\n widgetConfigService = inject(WidgetConfigService);\n\n ngOnDestroy(): void {\n // sadly the service is component scoped\n // but still not recycled correctly. That is why we do\n // it here.\n this.htmlWidgetConfigService.destroy();\n }\n}\n","<c8y-widget-code-editor\n [config]=\"htmlWidgetConfigService.config$ | async\"\n [mode]=\"'code'\"\n></c8y-widget-code-editor>\n\n<ng-template #htmlPreview>\n <c8y-html-frame\n [config]=\"htmlWidgetConfigService.codeEditorChangeConfig$ | async\"\n [device]=\"(widgetConfigService.currentConfig$ | async).device\"\n [useSalt]=\"true\"\n ></c8y-html-frame>\n</ng-template>\n","import { Component, Input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ContextWidgetConfig } from '@c8y/ngx-components/context-dashboard';\nimport { HtmlFrameComponent } from './html-frame/html-frame.component';\nimport { HtmlWidget, HtmlWidgetConfig } from './html-widget.model';\n\n@Component({\n selector: 'c8y-html-widget',\n templateUrl: './html-widget.component.html',\n standalone: true,\n imports: [RouterModule, HtmlFrameComponent]\n})\nexport class HtmlWidgetComponent {\n @Input() config: HtmlWidgetConfig;\n\n ngOnInit(): void {\n if (this.config.html && !this.config.config) {\n this.config.config = this.mapLegacyConfig(this.config);\n }\n }\n\n private mapLegacyConfig(current: ContextWidgetConfig): HtmlWidget {\n const isAlreadyInAdvancedMode = current?.config?.devMode === true;\n if (isAlreadyInAdvancedMode) {\n return current.config as HtmlWidget;\n }\n return {\n code: current.html,\n css: '',\n legacy: true,\n devMode: false,\n options: {\n cssEncapsulation: false,\n advancedSecurity: current.sanitization === 'strict'\n }\n };\n }\n}\n","<c8y-html-frame\n [config]=\"config.config\"\n [device]=\"config.device\"\n></c8y-html-frame>\n\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { C8yTranslatePipe, ClipboardService } from '@c8y/ngx-components';\nimport {\n AssetPropertyActionDirective,\n AssetPropertyListComponent,\n AssetPropertyType\n} from '@c8y/ngx-components/asset-properties';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-html-widget-properties-selector',\n templateUrl: './html-widget-properties-selector.component.html',\n host: {\n class: 'bg-level-1'\n },\n standalone: true,\n imports: [\n AssetPropertyListComponent,\n AssetPropertyActionDirective,\n AsyncPipe,\n C8yTranslatePipe,\n PopoverModule,\n TooltipModule\n ]\n})\nexport class HtmlWidgetPropertiesSelectorComponent {\n widgetConfigService = inject(WidgetConfigService);\n clipboardService = inject(ClipboardService);\n\n /**\n * Copies the property path to the clipboard in a format suitable for use in HTML widget.\n * For nested properties, it uses the keyPath to create a path to nested property.\n * @param context The context containing the property information.\n */\n async copyProperty(context: AssetPropertyType) {\n const nonAlphanumericRegex = /[^a-zA-Z0-9]/;\n let path: string;\n if (context.keyPath) {\n path = context.keyPath\n .map(key => (nonAlphanumericRegex.test(key) ? `['${key}']` : `.${key}`))\n .join('');\n } else {\n path = nonAlphanumericRegex.test(context.name) ? `['${context.name}']` : `.${context.name}`;\n }\n const content = '${this.c8yContext' + path + '}';\n await this.clipboardService.writeText(content);\n }\n}\n","<div\n class=\"d-flex m-b-8\"\n style=\"margin-top: -16px\"\n>\n <em\n class=\"m-l-auto text-muted\"\n translate\n >\n How to use properties in the widget\n </em>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n</div>\n<c8y-asset-property-list\n class=\"inner-scroll bg-inherit d-block\"\n style=\"max-height: 450px\"\n [asset]=\"(widgetConfigService.currentConfig$ | async).device\"\n [config]=\"{\n selectMode: 'none',\n expansionMode: 'expandedByDefault',\n filterable: false,\n allowAddingCustomProperties: true\n }\"\n>\n <button\n class=\"btn-dot btn fit-h\"\n [attr.aria-label]=\"'Copy' | translate\"\n tooltip=\"{{ 'Copy' | translate }}\"\n type=\"button\"\n *c8yAssetPropertyAction=\"let context\"\n [delay]=\"500\"\n (click)=\"copyProperty(context)\"\n >\n <i class=\"dlt-c8y-icon-copy\"></i>\n </button>\n</c8y-asset-property-list>\n\n<ng-template #helpContent>\n <p\n class=\"p-b-8\"\n translate\n >\n Click the copy icon for your chosen property and insert it into the HTML widget as a template\n literal.\n </p>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isEmpty","i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-widgets-implementations-html-widget.mjs","sources":["../../widgets/implementations/html-widget/html-widget.model.ts","../../widgets/implementations/html-widget/webcomponent-template.ts","../../widgets/implementations/html-widget/legacy-template.ts","../../widgets/implementations/html-widget/html-widget-config.service.ts","../../widgets/implementations/html-widget/advanced-settings/advanced-settings.component.ts","../../widgets/implementations/html-widget/advanced-settings/advanced-settings.component.html","../../widgets/implementations/html-widget/html-frame/html-frame.component.ts","../../widgets/implementations/html-widget/html-frame/html-frame.component.html","../../widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.ts","../../widgets/implementations/html-widget/widget-code-editor-section/widget-code-editor.component.html","../../widgets/implementations/html-widget/html-widget-config.component.ts","../../widgets/implementations/html-widget/html-widget-config.component.html","../../widgets/implementations/html-widget/html-widget.component.ts","../../widgets/implementations/html-widget/html-widget.component.html","../../widgets/implementations/html-widget/html-widget-properties-selector/html-widget-properties-selector.component.ts","../../widgets/implementations/html-widget/html-widget-properties-selector/html-widget-properties-selector.component.html","../../widgets/implementations/html-widget/c8y-ngx-components-widgets-implementations-html-widget.ts"],"sourcesContent":["import { IManagedObject } from '@c8y/client';\nimport { WidgetSettings } from '@c8y/ngx-components';\n\nexport interface HtmlWidgetConfig {\n device: IManagedObject;\n settings: WidgetSettings;\n config: HtmlWidget;\n\n /**\n * On HTML WIdget 1.0 this property was used to store the HTML code.\n * It is not used anymore, but we need to keep it for backward compatibility.\n * The HTML code is now stored in the config property.\n * @deprecated Use config.code instead.\n */\n html?: any;\n}\n\nexport type C8yProperties = Array<PathProperty | ComputedProperty>;\n\nexport interface HtmlWidget {\n css: string;\n code: string;\n props?: C8yProperties;\n options: HtmlWidgetOptions;\n legacy: boolean;\n devMode: boolean;\n latestCodeHash?: string;\n}\n\nexport interface HtmlWidgetOptions {\n cssEncapsulation: boolean;\n advancedSecurity: boolean;\n}\n\nexport interface WebcomponentContext extends HTMLElement {\n c8yContext: IManagedObject;\n}\n\nexport interface PathProperty {\n name: string;\n path: string;\n query?: never;\n reducer?: never;\n}\n\nexport interface ComputedProperty {\n name: string;\n path?: never;\n query: string;\n reducer?: string;\n}\n\nexport const INITIAL_HTML_FORMATTED = `<div>\n <h2>Hello from <span class=\"branded\">HTML widget</span></h2>\n <p class=\"m-b-8 m-t-16\">\n You can use HTML and Javascript template literals here: <br>\n \\$\\{this.c8yContext ? this.c8yContext.name : 'No device selected'\\}\n </p>\n\n <a class=\"btn btn-primary m-b-16\" href=\"#/group\">Go to groups</a>\n\n <p>\n Use the CSS editor to customize the CSS. You can use <span class=\"text-bold\">any design-token CSS variable</span> in there.\n </p>\n</div>`;\nexport const INITIAL_CSS_FORMATTED = `\n:host > div {\n padding: var(--c8y-root-component-padding-default);\n}\nspan.branded { \n color: var(--brand-primary, var(--c8y-brand-primary)); \n}`;\n\nexport const defaultWebComponentName = 'DefaultWebComponent';\n\nexport const defaultWebComponentAttributeNameContext = 'c8yContext';\n","import { defaultWebComponentName } from './html-widget.model';\n\nexport const webComponentTemplate = (\n html: string,\n css?: string,\n viewEncapsulation?: boolean,\n name = defaultWebComponentName\n) => `\nimport { LitElement, html, css} from 'lit';\n${!viewEncapsulation ? `import { styleImports } from 'styles';` : ''}\n\nexport default class ${name} extends LitElement {\n static styles = css\\`\n ${css}\n \\`;\n\n static properties = {\n // The managed object this widget is assigned to. Can be null.\n c8yContext: { type: Object },\n };\n\n constructor() {\n super();\n }\n\n render() {\n return html\\`${\n viewEncapsulation\n ? html\n : `\n <style>\n \\${styleImports}\n </style>\n ${html}\n `\n }\\`;\n }\n}\n`;\n","export const legacyTemplate = (html: string, deviceId?: string | number, deviceName?: string) => `\nimport { angular } from 'angular';\n\n// NOTE: This is a legacy template for the HTML widget.\n// It is used to compile the HTML content in the context of the AngularJS application.\n// The template is injected into the AngularJS application and compiled using the AngularJS compiler.\n// The template should only be used for backward compatibility purposes.\n// It is recommended to use a web component instead.\n\nif(!angular) {\n throw new Error('AngularJS is not available. Please make sure to include AngularJS in your project.');\n}\n\nconst $injector = angular.element(document.querySelector('c8y-ui-root')).injector();\nif (!$injector) {\n throw new Error('AngularJS injector is not available. Maybe not an hybrid application?');\n}\n\n// defining a new scope\nconst $rootScope = $injector.get('$rootScope');\nconst $scope = $rootScope.$new(true); \n\n// faking the old angularjs config \n$scope.child = { \n config: {\n ${deviceId ? `device: { id: \"${deviceId}\", name: \"${deviceName}\" },` : ''}\n html: \\`<div ng-controller=\"HtmlWidgetCtrl\">${html}</div>\\`\n }\n};\n\n// load the needed services\nconst $compile = $injector.get('$compile');\nconst $controller = $injector.get('$controller');\n\n// create the element\nconst htmlElement = angular.element($scope.child.config.html);\n\n// The default controller providing the context\n$controller('HtmlWidgetCtrl', { $scope });\n\n// Compile the element\n$compile(htmlElement)($scope);\n\n// Apply the scope changes\n$rootScope.$apply();\n\nexport default htmlElement[0];`;\n","import { inject, Injectable } from '@angular/core';\nimport { AppStateService } from '@c8y/ngx-components';\nimport { CockpitConfig } from '@c8y/ngx-components/cockpit-config';\nimport {\n ContextWidgetConfig,\n WidgetConfigChangeMode,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport { isEmpty } from 'lodash';\nimport {\n combineLatest,\n debounceTime,\n distinctUntilChanged,\n filter,\n map,\n Observable,\n of,\n shareReplay,\n startWith,\n Subject,\n switchMap,\n takeUntil,\n withLatestFrom\n} from 'rxjs';\nimport { HtmlWidget, INITIAL_CSS_FORMATTED, INITIAL_HTML_FORMATTED } from './html-widget.model';\nimport { webComponentTemplate } from './webcomponent-template';\nimport { legacyTemplate } from './legacy-template';\n\n@Injectable()\nexport class HtmlWidgetConfigService {\n readonly DEFAULT_AUTO_SAVE_DEBOUNCE = 1000;\n codeChange$ = new Subject<{ value: string; type: 'css' | 'code' }>();\n widgetConfigService = inject(WidgetConfigService);\n appState = inject(AppStateService);\n destroy$ = new Subject<void>();\n\n init$ = this.widgetConfigService.currentConfig$.pipe(\n map(current => {\n if (current.html) {\n current.config = this.mapLegacyConfig(current);\n }\n\n return (current.config || {}) as HtmlWidget;\n }),\n filter(config => !!config),\n withLatestFrom(this.appState.currentApplicationConfig),\n switchMap(([widgetConfig, appConfig]) => this.initConfig(appConfig, widgetConfig)),\n shareReplay(),\n takeUntil(this.destroy$)\n );\n\n config$ = this.init$.pipe(switchMap(initValue => this.configChanged$.pipe(startWith(initValue))));\n\n codeEditorChangeConfig$ = combineLatest([\n this.codeChange$.pipe(startWith(undefined)),\n this.config$\n ]).pipe(\n distinctUntilChanged(),\n takeUntil(this.destroy$),\n debounceTime(this.DEFAULT_AUTO_SAVE_DEBOUNCE),\n map(([change, config]) => {\n if (!change) {\n return config;\n }\n if (change.type === 'css') {\n config.css = change.value;\n } else {\n config.code = change.value;\n }\n return { ...config };\n })\n );\n\n configChanged$ = new Subject<HtmlWidget>();\n\n initConfig(appConfig: CockpitConfig, widgetConfig: HtmlWidget): Observable<HtmlWidget> {\n const defaultToAdvancedMode = appConfig?.htmlWidgetDefaultToAdvancedMode ?? false;\n const isEmptyConfig = isEmpty(widgetConfig);\n this.widgetConfigService.changeMode$.next(WidgetConfigChangeMode.ASSIGN);\n if (isEmptyConfig && !defaultToAdvancedMode) {\n widgetConfig = this.initDefaultMode(!appConfig?.htmlWidgetDisableSanitization);\n this.save(widgetConfig);\n return of(widgetConfig);\n }\n if (isEmptyConfig) {\n widgetConfig = this.enableAdvancedMode(widgetConfig);\n }\n\n // new config is needed to trigger ngOnChanges\n const newConfig = { ...widgetConfig };\n this.save(newConfig);\n return of(newConfig);\n }\n\n destroy(): void {\n this.destroy$.next();\n this.codeChange$.complete();\n this.configChanged$.complete();\n }\n\n save(config: HtmlWidget) {\n this.widgetConfigService.updateConfig({\n config\n });\n }\n\n changeCode(value: string) {\n this.codeChange$.next({ value, type: 'code' });\n }\n\n changeCss(value: string) {\n this.codeChange$.next({ value, type: 'css' });\n }\n\n enableAdvancedMode(currentConfig: HtmlWidget) {\n const currentHTML = currentConfig?.code || INITIAL_HTML_FORMATTED;\n const currentCSS = currentConfig?.css || INITIAL_CSS_FORMATTED;\n const code = currentConfig?.legacy\n ? legacyTemplate(\n currentHTML,\n this.widgetConfigService.currentConfig?.device?.id,\n this.widgetConfigService.currentConfig?.device?.name\n )\n : webComponentTemplate(currentHTML, currentCSS, false);\n currentConfig = {\n css: '',\n code,\n legacy: false,\n devMode: true,\n options: {\n cssEncapsulation: false,\n advancedSecurity: false\n }\n };\n return currentConfig;\n }\n\n initDefaultMode(advancedSecurity = true): HtmlWidget {\n return {\n css: INITIAL_CSS_FORMATTED,\n code: INITIAL_HTML_FORMATTED,\n legacy: false,\n devMode: false,\n options: {\n cssEncapsulation: false,\n advancedSecurity\n }\n };\n }\n\n private mapLegacyConfig(current: ContextWidgetConfig): HtmlWidget {\n const isAlreadyInAdvancedMode = current?.config?.devMode === true;\n if (isAlreadyInAdvancedMode) {\n return current.config as HtmlWidget;\n }\n\n const isAlreadyMapped = current?.config?.legacy === true;\n if (isAlreadyMapped) {\n return current.config as HtmlWidget;\n }\n\n return {\n code: current.html,\n css: '',\n legacy: true,\n devMode: false,\n options: {\n cssEncapsulation: false,\n advancedSecurity: current.sanitization === 'strict'\n }\n };\n }\n}\n","import { NgIf } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { C8yTranslatePipe, IconDirective, Permissions } from '@c8y/ngx-components';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { HtmlWidgetConfigService } from '../html-widget-config.service';\nimport { HtmlWidgetConfig, HtmlWidgetOptions } from '../html-widget.model';\n\n@Component({\n standalone: true,\n imports: [IconDirective, NgIf, TooltipModule, PopoverModule, C8yTranslatePipe, FormsModule],\n selector: 'c8y-html-widget-advanced-settings',\n templateUrl: './advanced-settings.component.html'\n})\nexport class AdvancedSettingsComponent {\n widgetConfigService = inject(WidgetConfigService);\n htmlWidgetConfigService = inject(HtmlWidgetConfigService);\n router = inject(Router);\n permissionService = inject(Permissions);\n\n canChangeSettings = false;\n @Input()\n devMode: boolean;\n @Input()\n cssEncapsulation: boolean;\n\n CSS_ENCAPSULATION_HELP_CONTEXT = gettext(\n 'If enabled, the CSS will be encapsulated and no platform styling will be applied.'\n );\n\n ngOnInit(): void {\n this.canChangeSettings = this.permissionService.hasAnyRole([\n Permissions.ROLE_APPLICATION_MANAGEMENT_ADMIN,\n Permissions.ROLE_TENANT_ADMIN\n ]);\n }\n\n disableAdvancedMode() {\n const config = this.htmlWidgetConfigService.initDefaultMode();\n this.htmlWidgetConfigService.save(config);\n this.htmlWidgetConfigService.configChanged$.next(config);\n }\n\n enableAdvancedMode() {\n let { config } = this.widgetConfigService.currentConfig as HtmlWidgetConfig;\n config = this.htmlWidgetConfigService.enableAdvancedMode(config);\n this.htmlWidgetConfigService.save(config);\n this.htmlWidgetConfigService.configChanged$.next(config);\n }\n\n toggleAdvancedMode() {\n this.devMode ? this.disableAdvancedMode() : this.enableAdvancedMode();\n this.devMode = !this.devMode;\n }\n\n async changeOption(option: keyof HtmlWidgetOptions) {\n const { config } = this.widgetConfigService.currentConfig as HtmlWidgetConfig;\n config.options[option] = !config.options[option];\n this.htmlWidgetConfigService.save(config);\n this.htmlWidgetConfigService.configChanged$.next(config);\n }\n}\n","<fieldset class=\"c8y-fieldset m-t-0\">\n <legend>{{ 'Developer mode' | translate }}</legend>\n\n <div class=\"d-flex a-i-center p-b-16\">\n <label class=\"c8y-switch\">\n <input\n type=\"checkbox\"\n [ngModel]=\"devMode\"\n (change)=\"toggleAdvancedMode()\"\n [disabled]=\"!canChangeSettings\"\n />\n <span></span>\n <span>{{ 'Advanced developer mode' | translate }}</span>\n </label>\n\n <button class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"devMode ? disableAdvanced : enableAdvanced\"\n container=\"body\"\n placement=\"right\"\n triggers=\"focus\"\n type=\"button\"\n ></button>\n\n <ng-template #enableAdvanced>\n <p class=\"text-16 text-bold p-b-8\">\n <i [c8yIcon]=\"'imac-settings'\"></i>\n {{ 'Advanced developer mode' | translate }}\n </p>\n <p class=\"p-b-8\" translate>\n Create custom widgets by modifying a basic WebComponent with HTML and JavaScript. This\n <strong>unsupported</strong>\n feature is ideal for rapid prototyping and simple customizations.\n </p>\n <p class=\"p-b-8\" translate>\n For production environments, we recommend our fully-supported Angular-based\n <a href=\"https://styleguide.cumulocity.com\" target=\"_blank\">Web SDK</a>.\n <br />\n Enable advanced developer mode to start coding!\n </p>\n </ng-template>\n\n <ng-template #disableAdvanced>\n <p class=\"text-16 text-bold p-b-8\">\n {{ 'Advanced developer mode' | translate }}\n </p>\n <p class=\"p-b-8\" translate>\n The advanced developer mode is enabled for this widget allowing to build extensive Web\n Components.\n </p>\n <p class=\"p-b-8\" translate>\n You can disable this mode again, but it will reset the current code.\n </p>\n </ng-template>\n\n <ng-container *ngIf=\"!devMode\">\n <label\n class=\"c8y-switch m-l-auto\"\n >\n <input\n type=\"checkbox\"\n (change)=\"changeOption('cssEncapsulation')\"\n [disabled]=\"!canChangeSettings\"\n [ngModel]=\"cssEncapsulation\"\n />\n <span></span>\n <span>{{ 'CSS encapsulation' | translate }}</span>\n </label>\n <button\n class=\"btn-help m-0\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CSS_ENCAPSULATION_HELP_CONTEXT | translate }}\"\n triggers=\"focus\"\n placement=\"left\"\n container=\"body\"\n type=\"button\"\n ></button>\n </ng-container>\n\n </div>\n</fieldset>\n","import { NgClass, NgFor } from '@angular/common';\nimport {\n Component,\n ElementRef,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n SecurityContext,\n SimpleChanges,\n viewChild\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { Alert } from '@c8y/ngx-components';\nimport { kebabCase } from 'lodash-es';\nimport {\n catchError,\n EMPTY,\n filter,\n from,\n fromEvent,\n isEmpty,\n map,\n merge,\n Observable,\n Subject,\n switchMap,\n takeUntil\n} from 'rxjs';\nimport { defaultWebComponentName, HtmlWidget, WebcomponentContext } from '../html-widget.model';\nimport { webComponentTemplate } from '../webcomponent-template';\nimport { legacyTemplate } from '../legacy-template';\n\n@Component({\n standalone: true,\n imports: [NgFor, NgClass],\n selector: 'c8y-html-frame',\n templateUrl: './html-frame.component.html',\n host: { class: 'd-contents' }\n})\nexport class HtmlFrameComponent implements OnChanges, OnDestroy {\n @Input()\n config: HtmlWidget;\n\n @Input()\n device: IManagedObject | IIdentified;\n\n /**\n * If set to true, it will be ensured that a unique hash is generated\n * for every webcomponent. This is useful if configured as otherwise it might\n * happen that the same code is already used in another webcomponent and the\n * error messages can not be assigned correctly.\n */\n @Input()\n useSalt = false;\n\n alerts: Alert[] = [];\n\n private sanitizer = inject(DomSanitizer);\n private destroy$ = new Subject<void>();\n private hostElement = viewChild<ElementRef<HTMLDivElement>>('hostElement');\n private reload$ = new Subject<void>();\n private latestUrl?: string;\n private htmlContentInitialization$ = this.reload$.pipe(\n filter(() => !!this.hostElement()),\n map(() => this.hostElement().nativeElement),\n switchMap((div: HTMLDivElement) =>\n merge(\n this.listenToErrors(),\n from(this.initDiv(div)).pipe(\n isEmpty(),\n filter(isEmpty => !!isEmpty),\n catchError(error => from([{ text: error, type: 'danger' }]))\n )\n )\n ),\n filter(alert => !!alert),\n takeUntil(this.destroy$)\n );\n private inventoryService = inject(InventoryService);\n\n constructor() {\n this.htmlContentInitialization$.pipe(takeUntil(this.destroy$)).subscribe((alert: Alert) => {\n this.alerts.push(alert);\n console.error(alert.text);\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n changes.config?.currentValue ||\n (this.config && changes.device?.previousValue !== changes.device?.currentValue)\n ) {\n this.reloadComponent();\n }\n }\n\n reloadComponent() {\n this.alerts = [];\n const div = this.hostElement();\n div.nativeElement.innerHTML = '';\n this.reload$.next();\n }\n\n async initDiv(divHostElement: HTMLDivElement) {\n const code = this.getCode();\n const hash = await this.generateHash(code, this.useSalt);\n const webComponentName = kebabCase(defaultWebComponentName) + hash;\n const context: IManagedObject = await this.getContext(this.device);\n\n if (customElements.get(webComponentName)) {\n return this.createWebComponent(webComponentName, divHostElement, context);\n }\n\n const url = this.generateUrl(code);\n const defaultModule = await this.loadScript(url);\n\n // if the default module is a string, we will not use a webcomponent\n // instead we will simply parse the string and add it to the div\n // this is the case for legacy HTML widgets\n if (typeof defaultModule.default === 'string') {\n divHostElement.innerHTML = defaultModule.default;\n return EMPTY;\n }\n\n // same goes for an HTML Element\n if (defaultModule.default instanceof HTMLElement) {\n divHostElement.appendChild(defaultModule.default);\n\n // Find and execute scripts\n const scripts = divHostElement.querySelectorAll('script');\n scripts.forEach(script => {\n const newScript = document.createElement('script');\n Array.from(script.attributes).forEach(attr => {\n newScript.setAttribute(attr.name, attr.value);\n });\n newScript.textContent = script.textContent;\n script.parentNode.replaceChild(newScript, script);\n });\n return EMPTY;\n }\n\n // as a race condition can happen on loading, we need\n // to check again if the web component is already defined\n if (!customElements.get(webComponentName)) {\n customElements.define(webComponentName, defaultModule.default);\n }\n this.createWebComponent(webComponentName, divHostElement, context);\n return EMPTY;\n }\n\n private async getContext(\n device: IManagedObject | IIdentified | undefined\n ): Promise<IManagedObject> {\n if (!device) {\n return;\n }\n\n if (!device.self) {\n const { data } = await this.inventoryService.detail(device.id);\n return data;\n }\n return device as IManagedObject;\n }\n\n private async loadScript(url: string): Promise<{ default: any }> {\n const module = await import(/* webpackIgnore: true */ url);\n if (!module.default) {\n throw 'No default export found. Add an \"export default\" statement to your code.';\n }\n\n return module;\n }\n\n private generateUrl(script: string): string {\n const blob = new Blob([script], { type: 'application/javascript' });\n const url = URL.createObjectURL(blob);\n if (this.latestUrl) {\n URL.revokeObjectURL(this.latestUrl);\n }\n this.latestUrl = url;\n return url;\n }\n\n private listenToErrors(): Observable<Alert> {\n const errorEvents$ = fromEvent<ErrorEvent>(window, 'error').pipe(\n filter(event => event.filename?.includes(this.latestUrl)),\n map(event => this.mapErrorEventToAlert(event))\n );\n\n const rejectionEvents$ = fromEvent<PromiseRejectionEvent>(window, 'unhandledrejection').pipe(\n filter(event => event.reason?.stack?.includes(this.latestUrl)),\n map(event => this.mapErrorEventToAlert(event)),\n takeUntil(this.destroy$)\n );\n\n return merge(errorEvents$, rejectionEvents$);\n }\n\n private createWebComponent(\n webComponentName: string,\n divHostElement: HTMLDivElement,\n context: IManagedObject\n ) {\n const webComponent: WebcomponentContext = document.createElement<any>(webComponentName);\n webComponent.c8yContext = context;\n divHostElement.appendChild(webComponent);\n return webComponent;\n }\n\n private mapErrorEventToAlert(event: PromiseRejectionEvent | ErrorEvent): Alert {\n const hasReason = 'reason' in event;\n if (hasReason && event.reason?.name === ReferenceError.name) {\n const undefinedVar = event.reason.message.split(' ')[0];\n return { text: undefinedVar + ' is not defined', type: 'info' };\n }\n return { text: hasReason ? event.reason.message : event.message, type: 'danger' };\n }\n\n private getCode() {\n const isDevMode = this.config.devMode;\n if (isDevMode) {\n return this.config.code;\n }\n return this.createDefaultWebcomponentCode();\n }\n\n private async generateHash(value: string, useSalt: boolean): Promise<string> {\n const encoder = new TextEncoder();\n const data = encoder.encode(value + (useSalt ? Math.random() : ''));\n const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');\n return hashHex;\n }\n\n private createDefaultWebcomponentCode(): string {\n if (this.config.legacy) {\n const legacyWebComponent = legacyTemplate(\n this.config.options.advancedSecurity\n ? this.sanitizer.sanitize(SecurityContext.HTML, this.config.code)\n : this.config.code,\n this.device?.id,\n this.device?.name\n );\n return legacyWebComponent;\n }\n\n const webComponentScript = webComponentTemplate(\n this.config.options.advancedSecurity\n ? this.sanitizer.sanitize(SecurityContext.HTML, this.config.code)\n : this.config.code,\n this.config.options.advancedSecurity\n ? this.sanitizer.sanitize(SecurityContext.STYLE, this.config.css)\n : this.config.css,\n this.config.options.cssEncapsulation\n );\n return webComponentScript;\n }\n}\n","<ng-container *ngFor=\"let alert of alerts\">\n <div\n class=\"alert m-8\"\n role=\"alert\"\n [ngClass]=\"{\n 'alert-danger': alert.type === 'danger',\n 'alert-warning': alert.type === 'warning',\n 'alert-info': alert.type === 'info',\n 'alert-success': alert.type === 'success'\n }\"\n >\n <p><strong translate>There was an issue in the HTML widget:</strong></p>\n <pre>{{ alert.text }}</pre>\n </div>\n</ng-container>\n<div\n class=\"fit-w fit-h\"\n #hostElement\n></div>\n","import { NgIf } from '@angular/common';\nimport { Component, inject, Input, OnDestroy, SimpleChanges, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { C8yTranslatePipe, IconDirective, LoadingComponent, TabsModule } from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { WidgetConfigFeedbackComponent } from '@c8y/ngx-components/context-dashboard';\nimport { EditorComponent } from '@c8y/ngx-components/editor';\nimport type * as Monaco from 'monaco-editor';\nimport { Subject } from 'rxjs';\nimport { HtmlWidgetConfigService } from '../html-widget-config.service';\nimport { HtmlWidget } from '../html-widget.model';\nimport { AdvancedSettingsComponent } from '../advanced-settings/advanced-settings.component';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Component({\n standalone: true,\n imports: [\n EditorComponent,\n FormsModule,\n IconDirective,\n C8yTranslatePipe,\n NgIf,\n WidgetConfigFeedbackComponent,\n TabsModule,\n TooltipModule,\n PopoverModule,\n LoadingComponent,\n AdvancedSettingsComponent\n ],\n selector: 'c8y-widget-code-editor',\n templateUrl: './widget-code-editor.component.html'\n})\nexport class WidgetCodeEditorComponent implements OnDestroy {\n @Input()\n mode: 'code' | 'css' = 'code';\n\n @Input()\n config: HtmlWidget;\n\n @ViewChild(EditorComponent) editorComponent!: EditorComponent;\n\n configService = inject(HtmlWidgetConfigService);\n\n editor: Monaco.editor.IStandaloneCodeEditor;\n isAutoSaveEnabled = true;\n language: 'html' | 'css' | 'javascript' = 'html';\n value: string;\n isLoading = false;\n\n readonly TAB_WEBCOMPONENT_LABEL = gettext('Web Component`Tab label of HTML Widget`');\n readonly TAB_HTML_LABEL = gettext('HTML`Tab label of HTML Widget`');\n readonly TAB_CSS_LABEL = gettext('CSS`Tab label of HTML Widget`');\n readonly BUTTON_DISABLE_AUTOSAVE_LABEL = gettext(\n 'Disable auto save`An action you can do on the html widget editor`'\n );\n readonly BUTTON_ENABLE_AUTOSAVE_LABEL = gettext(\n 'Enable auto save`An action you can do on the html widget editor`'\n );\n readonly TAB_OUTLET_NAME = 'html-widget-tab-outlet';\n\n private destroy$ = new Subject<void>();\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.config?.currentValue) {\n this.loadCode();\n }\n }\n\n loadCode() {\n this.isLoading = true;\n const isInDevMode = this.config?.devMode;\n this.language = 'html';\n\n if (isInDevMode) {\n this.language = 'javascript';\n }\n\n if (this.mode === 'css') {\n this.language = 'css';\n }\n\n this.value = this.mode === 'code' ? this.config.code : this.config.css;\n\n this.isLoading = false;\n\n if (this.editor) {\n queueMicrotask(() => this.formatCode());\n }\n }\n\n switchMode(mode: 'code' | 'css') {\n this.mode = mode;\n this.loadCode();\n }\n\n editorLoaded(editor: Monaco.editor.IStandaloneCodeEditor) {\n this.editor = editor;\n const monaco = this.editorComponent.monaco;\n this.editor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS, () => {\n this.saveCode();\n });\n }\n\n formatCode() {\n this.editor.getAction('editor.action.formatDocument').run();\n }\n\n redo() {\n this.editor.trigger('keyboard', 'redo', null);\n }\n\n undo() {\n this.editor.trigger('keyboard', 'undo', null);\n }\n\n changeCode($event: string) {\n if (this.isAutoSaveEnabled) {\n this.saveCode($event);\n }\n }\n\n saveCode(codeStr?: string) {\n const code = codeStr || this.editor.getValue();\n if (this.mode === 'code') {\n this.configService.changeCode(code);\n return;\n }\n this.configService.changeCss(code);\n }\n}\n","<c8y-widget-config-feedback>\n <div class=\"d-flex\">\n <span\n class=\"tag tag--warning text-12\"\n *ngIf=\"config?.devMode && !config?.legacy\"\n translate\n >\n Advanced developer mode\n </span>\n </div>\n <div class=\"d-flex\">\n <span\n class=\"tag tag--warning text-12\"\n [title]=\"\n 'This widget is in legacy mode. Consider to upgrade this to a new HTML widget. Read our documentation on details to transform your widget'\n | translate\n \"\n *ngIf=\"config?.legacy\"\n translate\n >\n Legacy mode\n </span>\n </div>\n</c8y-widget-config-feedback>\n\n<div class=\"d-flex d-col fit-h fit-w\">\n <c8y-html-widget-advanced-settings\n [devMode]=\"config?.devMode\"\n [cssEncapsulation]=\"config?.options?.cssEncapsulation\"\n ></c8y-html-widget-advanced-settings>\n\n <fieldset class=\"c8y-fieldset p-0 overflow-hidden\">\n <legend class=\"m-l-16 p-l-0\">{{ 'Code' | translate }}</legend>\n\n <div class=\"btn-group btn-group-sm m-l-0 p-t-8 p-b-8 p-l-16 p-r-16 fit-w d-flex\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Undo' | translate\"\n [tooltip]=\"'Undo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"undo()\"\n >\n <i [c8yIcon]=\"'undo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Redo' | translate\"\n [tooltip]=\"'Redo' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"redo()\"\n >\n <i [c8yIcon]=\"'redo'\"></i>\n </button>\n\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Format code' | translate\"\n [tooltip]=\"'Format code' | translate\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"formatCode()\"\n >\n <i [c8yIcon]=\"'format-align-left'\"></i>\n </button>\n\n <label class=\"c8y-switch m-l-auto\">\n <input\n type=\"checkbox\"\n [checked]=\"isAutoSaveEnabled\"\n (change)=\"isAutoSaveEnabled = !isAutoSaveEnabled\"\n />\n <span></span>\n <span translate>Auto save</span>\n </label>\n </div>\n\n <div\n class=\"btn-toolbar m-0 p-relative\"\n role=\"toolbar\"\n >\n <c8y-tabs-outlet\n class=\"elevation-none\"\n [outletName]=\"TAB_OUTLET_NAME\"\n [orientation]=\"'horizontal'\"\n [openFirstTab]=\"false\"\n ></c8y-tabs-outlet>\n <c8y-tab\n [icon]=\"'code'\"\n [label]=\"(config?.devMode ? TAB_WEBCOMPONENT_LABEL : TAB_HTML_LABEL) | translate\"\n [priority]=\"100\"\n [showAlways]=\"true\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'code'\"\n (onSelect)=\"switchMode('code')\"\n ></c8y-tab>\n <c8y-tab\n [icon]=\"'c8y-css'\"\n [label]=\"TAB_CSS_LABEL | translate\"\n [priority]=\"0\"\n [tabsOutlet]=\"TAB_OUTLET_NAME\"\n [isActive]=\"mode === 'css'\"\n (onSelect)=\"switchMode('css')\"\n *ngIf=\"!config?.devMode && !config?.legacy\"\n ></c8y-tab>\n </div>\n\n <ng-container *ngIf=\"!isLoading; else loading\">\n <c8y-editor\n class=\"flex-grow d-block\"\n style=\"height: 450px\"\n *ngIf=\"!(mode === 'css' && config?.devMode)\"\n [ngModel]=\"value\"\n (ngModelChange)=\"changeCode($event)\"\n [editorOptions]=\"{\n language,\n tabSize: 2,\n insertSpaces: true,\n minimap: { enabled: false }\n }\"\n (editorInit)=\"editorLoaded($event)\"\n ></c8y-editor>\n </ng-container>\n <ng-template #loading>\n <c8y-loading></c8y-loading>\n </ng-template>\n </fieldset>\n</div>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject, OnDestroy, TemplateRef, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { OptionsService } from '@c8y/ngx-components';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { HtmlFrameComponent } from './html-frame/html-frame.component';\nimport { HtmlWidgetConfigService } from './html-widget-config.service';\nimport { WidgetCodeEditorComponent } from './widget-code-editor-section/widget-code-editor.component';\n\n@Component({\n selector: 'c8y-html-widget-config',\n templateUrl: './html-widget-config.component.html',\n standalone: true,\n imports: [RouterModule, FormsModule, AsyncPipe, HtmlFrameComponent, WidgetCodeEditorComponent]\n})\nexport class HtmlWidgetConfigComponent implements OnDestroy {\n @ViewChild('htmlPreview')\n set htmlPreviewTemplate(template: TemplateRef<any>) {\n if (template) {\n this.widgetConfigService.setPreview(template);\n } else {\n this.widgetConfigService.setPreview(null);\n }\n }\n options = inject(OptionsService);\n htmlWidgetConfigService = inject(HtmlWidgetConfigService);\n widgetConfigService = inject(WidgetConfigService);\n\n ngOnDestroy(): void {\n // sadly the service is component scoped\n // but still not recycled correctly. That is why we do\n // it here.\n this.htmlWidgetConfigService.destroy();\n }\n}\n","<c8y-widget-code-editor\n [config]=\"htmlWidgetConfigService.config$ | async\"\n [mode]=\"'code'\"\n></c8y-widget-code-editor>\n\n<ng-template #htmlPreview>\n <c8y-html-frame\n [config]=\"htmlWidgetConfigService.codeEditorChangeConfig$ | async\"\n [device]=\"(widgetConfigService.currentConfig$ | async).device\"\n [useSalt]=\"true\"\n ></c8y-html-frame>\n</ng-template>\n","import { Component, Input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { ContextWidgetConfig } from '@c8y/ngx-components/context-dashboard';\nimport { HtmlFrameComponent } from './html-frame/html-frame.component';\nimport { HtmlWidget, HtmlWidgetConfig } from './html-widget.model';\n\n@Component({\n selector: 'c8y-html-widget',\n templateUrl: './html-widget.component.html',\n standalone: true,\n imports: [RouterModule, HtmlFrameComponent]\n})\nexport class HtmlWidgetComponent {\n @Input() config: HtmlWidgetConfig;\n\n ngOnInit(): void {\n if (this.config.html && !this.config.config) {\n this.config.config = this.mapLegacyConfig(this.config);\n }\n }\n\n private mapLegacyConfig(current: ContextWidgetConfig): HtmlWidget {\n const isAlreadyInAdvancedMode = current?.config?.devMode === true;\n if (isAlreadyInAdvancedMode) {\n return current.config as HtmlWidget;\n }\n return {\n code: current.html,\n css: '',\n legacy: true,\n devMode: false,\n options: {\n cssEncapsulation: false,\n advancedSecurity: current.sanitization === 'strict'\n }\n };\n }\n}\n","<c8y-html-frame\n [config]=\"config.config\"\n [device]=\"config.device\"\n></c8y-html-frame>\n\n","import { AsyncPipe } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { C8yTranslatePipe, ClipboardService } from '@c8y/ngx-components';\nimport {\n AssetPropertyActionDirective,\n AssetPropertyListComponent,\n AssetPropertyType\n} from '@c8y/ngx-components/asset-properties';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@Component({\n selector: 'c8y-html-widget-properties-selector',\n templateUrl: './html-widget-properties-selector.component.html',\n host: {\n class: 'bg-level-1'\n },\n standalone: true,\n imports: [\n AssetPropertyListComponent,\n AssetPropertyActionDirective,\n AsyncPipe,\n C8yTranslatePipe,\n PopoverModule,\n TooltipModule\n ]\n})\nexport class HtmlWidgetPropertiesSelectorComponent {\n widgetConfigService = inject(WidgetConfigService);\n clipboardService = inject(ClipboardService);\n\n /**\n * Copies the property path to the clipboard in a format suitable for use in HTML widget.\n * For nested properties, it uses the keyPath to create a path to nested property.\n * @param context The context containing the property information.\n */\n async copyProperty(context: AssetPropertyType) {\n const nonAlphanumericRegex = /[^a-zA-Z0-9]/;\n let path: string;\n if (context.keyPath) {\n path = context.keyPath\n .map(key => (nonAlphanumericRegex.test(key) ? `['${key}']` : `.${key}`))\n .join('');\n } else {\n path = nonAlphanumericRegex.test(context.name) ? `['${context.name}']` : `.${context.name}`;\n }\n const content = '${this.c8yContext' + path + '}';\n await this.clipboardService.writeText(content);\n }\n}\n","<div\n class=\"d-flex m-b-8\"\n style=\"margin-top: -16px\"\n>\n <em\n class=\"m-l-auto text-muted\"\n translate\n >\n How to use properties in the widget\n </em>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"helpContent\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n ></button>\n</div>\n<c8y-asset-property-list\n class=\"inner-scroll bg-inherit d-block\"\n style=\"max-height: 450px\"\n [asset]=\"(widgetConfigService.currentConfig$ | async).device\"\n [config]=\"{\n selectMode: 'none',\n expansionMode: 'expandedByDefault',\n filterable: false\n }\"\n>\n <button\n class=\"btn-dot btn fit-h\"\n [attr.aria-label]=\"'Copy' | translate\"\n tooltip=\"{{ 'Copy' | translate }}\"\n type=\"button\"\n *c8yAssetPropertyAction=\"let context\"\n [delay]=\"500\"\n (click)=\"copyProperty(context)\"\n >\n <i class=\"dlt-c8y-icon-copy\"></i>\n </button>\n</c8y-asset-property-list>\n\n<ng-template #helpContent>\n <p\n class=\"p-b-8\"\n translate\n >\n Click the copy icon for your chosen property and insert it into the HTML widget as a template\n literal.\n </p>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["isEmpty","i1","i2"],"mappings":"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"}
|
|
@@ -3,8 +3,9 @@ import * as i0 from '@angular/core';
|
|
|
3
3
|
import { Injectable, ViewChildren, Input, Optional, Component } from '@angular/core';
|
|
4
4
|
import * as i1$1 from '@angular/forms';
|
|
5
5
|
import { Validators, NgForm, ControlContainer, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import { gettext } from '@c8y/ngx-components/gettext';
|
|
6
7
|
import * as i2 from '@c8y/ngx-components';
|
|
7
|
-
import {
|
|
8
|
+
import { C8yValidators, FormGroupComponent, MessagesComponent, MessageDirective, C8yTranslatePipe, DropAreaComponent, LoadingComponent, EmptyStateComponent } from '@c8y/ngx-components';
|
|
8
9
|
import * as i4 from '@c8y/ngx-components/context-dashboard';
|
|
9
10
|
import { get } from 'lodash-es';
|
|
10
11
|
import { BehaviorSubject, Subject, merge } from 'rxjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-widgets-implementations-image.mjs","sources":["../../widgets/implementations/image/image-widget.model.ts","../../widgets/implementations/image/image-widget.service.ts","../../widgets/implementations/image/image-widget-config/image-widget-config.component.ts","../../widgets/implementations/image/image-widget-config/image-widget-config.component.html","../../widgets/implementations/image/image-widget-view/image-widget-view.component.ts","../../widgets/implementations/image/image-widget-view/image-widget-view.component.html","../../widgets/implementations/image/c8y-ngx-components-widgets-implementations-image.ts"],"sourcesContent":["export interface ImageWidgetConfig {\n imageBinaryId: string;\n styling?: ImageWidgetConfigStyling;\n}\n\nexport interface ImageWidgetConfigStyling {\n objectFit: string;\n objectPositionX: string;\n objectPositionY: string;\n}\n\nexport interface ImageWidgetStyle {\n [key: string]: string;\n}\n\nexport const defaultObjectFitValue = 'contain';\nexport const defaultObjectPositionValue = 'center';\n","import { Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { InventoryBinaryService } from '@c8y/client';\nimport { IManagedObjectBinary, InventoryService } from '@c8y/client';\nimport { AlertService, FilesService, gettext } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n defaultObjectPositionValue,\n ImageWidgetConfig,\n ImageWidgetStyle\n} from './image-widget.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ImageWidgetService {\n constructor(\n private inventory: InventoryService,\n private fileService: FilesService,\n private alert: AlertService,\n private translate: TranslateService,\n private binary: InventoryBinaryService\n ) {}\n\n async getImageDetails(\n imageBinaryId: string | null\n ): Promise<{ file: File; base64: string; c8y_SHA256: string }> {\n if (!imageBinaryId) {\n return null;\n }\n\n try {\n const { data: imageBinaryMo } = await this.inventory.detail(imageBinaryId);\n const file = await this.fileService.getFile(imageBinaryMo as IManagedObjectBinary);\n const base64 = await this.fileService.toBase64(file);\n return {\n file,\n base64: base64 as string,\n c8y_SHA256: imageBinaryMo.c8y_SHA256\n };\n } catch (e) {\n const text = this.translate.instant(\n gettext('Unable to retrieve image with id: {{ imageBinaryId }}'),\n { imageBinaryId }\n );\n this.alert.danger(text, e?.data);\n }\n\n return null;\n }\n\n async uploadFile(\n file: File,\n options: {\n dashboardMoId?: string;\n isDeviceTypeDashboard?: boolean;\n } = {}\n ): Promise<string> {\n const hash = await this.fileService.getHashSumOfFile(file);\n const fileDetails = { c8y_SHA256: hash };\n const globalImage = !options?.dashboardMoId || options?.isDeviceTypeDashboard;\n const partialBinaryMo: Partial<IManagedObject> = !globalImage\n ? { ...fileDetails }\n : { ...fileDetails, c8y_Global: {} };\n const { data: mo } = await this.binary.create(file, partialBinaryMo);\n if (options?.dashboardMoId) {\n await this.inventory.childAdditionsAdd(mo, options?.dashboardMoId);\n }\n return mo.id;\n }\n\n getStyling(config: ImageWidgetConfig): ImageWidgetStyle | null {\n if (!config.styling?.objectFit || config.styling?.objectFit === 'full-width') {\n return null;\n }\n return {\n 'object-fit': config.styling.objectFit,\n 'object-position': `${config.styling?.objectPositionX || defaultObjectPositionValue} ${\n config.styling?.objectPositionY || defaultObjectPositionValue\n }`\n };\n }\n}\n","import { AsyncPipe, NgClass, NgForOf, NgIf, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n TemplateRef,\n ViewChildren\n} from '@angular/core';\nimport {\n ControlContainer,\n FormBuilder,\n FormGroup,\n NgForm,\n ReactiveFormsModule,\n Validators\n} from '@angular/forms';\nimport {\n AlertService,\n C8yTranslatePipe,\n C8yValidators,\n DropAreaComponent,\n FilesService,\n FormGroupComponent,\n gettext,\n LoadingComponent,\n MessageDirective,\n MessagesComponent,\n OnBeforeSave\n} from '@c8y/ngx-components';\nimport { WidgetConfigComponent, WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { get } from 'lodash-es';\nimport { BehaviorSubject, merge, Observable, Subject } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport {\n defaultObjectFitValue,\n defaultObjectPositionValue,\n ImageWidgetConfig,\n ImageWidgetConfigStyling,\n ImageWidgetStyle\n} from '../image-widget.model';\nimport { ImageWidgetService } from '../image-widget.service';\n\n@Component({\n selector: 'c8y-image-widget-config',\n templateUrl: './image-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [\n ReactiveFormsModule,\n FormGroupComponent,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe,\n AsyncPipe,\n NgIf,\n NgStyle,\n NgClass,\n NgForOf,\n DropAreaComponent,\n LoadingComponent\n ]\n})\nexport class ImageWidgetConfigComponent implements OnInit, OnDestroy, OnBeforeSave, AfterViewInit {\n @Input() config: ImageWidgetConfig;\n imageBinaryId$ = new BehaviorSubject<string>(null);\n imageSrc$: Observable<string>;\n loading = false;\n formGroup: FormGroup;\n fileFromConfig: File;\n styling: ImageWidgetStyle | null;\n destroyed$ = new Subject<void>();\n objectFitOptions = [\n {\n label: gettext('Contain`verb, image fitting option`'),\n value: 'contain',\n description: gettext(\n 'The image is entirely displayed within the widget while preserving the aspect ratio.'\n )\n },\n {\n label: gettext('Cover`verb, image fitting option`'),\n value: 'cover',\n description: gettext(\n 'The image is resized to fill the widget while preserving the aspect ratio. Overflowing areas are clipped.'\n )\n },\n {\n label: gettext('Fill`verb, image fitting option`'),\n value: 'fill',\n description: gettext(\n 'The image is stretched to fill the widget, overriding the aspect-ratio.'\n )\n },\n {\n label: gettext('Full width`image fitting option`'),\n value: 'full-width',\n description: gettext(\n `The image is resized to fit the widget's width while preserving the aspect ratio. Overflowing area is scrollable.`\n )\n }\n ];\n\n @ViewChildren('imagePreview') imagePreviewTemplate!: QueryList<TemplateRef<any>>;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm,\n private fileService: FilesService,\n private alert: AlertService,\n private imageWidget: ImageWidgetService,\n @Optional() private widgetConfig: WidgetConfigComponent,\n private widgetConfigService: WidgetConfigService\n ) {}\n\n async onBeforeSave(config?: ImageWidgetConfig): Promise<boolean> {\n if (this.formGroup.invalid) {\n return false;\n }\n\n const fileFromForm = this.getFileFromFormValue(this.formGroup.value);\n if (fileFromForm && fileFromForm !== this.fileFromConfig) {\n try {\n const imageBinaryId = await this.imageWidget.uploadFile(fileFromForm, {\n dashboardMoId: this.getDashboardMoId(),\n isDeviceTypeDashboard: this.widgetConfig?.isDeviceTypeDashboard\n });\n Object.assign(config, { imageBinaryId });\n } catch (e) {\n this.alert.danger(gettext('Unable to upload image.'), e?.data);\n return false;\n }\n }\n const styling: ImageWidgetConfigStyling = this.formGroup.value.styling;\n Object.assign(config, { styling });\n\n return true;\n }\n\n ngOnInit() {\n this.initForm();\n const imageFromConfig = this.imageBinaryId$.pipe(\n filter(id => !!id),\n distinctUntilChanged(),\n tap(() => (this.loading = true)),\n switchMap(imageBinaryId => this.imageWidget.getImageDetails(imageBinaryId)),\n tap(details => {\n this.loading = false;\n this.fileFromConfig = details.file;\n if (details) {\n this.formGroup.patchValue({ images: [{ file: details.file, name: details.file.name }] });\n }\n }),\n map(details => details?.base64),\n shareReplay(1)\n );\n const selectedFile = this.formGroup.valueChanges.pipe(\n map(value => this.getFileFromFormValue(value)),\n distinctUntilChanged(),\n switchMap(file => (file ? this.fileService.toBase64(file) : Promise.resolve('')))\n );\n this.imageSrc$ = merge(imageFromConfig, selectedFile).pipe(\n map(base64 => (base64 ? (base64 as string) : ''))\n );\n this.imageBinaryId$.next(this.config?.imageBinaryId);\n }\n\n ngAfterViewInit(): void {\n this.imagePreviewTemplate.changes.pipe(takeUntil(this.destroyed$)).subscribe(template => {\n this.widgetConfigService.setPreview(template.first);\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private getDashboardMoId(): string | null {\n return get(this.widgetConfig, 'mo.id', null);\n }\n\n private async initForm(): Promise<void> {\n const stylingFormGroup = this.formBuilder.group({\n objectFit: [\n // fallback to 'full-width' for old legacy widgets, newly created widgets should use defaultObjectFitValue\n this.config.imageBinaryId && !this.config.styling ? 'full-width' : defaultObjectFitValue,\n [Validators.required]\n ],\n objectPositionX: [defaultObjectPositionValue, [Validators.required]],\n objectPositionY: [defaultObjectPositionValue, [Validators.required]]\n });\n this.formGroup = this.formBuilder.group({\n images: [\n null,\n [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(1),\n C8yValidators.filesValidator({ maximumFileSizeInKb: 1000, typePrefix: 'image/' })\n ]\n ],\n styling: stylingFormGroup\n });\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n this.formGroup.valueChanges\n .pipe(takeUntil(this.destroyed$))\n .subscribe(changes => this.setStyling(changes));\n }\n\n private getFileFromFormValue(formValue: any): File | null {\n const images: any[] = formValue?.images || [];\n return images[0]?.file || null;\n }\n\n private setStyling(config: ImageWidgetConfig): void {\n this.styling = this.imageWidget.getStyling(config);\n }\n}\n","<div [formGroup]=\"formGroup\">\n <fieldset class=\"c8y-fieldset\">\n <legend>{{ 'Image' | translate }}</legend>\n <c8y-form-group class=\"m-b-16\">\n <c8y-drop-area\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n formControlName=\"images\"\n [accept]=\"'image'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <c8y-messages>\n <c8y-message\n name=\"maxFileSizeReached\"\n [text]=\"\n 'The maximum image size is {{ maxFileSize }} kB. The selected image has a size of {{ actualFileSize }} kB.'\n | translate\n \"\n ></c8y-message>\n <c8y-message\n name=\"wrongFileType\"\n [text]=\"'Wrong file type, select an image.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"maxlength\"\n [text]=\"'Only select one image.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"required\"\n [text]=\"'An image is required.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"minlength\"\n [text]=\"'An image is required.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </fieldset>\n\n <div *ngIf=\"imageSrc$ | async as src\">\n <fieldset class=\"c8y-fieldset\">\n <legend>\n {{ 'Size and alignment' | translate }}\n </legend>\n <div [formGroupName]=\"'styling'\">\n <c8y-form-group class=\"form-group-sm m-b-0\">\n <label class=\"m-b-4\">\n {{ 'Image display' | translate }}\n </label>\n <ul class=\"list-group separator-top-bottom\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0\"\n *ngFor=\"let objectFitOption of objectFitOptions; let i = index\"\n >\n <label class=\"c8y-radio\">\n <input\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n formControlName=\"objectFit\"\n [value]=\"objectFitOption.value\"\n />\n <span></span>\n <span class=\"l-h-1\">\n {{ objectFitOption.label | translate }}\n <br />\n <small class=\"text-muted\">\n {{ objectFitOption.description | translate }}\n </small>\n </span>\n </label>\n </li>\n </ul>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"form-group-sm\">\n <label>{{ 'Horizontal alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"objectPositionX\"\n >\n <option [ngValue]=\"'left'\">\n {{ 'left`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'right'\">\n {{ 'right`horizontal alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group class=\"form-group-sm\">\n <label>{{ 'Vertical alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"objectPositionY\"\n >\n <option [ngValue]=\"'top'\">\n {{ 'top`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'bottom'\">\n {{ 'bottom`vertical alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </fieldset>\n <ng-template #imagePreview>\n <img\n [ngStyle]=\"styling\"\n [src]=\"src\"\n [ngClass]=\"styling ? 'fit-h fit-w' : 'img-responsive'\"\n />\n </ng-template>\n </div>\n <div\n class=\"d-flex j-c-center\"\n *ngIf=\"loading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { ImageWidgetConfig, ImageWidgetStyle } from '../image-widget.model';\nimport { ImageWidgetService } from '../image-widget.service';\nimport { EmptyStateComponent, LoadingComponent } from '@c8y/ngx-components';\nimport { AsyncPipe, NgClass, NgIf, NgStyle } from '@angular/common';\n\n@Component({\n selector: 'c8y-image-widget-view',\n templateUrl: './image-widget-view.component.html',\n standalone: true,\n imports: [NgIf, NgClass, AsyncPipe, NgStyle, LoadingComponent, EmptyStateComponent]\n})\nexport class ImageWidgetViewComponent implements OnChanges {\n @Input() config: ImageWidgetConfig;\n imageBinaryId$ = new BehaviorSubject<string>(null);\n imageDetails$: Observable<{\n file: File;\n base64: string;\n }>;\n styling: ImageWidgetStyle | null;\n loading = true;\n\n constructor(private imageWidget: ImageWidgetService) {\n this.imageDetails$ = this.imageBinaryId$.pipe(\n distinctUntilChanged(),\n tap(() => (this.loading = true)),\n switchMap(imageBinaryId => this.imageWidget.getImageDetails(imageBinaryId)),\n tap(() => (this.loading = false)),\n shareReplay(1)\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.config) {\n const value = changes.config.currentValue as ImageWidgetConfig;\n this.imageBinaryId$.next(value.imageBinaryId);\n this.setStyling(value);\n }\n }\n\n private setStyling(config: ImageWidgetConfig): void {\n this.styling = this.imageWidget.getStyling(config);\n }\n}\n","<ng-container *ngIf=\"imageDetails$ | async as details; else empty\">\n <img\n [src]=\"details.base64\"\n [title]=\"details.file.name\"\n [ngClass]=\"styling ? 'fit-h fit-w' : 'img-responsive'\"\n [ngStyle]=\"styling\"\n />\n</ng-container>\n\n<ng-template #empty>\n <div class=\"d-flex fit-h fit-w j-c-center a-i-center\" *ngIf=\"!loading\">\n <c8y-ui-empty-state\n class=\"fit-w\"\n [icon]=\"'no-image'\"\n [title]=\"'No image to display.' | translate\"\n [subtitle]=\"'Upload an image.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n</ng-template>\n<div class=\"d-flex fit-h fit-w j-c-center a-i-center\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3.ImageWidgetService","i1.ImageWidgetService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-widgets-implementations-image.mjs","sources":["../../widgets/implementations/image/image-widget.model.ts","../../widgets/implementations/image/image-widget.service.ts","../../widgets/implementations/image/image-widget-config/image-widget-config.component.ts","../../widgets/implementations/image/image-widget-config/image-widget-config.component.html","../../widgets/implementations/image/image-widget-view/image-widget-view.component.ts","../../widgets/implementations/image/image-widget-view/image-widget-view.component.html","../../widgets/implementations/image/c8y-ngx-components-widgets-implementations-image.ts"],"sourcesContent":["export interface ImageWidgetConfig {\n imageBinaryId: string;\n styling?: ImageWidgetConfigStyling;\n}\n\nexport interface ImageWidgetConfigStyling {\n objectFit: string;\n objectPositionX: string;\n objectPositionY: string;\n}\n\nexport interface ImageWidgetStyle {\n [key: string]: string;\n}\n\nexport const defaultObjectFitValue = 'contain';\nexport const defaultObjectPositionValue = 'center';\n","import { Injectable } from '@angular/core';\nimport {\n IManagedObject,\n IManagedObjectBinary,\n InventoryService,\n InventoryBinaryService\n} from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, FilesService } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n defaultObjectPositionValue,\n ImageWidgetConfig,\n ImageWidgetStyle\n} from './image-widget.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ImageWidgetService {\n constructor(\n private inventory: InventoryService,\n private fileService: FilesService,\n private alert: AlertService,\n private translate: TranslateService,\n private binary: InventoryBinaryService\n ) {}\n\n async getImageDetails(\n imageBinaryId: string | null\n ): Promise<{ file: File; base64: string; c8y_SHA256: string }> {\n if (!imageBinaryId) {\n return null;\n }\n\n try {\n const { data: imageBinaryMo } = await this.inventory.detail(imageBinaryId);\n const file = await this.fileService.getFile(imageBinaryMo as IManagedObjectBinary);\n const base64 = await this.fileService.toBase64(file);\n return {\n file,\n base64: base64 as string,\n c8y_SHA256: imageBinaryMo.c8y_SHA256\n };\n } catch (e) {\n const text = this.translate.instant(\n gettext('Unable to retrieve image with id: {{ imageBinaryId }}'),\n { imageBinaryId }\n );\n this.alert.danger(text, e?.data);\n }\n\n return null;\n }\n\n async uploadFile(\n file: File,\n options: {\n dashboardMoId?: string;\n isDeviceTypeDashboard?: boolean;\n } = {}\n ): Promise<string> {\n const hash = await this.fileService.getHashSumOfFile(file);\n const fileDetails = { c8y_SHA256: hash };\n const globalImage = !options?.dashboardMoId || options?.isDeviceTypeDashboard;\n const partialBinaryMo: Partial<IManagedObject> = !globalImage\n ? { ...fileDetails }\n : { ...fileDetails, c8y_Global: {} };\n const { data: mo } = await this.binary.create(file, partialBinaryMo);\n if (options?.dashboardMoId) {\n await this.inventory.childAdditionsAdd(mo, options?.dashboardMoId);\n }\n return mo.id;\n }\n\n getStyling(config: ImageWidgetConfig): ImageWidgetStyle | null {\n if (!config.styling?.objectFit || config.styling?.objectFit === 'full-width') {\n return null;\n }\n return {\n 'object-fit': config.styling.objectFit,\n 'object-position': `${config.styling?.objectPositionX || defaultObjectPositionValue} ${\n config.styling?.objectPositionY || defaultObjectPositionValue\n }`\n };\n }\n}\n","import { AsyncPipe, NgClass, NgForOf, NgIf, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n QueryList,\n TemplateRef,\n ViewChildren\n} from '@angular/core';\nimport {\n ControlContainer,\n FormBuilder,\n FormGroup,\n NgForm,\n ReactiveFormsModule,\n Validators\n} from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n AlertService,\n C8yTranslatePipe,\n C8yValidators,\n DropAreaComponent,\n FilesService,\n FormGroupComponent,\n LoadingComponent,\n MessageDirective,\n MessagesComponent,\n OnBeforeSave\n} from '@c8y/ngx-components';\nimport { WidgetConfigComponent, WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { get } from 'lodash-es';\nimport { BehaviorSubject, merge, Observable, Subject } from 'rxjs';\nimport {\n distinctUntilChanged,\n filter,\n map,\n shareReplay,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport {\n defaultObjectFitValue,\n defaultObjectPositionValue,\n ImageWidgetConfig,\n ImageWidgetConfigStyling,\n ImageWidgetStyle\n} from '../image-widget.model';\nimport { ImageWidgetService } from '../image-widget.service';\n\n@Component({\n selector: 'c8y-image-widget-config',\n templateUrl: './image-widget-config.component.html',\n viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n standalone: true,\n imports: [\n ReactiveFormsModule,\n FormGroupComponent,\n MessagesComponent,\n MessageDirective,\n C8yTranslatePipe,\n AsyncPipe,\n NgIf,\n NgStyle,\n NgClass,\n NgForOf,\n DropAreaComponent,\n LoadingComponent\n ]\n})\nexport class ImageWidgetConfigComponent implements OnInit, OnDestroy, OnBeforeSave, AfterViewInit {\n @Input() config: ImageWidgetConfig;\n imageBinaryId$ = new BehaviorSubject<string>(null);\n imageSrc$: Observable<string>;\n loading = false;\n formGroup: FormGroup;\n fileFromConfig: File;\n styling: ImageWidgetStyle | null;\n destroyed$ = new Subject<void>();\n objectFitOptions = [\n {\n label: gettext('Contain`verb, image fitting option`'),\n value: 'contain',\n description: gettext(\n 'The image is entirely displayed within the widget while preserving the aspect ratio.'\n )\n },\n {\n label: gettext('Cover`verb, image fitting option`'),\n value: 'cover',\n description: gettext(\n 'The image is resized to fill the widget while preserving the aspect ratio. Overflowing areas are clipped.'\n )\n },\n {\n label: gettext('Fill`verb, image fitting option`'),\n value: 'fill',\n description: gettext(\n 'The image is stretched to fill the widget, overriding the aspect-ratio.'\n )\n },\n {\n label: gettext('Full width`image fitting option`'),\n value: 'full-width',\n description: gettext(\n `The image is resized to fit the widget's width while preserving the aspect ratio. Overflowing area is scrollable.`\n )\n }\n ];\n\n @ViewChildren('imagePreview') imagePreviewTemplate!: QueryList<TemplateRef<any>>;\n\n constructor(\n private formBuilder: FormBuilder,\n private form: NgForm,\n private fileService: FilesService,\n private alert: AlertService,\n private imageWidget: ImageWidgetService,\n @Optional() private widgetConfig: WidgetConfigComponent,\n private widgetConfigService: WidgetConfigService\n ) {}\n\n async onBeforeSave(config?: ImageWidgetConfig): Promise<boolean> {\n if (this.formGroup.invalid) {\n return false;\n }\n\n const fileFromForm = this.getFileFromFormValue(this.formGroup.value);\n if (fileFromForm && fileFromForm !== this.fileFromConfig) {\n try {\n const imageBinaryId = await this.imageWidget.uploadFile(fileFromForm, {\n dashboardMoId: this.getDashboardMoId(),\n isDeviceTypeDashboard: this.widgetConfig?.isDeviceTypeDashboard\n });\n Object.assign(config, { imageBinaryId });\n } catch (e) {\n this.alert.danger(gettext('Unable to upload image.'), e?.data);\n return false;\n }\n }\n const styling: ImageWidgetConfigStyling = this.formGroup.value.styling;\n Object.assign(config, { styling });\n\n return true;\n }\n\n ngOnInit() {\n this.initForm();\n const imageFromConfig = this.imageBinaryId$.pipe(\n filter(id => !!id),\n distinctUntilChanged(),\n tap(() => (this.loading = true)),\n switchMap(imageBinaryId => this.imageWidget.getImageDetails(imageBinaryId)),\n tap(details => {\n this.loading = false;\n this.fileFromConfig = details.file;\n if (details) {\n this.formGroup.patchValue({ images: [{ file: details.file, name: details.file.name }] });\n }\n }),\n map(details => details?.base64),\n shareReplay(1)\n );\n const selectedFile = this.formGroup.valueChanges.pipe(\n map(value => this.getFileFromFormValue(value)),\n distinctUntilChanged(),\n switchMap(file => (file ? this.fileService.toBase64(file) : Promise.resolve('')))\n );\n this.imageSrc$ = merge(imageFromConfig, selectedFile).pipe(\n map(base64 => (base64 ? (base64 as string) : ''))\n );\n this.imageBinaryId$.next(this.config?.imageBinaryId);\n }\n\n ngAfterViewInit(): void {\n this.imagePreviewTemplate.changes.pipe(takeUntil(this.destroyed$)).subscribe(template => {\n this.widgetConfigService.setPreview(template.first);\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private getDashboardMoId(): string | null {\n return get(this.widgetConfig, 'mo.id', null);\n }\n\n private async initForm(): Promise<void> {\n const stylingFormGroup = this.formBuilder.group({\n objectFit: [\n // fallback to 'full-width' for old legacy widgets, newly created widgets should use defaultObjectFitValue\n this.config.imageBinaryId && !this.config.styling ? 'full-width' : defaultObjectFitValue,\n [Validators.required]\n ],\n objectPositionX: [defaultObjectPositionValue, [Validators.required]],\n objectPositionY: [defaultObjectPositionValue, [Validators.required]]\n });\n this.formGroup = this.formBuilder.group({\n images: [\n null,\n [\n Validators.required,\n Validators.minLength(1),\n Validators.maxLength(1),\n C8yValidators.filesValidator({ maximumFileSizeInKb: 1000, typePrefix: 'image/' })\n ]\n ],\n styling: stylingFormGroup\n });\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config);\n this.formGroup.valueChanges\n .pipe(takeUntil(this.destroyed$))\n .subscribe(changes => this.setStyling(changes));\n }\n\n private getFileFromFormValue(formValue: any): File | null {\n const images: any[] = formValue?.images || [];\n return images[0]?.file || null;\n }\n\n private setStyling(config: ImageWidgetConfig): void {\n this.styling = this.imageWidget.getStyling(config);\n }\n}\n","<div [formGroup]=\"formGroup\">\n <fieldset class=\"c8y-fieldset\">\n <legend>{{ 'Image' | translate }}</legend>\n <c8y-form-group class=\"m-b-16\">\n <c8y-drop-area\n class=\"drop-area-sm\"\n [icon]=\"'upload'\"\n formControlName=\"images\"\n [accept]=\"'image'\"\n [maxAllowedFiles]=\"1\"\n ></c8y-drop-area>\n <c8y-messages>\n <c8y-message\n name=\"maxFileSizeReached\"\n [text]=\"\n 'The maximum image size is {{ maxFileSize }} kB. The selected image has a size of {{ actualFileSize }} kB.'\n | translate\n \"\n ></c8y-message>\n <c8y-message\n name=\"wrongFileType\"\n [text]=\"'Wrong file type, select an image.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"maxlength\"\n [text]=\"'Only select one image.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"required\"\n [text]=\"'An image is required.' | translate\"\n ></c8y-message>\n <c8y-message\n name=\"minlength\"\n [text]=\"'An image is required.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </fieldset>\n\n <div *ngIf=\"imageSrc$ | async as src\">\n <fieldset class=\"c8y-fieldset\">\n <legend>\n {{ 'Size and alignment' | translate }}\n </legend>\n <div [formGroupName]=\"'styling'\">\n <c8y-form-group class=\"form-group-sm m-b-0\">\n <label class=\"m-b-4\">\n {{ 'Image display' | translate }}\n </label>\n <ul class=\"list-group separator-top-bottom\">\n <li\n class=\"list-group-item d-flex a-i-center p-l-0\"\n *ngFor=\"let objectFitOption of objectFitOptions; let i = index\"\n >\n <label class=\"c8y-radio\">\n <input\n type=\"radio\"\n [id]=\"'groupradiocontentclass' + i\"\n formControlName=\"objectFit\"\n [value]=\"objectFitOption.value\"\n />\n <span></span>\n <span class=\"l-h-1\">\n {{ objectFitOption.label | translate }}\n <br />\n <small class=\"text-muted\">\n {{ objectFitOption.description | translate }}\n </small>\n </span>\n </label>\n </li>\n </ul>\n </c8y-form-group>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group class=\"form-group-sm\">\n <label>{{ 'Horizontal alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"objectPositionX\"\n >\n <option [ngValue]=\"'left'\">\n {{ 'left`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`horizontal alignment`' | translate }}\n </option>\n <option [ngValue]=\"'right'\">\n {{ 'right`horizontal alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group class=\"form-group-sm\">\n <label>{{ 'Vertical alignment' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n formControlName=\"objectPositionY\"\n >\n <option [ngValue]=\"'top'\">\n {{ 'top`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'center'\">\n {{ 'center`vertical alignment`' | translate }}\n </option>\n <option [ngValue]=\"'bottom'\">\n {{ 'bottom`vertical alignment`' | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n </fieldset>\n <ng-template #imagePreview>\n <img\n [ngStyle]=\"styling\"\n [src]=\"src\"\n [ngClass]=\"styling ? 'fit-h fit-w' : 'img-responsive'\"\n />\n </ng-template>\n </div>\n <div\n class=\"d-flex j-c-center\"\n *ngIf=\"loading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n</div>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { ImageWidgetConfig, ImageWidgetStyle } from '../image-widget.model';\nimport { ImageWidgetService } from '../image-widget.service';\nimport { EmptyStateComponent, LoadingComponent } from '@c8y/ngx-components';\nimport { AsyncPipe, NgClass, NgIf, NgStyle } from '@angular/common';\n\n@Component({\n selector: 'c8y-image-widget-view',\n templateUrl: './image-widget-view.component.html',\n standalone: true,\n imports: [NgIf, NgClass, AsyncPipe, NgStyle, LoadingComponent, EmptyStateComponent]\n})\nexport class ImageWidgetViewComponent implements OnChanges {\n @Input() config: ImageWidgetConfig;\n imageBinaryId$ = new BehaviorSubject<string>(null);\n imageDetails$: Observable<{\n file: File;\n base64: string;\n }>;\n styling: ImageWidgetStyle | null;\n loading = true;\n\n constructor(private imageWidget: ImageWidgetService) {\n this.imageDetails$ = this.imageBinaryId$.pipe(\n distinctUntilChanged(),\n tap(() => (this.loading = true)),\n switchMap(imageBinaryId => this.imageWidget.getImageDetails(imageBinaryId)),\n tap(() => (this.loading = false)),\n shareReplay(1)\n );\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.config) {\n const value = changes.config.currentValue as ImageWidgetConfig;\n this.imageBinaryId$.next(value.imageBinaryId);\n this.setStyling(value);\n }\n }\n\n private setStyling(config: ImageWidgetConfig): void {\n this.styling = this.imageWidget.getStyling(config);\n }\n}\n","<ng-container *ngIf=\"imageDetails$ | async as details; else empty\">\n <img\n [src]=\"details.base64\"\n [title]=\"details.file.name\"\n [ngClass]=\"styling ? 'fit-h fit-w' : 'img-responsive'\"\n [ngStyle]=\"styling\"\n />\n</ng-container>\n\n<ng-template #empty>\n <div class=\"d-flex fit-h fit-w j-c-center a-i-center\" *ngIf=\"!loading\">\n <c8y-ui-empty-state\n class=\"fit-w\"\n [icon]=\"'no-image'\"\n [title]=\"'No image to display.' | translate\"\n [subtitle]=\"'Upload an image.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n</ng-template>\n<div class=\"d-flex fit-h fit-w j-c-center a-i-center\" *ngIf=\"loading\">\n <c8y-loading></c8y-loading>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i3.ImageWidgetService","i1.ImageWidgetService"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Pipe, Injectable, inject, ViewChild, Input, Component, Optional, EventEmitter, forwardRef, Output } from '@angular/core';
|
|
3
3
|
import * as i1 from '@c8y/ngx-components';
|
|
4
|
-
import {
|
|
4
|
+
import { ThemeSwitcherService, MeasurementRealtimeService, DatePipe, CommonModule, FormGroupComponent, MessagesComponent, FormsModule } from '@c8y/ngx-components';
|
|
5
5
|
import * as i2$1 from '@angular/common';
|
|
6
6
|
import { AsyncPipe, NgIf, NgFor, NgStyle, DecimalPipe } from '@angular/common';
|
|
7
7
|
import { of, BehaviorSubject, switchMap, tap, Subject, takeUntil } from 'rxjs';
|
|
@@ -10,6 +10,7 @@ import * as i2 from '@c8y/ngx-components/context-dashboard';
|
|
|
10
10
|
import { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';
|
|
11
11
|
import * as i1$1 from 'ngx-echarts';
|
|
12
12
|
import { NgxEchartsModule, NGX_ECHARTS_CONFIG } from 'ngx-echarts';
|
|
13
|
+
import { gettext } from '@c8y/ngx-components/gettext';
|
|
13
14
|
import * as i1$2 from '@angular/forms';
|
|
14
15
|
import { NG_VALUE_ACCESSOR, Validators, NgForm, ControlContainer, ReactiveFormsModule } from '@angular/forms';
|
|
15
16
|
import * as i6 from '@c8y/ngx-components/datapoint-selector';
|