{"version":3,"file":"c8y-ngx-components.mjs","sources":["../../core/common/icon.directive.ts","../../core/common/ApplicationOptions.ts","../../core/common/apply-range-class.pipe.ts","../../core/common/group-fragment.model.ts","../../core/common/state-service.abstract.ts","../../core/common/extension-hooks.ts","../../core/common/options.service.ts","../../core/common/throttle.decorator.ts","../../core/plugins/plugins-resolve.service.ts","../../core/i18n/languages.ts","../../core/i18n/locale.path.ts","../../core/i18n/pattern-messages.service.ts","../../core/i18n/patterns-message.hook.ts","../../core/i18n/translation-utils.ts","../../core/i18n/missing-translation-custom.handler.ts","../../core/i18n/patterns/pattern-messages-alarms.data.ts","../../core/i18n/patterns/pattern-messages-applications.data.ts","../../core/i18n/patterns/pattern-messages-authentication.data.ts","../../core/i18n/patterns/pattern-messages-bulk-operations.data.ts","../../core/i18n/patterns/pattern-messages-cep.data.ts","../../core/i18n/patterns/pattern-messages-certificates.data.ts","../../core/i18n/patterns/pattern-messages-devices.data.ts","../../core/i18n/patterns/pattern-messages-firmware.data.ts","../../core/i18n/patterns/pattern-messages-microservices.data.ts","../../core/i18n/patterns/pattern-messages-operations.data.ts","../../core/i18n/patterns/pattern-messages-roles.data.ts","../../core/i18n/patterns/pattern-messages-tenants.data.ts","../../core/i18n/patterns/pattern-messages-users.data.ts","../../core/i18n/patterns/pattern-messages-misc.data.ts","../../core/i18n/patterns/pattern-messages-simulation.data.ts","../../core/i18n/patterns/pattern-messages-remote-access.data.ts","../../core/i18n/patterns/pattern-messages-bulk-registration.data.ts","../../core/i18n/patterns/pattern-messages-databroker.data.ts","../../core/i18n/patterns/pattern-messages-smartrest.data.ts","../../core/i18n/patterns/pattern-messages-options.data.ts","../../core/i18n/patterns/pattern-messages-datahub.data.ts","../../core/i18n/patterns/pattern-messages-lpwan.data.ts","../../core/i18n/patterns/pattern-messages-lwm2m.data.ts","../../core/i18n/patterns/index.ts","../../core/i18n/pattern-messages.data.ts","../../core/i18n/datahub.pattern-messages.data.ts","../../core/i18n/c8y-translate.directive.ts","../../core/i18n/c8y-translate.pipe.ts","../../core/i18n/property-value-transform.service.ts","../../core/i18n/name-transform.pipe.ts","../../core/i18n/c8y-translate.module.ts","../../core/i18n/cached-locale-dictionary.service.ts","../../core/plugins/plugins-injection-token.ts","../../core/i18n/translation-loader.service.ts","../../core/i18n/i18n.module.ts","../../core/plugins/plugins-loader.service.ts","../../core/common/ui-state.service.ts","../../core/realtime/realtime.service.ts","../../core/realtime/realtime-subject.service.ts","../../core/realtime/managed-object-realtime.service.ts","../../core/asset-types/asset-types.realtime.service.ts","../../core/common/group.service.ts","../../core/common/asset-link.pipe.ts","../../core/common/bytes.pipe.ts","../../core/common/color.service.ts","../../core/common/common.constants.ts","../../core/i18n/load-locale.ts","../../core/i18n/translate.service.ts","../../core/common/component-outlet.directive.ts","../../core/common/date-format.service.ts","../../core/common/date.pipe.ts","../../core/common/dropdown-direction.directive.ts","../../core/common/empty-state/empty-state-context.directive.ts","../../core/i18n/gettext.ts","../../core/common/empty-state/empty-state.component.ts","../../core/common/empty-state/empty-state.component.html","../../core/common/load-more.component.ts","../../core/common/load-more.component.html","../../core/common/virtual-scroll/virtual-scroll-window-strategy.ts","../../core/common/virtual-scroll/virtual-scroll-window.directive.ts","../../core/common/virtual-scroll/virtual-scroller-wrapper.component.ts","../../core/common/virtual-scroll/virtual-scroller-wrapper.component.html","../../core/common/forOf.directive.ts","../../core/common/files.service.ts","../../core/common/generic-file-icon.pipe.ts","../../core/common/get-group-icon.pipe.ts","../../core/common/humanize-app-name.model.ts","../../core/common/humanize-app-name.pipe.ts","../../core/common/humanize.pipe.ts","../../core/common/memoize.decorator.ts","../../core/common/permissions.service.ts","../../core/common/if-allowed.directive.ts","../../core/common/loading.component.ts","../../core/common/loading.component.html","../../core/common/map-function.pipe.ts","../../core/common/markdown-to-html.pipe.ts","../../core/common/mo-name-cache.service.ts","../../core/common/mo-name.pipe.ts","../../core/common/number.pipe.ts","../../core/common/operation-result.component.ts","../../core/common/operation-result.component.html","../../core/common/outlet.directive.ts","../../core/common/progress-bar.component.ts","../../core/common/progress-bar.component.html","../../core/common/shorten-user-name.pipe.ts","../../core/common/managed-object-type.ts","../../core/common/device.service.ts","../../core/common/should-show-mo.pipe.ts","../../core/common/show-if-filter.pipe.ts","../../core/common/skip-link.directive.ts","../../core/common/stringify-object.pipe.ts","../../core/common/tabset-aria.directive.ts","../../core/common/textarea-autoresize.directive.ts","../../core/common/user-name-initials.pipe.ts","../../core/common/user-preferences/user-preferences-storage-local.ts","../../core/common/user-preferences/user-preferences-store-inventory.ts","../../core/alert/alert.service.ts","../../core/common/user-preferences/user-preferences-store-current-user.ts","../../core/common/user-preferences/user-preferences.service.ts","../../core/common/common.module.ts","../../core/common/asset-hierarchy.service.ts","../../core/common/dropdown-focus-trap.directive.ts","../../core/common/strip-html.pipe.ts","../../core/common/icon-panel/icon-panel.component.ts","../../core/common/icon-panel/icon-panel.component.html","../../core/common/geo.service.ts","../../core/common/global-config.service.ts","../../core/common/relative-time.pipe.ts","../../core/common/retry-with-delay.operator.ts","../../core/common/service-registry.service.ts","../../core/common/status.model.ts","../../core/common/tenant-ui.service.ts","../../core/common/virtual-scroll/virtual-scroll-listener.directive.ts","../../core/common/zip.service.ts","../../core/common/inter-app.service.ts","../../core/bootstrap/cookie-banner/cookie-banner.service.ts","../../core/product-experience/gainsight.service.ts","../../core/product-experience/product-experience.model.ts","../../core/product-experience/product-experience.directive.ts","../../core/product-experience/user-engagements.service.ts","../../core/product-experience/product-experience.module.ts","../../core/common/interval-based-reload.abstract.ts","../../core/dynamic-component/dynamic-component-alert.model.ts","../../core/common/datapoints-sync.service.ts","../../core/common/mo-chunk-loader.service.ts","../../core/application/app-switcher.service.ts","../../core/application/app-icon.component.ts","../../core/application/app-icon.component.html","../../core/application/app-href.pipe.ts","../../core/application/is-active-app.pipe.ts","../../core/application/app-switcher-inline.component.ts","../../core/application/app-switcher-inline.component.html","../../core/application/app-switcher.component.ts","../../core/application/app-switcher.component.html","../../core/application/application.module.ts","../../core/action-bar/action-bar.service.ts","../../core/action-bar/action-bar-item.component.ts","../../core/action-bar/action-bar-item.component.html","../../core/shared/core.model.ts","../../core/action-bar/action-bar.component.ts","../../core/action-bar/action-bar.component.html","../../core/action-bar/action-bar.module.ts","../../core/action/action.service.ts","../../core/action/action-outlet.component.ts","../../core/action/action-outlet.component.html","../../core/action/action.component.ts","../../core/action/action.component.html","../../core/action/action.module.ts","../../core/alert/alert-details.component.ts","../../core/alert/alert-outlet-base.ts","../../core/alert/alert-outlet.component.ts","../../core/alert/alert-outlet.component.html","../../core/alert/alert-text.component.ts","../../core/alert/alert.component.ts","../../core/alert/alert.component.html","../../core/alert/alert.module.ts","../../core/alert/alert-on-error.ts","../../core/drawer/drawer.service.ts","../../core/header/header.service.ts","../../core/navigator/navigator-node.ts","../../core/navigator/navigator-node-root.ts","../../core/navigator/navigator.service.ts","../../core/stepper/stepper.model.ts","../../core/stepper/stepper.service.ts","../../core/setup/setup.model.ts","../../core/setup/setup.service.ts","../../core/tabs/tabs.service.ts","../../core/bootstrap/message-banner/message-banner.service.ts","../../core/bootstrap/message-banner/message-banner.component.ts","../../core/bootstrap/message-banner/message-banner.component.html","../../core/breadcrumb/breadcrumb.service.ts","../../core/docs/defaults.items.ts","../../core/docs/docs.models.ts","../../core/docs/docs.service.ts","../../core/search/search.service.ts","../../core/user/user-menu.service.ts","../../core/header/title/title-outlet.component.ts","../../core/header/title/title-outlet.component.html","../../core/breadcrumb/breadcrumb-outlet.component.ts","../../core/breadcrumb/breadcrumb-outlet.component.html","../../core/search/search-outlet.component.ts","../../core/search/search-outlet.component.html","../../core/drawer/drawer-outlet/drawer-outlet.component.ts","../../core/drawer/drawer-outlet/drawer-outlet.component.html","../../core/header/header-bar/header-bar.component.ts","../../core/header/header-bar/header-bar.component.html","../../core/tabs/tabs-outlet.component.ts","../../core/tabs/tabs-outlet.component.html","../../core/header/title/title.component.ts","../../core/header/title/title.component.html","../../core/stepper/stepper-icon.directive.ts","../../core/stepper/stepper-progress.component.ts","../../core/stepper/stepper-progress.component.html","../../core/stepper/stepper.component.ts","../../core/stepper/stepper.component.html","../../core/stepper/stepper-px.constants.ts","../../core/stepper/stepper-buttons.component.ts","../../core/stepper/stepper-buttons.component.html","../../core/stepper/stepper-outlet.component.ts","../../core/stepper/stepper-outlet.component.html","../../core/properties-list/properties-list.component.ts","../../core/properties-list/properties-list.component.html","../../core/setup/setup-illustration.component.ts","../../core/setup/setup-illustration.component.html","../../core/setup/setup.component.ts","../../core/setup/setup.component.html","../../core/modal/modal-confirm.component.ts","../../core/modal/modal-confirm.component.html","../../core/bootstrap/cookie-banner/cookie-banner-preferences-modal/cookie-banner-preferences-modal.component.ts","../../core/bootstrap/cookie-banner/cookie-banner-preferences-modal/cookie-banner-preferences-modal.component.html","../../core/bootstrap/cookie-banner/cookie-banner.model.ts","../../core/bootstrap/cookie-banner/cookie-banner.component.ts","../../core/bootstrap/cookie-banner/cookie-banner.component.html","../../core/authentication/simplified-auth.service.ts","../../core/bootstrap/bootstrap.component.ts","../../core/bootstrap/bootstrap.template.html","../../core/drawer/drawer.module.ts","../../core/breadcrumb/breadcrumb-item.component.ts","../../core/breadcrumb/breadcrumb-item.component.html","../../core/breadcrumb/breadcrumb.component.ts","../../core/breadcrumb/breadcrumb.component.html","../../core/breadcrumb/breadcrumb.module.ts","../../core/navigator/navigator-icon.component.ts","../../core/modal/popover-confirm.component.ts","../../core/modal/popover-confirm.component.html","../../core/navigator/navigator-node.component.ts","../../core/navigator/navigator-node.component.html","../../core/navigator/navigator-outlet.component.ts","../../core/navigator/navigator-outlet.component.html","../../core/modal/modal.component.ts","../../core/modal/modal.component.html","../../core/modal/modal.module.ts","../../core/navigator/navigator-drawer.factory.ts","../../core/navigator/navigator.module.ts","../../core/search/search.component.ts","../../core/search/search.component.html","../../core/search/highlight.component.ts","../../core/search/search-result-empty.component.ts","../../core/search/search-result-empty.component.html","../../core/forms/required-input-placeholder.directive.ts","../../core/list-group/list-item-action.component.ts","../../core/list-group/list-item-action.component.html","../../core/list-group/list-item-collapse.component.ts","../../core/list-group/list-item-collapse.component.html","../../core/list-group/list-item-footer.component.ts","../../core/list-group/list-item-footer.component.html","../../core/list-group/list-item.component.ts","../../core/list-group/list-item.component.html","../../core/list-group/list-item-timeline.component.ts","../../core/list-group/list-item-timeline.component.html","../../core/list-group/list-group.component.ts","../../core/list-group/list-group.component.html","../../core/select/select-keyboard.service.ts","../../core/select/typeahead.component.ts","../../core/select/typeahead.component.html","../../core/preview-feature/feature-cache.service.ts","../../core/search/search.model.ts","../../core/search/inventory-search.service.ts","../../core/list-group/list-item-icon.component.ts","../../core/list-group/list-item-icon.component.html","../../core/device-status/device-availability.ts","../../core/device-status/device-status.component.ts","../../core/device-status/device-status.component.html","../../core/search/search-input.component.ts","../../core/search/search-input.component.html","../../core/select/select-legacy.component.ts","../../core/select/select-legacy.component.html","../../core/list-group/list-item-body.component.ts","../../core/list-group/list-item-body.component.html","../../core/list-group/list-item-checkbox.component.ts","../../core/list-group/list-item-checkbox.component.html","../../core/list-group/list-item-drag-handle.component.ts","../../core/list-group/list-item-radio.component.ts","../../core/list-group/list-item-radio.component.html","../../core/list-group/list-group.module.ts","../../core/forms/validation-pattern.ts","../../core/forms/default-validation.directive.ts","../../core/forms/emails-validator.directive.ts","../../core/forms/filter-input.component.ts","../../core/forms/filter-input.component.html","../../core/forms/message.directive.ts","../../core/forms/messages.component.ts","../../core/forms/messages.component.html","../../core/forms/form-group.component.ts","../../core/forms/form-group.component.html","../../core/forms/input-group-list.component.ts","../../core/forms/input-group-list.component.html","../../core/forms/input-group-list-container.directive.ts","../../core/forms/min-validation.directive.ts","../../core/forms/ip-range-input-list.component.ts","../../core/forms/ip-range-input-list.component.html","../../core/forms/json-validation-prettifier.directive.ts","../../core/forms/max-validation.directive.ts","../../core/forms/phone-validation.directive.ts","../../core/forms/range.directive.ts","../../core/forms/range.component.ts","../../core/forms/range.component.html","../../core/forms/simple-json-path-validator.directive.ts","../../core/forms/text-area-row-height.directive.ts","../../core/forms/unique-in-collection-by-path-validation.directive.ts","../../core/forms/extract-array-validation-errors.pipe.ts","../../core/forms/humanize-validation-message.pipe.ts","../../core/forms/filter-non-array-validation-errors.pipe.ts","../../core/forms/forms.module.ts","../../core/select/select-item.directive.ts","../../core/select/selected-items.directive.ts","../../core/select/filter-by.pipe.ts","../../core/select/select.component.ts","../../core/select/select.component.html","../../core/select/selected-items.component.ts","../../core/select/selected-items.component.html","../../core/select/select.module.ts","../../core/device-status/device-status.module.ts","../../core/search/search.module.ts","../../core/modal/modal.service.ts","../../core/ui-settings/theme-switcher.service.ts","../../core/ui-settings/ui-settings.component.ts","../../core/ui-settings/ui-settings.component.html","../../core/ui-settings/ui-settings.module.ts","../../core/user/user-menu-item.component.ts","../../core/user/user-menu-item.component.html","../../core/authentication/password-confirm-modal.component.ts","../../core/authentication/password-confirm-modal.component.html","../../core/authentication/current-password-modal.component.ts","../../core/authentication/current-password-modal.component.html","../../core/authentication/password.service.ts","../../core/authentication/totp-setup.component.ts","../../core/authentication/totp-setup.component.html","../../core/authentication/totp-challenge.component.ts","../../core/authentication/totp-challenge.component.html","../../core/user/user-totp-setup.component.ts","../../core/user/user-totp-setup.component.html","../../core/authentication/password-input.component.ts","../../core/authentication/password-input.component.html","../../core/authentication/password-validation.service.ts","../../core/authentication/password-validation.directive.ts","../../core/authentication/password-confirm.directive.ts","../../core/authentication/password-strength.service.ts","../../core/authentication/password-check-list.component.ts","../../core/authentication/password-check-list.component.html","../../core/authentication/new-password.component.ts","../../core/authentication/new-password.component.html","../../core/user/user-edit.component.ts","../../core/user/user-edit.component.html","../../core/user/user-edit-modal.component.ts","../../core/user/user-edit-modal.component.html","../../core/user/user-menu-outlet.component.ts","../../core/user/user-menu-outlet.component.html","../../core/authentication/password-strength.component.ts","../../core/authentication/password-strength.component.html","../../core/authentication/authentication.module.ts","../../core/user/user-totp-revoke.component.ts","../../core/user/user-totp.component.html","../../core/clipboard/clipboard.service.ts","../../core/clipboard/clipboard.module.ts","../../core/user/user-details-drawer/user-roles-list.pipe.ts","../../core/user/user-details-drawer/user-details-drawer.component.ts","../../core/user/user-details-drawer/user-details-drawer.component.html","../../core/user/user-details-drawer/user-details-drawer.module.ts","../../core/user/user.module.ts","../../core/plugins/plugins.module.ts","../../core/version/version.model.ts","../../core/version/backend-version.factory.ts","../../core/version/version.service.ts","../../core/version/platform-details.service.ts","../../core/version/version-list/version-list.component.ts","../../core/version/version-list/version-list.component.html","../../core/version/version-drawer.factory.ts","../../core/plugins/plugins.model.ts","../../core/plugins/plugins.service.ts","../../core/version/websdk-plugin-version.factory.ts","../../core/version/websdk-version.factory.ts","../../core/version/application-version.factory.ts","../../core/version/version.module.ts","../../core/header/header.module.ts","../../core/properties-list/properties-list.module.ts","../../core/stepper/stepper.module.ts","../../core/setup/setup-completed.component.ts","../../core/setup/setup-completed.component.html","../../core/setup/setup-stepper-factory.ts","../../core/setup/setup.module.ts","../../core/tabs/tab.component.ts","../../core/tabs/conditional-tabs-outlet.component.ts","../../core/tabs/tabs.module.ts","../../core/bootstrap/bootstrap.module.ts","../../core/bottom-drawer/bottom-drawer-ref.ts","../../core/bottom-drawer/bottom-drawer.component.ts","../../core/bottom-drawer/bottom-drawer.component.html","../../core/bottom-drawer/bottom-drawer.service.ts","../../core/navigator/navigator-top/navigator-top.component.ts","../../core/navigator/navigator-top/navigator-top.component.html","../../core/navigator/navigator-top/navigator-top.module.ts","../../core/navigator/navigator-bottom/navigator-bottom.service.ts","../../core/navigator/navigator-bottom/navigator-bottom.component.ts","../../core/navigator/navigator-bottom/navigator-bottom.component.html","../../core/navigator/navigator-bottom/navigator-bottom-drawer.factory.ts","../../core/navigator/navigator-bottom/navigator-bottom.module.ts","../../core/authentication/password-strength-checker.service.ts","../../core/drop-area/drop-area.component.ts","../../core/drop-area/drop-area.component.html","../../core/drop-area/drop-area.module.ts","../../core/file-picker/file-picker.component.ts","../../core/file-picker/file-picker.component.html","../../core/file-picker/file-picker.module.ts","../../core/file-picker-form-control/file-picker-validators.ts","../../core/forms/reactive-validators.ts","../../core/forms/validate-array-elements.ts","../../core/file-picker-form-control/file-picker-form-control.component.ts","../../core/file-picker-form-control/file-picker-form-control.component.html","../../core/file-picker-form-control/file-picker-form-control.module.ts","../../core/date-picker/date-picker.component.ts","../../core/date-picker/date-picker.component.html","../../core/date-picker/date-picker.module.ts","../../core/user/change-current-user-password.service.ts","../../core/router/router.model.ts","../../core/router/router-tabs.resolver.ts","../../core/router/view-context.service.ts","../../core/router/context-route.service.ts","../../core/router/scoped-context-route.service.ts","../../core/router/context-route.component.ts","../../core/router/context-route.component.html","../../core/router/context-route.guard.ts","../../core/router/empty.component.ts","../../core/router/router.service.ts","../../core/router/router.module.ts","../../core/docs/guide-href.directive.ts","../../core/docs/guide-docs.component.ts","../../core/docs/guide-docs.component.html","../../core/docs/help-and-support-outlet/help-and-support-outlet.component.ts","../../core/docs/help-and-support-outlet/help-and-support-outlet.component.html","../../core/docs/support-outlet/support-outlet.component.ts","../../core/docs/support-outlet/support-outlet.component.html","../../core/docs/support-outlet/support-outlet.module.ts","../../core/docs/help-and-support-outlet/help-and-support-outlet.module.ts","../../core/docs/legal-notices-outlet/legal-notices-outlet.component.ts","../../core/docs/legal-notices-outlet/legal-notices-outlet.component.html","../../core/docs/legal-notices-outlet/legal-notices-outlet.module.ts","../../core/docs/docs.module.ts","../../core/date-time-picker/close-date-picker.directive.ts","../../core/date-time-picker/date-time-picker.component.ts","../../core/date-time-picker/date-time-picker.component.html","../../core/time-picker/time-picker.component.ts","../../core/time-picker/time-picker.component.html","../../core/time-picker/time-picker.module.ts","../../core/date-time-picker/date-time-picker.module.ts","../../core/dynamic-forms/addons/addon.extension.ts","../../core/dynamic-forms/addons/addons.component.ts","../../core/dynamic-forms/addons/addons.component.html","../../core/dynamic-forms/array/array-type-inject-template.pipe.ts","../../core/dynamic-forms/array/array.type.component.ts","../../core/dynamic-forms/array/array.type.component.html","../../core/dynamic-forms/checkbox/checkbox.type.component.ts","../../core/dynamic-forms/checkbox/checkbox.type.component.html","../../core/dynamic-forms/date-time/date-time.type.component.ts","../../core/dynamic-forms/date-time/date-time.type.component.html","../../core/dynamic-forms/date/date.type.component.ts","../../core/dynamic-forms/date/date.type.component.html","../../core/dynamic-forms/file/file.type.component.ts","../../core/dynamic-forms/file/file.type.component.html","../../core/dynamic-forms/form-field/form-field.wrapper.component.ts","../../core/dynamic-forms/form-field/form-field.wrapper.component.html","../../core/dynamic-forms/input/input.type.component.ts","../../core/dynamic-forms/input/input.type.component.html","../../core/dynamic-forms/legend-wrapper/legend.wrapper.component.ts","../../core/dynamic-forms/legend-wrapper/legend.wrapper.component.html","../../core/dynamic-forms/object/object.type.component.ts","../../core/dynamic-forms/object/object.type.component.html","../../core/dynamic-forms/radio/radio.type.component.ts","../../core/dynamic-forms/radio/radio.type.component.html","../../core/dynamic-forms/select/select.type.component.ts","../../core/dynamic-forms/select/select.type.component.html","../../core/dynamic-forms/textarea/textarea.type.component.ts","../../core/dynamic-forms/typeahead/typeahead.type.component.ts","../../core/dynamic-forms/typeahead/typeahead.type.component.html","../../core/dynamic-forms/dynamic-forms-ui-theme.module.ts","../../core/dynamic-forms/i18n/translate.extension.ts","../../core/dynamic-forms/i18n/i18n.module.ts","../../core/dynamic-forms/json-schema/c8y-json-schema.service.ts","../../core/dynamic-forms/validation/validation-config.factory.ts","../../core/dynamic-forms/validation/validation.module.ts","../../core/dynamic-forms/dynamic-forms.module.ts","../../core/dynamic-forms/presets.ts","../../core/dynamic-component/dynamic-component.model.ts","../../core/dynamic-component/dynamic-resolver.service.ts","../../core/dynamic-component/dynamic-component.service.ts","../../core/dynamic-component/dynamic-component-alert-aggregator.ts","../../core/dynamic-component/dynamic-component-alerts.component.ts","../../core/dynamic-component/dynamic-component-alerts.component.html","../../core/dynamic-component/dynamic-component.component.ts","../../core/dynamic-component/dynamic-component.component.html","../../core/dynamic-component/dynamic-component.module.ts","../../core/dynamic-component/dynamic-details-resolver.ts","../../core/dynamic-component/abstract-id-resolver.ts","../../core/dynamic-component/managedObject-resolver.ts","../../core/dynamic-component/datapoints-resolver.ts","../../core/dashboard/dashboard-child-action.component.ts","../../core/dashboard/dashboard-child-action.component.html","../../core/dashboard/dashboard-child-title.component.ts","../../core/dashboard/dashboard-child-title.component.html","../../core/dashboard/dashboard-child-change.ts","../../core/dashboard/dashboard.component.ts","../../core/dashboard/dashboard.component.html","../../core/dashboard/dashboard-child.component.ts","../../core/dashboard/dashboard-child.component.html","../../core/aggregation/aggregation.model.ts","../../core/aggregation/aggregation.service.ts","../../core/dashboard/widgets-dashboard-event.service.ts","../../core/dashboard/wiget-time-context/widget-time-context.model.ts","../../core/dashboard/wiget-time-context/widget-time-context-helper.service.ts","../../core/dashboard/wiget-time-context/widget-time-context-query.service.ts","../../core/dashboard/wiget-time-context/realtime-control/realtime-control.component.ts","../../core/dashboard/wiget-time-context/realtime-control/realtime-control.component.html","../../core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.ts","../../core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.html","../../core/dashboard/wiget-time-context/widget-time-context.component.ts","../../core/dashboard/wiget-time-context/widget-time-context.component.html","../../core/dashboard/dashboard.model.ts","../../core/countdown-interval/countdown-interval.component.ts","../../core/countdown-interval/countdown-interval.component.html","../../core/countdown-interval/countdown-interval.module.ts","../../core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.ts","../../core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.ts","../../core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.ts","../../core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.html","../../core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.ts","../../core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.html","../../core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.ts","../../core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.html","../../core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.ts","../../core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.html","../../core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.ts","../../core/dashboard/widgets-dashboard.component.ts","../../core/dashboard/widgets-dashboard.component.html","../../core/help/help.service.ts","../../core/help/help.component.ts","../../core/help/help.component.html","../../core/help/help.module.ts","../../core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.ts","../../core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.html","../../core/dashboard/dashboard.module.ts","../../core/dashboard/wiget-time-context/widget-time-context-mediator.service.ts","../../core/dashboard/wiget-time-context/widget-time-context-date-range.service.ts","../../core/dashboard/widget-action-wrapper.component.ts","../../core/audit-log/audit-log.component.ts","../../core/audit-log/audit-log.component.html","../../core/audit-log/audit-log.module.ts","../../core/data-grid/column/filtering-form-renderer.ts","../../core/data-grid/column/base.filtering-form-renderer.component.ts","../../core/data-grid/column/base.filtering-form-renderer.component.html","../../core/data-grid/column/cell-renderer.ts","../../core/data-grid/column/cell-renderer.component.ts","../../core/data-grid/column/cell-renderer.component.html","../../core/data-grid/column/column.directive.ts","../../core/data-grid/column/filtering-form-renderer.component.ts","../../core/data-grid/column/filtering-form-renderer.component.html","../../core/data-grid/configure-custom-column/configure-custom-column.component.ts","../../core/data-grid/configure-custom-column/configure-custom-column.component.html","../../core/data-grid/action-controls-extension.service.ts","../../core/data-grid/column/base.column.ts","../../core/data-grid/column/custom.column.ts","../../core/data-grid/column/expandable-row-column/expandable.header-cell-renderer.component.ts","../../core/data-grid/column/expandable-row-column/expandable.cell-renderer.component.ts","../../core/data-grid/column/expandable-row-column/expandable.data-grid-column.ts","../../core/data-grid/column/tree-node-column/tree-node.cell-renderer.component.ts","../../core/data-grid/column/tree-node-column/tree-node.header-cell-renderer.component.ts","../../core/data-grid/column/tree-node-column/tree-node.data-grid-column.ts","../../core/asset-property/asset-property.service.ts","../../core/data-grid/configure-custom-column/configure-custom-column.service.ts","../../core/data-grid/data-grid-configuration.model.ts","../../core/data-grid/data-grid.model.ts","../../core/data-grid/data-grid.service.ts","../../core/data-grid/expandable-row.directive.ts","../../core/data-grid/filter-chip/filter-mapper.factory.ts","../../core/data-grid/filter-chip/filter-mapper.service.ts","../../core/data-grid/filter-chip/filter-mapper.pipe.ts","../../core/data-grid/filter-chip/grouped-filter-chips.pipe.ts","../../core/data-grid/grid-data-source.ts","../../core/data-grid/product-experience.constants.ts","../../core/data-grid/visible-controls.pipe.ts","../../core/data-grid/data-grid.component.ts","../../core/data-grid/data-grid.component.html","../../core/data-grid/filter-chip/filter-mapper-impl.service.ts","../../core/data-grid/filter-chip/filter-mapper.module.ts","../../core/data-grid/data-grid.module.ts","../../core/list-display-switch/list-display-switch.component.ts","../../core/list-display-switch/list-display-switch.component.html","../../core/list-display-switch/list-display-switch.module.ts","../../core/range-display/range-display.component.ts","../../core/range-display/range-display.component.html","../../core/range-display/range-display.module.ts","../../core/realtime/realtime-button.component.ts","../../core/realtime/realtime-button.component.html","../../core/realtime/realtime.module.ts","../../core/select-modal/select-modal-filter.pipe.ts","../../core/select-modal/select-modal.model.ts","../../core/select-modal/select-modal.component.ts","../../core/select-modal/select-modal.component.html","../../core/select-modal/select-modal.module.ts","../../core/time-interval/time-interval.model.ts","../../core/time-interval/time-interval.component.ts","../../core/time-interval/time-interval.component.html","../../core/wizard/wizard.model.ts","../../core/wizard/wizard.service.ts","../../core/wizard/wizard-outlet/wizard-outlet.component.ts","../../core/wizard/wizard-outlet/wizard-outlet.component.html","../../core/wizard/wizard.component.ts","../../core/wizard/wizard.component.html","../../core/wizard/wizard-body.component.ts","../../core/wizard/wizard-footer.component.ts","../../core/wizard/wizard-header.component.ts","../../core/wizard/wizard-modal.service.ts","../../core/wizard/wizard.module.ts","../../core/color-input/color-input.component.ts","../../core/color-input/color-input.component.html","../../core/preview-feature/preview-feature.service.ts","../../core/preview-feature/preview-feature.model.ts","../../core/preview-feature/preview-feature-button.component.ts","../../core/preview-feature/preview-feature-button.component.html","../../core/preview-feature/preview-feature-drawer.factory.ts","../../core/preview-feature/preview-feature-show-notification.service.ts","../../core/plugins/plugin-loaded.pipe.ts","../../core/query-param-handler/query-param-handler.service.ts","../../core/query-param-handler/query-param-bottom-drawer.service.ts","../../core/query-param-handler/query-param-modal-handler.service.ts","../../core/query-param-handler/index.ts","../../core/preview-feature/feature-state.pipe.ts","../../core/feedback-form/feedback-form.model.ts","../../core/feedback-form/feedback-form.component.ts","../../core/feedback-form/feedback-form.component.html","../../core/preview-feature/preview-feature.component.ts","../../core/preview-feature/preview-feature.component.html","../../core/preview-feature/preview-feature-query-param.factory.ts","../../core/preview-feature/preview-feature.providers.ts","../../core/change-icon/change-icon.component.ts","../../core/core.module.ts","../../core/quicklink/quick-link.component.ts","../../core/quicklink/quick-link.component.html","../../core/quicklink/quick-link.module.ts","../../core/provider-configuration/provider-configuration-hook.ts","../../core/provider-configuration/provider-configuration-node.factory.ts","../../core/provider-configuration/service/provider-configuration.service.ts","../../core/provider-configuration/service/provider-definitions.service.ts","../../core/provider-configuration/provider-configuration.component.ts","../../core/provider-configuration/provider-configuration.component.html","../../core/provider-configuration/provider-configuration-route.factory.ts","../../core/provider-configuration/provider-configuration-tab.factory.ts","../../core/provider-configuration/provider-configuration.module.ts","../../core/data-grid/abstract-configuration-strategy.ts","../../core/data-grid/legacy-grid-config-mapper.service.ts","../../core/data-grid/user-preferences-configuration-strategy.service.ts","../../core/realtime/alarm-realtime.service.ts","../../core/realtime/alarm-with-children-realtime.service.ts","../../core/realtime/event-realtime.service.ts","../../core/realtime/measurement-realtime.service.ts","../../core/realtime/operation-bulk-realtime.service.ts","../../core/realtime/operation-realtime.service.ts","../../core/realtime/device-bootstrap-realtime.service.ts","../../core/realtime/realtime.model.ts","../../core/resizable-grid/resizable-grid.component.ts","../../core/resizable-grid/resizable-grid.component.html","../../core/asset-types/asset-types.service.ts","../../core/color-input/color-validator.ts","../../core/split-view/split-view-details-actions.component.ts","../../core/split-view/split-view-details-actions.component.html","../../core/split-view/split-view-extra-header.component.ts","../../core/split-view/split-view-footer.component.ts","../../core/split-view/split-view-footer.component.html","../../core/split-view/split-view-selection.service.ts","../../core/split-view/split-view-details.component.ts","../../core/split-view/split-view-details.component.html","../../core/split-view/split-view.component.ts","../../core/split-view/split-view.component.html","../../core/split-view/split-view-alerts.component.ts","../../core/split-view/split-view-list.component.ts","../../core/split-view/split-view-list.component.html","../../core/split-view/split-view-header-actions.component.ts","../../core/split-view/split-view-header-actions.component.html","../../core/split-view/split-view-list-item.directive.ts","../../index.ts","../../c8y-ngx-components.ts"],"sourcesContent":["import { Directive, Renderer2, Input, ElementRef } from '@angular/core';\nimport type { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * Allows to set a icon. Switches between c8y default icons\n * and font awesome icons.\n * ```html\n * <i [c8yIcon]=\"'clock'\">\n * ```\n */\n@Directive({\n  selector: '[c8yIcon]',\n  standalone: true\n})\nexport class IconDirective {\n  /**\n   * Sets the icon to be displayed. This directive handles the correct CSS classes\n   * for Cumulocity IoT's dual-color icon sets.\n   *\n   * There are two main icon sets:\n   * 1. **Cumulocity Icons**: These are specific to the platform. To use them, provide the icon name prefixed with **c8y-**.\n   * 2. **Delight Icons**: This is the default icon set. To use them, provide just the icon name without any prefix.\n   *\n   * ```html\n   * <!-- To display a Cumulocity IoT icon (e.g., cockpit) -->\n   * <i [c8yIcon]=\"'c8y-cockpit'\"></i>\n   *\n   * <!-- To display a default Delight icon (e.g., download) -->\n   * <i [c8yIcon]=\"'download'\"></i>\n   *\n   * <!-- You can also use it without property binding for static icons -->\n   * <i c8yIcon=\"building\"></i>\n   * ```\n   */\n  @Input()\n  set c8yIcon(icon: SupportedIconsSuggestions | { class: string }) {\n    this.updateIcon(icon);\n  }\n  private c8yMatch = /^c8y-/;\n  private dltC8yMatch = /^dlt-c8y-/;\n  private currentClasses = '';\n\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2\n  ) {}\n\n  private isC8y(icon: string): boolean {\n    return this.c8yMatch.test(icon);\n  }\n\n  private isDltC8y(icon: string): boolean {\n    return this.dltC8yMatch.test(icon);\n  }\n\n  private getClasses(icon: SupportedIconsSuggestions | { class: string }): string {\n    let classes = '';\n    if (typeof icon === 'object' && icon?.class) {\n      icon.class = this.mapFontAwesomeToDelightIcons(icon.class);\n      classes = `${\n        this.isC8y(icon.class)\n          ? `${icon.class.replace(this.c8yMatch, 'c8y-icon c8y-icon-')}`\n          : this.isDltC8y(icon.class)\n            ? ''\n            : `c8y-icon dlt-c8y-icon-${icon.class}`\n      } c8y-icon-duocolor`;\n      return classes;\n    }\n    if (icon && typeof icon === 'string') {\n      const _icon = icon.trim();\n      const isC8y = this.isC8y(_icon);\n      const iconClass = isC8y\n        ? _icon.replace(this.c8yMatch, 'c8y-icon-')\n        : `c8y-icon dlt-c8y-icon-${_icon}`;\n      classes = `${isC8y ? 'c8y-icon' : ''} ${iconClass}`;\n    }\n    return classes;\n  }\n\n  private updateIcon(icon: SupportedIconsSuggestions | { class: string }): void {\n    const newClasses = this.getClasses(icon);\n    if (newClasses !== this.currentClasses) {\n      this.currentClasses\n        .split(/\\s/)\n        .filter(c => c)\n        .forEach(klass => {\n          this.renderer.removeClass(this.el.nativeElement, klass);\n        });\n      newClasses\n        .split(/\\s/)\n        .filter(c => c)\n        .forEach(klass => {\n          this.renderer.addClass(this.el.nativeElement, klass);\n        });\n      this.currentClasses = newClasses;\n    }\n  }\n\n  private mapFontAwesomeToDelightIcons(iconClasses: string): string {\n    if (!iconClasses) {\n      return;\n    }\n    const regex = /fa-/gi;\n    return iconClasses.replace(regex, 'dlt-c8y-icon-');\n  }\n}\n","import { IApplication, VersioningMatrix } from '@c8y/client';\nimport type {\n  ApplicationOptions as AppOptions,\n  BrandingCssVars,\n  Languages,\n  I18nExtra,\n  Docs,\n  Icon,\n  LoginExtraLink,\n  CookieBannerConfiguration,\n  CookiePreferencesConfiguration,\n  RemotePlugins,\n  MapTileLayer,\n  MapDefaultConfig,\n  PluginsExports,\n  MessageBannerConfiguration\n} from '@c8y/options';\n\n/*\n * -----------------------------WARNING---------------------------------\n * This file implements all properties of the origin AppOptions\n * **NEVER** change this file directly. Instead do:\n * 1. open packages/options/src/ApplicationOptions.ts and add your property there\n * 2. check in this file if all options are implemented.\n *\n * TODO: This file should throw when a property is in the AppOptions but not implemented here.\n *       This seems not to work atm. We need to check why.\n */\nexport class ApplicationOptions implements AppOptions {\n  /** Application name (saved to the server). */\n  name: string;\n  /** Application context path (saved to the server). */\n  contextPath: string;\n  /** Application key (saved to the server). */\n  key: string;\n  /** The version of the application */\n  version: string;\n  /** The version of the used WebSDK version */\n  webSdkVersion?: string;\n  /** Set to `true` if the application is hybrid and uses Angular and AngularJS simultaneously. */\n  upgrade?: boolean;\n  /**\n   * Path to the branding entry file. (Set it to false to disable any styling. You can handle the styling then on your own e.g. in an angular.json file using ng-cli)\n   * @deprecated Add your global styles via the angular.json file.\n   */\n  brandingEntry?: false;\n  /**\n   * Enables all preview features in the application UI.\n   *\n   * Note: This only affects features on the frontend.\n   * If a preview feature also requires backend support it must be enabled separately on the backend.\n   */\n  enableAllPreviewFeatures?: boolean;\n  /**\n   * Hides the feature preview section in the right drawer.\n   */\n  hidePreviewFeature?: boolean;\n  /** Path to tsccnfig.json file if TypeScript is used (default: ./tsconfig.json). */\n  tsConfigPath?: string;\n  /** Entry module for Angular compiler (only used with lazy loaded routes), e.g. `'app.module.ts#AppModule'`. */\n  entryModule?: string;\n  /** Path to custom index.html (otherwise default one will be used). */\n  indexTemplate?: string;\n  /**\n   * URL to dynamically fetched options.\n   * If set to `true` or left undefined, an URL will be used based on the applications contextPath.\n   * If set to `false`, no dynamic options will be fetched.\n   * */\n  dynamicOptionsUrl?: string | boolean;\n  /** URL to favicon. Will be ignored for security reasons if provided as a URL query parameter. */\n  faviconUrl?: string;\n  /** URL to `*.css` file which will replace default branding. Will be ignored for security reasons if provided as a URL query parameter. */\n  brandingUrl?: string;\n  /** Enables the branding preview mode. If set to true, the `dynamicOptionsUrl` will be polled regularly for changes. In case the `lastUpdated` field of the dynamic options changes, the page is reloaded in order to apply the new branding. */\n  brandingPreview?: boolean;\n  /** Object with properties that will be converted to CSS custom variables. Will be ignored for security reasons if provided as a URL query parameter. */\n  brandingCssVars?: BrandingCssVars;\n  /**\n   * Allows for adding or overriding languages available in the application.\n   *\n   * Its keys are language codes and its values are objects with the following properties:\n   *\n   * - **name:** English name of the language,\n   * - **nativeName:** native name of the language,\n   * - **url:** full URL to JSON file with compiled translations;\n   *    if not defined, translations will be loaded from `${localePath}/${langCode}.json.\n   *\n   * ```json\n   * \"languages\": {\n   *   \"de\": {\n   *     \"name\": \"German\",\n   *     \"nativeName\": \"Deutsch\",\n   *     \"url\": \"/apps/public/ui-assets/de.json\"\n   *   }\n   * }\n   * ```\n   */\n  languages?: Languages;\n  /**\n   * Allows to add custom translations. It is an optional property.\n   *\n   * Its keys are language codes (https://cumulocity.com/guides/users-guide/getting-started/#a-name-languages-a-available-languages)\n   * and its values are objects with key-value pairs, where the key is the original string in English and the value - its translation.\n   *\n   * - **Home:** \"Startseite\"`\n   *\n   * For example you can add the translation of your custom cookie banner configured in the branding settings:\n   * ```json\n   * \"i18nExtra\": {\n   *   \"de\": {\n   *     \"About cookies on Cumulocity IoT\": \"Informationen zu Cookies in Cumulocity IoT\",\n   *     \"Click Agree and Proceed to accept cookies and go directly to the platform or click on Privacy Policy to see detailed descriptions of the used cookies.\": \"Klicken Sie auf Zustimmen und fortfahren, um Cookies zu akzeptieren und direkt zur Plattform zu gelangen, oder klicken Sie auf Datenschutzrichtlinie, um detaillierte Beschreibungen der verwendeten Cookies anzuzeigen.\"\n   *   }\n   * }\n   * ```\n   */\n  i18nExtra?: I18nExtra;\n  /** Path to the folder from which *.po files will be loaded. */\n  localePath?: string;\n  /** Array of URLs to additional `*.css` files to be loaded at runtime. Will be ignored for security reasons if provided as a URL query parameter. */\n  extraCssUrls?: string[];\n  /** Stylesheet (CSS) that will be added at runtime. The string should actually contain the CSS not a path or URL to it. Will be ignored for security reasons if provided as a URL query parameter. */\n  extraCss?: string;\n  /** Documentation links settings. */\n  docs?: Docs;\n  /** Application icon to be displayed in app switcher and header bar. */\n  icon?: Icon;\n\n  // These are the old options\n  /** Hide application in app switcher (saved to the server). */\n  noAppSwitcher?: boolean;\n  /** HTML page title. */\n  globalTitle?: string;\n  /** Hide \"powered by\" and version info at the bottom of the navigator and in the right drawer. */\n  hidePowered?: boolean;\n  /** Hides the header bar */\n  hideHeader?: boolean;\n  /** Hides the \"Platform information\" in the right drawer, will overrule the \"hidePowered\" option */\n  hidePlatformInformation?: boolean;\n  /** URL to support page (set to `false` to hide the link). */\n  supportUrl?: boolean | string;\n  /**\n   * Replacement string for `user` field in audit logs for actions performed by a support user\n   * (available placeholders: `{{support_user}}`, `{{supported_user}}`).\n   */\n  supportUserString?: string;\n  /**\n   * Disables realtime updates on the map widget and maps in general.\n   */\n  mapWidgetRealtimeDisabled?: boolean;\n  /**\n   * Allows to adjust the default pagesize of 100 items of the map widget and maps in general.\n   */\n  mapWidgetPageSize?: number;\n  /**\n   * Allows to hide the hint that there are more devices with geo coordinates then displayed on the map widget and maps in general.\n   */\n  mapWidgetHideMaxDeviceOnMapHint?: boolean;\n  /** Enable or disable the right drawer. */\n  rightDrawer?: boolean;\n  /** Enable or disable breadcrumbs in the header for groups and devices (default: false). */\n  breadcrumbs?: boolean;\n  /** Collapse navigator on initial load. */\n  hideNavigator?: boolean;\n  /** Show tabs horizontally or vertically. */\n  tabsHorizontal?: boolean;\n  /** Additional link(s) to display on login screen. */\n  loginExtraLink?: LoginExtraLink | LoginExtraLink[];\n  /** Enable or disable storage limitation feature. */\n  storageLimitationFeatureEnabled?: boolean;\n  /** Name of company handling support requests from app users (displayed in notification message). */\n  companyName?: string;\n  /** URL template for documentation links (default: `'${docsBaseUrl}${partialUrl}'`). */\n  guideHrefTemplate?: string;\n  /** Base URL for documentation links (include `{{ version }}` placeholder, if you want versioned links). */\n  docsBaseUrl?: string;\n  /** CSP string to be applied to `index.html` by replacing default values. */\n  contentSecurityPolicy?: string;\n  /** Enables cloud sensor wizard */\n  sensorPhone?: boolean;\n  /** Show or hide a newsletter subscription checkbox in edit user modal. */\n  newsletter?: boolean;\n  /** Path to the root node_modules dir (useful when working in monorepo setup, e.g. yarn workspaces). */\n  rootNodeModulesPath?: string;\n  /** Cookie Banner configuration */\n  cookieBanner?: CookieBannerConfiguration;\n  /** Cookie preferences configuration. Here you can enable or disable cookie categories */\n  cookiePreferences?: CookiePreferencesConfiguration;\n  /** Message Banner configuration */\n  messageBanner?: MessageBannerConfiguration;\n  /** A key for the product experience software Gainsight. */\n  gainsightKey?: string;\n  /** Disable user tracking */\n  disableTracking?: boolean;\n  /** NgModule export for plugins. */\n  exports?: PluginsExports[];\n  /** List of imported remote plugins. */\n  remotes?: RemotePlugins;\n  /** If set to true, only remotes defined in the `remotes` query parameter will be loaded. */\n  forceUrlRemotes?: boolean;\n  /**\n   * Defines if the application is a package. Packages can be distributed as blueprint or allow plugins.\n   */\n  isPackage?: boolean;\n  /**\n   * Defines what is contained in the package.\n   */\n  package?: 'plugin' | 'blueprint';\n  /**\n   * Allows to override the attributes of the deployed bluprint application in order to have better user readable ones.\n   */\n  blueprintDeploymentOptions?: {\n    name?: string;\n    contextPath?: string;\n    key?: string;\n  };\n  /** The package source a application origins from as IApplication or simply the id of the source */\n  source?: string | number | IApplication;\n  /**\n   * Additional assets to copy to the build output.\n   * See https://github.com/webpack-contrib/copy-webpack-plugin for more information\n   * about the patterns to add here.\n   */\n  copy?: [];\n  /**\n   * Allows to enable or disable context help, or to override the default base URL used to load its contents.\n   * By default, the context help uses the same base URL as defined in the `docsBaseUrl` option\n   * (if this option is undefined, then the following value will be used: `https://cumulocity.com/guides/{{version}}`).\n   * Alternatively, if a string is provided here, it'll be used as the base URL\n   * and any `{{ version }}` placeholder will be replaced with the relevant docs version.\n   */\n  contextHelp?: boolean | string;\n  /**\n   * By default, cockpit and devicemanagement use the onlyRoots query to resolve root nodes. This\n   * could lead to performance issues, if a customer has a lot of root nodes. Therefore you can disable\n   * the use of this query with this flag.\n   */\n  disableOnlyRootsQuery?: boolean;\n  /**\n   * Allows to force showing the setup wizard.\n   */\n  forceSetup?: boolean;\n  /**\n   * Indicates if the application needs to show the setup wizard.\n   */\n  isSetup?: boolean;\n  /**\n   * By default a WebSDK app requires the user to be logged in.\n   * In case you would like to develop just a static application, that does not require any kind of access to the backend,\n   * you can use this flag to disable the login screen.\n   * NOTE: not all WebSDK components support this, some might require the user to be logged in and won't work.\n   */\n  noLogin?: boolean;\n  /**\n   * Allows to opt out of supporting/loading plugins for this application.\n   */\n  noPlugins?: boolean;\n  /**\n   * Allows to opt out of the version warning which is shown in the dev tools.\n   */\n  noVersionWarning?: boolean;\n  /**\n   * Allows to set the map layers. If not set, defaults to open street map layer.\n   */\n  mapLayers?: MapTileLayer[];\n  /**\n   * Allows to set default configurations on the maps.\n   */\n  mapConfig?: MapDefaultConfig;\n  /**\n   * The URL used to lookup geo coordinates for a user provided address via [nominatim API](https://nominatim.org/release-docs/develop/api/Search/).\n   * Can be set to empty to disable the find address feature on the location tab.\n   * Uses: `https://nominatim.openstreetmap.org/search?format=json&q={searchTerm}` if not set.\n   */\n  mapNominatimUrl?: string;\n  /**\n   * The name of the root element. By default c8y-bootstrap.\n   */\n  rootTagName?: string;\n  /**\n   * Hides possibility to create typed dashboards for assets (and groups). If true, typed dashboards can be created only for devices.\n   * It is true by default.\n   */\n  hideTypeDashboardForAssets?: boolean;\n  /**\n   * A matrix of versions indicating which versions of the application (key) are dependent on which version of a cumulocity component (API version and Web SDK version of the shell application currently supported, indicated by the value).\n   * The versions of the dependent components can be indicated by a semver range.\n   * ```json\n   * {\n   *  \"1.0.0\": {\n   *    \"sdk\": \">=1016.0.0 <1017.0.0\",\n   *    \"api\": \">=1016.0.0 <1017.0.0\"\n   *  },\n   *  \"2.0.0\": {\n   *    \"sdk\": \"~1017.0.0\",\n   *    \"api\": \"~1017.0.0\"\n   *  },\n   *  \"3.0.0\": {\n   *    \"sdk\": \">=1018.0.0\",\n   *    \"api\": \">=1018.0.0\"\n   *  },\n   * }\n   * ```\n   */\n  versioningMatrix?: VersioningMatrix;\n  /**\n   * Is used for plugins to indicate their owner. Cumulocity plugins are marked with OFFICIAL label.\n   * You can use the special \"ARCHIVED\" label to mark them as archived.\n   */\n  label?: string;\n  /**\n   * Defines the type of refresh mechanism used for alarms in the application.\n   *\n   * - **realtime:** Utilizes a realtime mechanism for updating alarms.\n   * - **interval:** Utilizes HTTP polling at regular intervals to refresh the alarms.\n   *\n   * This setting allows to switch between realtime and interval-based refresh methods.\n   */\n  alarmsRefreshType?: 'interval' | 'realtime';\n  /**\n   * A map of import paths to their corresponding URLs.\n   * This is used to resolve module paths when loading remote modules\n   * (e.g. in the HTML-Widget). The keys are the import paths and the values are the URLs.\n   *\n   * You can also add a js file but need to copy it. Or you can add a node module name but\n   * this need to have a single entry point. Otherwise you need to copy the files. A url can also\n   * be used but you need to ensure that the CSP rules are not blocking the loading of the file.\n   *\n   * ```\n   * {\n   *  'my-widget': 'https://example.com/path/to/widget.js',\n   *  'node-module': '@scope/my-node-module',\n   *  'local-js': './my-local-file.js'\n   * }\n   * ```\n   */\n  importMap?: {\n    [key: string]: string;\n  };\n  /**\n   * Defines to which path the user will be redirected in case he is not logged in yet.\n   *\n   * This needs to be used for e.g. people who embed the application in an iframe in order to redirect to a none index.html file.\n   */\n  loginRedirectPath?: string;\n  /**\n   * Allows to skip the Single Sign-On (SSO) redirect during the login process.\n   *\n   * Can be used to avoid the redirect to the Identity Provider, when you still want to use the built-in login instead.\n   * This is needed in scenarios like e.g. support user access.\n   */\n  skipSSORedirect?: boolean;\n  /**\n   * Represents a list of AI Agents defined for the application.\n   * These agents can be utilized for various AI-driven functionalities within the application.\n   *\n   * The Agent are stored as JSON in files generated during the build process ending with `agent.c8y.ts`. Usually\n   * this option does not need to be aligned manual.\n   */\n  agents?: { [name: string]: string };\n}\n\n/**\n * Tells how a plugin is scoped.\n */\nexport enum PluginsExportScopes {\n  /**\n   * Limit the plugin to the current application. It is imported by default.\n   */\n  SELF = 'self',\n  /**\n   * Allows to add the plugin to a global scope, meaning it is imported to all applications at the same time.\n   * This is not used at the moment but planned to be implemented in the new branding editor.\n   */\n  GLOBAL = 'global',\n  /**\n   * Limit the plugin to the current application. The plugin is not imported by default.\n   */\n  SELF_OPTIONAL = 'self-optional',\n  /**\n   * Like undefined the plugin is available for any private application.\n   */\n  DEFAULT = ''\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ColorRangeBoundaries } from './datapoints-utils.model';\n\n/**\n * Applies CSS classes based on the value's range.\n */\n@Pipe({\n  name: 'applyRangeClass',\n  standalone: true\n})\nexport class ApplyRangeClassPipe implements PipeTransform {\n  /**\n   * Transforms the input value based on the specified ranges.\n   *\n   * @param value - Initial value used to determine the CSS class.\n   * @param ranges - An object containing the min and max range values for yellow and red colors.\n   * @returns The CSS class to be applied.\n   */\n  transform(\n    value: number,\n    ranges: ColorRangeBoundaries\n  ): null | 'text-warning' | 'text-danger' | 'default' {\n    if (value == null) {\n      return;\n    }\n\n    if (value >= ranges.yellowRangeMin && value < ranges.yellowRangeMax) {\n      return 'text-warning';\n    } else if (value >= ranges.redRangeMin && value <= ranges.redRangeMax) {\n      return 'text-danger';\n    }\n    return 'default';\n  }\n}\n","export enum GroupFragment {\n  groupType = 'c8y_DeviceGroup',\n  subGroupType = 'c8y_DeviceSubgroup',\n  groupFragmentType = 'c8y_IsDeviceGroup',\n  dataBrokerSourceFragment = 'c8y_BrokerSource',\n  dynamicGroupType = 'c8y_DynamicGroup',\n  dynamicGroupFragment = 'c8y_IsDynamicGroup',\n  dynamicGroupColumnConfig = 'c8y_UIDeviceFilterConfig',\n  dynamicGroupQueryString = 'c8y_DeviceQueryString'\n}\n","import { Observable, BehaviorSubject } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\n/**\n * A abstract state which should be included in each state.\n * @abstract\n */\nexport abstract class StateService {\n  /**\n   * Saves the state. Should not be accessible directly. Use map or the getter to access\n   * the state. Use functions in the implementation to change the state.\n   */\n  protected abstract state$: BehaviorSubject<any> | any;\n\n  /**\n   * Should return the current state of this StateService\n   */\n  abstract get state();\n\n  /**\n   * Maps to a property and just returns that property.\n   * @param mappedProperty The property to map to.\n   */\n  map(mappedProperty: (stateProperty) => any): Observable<any> {\n    return this.state$.pipe(map(mappedProperty), distinctUntilChanged());\n  }\n\n  /**\n   * Emits a new state.\n   */\n  protected emitNewState() {\n    this.state$.next(this.state);\n  }\n}\n","import {\n  ClassProvider,\n  createEnvironmentInjector,\n  ExistingProvider,\n  InjectionToken,\n  Injector,\n  Type,\n  ValueProvider\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, Route, Router } from '@angular/router';\nimport { castArray, flatten, groupBy, sortBy, uniq } from 'lodash-es';\nimport {\n  BehaviorSubject,\n  combineLatest,\n  defer,\n  from,\n  isObservable,\n  merge,\n  Observable,\n  of,\n  race,\n  Subject\n} from 'rxjs';\nimport { filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { StateService } from './state-service.abstract';\n\nexport function fromTrigger<T>(\n  router: Router,\n  refresh: Observable<any> | Observable<any>[],\n  factories: Array<\n    | T\n    | T[]\n    | ExtensionFactory<T>\n    | ExtensionFactory<T>[]\n    | (() => T | ExtensionFactory<T> | Array<T | ExtensionFactory<T>>)\n  >\n): Observable<T[]> {\n  return merge(\n    router.events.pipe(filter(evt => evt instanceof NavigationEnd)),\n    ...castArray(refresh)\n  ).pipe(\n    startWith(1),\n    switchMap(() => fromFactories<T>(factories, router))\n  );\n}\n\nexport function fromTriggerOnce<T>(\n  router: Router,\n  refresh: Observable<any> | Observable<any>[],\n  factories: Array<\n    | T\n    | T[]\n    | ExtensionFactory<T>\n    | ExtensionFactory<T>[]\n    | (() => T | ExtensionFactory<T> | Array<T | ExtensionFactory<T>>)\n  >,\n  withFirstEmpty = true\n): Observable<T[]> {\n  return merge(...castArray(refresh)).pipe(\n    startWith(1),\n    switchMap(() => fromFactories<T>(factories, router, withFirstEmpty))\n  );\n}\n\nexport enum InjectionType {\n  COMPONENT,\n  ROUTE\n}\n\nexport function getInjectedHooks<T>(\n  token: InjectionToken<T[]>,\n  injectors: Injector[],\n  type = InjectionType.COMPONENT\n): () => T[] {\n  return () =>\n    flatten(\n      injectors.map(injector => {\n        const factoryOrFactories = injector.get<T | T[]>(token, [], { self: true });\n        const factories: T[] = Array.isArray(factoryOrFactories)\n          ? flatten(factoryOrFactories)\n          : [factoryOrFactories];\n        if ((injector as any).scopes?.has('root')) {\n          return factories;\n        }\n\n        factories.forEach((factory: T | ExtensionFactory<T>) => {\n          if (!(factory as ExtensionFactory<T>).get && (factory as any).injector !== null) {\n            if (type === InjectionType.ROUTE) {\n              const route = factory as Route;\n              if (!(route as any)._injector) {\n                const envInjector = createEnvironmentInjector(\n                  route.providers || [],\n                  injector as any,\n                  `Route: ${route.path}`\n                );\n                (factory as any)._injector = envInjector;\n              }\n            } else {\n              (factory as any).injector = injector;\n            }\n          }\n        });\n        return factories;\n      })\n    );\n}\n\nexport function fromFactories<T>(\n  factories?: Array<\n    | T\n    | T[]\n    | ExtensionFactory<T>\n    | ExtensionFactory<T>[]\n    | (() => T | ExtensionFactory<T> | Array<T | ExtensionFactory<T>>)\n  >,\n  router?: Router,\n  withFirstEmpty = true\n): Observable<T[]> {\n  return !Array.isArray(factories) || factories.length < 1\n    ? of([])\n    : defer(() => {\n        const factoryObservables: Observable<T[]>[] = resolveInjectedFactories(factories).map(f => {\n          if (Array.isArray(f)) {\n            return toObservableOfArrays(f, withFirstEmpty);\n          }\n          if (isExtensionFactory(f)) {\n            return toObservableOfArrays(f.get(getActivatedRoute(router)), withFirstEmpty);\n          }\n\n          return toObservableOfArrays([f], withFirstEmpty);\n        });\n        return combineLatest(factoryObservables);\n      }).pipe(\n        map(results => sortByPriority([].concat(...results))),\n        map(value => uniq(value))\n      );\n}\n\nexport function resolveInjectedFactories<T>(\n  factories: Array<\n    | T\n    | T[]\n    | ExtensionFactory<T>\n    | ExtensionFactory<T>[]\n    | (() => T | ExtensionFactory<T> | Array<T | ExtensionFactory<T>>)\n  >\n): Array<T | T[] | ExtensionFactory<T>> {\n  return flatten(\n    factories.map(f => {\n      if (typeof f === 'function') {\n        const func = f as () => T | T[] | ExtensionFactory<T>;\n        return func();\n      }\n      return [f];\n    })\n  );\n}\n\nexport function stateToFactory<T>(componentsState): ExtensionFactory<T> {\n  const components$ = componentsState.pipe(map((componentSet: Set<T>) => [...componentSet]));\n  return { get: () => components$ };\n}\n\nexport function sortByPriority<T>(items: T[]): T[] {\n  return sortBy(items, item => -(item?.priority || 0));\n}\n\nexport function removeDuplicatesIds<T extends { id?: string; priority?: number }>(items: T[]): T[] {\n  const grouped: { [key: string]: T[] } = groupBy(items, 'id');\n  const itemsWithoutDuplicates = new Array<T>();\n  for (const key of Object.keys(grouped)) {\n    if (key && key !== 'undefined') {\n      const sortedByPrio = sortByPriority(grouped[key]);\n      itemsWithoutDuplicates.push(sortedByPrio[0]);\n    } else {\n      itemsWithoutDuplicates.push(...grouped[key]);\n    }\n  }\n  return sortByPriority(itemsWithoutDuplicates);\n}\n\nexport function toObservableOfArrays<T>(\n  factoryResult: T | T[] | Promise<T | T[]> | Observable<T | T[]>,\n  withFirstEmpty: boolean\n): Observable<T[]> {\n  let observable: Observable<T | T[]>;\n  if (!factoryResult) {\n    return of([]);\n  } else {\n    observable = toObservable(factoryResult);\n    if (withFirstEmpty) {\n      const withEmptyFirst = observable.pipe(startWith([]));\n      observable = race(observable, withEmptyFirst);\n    }\n  }\n  return observable.pipe(\n    map(result => (Array.isArray(result) ? result : [result]).filter(item => !!item))\n  );\n}\n\nexport function isPromise<T = any>(obj: any): obj is Promise<T> {\n  return !!obj && typeof obj.then === 'function';\n}\n\nexport function isExtensionFactory<T = any>(obj: any): obj is ExtensionFactory<T> {\n  return !!obj && typeof obj.get === 'function';\n}\n\n/**\n * Converts any value provided to an Observable that emits this value once and then completes.\n * A convenience method to represent all the data as Observables rather than\n * a mixture of Observables and other types.\n *\n * @param value The value the resulting Observable will emit.\n */\nexport function toObservable<T>(value: T | Promise<T> | Observable<T>): Observable<T> {\n  if (isObservable(value)) {\n    return value;\n  }\n\n  if (isPromise(value)) {\n    return from(value as Promise<T>);\n  }\n\n  return of(value as T);\n}\n\n/**\n * Allows to extend the existing applications from a module.\n */\nexport interface ExtensionFactory<T> {\n  /**\n   * Allows to resolve the data of an extension point.\n   * The return value can be a Promise or Observable\n   * (allowing for asynchronous data resolution).\n   *\n   * @param activatedRoute The current activated route (if possible to resolve).\n   */\n  get(activatedRoute?: ActivatedRoute): Observable<T[] | T> | Promise<T[] | T> | T[] | T;\n}\n\n/**\n * Extension points allow to extend the application from\n * any module\n */\nexport interface ExtensionPoint<T> {\n  /**\n   * Observable that emits of array of extensions active at any give time\n   */\n  readonly items$: Observable<T[]>;\n  /**\n   * Additional factories that can be added dynamically. (without hook)\n   */\n  factories: ExtensionFactory<T>[];\n  /**\n   * Call the extension factories to refresh them.\n   */\n  refresh();\n}\n\nexport abstract class ExtensionPointWithoutStateForPlugins<T> implements ExtensionPoint<T> {\n  items$: Observable<T[]>;\n  factories: ExtensionFactory<T>[] = [];\n  readonly refresh$: Observable<void>;\n  /**\n   * All injectors to search for an extension.\n   */\n  protected injectors: Injector[];\n  private readonly refreshTrigger = new Subject<void>();\n\n  constructor(rootInjector: Injector, pluginService: PluginsResolveService) {\n    this.injectors = [rootInjector];\n    pluginService.injectors$.subscribe(injector => {\n      this.injectors.push(injector);\n    });\n    this.refresh$ = merge(this.refreshTrigger, pluginService.refresh$);\n  }\n\n  /**\n   * Refresh the extension factories\n   */\n  refresh(): void {\n    this.refreshTrigger.next();\n  }\n\n  /**\n   * Should be called within the constructor of the extending class and set the items$ attribute.\n   */\n  protected abstract setupItemsObservable(): Observable<T[]>;\n}\n\nexport abstract class ExtensionPointForPlugins<T>\n  extends StateService\n  implements ExtensionPoint<T>\n{\n  items$: Observable<T[]>;\n  factories: ExtensionFactory<T>[] = [];\n  readonly refresh$: Observable<void>;\n  readonly state$ = new BehaviorSubject<Set<T>>(new Set<T>());\n  /**\n   * All injectors to search for an extension.\n   */\n  protected injectors: Injector[];\n  private readonly refreshTrigger = new Subject<void>();\n\n  constructor(rootInjector: Injector, pluginService: PluginsResolveService) {\n    super();\n    this.injectors = [rootInjector];\n    pluginService.injectors$.subscribe(injector => {\n      this.injectors.push(injector);\n    });\n    this.refresh$ = merge(this.refreshTrigger, pluginService.refresh$);\n  }\n\n  /**\n   * Refresh the extension factories\n   */\n  refresh(): void {\n    this.refreshTrigger.next();\n  }\n\n  /**\n   * Should be called within the constructor of the extending class and set the items$ attribute.\n   */\n  protected abstract setupItemsObservable(): Observable<T[]>;\n}\n\n/**\n * Helper function to get the activated route in\n * a service (as ActivatedRoute injection only\n * works in components). Works as long as we only use\n * a tree and no child is active at the same time.\n *\n * @param router The current router\n */\nexport function getActivatedRoute(router: Router): ActivatedRoute {\n  if (router && router.routerState && router.routerState.root) {\n    let route = router.routerState.root;\n    while (route.firstChild) {\n      route = route.firstChild;\n    }\n    return route;\n  }\n}\n\nexport type GenericHookType<T> = T | T[] | Type<ExtensionFactory<T>>;\nexport type HookValueType<T> = T | T[] | Type<T>;\n\n/**\n * A generic function to be used by specific implementations of the HOOK concept.\n * @param items The items that should be provided under the `useValue` or `useClass` attribute.\n * Allows an extension factory to be passed as an argument, which can create instances of type T.\n * @param token The InjectionToken/HOOK to be provided.\n * @param options If this is a multi provider or not (defaults to true) and provider type definition (defaults to ClassProvider) - `HookOptions`.\n * @returns A `Provider` (either `ValueProvider` or `ClassProvider`) to be provided in a module.\n */\nexport function hookGeneric<T>(\n  items: GenericHookType<T> | HookValueType<T>,\n  token: InjectionToken<T>,\n  options?: Partial<GenericHookOptions>\n): ValueProvider | ClassProvider | ExistingProvider {\n  const finalOptions: GenericHookOptions = Object.assign(\n    { multi: true, providerType: HookProviderTypes.ClassProvider },\n    options\n  );\n  const { multi, providerType } = finalOptions;\n  if (typeof items !== 'function') {\n    return {\n      provide: token,\n      useValue: items,\n      multi\n    } as ValueProvider;\n  }\n\n  if (providerType === HookProviderTypes.ExistingProvider) {\n    return {\n      provide: token,\n      useExisting: items,\n      multi\n    } as ExistingProvider;\n  }\n\n  return {\n    provide: token,\n    useClass: items,\n    multi\n  } as ClassProvider;\n}\nexport interface GenericHookOptions {\n  multi: boolean;\n  providerType: HookProviderTypes;\n}\n\nexport enum HookProviderTypes {\n  ExistingProvider = 'ExistingProvider',\n  ClassProvider = 'ClassProvider'\n}\n\nexport function allEntriesAreEqual(previous: Array<unknown>, next: Array<unknown>): boolean {\n  if (previous === next) return true;\n  if (previous == null || next == null) return false;\n  if (previous.length !== next.length) return false;\n\n  for (let i = 0; i < previous.length; ++i) {\n    if (previous[i] !== next[i]) return false;\n  }\n  return true;\n}\n","import { InjectionToken, Optional, Inject, Injectable } from '@angular/core';\nimport { camelCase, isUndefined, isEqual } from 'lodash-es';\nimport { ApplicationOptions } from './ApplicationOptions';\nimport {\n  ExtensionFactory,\n  GenericHookType,\n  hookGeneric,\n  GenericHookOptions\n} from './extension-hooks';\nimport { SystemOptionsService, TenantOptionsService } from '@c8y/client';\nimport { ITenantOptionDetailParams } from '@c8y/client';\nimport { Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, startWith } from 'rxjs/operators';\n\n/**\n * @deprecated Consider using the `hookOptions` function instead.\n */\nexport const HOOK_OPTIONS = new InjectionToken<ExtensionFactory<ApplicationOptions>>(\n  'HOOK_OPTIONS'\n);\n\n/**\n * You can either provide a single `ApplicationOptions` as parameter:\n * ```typescript\n *  hookOptions(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookOptions([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<ApplicationOptions>`\n * ```typescript\n *  export class MyApplicationOptionsFactory implements ExtensionFactory<ApplicationOptions> {...}\n *  ...\n *  hookOptions(MyApplicationOptionsFactory)\n * ```\n * A typed alternative to `HOOK_OPTIONS`.\n * @param options The `ApplicationOptions`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookOptions(\n  options: GenericHookType<ApplicationOptions>,\n  hookOptions?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<ApplicationOptions>(options, HOOK_OPTIONS, hookOptions);\n}\n\n/**\n * A service that allows to set or get application options\n * which configure the default behavior of the UI.\n */\n@Injectable({ providedIn: 'root' })\nexport class OptionsService extends ApplicationOptions {\n  optionsUpdated$: Observable<void>;\n  [key: string]: any;\n  private _optionsUpdated$ = new Subject<void>();\n  constructor(\n    @Optional() @Inject(HOOK_OPTIONS) options,\n    private systemOptionsService: SystemOptionsService,\n    private tenantOptionService: TenantOptionsService\n  ) {\n    super();\n    this.optionsUpdated$ = this._optionsUpdated$.asObservable();\n    this.setupOptions(options);\n  }\n\n  /**\n   * Returns an application option used to configure the UI.\n   * @param optionKey The application options key.\n   * @param defaultValue A value to return if non is set.\n   * @param attemptParse Indicates whether the value should be parsed with JSON.parse.\n   */\n  get<T extends keyof OptionsService>(\n    optionKey: T,\n    defaultValue?: OptionsService[T],\n    attemptParse?: boolean\n  ): OptionsService[T] {\n    let value = this[optionKey];\n    if (typeof value === 'undefined') {\n      value = this[camelCase(optionKey)];\n    }\n    if (attemptParse) {\n      return this.parseOptionRawValue(value, defaultValue);\n    }\n    return typeof value !== 'undefined' ? value : defaultValue;\n  }\n\n  /**\n   * Returns an observable of an application option used to configure the UI.\n   * @param optionKey The application options key.\n   * @param defaultValue A value to return if non is set.\n   * @param attemptParse Indicates whether the value should be parsed with JSON.parse.\n   */\n  get$<T extends keyof OptionsService>(\n    optionKey: T,\n    defaultValue?: OptionsService[T],\n    attemptParse?: boolean\n  ): Observable<OptionsService[T]> {\n    const fn = () => this.get(optionKey, defaultValue, attemptParse);\n    return this.optionsUpdated$.pipe(map(fn), startWith(fn()), distinctUntilChanged());\n  }\n\n  /**\n   * Sets an application option.\n   * @param key The key to set.\n   * @param value The value to set.\n   */\n  set<T extends keyof OptionsService>(key: T, value: OptionsService[T]) {\n    const camelCasedKey = camelCase(key);\n    const previousValue = this[camelCasedKey];\n    this[camelCasedKey] = value;\n    if (!isEqual(previousValue, value)) {\n      this._optionsUpdated$.next();\n    }\n  }\n\n  /**\n   * Deletes an application option.\n   * @param key The key to remove.\n   */\n  delete<T extends keyof OptionsService>(key: T) {\n    const camelCasedKey = camelCase(key);\n    const previousValue = this[camelCasedKey];\n    delete this[camelCasedKey];\n    const newValue = this[camelCasedKey];\n\n    if (!isEqual(previousValue, newValue)) {\n      this._optionsUpdated$.next();\n    }\n  }\n\n  /**\n   * Gets support URL from:\n   * - application option: `supportUrl`\n   * - or current tenant's option: `configuration / system.support.url`\n   * - or current tenant's inherited option: `configuration / system.support.url`\n   * - or system option: `configuration / system.support.url`\n   * - otherwise defaults to: `false`\n   *\n   * @returns Returns support url or false.\n   */\n  async getSupportUrl() {\n    let url: string | boolean = this.supportUrl;\n\n    if (isUndefined(url)) {\n      url = await this.getCurrentTenantOption('configuration', 'system.support.url');\n    }\n    if (isUndefined(url)) {\n      url = await this.getInheritedTenantOption('configuration', 'system.support.url');\n    }\n    if (isUndefined(url)) {\n      url = (await this.getSystemOption('support', 'url')) || false;\n    }\n\n    this.supportUrl = url;\n    return this.supportUrl;\n  }\n\n  /**\n   * Returns if the tenant allows to show the activate-support user menu entry.\n   * Note: Only if system-level support-user/enabled is false we can activate it at tenant level.\n   */\n  async getActivateSupportUser() {\n    const option = await this.getSystemOption('support-user', 'enabled', true);\n    return !option;\n  }\n\n  /**\n   * Gets a value from the system service and parses it.\n   *\n   * @param category The category for this option.\n   * @param key The key for that option.\n   * @param defaultValue The default if the option was not found.\n   */\n  async getSystemOption<T = string>(\n    category: string,\n    key: string,\n    defaultValue?: T\n  ): Promise<T | string> {\n    return this.getOptionFromService<T>(\n      category,\n      key,\n      null,\n      this.systemOptionsService,\n      defaultValue\n    );\n  }\n\n  /**\n   * Gets a value from the tenant service and parses it.\n   *\n   * @param category The category for this option.\n   * @param key The key for that option.\n   * @param defaultValue The default if the option was not found.\n   */\n  async getTenantOption<T = string>(\n    category: string,\n    key: string,\n    defaultValue?: T\n  ): Promise<T | string> {\n    return this.getOptionFromService<T>(\n      category,\n      key,\n      null,\n      this.tenantOptionService,\n      defaultValue\n    );\n  }\n\n  /**\n   * Gets an inherited from parent value from the tenant service if inheritance supported based on given parameters.\n   *\n   * @param category The category for this option.\n   * @param key The key for that option.\n   * @param defaultValue The default if the option was not found.\n   */\n  async getInheritedTenantOption<T = string>(\n    category: string,\n    key: string,\n    defaultValue?: T\n  ): Promise<T | string> {\n    return this.getOptionFromService<T>(\n      category,\n      key,\n      { evaluate: 'inherited' },\n      this.tenantOptionService,\n      defaultValue\n    );\n  }\n\n  /**\n   * Gets current tenant option value from the tenant service omitting the inheritance supported based on given parameters.\n   *\n   * @param category The category for this option.\n   * @param key The key for that option.\n   * @param defaultValue The default if the option was not found.\n   */\n  async getCurrentTenantOption<T = string>(\n    category: string,\n    key: string,\n    defaultValue?: T\n  ): Promise<T | string> {\n    return this.getOptionFromService<T>(\n      category,\n      key,\n      { evaluate: 'current' },\n      this.tenantOptionService,\n      defaultValue\n    );\n  }\n\n  private setupOptions(options: any[] | null) {\n    if (options) {\n      if (!Array.isArray(options)) {\n        options = [options];\n      }\n      let combinedOptions = {};\n      if (options.length === 1) {\n        combinedOptions = options[0];\n      } else if (options.length > 1) {\n        options.forEach(optionMap => {\n          if (optionMap) {\n            this.applyOptions(optionMap, combinedOptions);\n          }\n        });\n      } else {\n        return;\n      }\n      if (this.applyOptions(combinedOptions, this)) {\n        this._optionsUpdated$.next();\n      }\n    }\n  }\n\n  private applyOptions(options: Record<string, any>, applyTo: any) {\n    let optionWasChanged = false;\n    Object.entries(options).forEach(([key, value]) => {\n      const camelCasedKey = camelCase(key);\n      const previousValue = applyTo[camelCasedKey];\n      applyTo[camelCasedKey] = value;\n      if (!isEqual(previousValue, value)) {\n        optionWasChanged = true;\n      }\n    });\n    return optionWasChanged;\n  }\n\n  private async getOptionFromService<T = string>(\n    category: string,\n    key: string,\n    filter: ITenantOptionDetailParams,\n    service: SystemOptionsService | TenantOptionsService,\n    defaultValue: T\n  ): Promise<T | string> {\n    try {\n      const { data } = await service.detail({ category, key }, filter);\n      return this.parseOptionRawValue(data.value, defaultValue);\n    } catch (ex) {\n      return defaultValue;\n    }\n  }\n\n  private parseOptionRawValue<T = string>(rawValue: string, defaultValue: T): T | string {\n    let value: T | string;\n    try {\n      value = JSON.parse(rawValue);\n    } catch (e) {\n      value = isUndefined(rawValue) ? defaultValue : rawValue;\n    }\n    return value;\n  }\n}\n","import { throttle as _throttle } from 'lodash-es';\n\n/**\n * Decorator to throttle functions call.\n * @param wait throttle time.\n * @param options set triggers, eg on trailing edge or falling edge,\n * see lodash documentation for details\n */\nexport function throttle(wait?, options?) {\n  return (target, fnName, descriptor) => {\n    const fn = descriptor.value;\n    descriptor.value = function (...args) {\n      const throttledFnName = `_${fnName}Throttled`;\n      if (!this[throttledFnName]) {\n        this[throttledFnName] = _throttle(fn, wait, options);\n      }\n\n      return this[throttledFnName](...args);\n    };\n  };\n}\n","import { Injectable, NgModuleRef, EnvironmentInjector, Type, Injector } from '@angular/core';\nimport {\n  BehaviorSubject,\n  firstValueFrom,\n  lastValueFrom,\n  Observable,\n  ReplaySubject,\n  Subject\n} from 'rxjs';\nimport { filter, map, scan, shareReplay, take, takeUntil } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PluginsResolveService {\n  /**\n   * Emits all injectors of already loaded plugins on subscription.\n   */\n  injectors$: Observable<EnvironmentInjector | Injector>;\n  /**\n   * Emits once remotePlugins have been resolved.\n   */\n  refresh$: Observable<void>;\n  /**\n   * Emits all plugin details of already loaded plugins on subscription.\n   */\n  pluginDetails$: Observable<{\n    remoteNgModule: NgModuleRef<unknown> | Type<unknown>;\n    moduleRef: NgModuleRef<unknown>;\n  }>;\n  allPluginsLoaded$: Observable<boolean>;\n  loadedPluginNames$: Observable<string[]>;\n  /**\n   * Emits all contextPaths (including the corresponding version/tag, if provided) that have been already loaded on startup and further any newload loaded.\n   */\n  contextPathsFromWhereRemotesHaveBeenLoaded$: Observable<string[]>;\n  private _refresh$ = new Subject<void>();\n  private _allPluginsLoaded$ = new BehaviorSubject<boolean>(false);\n  _contextPathsFromWhereRemotesHaveBeenLoaded$ = new BehaviorSubject<string[]>([]);\n  _loadedPluginNames$ = new BehaviorSubject<string[]>([]);\n  _injectors$ = new ReplaySubject<EnvironmentInjector | Injector>();\n  _pluginDetails$ = new ReplaySubject<{\n    remoteNgModule: NgModuleRef<unknown> | Type<unknown>;\n    moduleRef: NgModuleRef<unknown>;\n  }>();\n\n  constructor() {\n    this.injectors$ = this._injectors$.asObservable();\n\n    this.refresh$ = this._refresh$.asObservable().pipe(shareReplay(1));\n    this.pluginDetails$ = this._pluginDetails$;\n\n    this.allPluginsLoaded$ = this._allPluginsLoaded$.asObservable();\n    this.contextPathsFromWhereRemotesHaveBeenLoaded$ =\n      this._contextPathsFromWhereRemotesHaveBeenLoaded$.asObservable();\n\n    this.loadedPluginNames$ = this._loadedPluginNames$.asObservable();\n  }\n\n  /**\n   * Will refresh all current registered hooks.\n   */\n  refreshHooks() {\n    this._refresh$.next();\n  }\n\n  addInjector(injector: EnvironmentInjector | Injector) {\n    this._injectors$.next(injector);\n  }\n\n  async waitForPluginsToLoad() {\n    await firstValueFrom(\n      this.allPluginsLoaded$.pipe(\n        filter(loaded => !!loaded),\n        take(1)\n      )\n    );\n  }\n\n  getAllInjectors(): Promise<(EnvironmentInjector | Injector)[]> {\n    return lastValueFrom(\n      this.getAllInjectors$().pipe(\n        scan((acc, curr) => [...acc, curr], [] as (EnvironmentInjector | Injector)[])\n      )\n    );\n  }\n\n  getAllInjectors$() {\n    return this._injectors$.pipe(takeUntil(this.waitForPluginsToLoad()));\n  }\n\n  getFromAllInjectors<T>(token: Type<T>, notFoundValue = null): Observable<T> {\n    return this.getAllInjectors$()\n      .pipe(map(injector => injector.get(token, notFoundValue)))\n      .pipe(filter(i => !!i));\n  }\n\n  markPluginsAsLoaded() {\n    this._allPluginsLoaded$.next(true);\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const LANGUAGES = new InjectionToken('Languages');\n","import { InjectionToken } from '@angular/core';\n\nexport const LOCALE_PATH = new InjectionToken('Locale path');\n","import { TranslateService, TranslateStore } from '@ngx-translate/core';\nimport { mapValues, each } from 'lodash-es';\nimport { PatternMessages } from './patterns-message.hook';\nimport { formatDate } from '@angular/common';\n\n/**\n * A service to translate messages by using regexp patterns.\n */\nexport class PatternMessagesService {\n  patterns: PatternMessages = {};\n  pipes = {\n    absoluteDate: (date: string | number | Date) =>\n      formatDate(date, 'medium', this.translateService.currentLang),\n    translate: key => this.translateService.instant(key)\n  };\n\n  constructor(\n    patterns: PatternMessages[],\n    public translateService: TranslateService,\n    public translateStore: TranslateStore\n  ) {\n    each(patterns, pattern => {\n      Object.assign(this.patterns, pattern);\n    });\n  }\n\n  translate(message: string) {\n    const translation = this.translateWithPatterns(message);\n    return translation !== message ? translation : '';\n  }\n\n  private translateWithPatterns(message, patterns = this.patterns) {\n    let translatedMessage = message;\n\n    each(patterns, (patternCfg, pattern) => {\n      const globalRegExp = new RegExp(pattern, 'g');\n      let globalMatch;\n\n      if (!globalRegExp.test(translatedMessage)) {\n        return;\n      }\n      globalRegExp.test(''); // reset the regexp\n      globalMatch = globalRegExp.exec(translatedMessage);\n      while (globalMatch !== null) {\n        const [localMatch] = globalMatch;\n\n        const placeholderValues = mapValues(patternCfg.placeholders, placeholder => {\n          const expr = placeholder.capture || placeholder;\n          let replacement = localMatch.replace(new RegExp(pattern, 'g'), expr);\n\n          if (placeholder.translate) {\n            replacement = this.translateWithPatterns(replacement, placeholder.translate);\n          }\n\n          return replacement;\n        });\n        translatedMessage = translatedMessage.replace(\n          localMatch,\n          this.translateWithParams(patternCfg, placeholderValues)\n        );\n\n        globalMatch = globalRegExp.exec(translatedMessage);\n      }\n    });\n    return translatedMessage;\n  }\n\n  private translateWithParams(patternCfg: any, params: any = {}) {\n    const { defaultLang, currentLang, compiler } = this.translateService;\n    const translations = this.translateStore.getTranslations(currentLang);\n    const defaultTranslations = this.translateStore.getTranslations(defaultLang);\n    const originalKey = patternCfg.gettext;\n\n    let originalValue = originalKey;\n    if (translations) {\n      if (translations[originalKey]) {\n        originalValue = translations[originalKey];\n      } else if (defaultTranslations) {\n        if (defaultTranslations[originalKey]) {\n          originalValue = defaultTranslations[originalKey];\n        }\n      }\n    }\n\n    let key = originalKey;\n    let value = originalValue;\n    const interpolateParams = {\n      ...params,\n      noPatternMessages: true\n    };\n\n    let match;\n    const pipeRegex = RegExp('{{\\\\s*([^\\\\s]+)\\\\s*\\\\|\\\\s*([^\\\\s]+)\\\\s*}}', 'g');\n    // tslint:disable-next-line:no-conditional-assignment\n    while ((match = pipeRegex.exec(originalKey)) !== null) {\n      const [placeholder, paramName, pipeName] = match;\n      if (this.pipes[pipeName]) {\n        key = key.replace(placeholder, `{{${paramName}}}`);\n        value = value.replace(placeholder, `{{${paramName}}}`);\n        interpolateParams[paramName] = this.pipes[pipeName](params[paramName]);\n      }\n    }\n\n    if (translations) {\n      const compiledValue = compiler.compile(value, currentLang);\n      this.translateStore.setTranslations(currentLang, { [key]: compiledValue }, true);\n    }\n    return this.translateService.instant(key, interpolateParams);\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { GenericHookType, hookGeneric, GenericHookOptions } from '../common/extension-hooks';\n\nexport interface PatternMessages {\n  [pattern: string]: {\n    gettext: string;\n    placeholders?: {\n      [placeholder: string]: string | any;\n    };\n  };\n}\n\n/**\n * @deprecated Consider using the `hookPatternMessages` function instead.\n */\nexport const HOOK_PATTERN_MESSAGES = new InjectionToken('HOOK_PATTERN_MESSAGES');\n\n/**\n * You can either provide a single `PatternMessages` as parameter:\n * ```typescript\n *  hookPatternMessages(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookPatternMessages([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<PatternMessages>`\n * ```typescript\n *  export class MyPatternMessagesFactory implements ExtensionFactory<PatternMessages> {...}\n *  ...\n *  hookPatternMessages(MyPatternMessagesFactory)\n * ```\n * A typed alternative to `HOOK_PATTERN_MESSAGES`.\n * @param patterns The `PatternMessages`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookPatternMessages(\n  patterns: GenericHookType<PatternMessages>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<PatternMessages>(patterns, HOOK_PATTERN_MESSAGES, options);\n}\n","import { mapKeys } from 'lodash-es';\n\n/**\n * Returns a trimmed translation key.\n * If the key contains HTML, it also removes all whitespaces.\n * The reason behind it is that by default Angular compiler removes\n * whitespaces from adjacent inline elements,\n * which prevents ngx-translate from finding a matching entry in the dictionary.\n */\nexport function trimTranslationKey(key: string) {\n  key = key\n    .replace(/(\\r\\n|\\n|\\r)/gm, '')\n    .replace(/\\s{2,}/g, ' ')\n    .trim();\n  const containsHTML = /(<([^>]+)>)/i.test(key);\n  return containsHTML ? key.replace(/\\s/g, '') : key;\n}\n\n/**\n * We want to have translation keys unified, so they don't contain unnecessary spaces and line breaks.\n * This way we can dynamically build keys from HTML, and match them to extracted string, that might be HTML as well.\n */\nexport function getDictionaryWithTrimmedKeys(dictionary: object) {\n  return mapKeys(dictionary, (value, key) => trimTranslationKey(key));\n}\n\n/**\n * Removes inline context indicators enclosed in backticks from a translation string.\n *\n * @param translation - The original translation string that may contain backtick-enclosed context indicators.\n *\n * @example\n * ```ts\n * removeContextIndicators(\"Hello World`context`\");\n * // Returns: \"Hello World\"\n * ```\n */\nexport function removeContextIndicators(translation: string): string {\n  return translation.replace(/`[^`]*`/g, '');\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { PatternMessagesService } from './pattern-messages.service';\nimport {\n  MissingTranslationHandler,\n  MissingTranslationHandlerParams,\n  TranslateParser,\n  TranslateService,\n  TranslateStore\n} from '@ngx-translate/core';\nimport { HOOK_PATTERN_MESSAGES, PatternMessages } from './patterns-message.hook';\nimport { removeContextIndicators } from './translation-utils';\n\n@Injectable()\nexport class MissingTranslationCustomHandler implements MissingTranslationHandler {\n  cache = new Map<string, Map<string, string>>();\n  // only in case handle might ever be called with different TranslateService instances\n  patternMessagesServices = new Map<TranslateService, PatternMessagesService>();\n\n  constructor(\n    private parser: TranslateParser,\n    private store: TranslateStore,\n    @Optional() @Inject(HOOK_PATTERN_MESSAGES) private patterns: PatternMessages[]\n  ) {\n    if (!this.patterns) {\n      this.patterns = [];\n    }\n  }\n\n  handle(params: MissingTranslationHandlerParams) {\n    const { key: messageKey, interpolateParams, translateService } = params;\n\n    let translation = this.getFromCache(translateService, messageKey, interpolateParams);\n\n    if (!translation) {\n      const patternMessagesService = this.getPatternMessagesService(translateService);\n      const patternMessageTranslation = this.getPatternMessageTranslation(\n        patternMessagesService,\n        messageKey,\n        interpolateParams\n      );\n      if (patternMessageTranslation) {\n        translation = patternMessageTranslation;\n      } else {\n        translation = this.parser.interpolate(messageKey, interpolateParams);\n      }\n\n      translation = removeContextIndicators(translation);\n\n      this.addToCache(translateService, messageKey, interpolateParams, translation);\n    }\n\n    return translation;\n  }\n\n  getPatternMessagesService(translateService: TranslateService): PatternMessagesService {\n    let service = this.patternMessagesServices.get(translateService);\n    if (!service) {\n      service = new PatternMessagesService(this.patterns, translateService, this.store);\n      this.patternMessagesServices.set(translateService, service);\n    }\n    return service;\n  }\n\n  private getFromCache(\n    translateService: TranslateService,\n    messageKey: string,\n    interpolateParams: object\n  ): string {\n    const { currentLang } = translateService;\n    const currentCache = this.cache.get(currentLang) || new Map<string, string>();\n    const cacheKey = this.getCacheKey(messageKey, interpolateParams);\n    return currentCache.get(cacheKey);\n  }\n\n  private addToCache(\n    translateService: TranslateService,\n    messageKey: string,\n    interpolateParams: object,\n    translation: string\n  ) {\n    const { currentLang } = translateService;\n    const currentCache = this.cache.get(currentLang) || new Map<string, string>();\n    const cacheKey = this.getCacheKey(messageKey, interpolateParams);\n    currentCache.set(cacheKey, translation);\n    this.cache.set(currentLang, currentCache);\n  }\n\n  private getCacheKey(messageKey: string, interpolateParams: object): string {\n    return interpolateParams ? `${messageKey} ${JSON.stringify(interpolateParams)}` : messageKey;\n  }\n\n  private getPatternMessageTranslation(\n    patternMessagesService: PatternMessagesService,\n    messageKey: string,\n    interpolateParams: object\n  ): string {\n    const shouldTryPatternMessages =\n      !interpolateParams || !(interpolateParams as any).noPatternMessages;\n\n    if (shouldTryPatternMessages) {\n      return patternMessagesService.translate(messageKey);\n    }\n\n    return undefined;\n  }\n}\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_ALARMS = {\n  '^Alarm created$': {\n    gettext: gettext('Alarm created')\n  },\n  '^Alarm updated$': {\n    gettext: gettext('Alarm updated')\n  },\n  \"^Device name: '(.+?)', alarm text: '(.+?)'$\": {\n    gettext: gettext('Device name: \"{{deviceName}}\", alarm text: \"{{alarmText | translate}}\"'),\n    placeholders: {\n      deviceName: '$1',\n      alarmText: '$2'\n    }\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_APPLICATIONS = {\n  '^Application with given name already exist$': {\n    gettext: gettext('Application with given name already exists.')\n  },\n  '^Application with id (.+?) is already assigned to the tenant (.+?)$': {\n    gettext: gettext('This application is already assigned to tenant \"{{tenant}}\".'),\n    placeholders: {\n      tenant: '$2'\n    }\n  },\n  '^Cannot update/delete application binary via this endpoint$': {\n    gettext: gettext('Cannot update/delete application binary via this endpoint')\n  },\n  '^Error occurred when trying to find an Application for id ID (.+) : Could not find application by ID (\\\\d+)$':\n    {\n      gettext: gettext('Could not find application by ID {{applicationId}}.'),\n      placeholders: {\n        applicationId: '$2'\n      }\n    },\n  '^Failed to delete application.  : Cannot remove application assigned to other tenants.$': {\n    gettext: gettext('Could not delete application assigned to other tenants.')\n  },\n  \"^name of Application cannot start with '(.+)' prefix.$\": {\n    gettext: gettext('Application name must not start with \"{{ prefix }}\".'),\n    placeholders: {\n      prefix: '$1'\n    }\n  },\n  '^Microservice application name incorrect. Please use only lower-case letters, digits and dashes. Maximum length is (\\\\d+) characters.$':\n    {\n      gettext: gettext(\n        'Microservice application name is incorrect: only lower case letters, digits and dashes allowed. Maximum length: {{maxLength}}.'\n      ),\n      placeholders: {\n        maxLength: '$1'\n      }\n    },\n  '^Platform application cannot be added to, nor removed from any tenant.$': {\n    gettext: gettext('Platform application cannot be added to, nor removed from any tenant.')\n  },\n  '^Failed to refresh application. : Cannot refresh non local-hosted application.$': {\n    gettext: gettext('Could not reactivate the application as it is not hosted locally.')\n  },\n  '^Failed to refresh application. : Cannot refresh application without active version id.$': {\n    gettext: gettext('Could not reactivate the application as it has no active version.')\n  },\n  '^Application deleted$': {\n    gettext: gettext('Application deleted')\n  },\n  '^Microservice application \"(.+?)\" deleted for tenant \"(.+?)\"$': {\n    gettext: gettext('Microservice application \"{{appName}}\" deleted for tenant \"{{tenant}}\"'),\n    placeholders: {\n      appName: '$1',\n      tenant: '$2'\n    }\n  },\n  '^Hosted application \"(.+?)\" deleted for tenant \"(.+?)\"$': {\n    gettext: gettext('Hosted application \"{{appName}}\" deleted for tenant \"{{tenant}}\"'),\n    placeholders: {\n      appName: '$1',\n      tenant: '$2'\n    }\n  },\n  '^External application \"(.+?)\" deleted for tenant \"(.+?)\"$': {\n    gettext: gettext('External application \"{{appName}}\" deleted for tenant \"{{tenant}}\"'),\n    placeholders: {\n      appName: '$1',\n      tenant: '$2'\n    }\n  },\n  '^Application activated$': {\n    gettext: gettext('Application activated')\n  },\n  '^Microservice application \"(.+?)\" activated: version \\\\[(.+?)\\\\] added, activeVersionId \\\\[(.+?)\\\\] added$':\n    {\n      gettext: gettext(\n        'Microservice application \"{{appName}}\" activated: version \"{{version}}\" added, activeVersionId \"{{activeVersionId}}\" added'\n      ),\n      placeholders: {\n        appName: '$1',\n        version: '$2',\n        activeVersionId: '$3'\n      }\n    },\n  '^Hosted application \"(.+?)\" activated: version \\\\[(.+?)\\\\] added, activeVersionId \\\\[(.+?)\\\\] added$':\n    {\n      gettext: gettext(\n        'Hosted application \"{{appName}}\" activated: version \"{{version}}\" added, activeVersionId \"{{activeVersionId}}\" added'\n      ),\n      placeholders: {\n        appName: '$1',\n        version: '$2',\n        activeVersionId: '$3'\n      }\n    },\n  '^Hosted application \"(.+?)\" activated: activeVersionId \\\\[\\'(.+?)\\'\\\\] added$': {\n    gettext: gettext(\n      'Hosted application \"{{appName}}\" activated: activeVersionId \"{{activeVersionId}}\" added'\n    ),\n    placeholders: {\n      appName: '$1',\n      activeVersionId: '$2'\n    }\n  },\n  '^External application \"(.+?)\" activated: version \\\\[(.+?)\\\\] added, activeVersionId \\\\[(.+?)\\\\] added$':\n    {\n      gettext: gettext(\n        'External application \"{{appName}}\" activated: version \"{{version}}\" added, activeVersionId \"{{activeVersionId}}\" added'\n      ),\n      placeholders: {\n        appName: '$1',\n        version: '$2',\n        activeVersionId: '$3'\n      }\n    },\n  \"^Scaling application '(.+?)' from (.+?) to (.+?) instances$\": {\n    gettext: gettext('Scaling application \"{{appName}}\" from {{from}} to {{to}} instances'),\n    placeholders: {\n      appName: '$1',\n      from: '$2',\n      to: '$3'\n    }\n  },\n  '^Entry is outside of the target dir: (.+)$': {\n    gettext: gettext('File entry outside of the target directory: \"{{path}}\".'),\n    placeholders: {\n      path: '$1'\n    }\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_AUTHENTICATION = {\n  '^Authentication failed! : User account is locked$': {\n    gettext: gettext('Authentication failed due to: user account is locked.')\n  },\n  '^Cannot change password. : Provided token does not exist.$': {\n    gettext: gettext('Cannot change password: provided token is invalid.')\n  },\n  '^Cannot reset user password : Cannot find user with such email.$': {\n    gettext: gettext('Cannot reset password for user with such email: email not found.')\n  },\n  '^Error during password validation. : Password must have at least (\\\\d+?) characters and no more than (\\\\d+?) and must contain only Latin1 characters.$':\n    {\n      gettext: gettext(\n        'Password is invalid. It must have at least {{minCharactersCount}} and no more than {{maxCharactersCount}} characters.'\n      ),\n      placeholders: {\n        minCharactersCount: '$1',\n        maxCharactersCount: '$2'\n      }\n    },\n  '^Error during password validation. : Your password has been used already. Choose another.$': {\n    gettext: gettext('This password has already been used earlier. Use a different one.')\n  },\n  '^Invalid credentials! : Bad credentials$': {\n    gettext: gettext('Invalid credentials.')\n  },\n  '^Invalid credentials! : No phone number provided$': {\n    gettext: gettext('Log into the management tenant first and enter your phone number.')\n  },\n  '^Password change is temporary blocked.$': {\n    gettext: gettext('Password change is temporarily blocked.')\n  },\n  '^(.+?) user login with OAuth internal mode failed$': {\n    gettext: gettext('\"{{name}}\" user login with OAI-Secure mode failed'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Error updating tenant! Cannot insert second configuration for Password code grant internal/Bad Request$':\n    {\n      gettext: gettext(\n        'This login mode was already set by another administrator. Refresh the page to update the data.'\n      )\n    },\n  '^(.+?) user logged in to the platform with OAuth internal login mode$': {\n    gettext: gettext('\"{{name}}\" user logged in to the platform with OAI-Secure login mode'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Authentication with id: (.+?) configuration updated.$': {\n    gettext: gettext('Authentication configuration with ID \"{{id}}\" updated.'),\n    placeholders: {\n      id: '$1'\n    }\n  },\n  '^Authentication configuration with id: (.+?) added.$': {\n    gettext: gettext('Authentication configuration with ID \"{{id}}\" added.'),\n    placeholders: {\n      id: '$1'\n    }\n  },\n  '^Configuration type: oauth2_internal.$': {\n    gettext: gettext('Configuration type: OAI-Secure.')\n  },\n  '^Configuration type: oauth2.$': {\n    gettext: gettext('Configuration type: Single sign-on.')\n  },\n  '^User \"(.+?)\" password was updated by user \"(.+?)\"$': {\n    gettext: gettext(\n      '\"{{ targetUserName }}\" user\\'s password was updated by \"{{ userName }}\" user'\n    ),\n    placeholders: {\n      targetUserName: '$1',\n      userName: '$2'\n    }\n  },\n  '^User password update$': {\n    gettext: gettext('User password update')\n  },\n  '^User \"(.+?)\" password updated$': {\n    gettext: gettext('\"{{ userName }}\" user changed own password'),\n    placeholders: {\n      userName: '$1'\n    }\n  },\n  '^Configuration type: basic.$': {\n    gettext: gettext('Configuration type: Basic Auth.')\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nconst bulkOperationAuditLogTextPlaceholders = {\n  updatesList: {\n    capture: '$1',\n    translate: {\n      \"status='(.+?)'\": {\n        gettext: gettext('status: \"{{ status | translate }}\"'),\n        placeholders: {\n          status: '$1'\n        }\n      },\n      \"generalStatus='(.+?)'\": {\n        gettext: gettext('general status: \"{{ generalStatus | translate }}\"'),\n        placeholders: {\n          generalStatus: '$1'\n        }\n      },\n      \"progress='(.+?)'\": {\n        gettext: gettext('progress: \"{{ progress }}\"'),\n        placeholders: {\n          progress: '$1'\n        }\n      },\n      'note=(.+?)': {\n        gettext: gettext('note: \"{{ note }}\"'),\n        placeholders: {\n          note: '$1'\n        }\n      }\n    }\n  }\n};\n\nexport const PATTERN_MESSAGES_BULKOPERATIONS = {\n  \"^Cannot execute bulk operation on empty group. Group with id='(\\\\d+?)' doesn't have child assets.$\":\n    {\n      gettext: gettext(\n        'Could not execute bulk operation on an empty group. Group with ID \"{{groupId}}\" has no child assets.'\n      ),\n      placeholders: {\n        groupId: '$1'\n      }\n    },\n  \"^Cannot execute bulk operation on empty group. DynamicGroup with id='(\\\\d+?)' doesn't have child assets$\":\n    {\n      gettext: gettext(\n        'Could not execute bulk operation on an empty group. Smart group with ID \"{{groupId}}\" has no child assets.'\n      ),\n      placeholders: {\n        groupId: '$1'\n      }\n    },\n  '^Cannot reschedule bulk operation. All its operations are successful$': {\n    gettext: gettext('Cannot reschedule bulk operation. All its operations are already successful.')\n  },\n  '^Create bulk operation$': {\n    gettext: gettext('Create bulk operation')\n  },\n  '^Create bulk operation: (.+)$': {\n    gettext: gettext('Create bulk operation: {{updatesList}}'),\n    placeholders: bulkOperationAuditLogTextPlaceholders\n  },\n  '^Delete bulk operation$': {\n    gettext: gettext('Delete bulk operation')\n  },\n  '^Delete bulk operation: (.+)$': {\n    gettext: gettext('Delete bulk operation: {{updatesList}}'),\n    placeholders: bulkOperationAuditLogTextPlaceholders\n  },\n  '^Update bulk operation$': {\n    gettext: gettext('Update bulk operation')\n  },\n  '^Update bulk operation: (.+)$': {\n    gettext: gettext('Update bulk operation: {{updatesList}}'),\n    placeholders: bulkOperationAuditLogTextPlaceholders\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_CEP = {\n  '^Cep module created$': {\n    gettext: gettext('CEP module created')\n  },\n  '^Cep module updated$': {\n    gettext: gettext('CEP module updated')\n  },\n  '^Cep module deleted$': {\n    gettext: gettext('CEP module deleted')\n  },\n  '^Cep module \"(.+?)\" created$': {\n    gettext: gettext('CEP module \"{{name}}\" created'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Cep module \"(.+?)\" updated$': {\n    gettext: gettext('CEP module \"{{name}}\" updated'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Cep module \"(.+?)\" deleted$': {\n    gettext: gettext('CEP module \"{{name}}\" deleted'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  // CEP module deployment errors\n  '^Cannot deploy module (.*)$': {\n    gettext: gettext('Cannot deploy module due to error: \"{{ errorMessage | translate }}\".'),\n    placeholders: {\n      errorMessage: '$1'\n    }\n  },\n  \"^Cannot deploy module (.+?)! : Compilation failed in module '(.+?)' in expression '(.+?)' : Incorrect syntax near '(.+?)' at line (\\\\d+) column (\\\\d+) \\\\[([\\\\S\\\\s]+?)\\\\]$\":\n    {\n      gettext: gettext(\n        'Could not deploy module \"{{moduleName}}\". Compilation failed in expression \"{{expression}}\": incorrect syntax near \"{{incorrectExpression}}\" at line {{line}} column {{column}}.'\n      ),\n      placeholders: {\n        moduleName: '$1',\n        expression: '$3',\n        incorrectExpression: '$4',\n        line: '$5',\n        column: '$6'\n      }\n    },\n  \"^Cannot deploy module (.+?)! : Compilation failed in module '(.+?)' in expression '(.+?)' : Incorrect syntax near '(.+?)' at line (\\\\d+) column (\\\\d+) near reserved keyword '(.+?)' \\\\[([\\\\S\\\\s]+?)\\\\]$\":\n    {\n      gettext: gettext(\n        'Could not deploy module \"{{moduleName}}\". Compilation failed in expression \"{{expression}}\": incorrect syntax near \"{{incorrectExpression}}\" at line {{line}} column {{column}} near reserved keyword \"{{keyword}}\".'\n      ),\n      placeholders: {\n        moduleName: '$1',\n        expression: '$3',\n        incorrectExpression: '$4',\n        line: '$5',\n        column: '$6',\n        keyword: '$7'\n      }\n    },\n  \"^Cannot deploy module (.+?)! : Compilation failed in module '(.+?)' in expression '(.+?)' : Incorrect syntax near '(.+?)' at line (\\\\d+) column (\\\\d+), please check the where clause \\\\[([\\\\S\\\\s]+?)\\\\]$\":\n    {\n      gettext: gettext(\n        'Could not deploy module \"{{moduleName}}\". Compilation failed in expression \"{{expression}}\": incorrect syntax near \"{{incorrectExpression}}\" at line {{line}} column {{column}}, check \"where\" clause.'\n      ),\n      placeholders: {\n        moduleName: '$1',\n        expression: '$3',\n        incorrectExpression: '$4',\n        line: '$5',\n        column: '$6'\n      }\n    },\n  \"^Cannot deploy module (.+?)! : Deployment failed in module '(.+?)' in expression '(.+?)' : Exception compiling script '(.+?)' of dialect '(.+?)': missing (.+?) before statement \\\\((.+?)\\\\) \\\\[([\\\\S\\\\s]+?)\\\\]$\":\n    {\n      gettext: gettext(\n        'Could not deploy module \"{{moduleName}}\". Compilation failed in expression \"{{expression}}\": exception compiling script \"{{scriptName}}\" of dialect \"{{scriptDialect}}\": missing \"{{missingSyntax}}\" before statement \"{{affectedStatement}}\".'\n      ),\n      placeholders: {\n        moduleName: '$1',\n        expression: '$3',\n        scriptName: '$4',\n        scriptDialect: '$5',\n        missingSyntax: '$6',\n        affectedStatement: '$7'\n      }\n    },\n  \"^Error in statement (.+?):(.+?)! : Incorrect syntax near '(.+?)' near reserved keyword '(.+?)' \\\\[([\\\\S\\\\s]+?)\\\\]$\":\n    {\n      gettext: gettext(\n        'Error in statement {{moduleName}}:{{statementNumber}}. Incorrect syntax near expression \"{{expression}}\" near reserved keyword \"{{keyword}}\".'\n      ),\n      placeholders: {\n        moduleName: '$1',\n        statementNumber: '$2',\n        expression: '$3',\n        keyword: '$4'\n      }\n    },\n  '^Exception on tenant (.+) in statement \\'(.+)\\': Http status code: (\\\\d+) \\\\{error=\"alarm/Unprocessable Entity\",message=\"(.+)\",info=\"https://www.cumulocity.com/guides/reference-guide/#error_reporting\",details=\"null\"\\\\}$':\n    {\n      gettext: gettext(\n        'Exception on tenant {{tenantId}} in statement \"{{statement}}\": HTTP status code: {{httpStatusCode}} : {{message | translate}}'\n      ),\n      placeholders: {\n        tenantId: '$1',\n        statement: '$2',\n        httpStatusCode: '$3',\n        message: '$4'\n      }\n    },\n  \"^Exception on tenant (.+) in statement '(.+)': Invocation exception when invoking method '(.+)' of class '(.+)' passing parameters \\\\[(.+)\\\\] for statement '(.+)': (.+) : (.+)$\":\n    {\n      gettext: gettext(\n        'Exception on tenant {{tenantId}} in statement \"{{moduleName}}\": Invocation exception when invoking method \"{{methodName}}\" of class \"{{classPath}}\" passing parameters [{{parameters}}] for statement \"{{statement}}\": {{exceptionType}} : {{exceptionMessage}}.'\n      ),\n      placeholders: {\n        tenantId: '$1',\n        moduleName: '$2',\n        methodName: '$3',\n        classPath: '$4',\n        parameters: '$5',\n        statement: '$6',\n        exceptionType: '$7',\n        exceptionMessage: '$8'\n      }\n    },\n  // Smart rules (part of CEP functionality)\n  '^Smart rule created$': {\n    gettext: gettext('Smart rule created.')\n  },\n  '^Smart rule updated$': {\n    gettext: gettext('Smart rule updated.')\n  },\n  '^Smart rule enabled$': {\n    gettext: gettext('Smart rule activated.')\n  },\n  '^Smart rule disabled$': {\n    gettext: gettext('Smart rule deactivated.')\n  },\n  '^Smart rule deleted$': {\n    gettext: gettext('Smart rule deleted.')\n  },\n  '^Smart rule \"(.+?)\" created$': {\n    gettext: gettext('Smart rule \"{{name}}\" created.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Smart rule \"(.+?)\" updated$': {\n    gettext: gettext('Smart rule \"{{name}}\" updated.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Smart rule \"(.+?)\" enabled$': {\n    gettext: gettext('Smart rule \"{{name}}\" activated.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Smart rule \"(.+?)\" disabled$': {\n    gettext: gettext('Smart rule \"{{name}}\" deactivated.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Smart rule \"(.+?)\" deleted$': {\n    gettext: gettext('Smart rule \"{{name}}\" deleted.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^(.+) succeeded for volume \"(.+)\"$': {\n    gettext: gettext('Operation \"{{operation}}\" succeeded for volume \"{{volume}}\".'),\n    placeholders: {\n      operation: '$1',\n      volume: '$2'\n    }\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_CERTIFICATES = {\n  '^Can not activate a certificate which is either expired or not yet valid$': {\n    gettext: gettext('Cannot activate a certificate which is either expired or not yet valid.')\n  },\n  '^Cannot add certificate - certificate with (.+?) fingerprint already exists. : Certificate with (.+?) fingerprint already exists.$':\n    {\n      gettext: gettext(\n        'Could not add certificate. Certificate with {{fingerprint}} fingerprint already exists.'\n      ),\n      placeholders: {\n        fingerprint: '$1'\n      }\n    },\n  '^Cannot parse X509 certificate. : Could not parse certificate: (.+?)$': {\n    gettext: gettext('Could not parse X.509 certificate: {{ failureReason | translate }}.'),\n    placeholders: {\n      failureReason: '$1'\n    }\n  },\n  '^Domain name in uploaded certificate differs from the one in use$': {\n    gettext: gettext(\n      'Domain name in uploaded certificate differs from the one in use. Please deactivate the custom domain before uploading new certificate.'\n    )\n  },\n  '^Failed to extract certificate from PKCS12$': {\n    gettext: gettext('Failed to extract certificate from PKCS12.')\n  },\n  \"^Trusted certificate updated on '(.+?)'\\\\.$\": {\n    gettext: gettext('Trusted certificate updated on tenant \"{{ tenantId }}\"'),\n    placeholders: {\n      tenantId: '$1'\n    }\n  },\n  \"^Trusted certificate deleted from '(.+?)'\\\\.$\": {\n    gettext: gettext('Trusted certificate deleted from tenant \"{{ tenantId }}\"'),\n    placeholders: {\n      tenantId: '$1'\n    }\n  },\n  \"^Certificate fingerprint: '(.+?)'\\\\.\\\\n\\\\s*Certificate subject name: '(.+?)'\\\\.\\\\n$\": {\n    gettext: gettext(\n      'Certificate fingerprint: \"{{ fingerprint }}\".\\nCertificate subject name: \"{{ subjectName }}\".'\n    ),\n    placeholders: {\n      fingerprint: '$1',\n      subjectName: '$2'\n    }\n  },\n  \"^Certificate fingerprint: '(.+?)'\\\\.\\\\n\\\\s*Certificate subject name: '(.+?)'\\\\.\\\\n\\\\s*NotAfter='(.+?)'.*$\":\n    {\n      gettext: gettext(\n        'Certificate fingerprint: \"{{ fingerprint }}\".\\nCertificate subject name: \"{{ subjectName }}\".\\nExpiration date: {{ expirationDate | absoluteDate }}.'\n      ),\n      placeholders: {\n        fingerprint: '$1',\n        subjectName: '$2',\n        expirationDate: '$3'\n      }\n    },\n  \"^Certificate fingerprint: '(.+?)'\\\\.\\\\n\\\\s*Certificate subject name: '(.+?)'\\\\.\\\\n\\\\s*Status='(.+?)'.*$\":\n    {\n      gettext: gettext(\n        'Certificate fingerprint: \"{{ fingerprint }}\".\\nCertificate subject name: \"{{ subjectName }}\".\\nStatus: \"{{ status }}\".'\n      ),\n      placeholders: {\n        fingerprint: '$1',\n        subjectName: '$2',\n        status: '$3'\n      }\n    },\n  '^The CA certificate has not been refreshed\\\\.\\\\s+It may either still have sufficient remaining validity.*$':\n    {\n      gettext: gettext(\n        'The CA certificate has not been renewed; however, it may still have sufficient validity remaining.'\n      )\n    },\n  \"^Provisioned certificate stored in user object: '(.+?)'.*$\": {\n    gettext: gettext('Provisioned certificate stored in user object: \"{{ userName }}\"'),\n    placeholders: {\n      userName: '$1'\n    }\n  },\n  \"^Certificate serial number: '(.+?)'\\\\.\\\\n\\\\s*NotAfter='(.+?)'.*$\": {\n    gettext: gettext(\n      'Certificate serial number: \"{{ serialNumber }}\".\\nExpiration date: {{ expirationDate | absoluteDate }}.'\n    ),\n    placeholders: {\n      serialNumber: '$1',\n      expirationDate: '$2'\n    }\n  },\n  \"^Provisioned certificates removed from user: '(.+?)'.*$\": {\n    gettext: gettext('Provisioned certificates removed from user object: \"{{ userName }}\"'),\n    placeholders: {\n      userName: '$1'\n    }\n  },\n  \"^Certificate serial number hex: '(.+?)'.*$\": {\n    gettext: gettext('Certificate serial number: \"{{ serialNumber }}\"'),\n    placeholders: {\n      serialNumber: '$1'\n    }\n  },\n  \"^Tenant certificate authority\\\\(CA\\\\) created on '(.+?)'.*$\": {\n    gettext: gettext('Tenant certificate authority (CA) created for tenant \"{{ tenantId }}\"'),\n    placeholders: {\n      tenantId: '$1'\n    }\n  },\n  \"^Tenant certificate authority\\\\(CA\\\\) was renewed for Tenant: '(.+?)'.*$\": {\n    gettext: gettext('Tenant certificate authority (CA) was renewed for tenant \"{{ tenantId }}\"'),\n    placeholders: {\n      tenantId: '$1'\n    }\n  },\n  \"^Tenant certificate authority\\\\(CA\\\\) renewal for Tenant: '(.+?)' failed.*$\": {\n    gettext: gettext(\n      'Tenant certificate authority (CA) renewal for tenant \"{{ tenantId }}\" failed'\n    ),\n    placeholders: {\n      tenantId: '$1'\n    }\n  },\n  '^Tenant certificate authority\\\\(CA\\\\) signed certificate for device: (.+?)\\\\.$': {\n    gettext: gettext(\n      'Tenant certificate authority (CA) signed certificate for device: \"{{ deviceId }}\".'\n    ),\n    placeholders: {\n      deviceId: '$1'\n    }\n  },\n  '^Revoked serials: (.+?)$': {\n    gettext: gettext('Revoked serials: {{ revokedSerials }}'),\n    placeholders: {\n      revokedSerials: '$1'\n    }\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_DEVICES = {\n  '^Assign device profile (.+?) to device (.+?)$': {\n    gettext: gettext('Assign device profile {{profileName}} to device {{deviceName}}'),\n    placeholders: {\n      profileName: '$1',\n      deviceName: '$2'\n    }\n  },\n  \"^Device id '(.+?)' contains '(.+?)' character which is not permitted.$\": {\n    gettext: gettext('ID \"{{deviceId}}\" contains invalid character: \"{{invalidCharacter}}\".'),\n    placeholders: {\n      deviceId: '$1',\n      invalidCharacter: '$2'\n    }\n  },\n  '^Device (.+?) already registered to a tenant.$': {\n    gettext: gettext(\n      'Device {{ devEUI }} is already registered in your tenant or in another tenant in the platform.'\n    ),\n    placeholders: {\n      devEUI: '$1'\n    }\n  },\n  '^Device with external ID(s) (.+?) was replaced by device with external ID(s) (.+?)$': {\n    gettext: gettext(\n      'Device with external ID(s) {{ oldExtIds }} was replaced by device with external ID(s) {{ newExtIds }}.'\n    ),\n    placeholders: {\n      oldExtIds: '$1',\n      newExtIds: '$2'\n    }\n  },\n  \"^Finding device data from database failed : No managedObject for id '(.+?)'!$\": {\n    gettext: gettext('Could not find managed object with ID \"{{deviceId}}\".'),\n    placeholders: {\n      deviceId: '$1'\n    }\n  },\n  '^NewDeviceRequest for id = (.+?) already exists.$': {\n    gettext: gettext('Device registration request with ID {{id}} already exists.'),\n    placeholders: {\n      id: '$1'\n    }\n  },\n  '^NewDeviceRequest for device id (.+?) is in state BLOCKED, not PENDING_ACCEPTANCE.$': {\n    gettext: gettext(\n      'Device registration request with ID \"{{deviceId}}\" is in state \"Blocked\", not \"Pending acceptance\". Remove this registration request and start over.'\n    ),\n    placeholders: {\n      deviceId: '$1'\n    }\n  },\n  '^No communication with device since (.+?)$': {\n    gettext: gettext('No communication with device since {{timestamp | absoluteDate}}.'),\n    placeholders: {\n      timestamp: '$1'\n    }\n  },\n  '^No data received from device within required interval.$': {\n    gettext: gettext('No data received from device within required interval.')\n  },\n  '^Provided security key does not match key stored for device (.+?).$': {\n    gettext: gettext(\n      'Provided security token does not match the security token stored for this device \"{{deviceId}}\".'\n    ),\n    placeholders: {\n      deviceId: '$1'\n    }\n  },\n  '^Provided security key does not match key stored for device (.+?).Reached maximum number of failed attempts while trying to register this device. Request will now be blocked and has to be removed manually to restart the process.$':\n    {\n      gettext: gettext(\n        'The provided security token does not match the token stored for device \"{{deviceId}}\". You have reached the maximum number of failed attempts while trying to register this device. The request will now be blocked and must be removed manually to restart the process.'\n      ),\n      placeholders: {\n        deviceId: '$1'\n      }\n    },\n  '^Retrieve configuration snapshot from device (.+?)$': {\n    gettext: gettext('Retrieve configuration snapshot from device {{deviceName}}'),\n    placeholders: {\n      deviceName: '$1'\n    }\n  },\n  '^Retrieve (.+?) configuration snapshot from device (.+?)$': {\n    gettext: gettext(\n      'Retrieve {{configurationType}} configuration snapshot from device {{deviceName}}'\n    ),\n    placeholders: {\n      configurationType: '$1',\n      deviceName: '$2'\n    }\n  },\n  '^Send configuration snapshot (.+?) of configuration type (.+?) to device (.+?)$': {\n    gettext: gettext(\n      'Send configuration snapshot {{snapshotName}} of configuration type {{configurationType}} to device {{deviceName}}'\n    ),\n    placeholders: {\n      snapshotName: '$1',\n      configurationType: '$2',\n      deviceName: '$3'\n    }\n  },\n  '^Send configuration snapshot (.+?) to device (.+?)$': {\n    gettext: gettext('Send configuration snapshot {{snapshotName}} to device {{deviceName}}'),\n    placeholders: {\n      snapshotName: '$1',\n      deviceName: '$2'\n    }\n  },\n  '^You have reached devices limit. No more devices can be registered.$': {\n    gettext: gettext('You reached devices limit. No more devices can be registered.')\n  },\n  '^Added new child device to \"(.+)\" \\\\(ID: (.+)\\\\).$': {\n    gettext: gettext('Added new child device to \"{{parentDeviceName}}\" (ID: {{parentDeviceId}}).'),\n    placeholders: {\n      parentDeviceName: '$1',\n      parentDeviceId: '$2'\n    }\n  },\n  '^Updated child device of \"(.+)\" \\\\(ID: (.+)\\\\).$': {\n    gettext: gettext('Updated child device of \"{{parentDeviceName}}\" (ID: {{parentDeviceId}}).'),\n    placeholders: {\n      parentDeviceName: '$1',\n      parentDeviceId: '$2'\n    }\n  },\n  '^Added child device \"(.+)\" \\\\(ID: (.+)\\\\).$': {\n    gettext: gettext('Added child device \"{{name}}\" (ID: {{id}}).'),\n    placeholders: {\n      name: '$1',\n      id: '$2'\n    }\n  },\n  '^Removed child device \"(.+)\" \\\\(ID: (.+)\\\\).$': {\n    gettext: gettext('Removed child device \"{{name}}\" (ID: {{id}}).'),\n    placeholders: {\n      name: '$1',\n      id: '$2'\n    }\n  },\n  '^Apply device profile: (.+).?$': {\n    gettext: gettext('Apply device profile: {{ name }}'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Device put into maintenance state$': {\n    gettext: gettext('Device put into maintenance state')\n  },\n  '^device with id: (.+?) is put into maintenance state$': {\n    gettext: gettext('Device with ID \"{{deviceId}}\" is put into maintenance state'),\n    placeholders: {\n      deviceId: '$1'\n    }\n  },\n  '^External id not found; external id = ID \\\\[type=(.+?), value=(.+?)\\\\]$': {\n    gettext: gettext('External ID not found for type \"{{type}}\" and value \"{{value}}\".'),\n    placeholders: {\n      type: '$1',\n      value: '$2'\n    }\n  },\n  '^ID \\\\[type=(.+?), value=(.+?)\\\\] was already bound to different Global ID.$': {\n    gettext: gettext('External ID \"{{value}}\" of the type \"{{type}}\" already exists.'),\n    placeholders: {\n      type: '$1',\n      value: '$2'\n    }\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_FIRMWARE = {\n  '^Apply software changes: (.+?)\\\\.?$': {\n    gettext: gettext('Apply software changes: {{ softwareChanges }}'),\n    placeholders: {\n      softwareChanges: {\n        capture: '$1',\n        translate: {\n          'install \"(.+?)\" \\\\(version: (.+?)\\\\)': {\n            gettext: gettext('install \"{{ softwareName }}\" (version: {{ softwareVersion }})'),\n            placeholders: {\n              softwareName: '$1',\n              softwareVersion: '$2'\n            }\n          },\n          'install \"([^\"]+)\"(?! \\\\(version: .+?\\\\))': {\n            gettext: gettext('install \"{{ softwareName }}\"'),\n            placeholders: {\n              softwareName: '$1'\n            }\n          },\n          'delete \"(.+?)\" \\\\(version: (.+?)\\\\)': {\n            gettext: gettext('delete \"{{ softwareName }}\" (version: {{ softwareVersion }})'),\n            placeholders: {\n              softwareName: '$1',\n              softwareVersion: '$2'\n            }\n          },\n          'delete \"([^\"]+)\"(?! \\\\(version: .+?\\\\))': {\n            gettext: gettext('delete \"{{ softwareName }}\"'),\n            placeholders: {\n              softwareName: '$1'\n            }\n          }\n        }\n      }\n    }\n  },\n  '^Update firmware to: \"?(.+?)\"? \\\\(version: (.+)\\\\)\\\\.?$': {\n    gettext: gettext('Update firmware to: \"{{ name }}\" (version: {{ version }})'),\n    placeholders: {\n      name: '$1',\n      version: '$2'\n    }\n  },\n  '^Update firmware to: \"?(.+?)\"?\\\\.?$': {\n    gettext: gettext('Update firmware to: \"{{ name }}\"'),\n    placeholders: {\n      name: '$1'\n    }\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_MICROSERVICES = {\n  '^Created container$': {\n    gettext: gettext('Container created.')\n  },\n  '^Created pod: (.+)$': {\n    gettext: gettext('Pod \"{{imageName}}\" created.'),\n    placeholders: {\n      imageName: '$1'\n    }\n  },\n  '^Microservice not available.*$': {\n    gettext: gettext('Microservice is not available.')\n  },\n  '^Started container$': {\n    gettext: gettext('Container started.')\n  },\n  '^Error syncing pod$': {\n    gettext: gettext('Pod synchronization error.')\n  },\n  '^Failed create pod sandbox.$': {\n    gettext: gettext('Pod sandbox creation failed.')\n  },\n  '^Deleted pod: (.+)$': {\n    gettext: gettext('Pod \"{{imageName}}\" deleted.'),\n    placeholders: {\n      imageName: '$1'\n    }\n  },\n  '^Container image \"(.+)\" already present on machine$': {\n    gettext: gettext('Container image \"{{imageName}}\" already exists.'),\n    placeholders: {\n      imageName: '$1'\n    }\n  },\n  '^Scaled up replica set (.+) to (\\\\d+)$': {\n    gettext: gettext('Replica set \"{{replicaSetName}}\" scaled up to \"{{scaleNumber}}\".'),\n    placeholders: {\n      replicaSetName: '$1',\n      scaleNumber: '$2'\n    }\n  },\n  '^Scaled down replica set (.+) to (\\\\d+)$': {\n    gettext: gettext('Replica set \"{{replicaSetName}}\" scaled down to \"{{scaleNumber}}\".'),\n    placeholders: {\n      replicaSetName: '$1',\n      scaleNumber: '$2'\n    }\n  },\n  '^Not within any context!$': {\n    gettext: gettext('A problem occurred with microservice subscription.')\n  },\n  '^pulling image \"(.+)\"$': {\n    gettext: gettext('Pulling image: \"{{imageName}}\".'),\n    placeholders: {\n      imageName: '$1'\n    }\n  },\n  '^RESTART (.+?)$': {\n    gettext: gettext('RESTART`verb, action` {{service}}'),\n    placeholders: {\n      service: '$1'\n    }\n  },\n  '^START (.+?)$': {\n    gettext: gettext('START`verb, action` {{service}}'),\n    placeholders: {\n      service: '$1'\n    }\n  },\n  '^STOP (.+?)$': {\n    gettext: gettext('STOP`verb, action` {{service}}'),\n    placeholders: {\n      service: '$1'\n    }\n  },\n  '^Successfully assigned (.+) to (.+)$': {\n    gettext: gettext('\"{{imageName}}\" assigned to \"{{address}}\".'),\n    placeholders: {\n      imageName: '$1',\n      address: '$2'\n    }\n  },\n  '^Successfully pulled image \"(.+)\"$': {\n    gettext: gettext('Image \"{{imageName}}\" pulled.'),\n    placeholders: {\n      imageName: '$1'\n    }\n  },\n  '^Write failed with error code 16733 and error message \\'trying to index text where term list is too big, max is 4mb _id: \"(.+?)\"\\'$':\n    {\n      gettext: gettext(\n        'The uploaded image cannot be bigger than 4 MB. Please upload a smaller one.'\n      )\n    },\n  '^Write failed with error code 17280 and error message \\'WiredTigerIndex::insert: key too large to index, failing (.+?) { : \"(.+?)\" }\\'$':\n    {\n      gettext: gettext('The selected name is too long. Please try a shorter one.')\n    },\n  '^No nodes are available that match all of the predicates: (.+).$': {\n    gettext: gettext('No nodes are available that match all of the predicates: [{{predicates}}].'),\n    placeholders: {\n      predicates: '$1'\n    }\n  },\n  '^Readiness probe failed: (.+) (.+): (.+): request canceled while waiting for connection \\\\(Client.Timeout exceeded while awaiting headers\\\\)$':\n    {\n      gettext: gettext(\n        'Readiness probe failed: {{requestMethod}} {{uri}}: {{protocol}}: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).'\n      ),\n      placeholders: {\n        requestMethod: '$1',\n        uri: '$2',\n        protocol: '$3'\n      }\n    },\n  '^Liveness probe failed: (.+) (.+): (.+): request canceled while waiting for connection \\\\(Client.Timeout exceeded while awaiting headers\\\\)$':\n    {\n      gettext: gettext(\n        'Liveness probe failed: {{requestMethod}} {{uri}}: {{protocol}}: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers).'\n      ),\n      placeholders: {\n        requestMethod: '$1',\n        uri: '$2',\n        protocol: '$3'\n      }\n    }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_OPERATIONS = {\n  '^Creation ramp must be greater than (\\\\d+?)$': {\n    gettext: gettext('Bulk operation delay must be greater than {{minSeconds}} seconds.'),\n    placeholders: {\n      minSeconds: '$1'\n    }\n  },\n  '^Close relay (.+).$': {\n    gettext: gettext('Close relay {{number}}.'),\n    placeholders: {\n      number: '$1'\n    }\n  },\n  '^Open relay (.+).$': {\n    gettext: gettext('Open relay {{number}}.'),\n    placeholders: {\n      number: '$1'\n    }\n  },\n  '^Change trace status to (.+).$': {\n    gettext: gettext('Change trace status to {{state | translate}}.'),\n    placeholders: {\n      state: '$1'\n    }\n  },\n  '^Change relay status to (.+).$': {\n    gettext: gettext('Change relay status to {{status | translate}}.'),\n    placeholders: {\n      status: '$1'\n    }\n  },\n  '^Closing relay (.+).$': {\n    gettext: gettext('Closing relay {{number}}.'),\n    placeholders: {\n      number: '$1'\n    }\n  },\n  '^Opening relay (.+).$': {\n    gettext: gettext('Opening relay {{number}}.'),\n    placeholders: {\n      number: '$1'\n    }\n  },\n  '^Operation updated: (.+)$': {\n    gettext: gettext('Operation updated: {{updatesList}}'),\n    placeholders: {\n      updatesList: {\n        capture: '$1',\n        translate: {\n          \"status='(.+?)'\": {\n            gettext: gettext('status: \"{{ status | translate }}\"'),\n            placeholders: {\n              status: '$1'\n            }\n          },\n          \"description='(.+?)'\": {\n            gettext: gettext('description: \"{{ description | translate }}\"'),\n            placeholders: {\n              description: '$1'\n            }\n          },\n          \"device name='(.+?)'\": {\n            gettext: gettext('device name: \"{{ deviceName }}\"'),\n            placeholders: {\n              deviceName: '$1'\n            }\n          },\n          \"failure reason='(.+?)'\": {\n            gettext: gettext('failure reason: \"{{ failureReason | translate }}\"'),\n            placeholders: {\n              failureReason: '$1'\n            }\n          }\n        }\n      }\n    }\n  },\n  '^Operation created$': {\n    gettext: gettext('Operation created.')\n  },\n  '^Operation updated$': {\n    gettext: gettext('Operation updated.')\n  },\n  \"^Operation created: status='(.+?)'.$\": {\n    gettext: gettext('Operation created: status: \"{{ status | translate }}\".'),\n    placeholders: {\n      status: '$1'\n    }\n  },\n  '^Change value of \"(.+)\" to (.+) (.+).$': {\n    gettext: gettext('Change value of \"{{name}}\" to {{value}}{{unit}}.'),\n    placeholders: {\n      name: '$1',\n      value: '$2',\n      unit: '$3'\n    }\n  },\n  '^Change value of \"(.+)\" to (.+).$': {\n    gettext: gettext('Change value of \"{{name}}\" to {{value}}.'),\n    placeholders: {\n      name: '$1',\n      value: '$2'\n    }\n  },\n  '^Change status of \"(.+)\" to \"(.+)\".$': {\n    gettext: gettext('Change status of \"{{name}}\" to \"{{label}}\".'),\n    placeholders: {\n      name: '$1',\n      label: '$2'\n    }\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_ROLES = {\n  '^Global Role updated$': {\n    gettext: gettext('Global role updated')\n  },\n  '^Global Role (.+?) updated$': {\n    gettext: gettext('Global role \"{{name}}\" updated'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Global Role (.+?) updated: (.+)$': {\n    gettext: gettext('Global role \"{{name}}\" updated: {{updatesList}}'),\n    placeholders: {\n      name: '$1',\n      updatesList: {\n        capture: '$2',\n        translate: {\n          'applications \\\\[([^\\\\]]+?)\\\\] added': {\n            gettext: gettext('applications {{list}} added'),\n            placeholders: { list: '$1' }\n          },\n          'applications \\\\[([^\\\\]]+?)\\\\] removed': {\n            gettext: gettext('applications {{list}} removed'),\n            placeholders: { list: '$1' }\n          },\n          'roles \\\\[([^\\\\]]+?)\\\\] added': {\n            gettext: gettext('roles {{list}} added'),\n            placeholders: { list: '$1' }\n          },\n          'roles \\\\[([^\\\\]]+?)\\\\] removed': {\n            gettext: gettext('roles {{list}} removed'),\n            placeholders: { list: '$1' }\n          }\n        }\n      }\n    }\n  },\n  '^Global Roles$': {\n    gettext: gettext('Global roles')\n  },\n  '^Inventory Role removed$': {\n    gettext: gettext('Inventory role removed')\n  },\n  '^Inventory Role (.+?) removed$': {\n    gettext: gettext('Inventory role \"{{name}}\" deleted.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Inventory Role updated$': {\n    gettext: gettext('Inventory role updated')\n  },\n  '^Inventory Role (.+?) updated$': {\n    gettext: gettext('Inventory role \"{{name}}\" updated.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  // Global roles and descriptions\n  '^Global Manager$': {\n    gettext: gettext('Global Manager')\n  },\n  '^Can read and write all data from all devices$': {\n    gettext: gettext('Can read and write all data from all devices.')\n  },\n\n  '^Global Reader$': {\n    gettext: gettext('Global Reader')\n  },\n  '^Can read all data \\\\(including users, in contrast to \"Global Reader\"\\\\)$': {\n    gettext: gettext('Can read all data (including users, in contrast to \"Global Reader\").')\n  },\n\n  '^Tenant Manager$': {\n    gettext: gettext('Tenant Manager')\n  },\n  '^Can manage tenant wide configurations like applications, tenant options and retention rules$': {\n    gettext: gettext(\n      'Can manage tenant wide configurations like applications, tenant options and retention rules.'\n    )\n  },\n\n  '^CEP Manager$': {\n    gettext: gettext('CEP Manager')\n  },\n  '^Has full access to all deployed CEP modules and SmartRules$': {\n    gettext: gettext('Has full access to all deployed CEP modules and smart rules.')\n  },\n\n  '^Cockpit User$': {\n    gettext: gettext('Cockpit User')\n  },\n  '^User to work in Cockpit application. This does not include the access to any device data.$': {\n    gettext: gettext(\n      'User to work in Cockpit application. This does not include the access to any device data.'\n    )\n  },\n\n  '^Global User Manager$': {\n    gettext: gettext('Global User Manager')\n  },\n  '^Can access and modify the full user hierarchy$': {\n    gettext: gettext('Can access and edit the full user hierarchy.')\n  },\n\n  '^Shared User Manager$': {\n    gettext: gettext('Shared User Manager')\n  },\n  '^Can create new user as his own sub-users and manage this$': {\n    gettext: gettext('Can create new own sub-users and manage them.')\n  },\n\n  // Device management roles\n  '^Reader$': {\n    gettext: gettext('Reader')\n  },\n  '^Can read all data of the asset.$': {\n    gettext: gettext('Can read all data of the asset.')\n  },\n\n  '^Devicemanagement User$': {\n    gettext: gettext('Device Management User')\n  },\n  '^Gives access to bulk operations and device management application. This does not include access to any device data.$':\n    {\n      gettext: gettext(\n        'Gives access to bulk operations and Device Management application. This does not include access to any device data.'\n      )\n    },\n\n  // Description for 'devices' role\n  '^A role marker for device users. After registration, a device automatically has this role$': {\n    gettext: gettext(\n      'A role marker for device users. After registration, a device automatically has this role.'\n    )\n  },\n\n  // Inventory operations all role\n  '^Operations: All$': {\n    gettext: gettext('Operations: All')\n  },\n  '^Can remotely manage the assets by sending operations to the device. This includes for example remote configuration, software update, etc.$':\n    {\n      gettext: gettext(\n        'Can remotely manage the assets by sending operations to the device. This includes remote configuration, software update and more.'\n      )\n    },\n\n  '^Operations: Restart Device$': {\n    gettext: gettext('Operations: Restart Device')\n  },\n  '^Can restart devices.$': {\n    gettext: gettext('Can restart devices.')\n  },\n\n  // Description for 'business' role\n  '^Can access all devices and their data but has no management permission in the tenant$': {\n    gettext: gettext(\n      'Can access all devices and their data but has no management permission in the tenant.'\n    )\n  },\n\n  '^Can read all data from all devices$': {\n    gettext: gettext('Can read all data from all devices.')\n  },\n\n  '^Enables administrative permissions. The first user created for the tenant receives this role$':\n    {\n      gettext: gettext(\n        'Enables administrative permissions. The first user created for the tenant receives this role.'\n      )\n    }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_TENANTS = {\n  '^(.+)pplication for tenant (.+) with properties \\\\( (.+?) \\\\) already exists$': {\n    gettext: gettext(\n      'Application for tenant \"{{tenant}}\" with the following values ({{valuesList}}) already exists.'\n    ),\n    placeholders: {\n      tenant: '$2',\n      valuesList: '$3'\n    }\n  },\n  '^Domain name is already in use by another tenant!$': {\n    gettext: gettext('Domain name is already used by another tenant.')\n  },\n  '^Tenant creation failed. : Tenant with given id already exists.$': {\n    gettext: gettext('Could not create a tenant. Tenant with given domain/URL already exists.')\n  },\n  '^Tenant id cannot be a reserved sql keyword \"(.+?)\".$': {\n    gettext: gettext('Could not use a reserved SQL keyword \"{{tenantId}}\" as a domain name.'),\n    placeholders: {\n      tenantId: '$1'\n    }\n  },\n  '^Tenant \"(.+?)\" activated$': {\n    gettext: gettext('Tenant \"{{tenant}}\" activated.'),\n    placeholders: {\n      tenant: '$1'\n    }\n  },\n  '^Tenant (.+?) has sub-tenants, please remove them first!$': {\n    gettext: gettext('Could not remove tenant \"{{tenant}}\". Remove its subtenants first.'),\n    placeholders: {\n      tenant: '$1'\n    }\n  },\n  '^Tenant activated$': {\n    gettext: gettext('Tenant activated.')\n  },\n  '^Tenant \"(.+?)\" created$': {\n    gettext: gettext('Tenant \"{{tenant}}\" created.'),\n    placeholders: {\n      tenant: '$1'\n    }\n  },\n  '^Tenant created$': {\n    gettext: gettext('Tenant created.')\n  },\n  '^Tenant \"(.+?)\" deleted$': {\n    gettext: gettext('Tenant \"{{tenant}}\" deleted.'),\n    placeholders: {\n      tenant: '$1'\n    }\n  },\n  '^Tenant deleted$': {\n    gettext: gettext('Tenant deleted.')\n  },\n  '^Tenant \"(.+?)\" suspended$': {\n    gettext: gettext('Tenant \"{{tenant}}\" suspended.'),\n    placeholders: {\n      tenant: '$1'\n    }\n  },\n  '^Tenant suspended$': {\n    gettext: gettext('Tenant suspended')\n  },\n  '^Tenant \"(.+?)\" updated: (.+?)$': {\n    gettext: gettext('Tenant \"{{tenant}}\" updated: {{properties}}.'),\n    placeholders: {\n      tenant: '$1',\n      properties: '$2'\n    }\n  },\n  '^Tenant updated$': {\n    gettext: gettext('Tenant updated.')\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_USERS = {\n  \"^Can't delete user because it is used by another managed object$\": {\n    gettext: gettext(\n      'Cannot delete device with associated device owner because this owner is still assigned to other device(s). Try to remove only the device.'\n    )\n  },\n  '^Could not update user. : Error persisting user (.+?)!$': {\n    gettext: gettext('Could not update user \"{{username}}\".'),\n    placeholders: {\n      username: '$1'\n    }\n  },\n  '^Owner field error. : Cannot introduce cyclic dependency.$': {\n    gettext: gettext('Could not introduce cyclic ownership dependency.')\n  },\n  \"^User alias equals username '(.+)'$\": {\n    gettext: gettext('Username and login alias must be different.')\n  },\n  '^User created$': {\n    gettext: gettext('User created')\n  },\n  '^User (.+?) created$': {\n    gettext: gettext('User \"{{name}}\" created'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^User deleted$': {\n    gettext: gettext('User deleted')\n  },\n  '^User (.+?) deleted$': {\n    gettext: gettext('User \"{{name}}\" deleted'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^User updated$': {\n    gettext: gettext('User updated')\n  },\n  '^User (.+?) updated: (.+)$': {\n    gettext: gettext('User \"{{name}}\" updated: {{updatesList}}'),\n    placeholders: {\n      name: '$1',\n      updatesList: {\n        capture: '$2',\n        translate: {\n          \"delegatedBy='(.+?)'\": {\n            gettext: gettext('delegated by: \"{{delegate}}\"'),\n            placeholders: {\n              delegate: '$1'\n            }\n          },\n          \"owner='(.+?)'\": {\n            gettext: gettext('owner: \"{{owner}}\"'),\n            placeholders: {\n              owner: '$1'\n            }\n          },\n          'inventory assignment \\\\[(.+?)\\\\] added': {\n            gettext: gettext('inventory assignment [{{inventoryAssignment}}] added'),\n            placeholders: {\n              inventoryAssignment: '$1'\n            }\n          },\n          'inventory assignment \\\\[(.+?)\\\\] removed': {\n            gettext: gettext('inventory assignment [{{inventoryAssignment}}] removed'),\n            placeholders: {\n              inventoryAssignment: '$1'\n            }\n          },\n          'applications \\\\[(.+?)\\\\] added': {\n            gettext: gettext('applications [{{applicationsList}}] added'),\n            placeholders: {\n              applicationsList: '$1'\n            }\n          },\n          'applications \\\\[(.+?)\\\\] removed': {\n            gettext: gettext('applications [{{applicationsList}}] removed'),\n            placeholders: {\n              applicationsList: '$1'\n            }\n          },\n          'global roles \\\\[(.+?)\\\\] added': {\n            gettext: gettext('global roles [{{globalRolesList}}] added'),\n            placeholders: {\n              globalRolesList: '$1'\n            }\n          },\n          'global roles \\\\[(.+?)\\\\] removed': {\n            gettext: gettext('global roles [{{globalRolesList}}] removed'),\n            placeholders: {\n              globalRolesList: '$1'\n            }\n          }\n        }\n      }\n    }\n  },\n  \"^User with username '(.+?)' already exists! : Duplicated: (.+?)$\": {\n    gettext: gettext('User \"{{username}}\" already exists.'),\n    placeholders: {\n      username: '$1'\n    }\n  },\n  \"^User with username or alias '(.+)' already exists! : Duplicated: (.+)$\": {\n    gettext: gettext('User with username or login alias \"{{usernameOrAlias}}\" already exists.'),\n    placeholders: {\n      usernameOrAlias: '$1'\n    }\n  },\n  \"^User with email '(.+?)' already exists! : Duplicated: (.+?)$\": {\n    gettext: gettext('User with email \"{{email}}\" already exists.'),\n    placeholders: {\n      email: '$1'\n    }\n  },\n  \"^User '(.+)' is managed by a remote identity management service defined by an administrator, direct update is forbidden$\":\n    {\n      gettext: gettext(\n        'User \"{{userName}}\" is managed by a remote identity management service defined by an administrator, direct update is forbidden.'\n      ),\n      placeholders: {\n        userName: '$1'\n      }\n    },\n  '^User logout$': {\n    gettext: gettext('User logout')\n  },\n  '^(.+?) user logout$': {\n    gettext: gettext('\"{{name}}\" user logout'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Display name$': {\n    gettext: gettext('Login alias')\n  }\n} as const;\n","/* tslint:disable:max-line-length */\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_MISC = {\n  '^Access is denied$': {\n    gettext: gettext('Access denied.')\n  },\n  '^API is not available with the new domain$': {\n    gettext: gettext('Could not activate custom domain. DNS setup is incorrect.')\n  },\n  '^Availability monitoring record$': {\n    gettext: gettext('Availability monitoring record')\n  },\n  '^Failed to update domain at the platform$': {\n    gettext: gettext('Failed to update domain at the platform.')\n  },\n  '^Following mandatory fields should be included: (.+?)$': {\n    gettext: gettext('Following mandatory fields should be included: {{fields}}'),\n    placeholders: {\n      fields: '$1'\n    }\n  },\n  '^I/O error: Connection refused; nested exception is Connection refused : Connection refused$': {\n    gettext: gettext('Connection refused')\n  },\n  '^I/O error: Read timed out; nested exception is Read timed out : Read timed out$': {\n    gettext: gettext('Read timed out')\n  },\n  '^Log file requested$': {\n    gettext: gettext('Log file requested.')\n  },\n  '^Managed object deleted$': {\n    gettext: gettext('Managed object deleted')\n  },\n  '^Managed object \"(.+?)\" deleted$': {\n    gettext: gettext('Managed object \"{{name}}\" deleted'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Maximum file size exceeded$': {\n    gettext: gettext('Maximum file size exceeded.')\n  },\n  '^Maximum age cannot be bigger than 10 years.$': {\n    gettext: gettext('Maximum age cannot be bigger than 10 years.')\n  },\n  '^Real-time event processing is currently overloaded and may stop processing your events\\\\. Please contact support\\\\.$':\n    {\n      gettext: gettext(\n        'Real-time event processing is currently overloaded and may stop processing your events. Please contact support.'\n      )\n    },\n  '^Resource ID \\\\[type=com_cumulocity_model_idtype_GId, value=(.+?)\\\\] for this request not found.$':\n    {\n      gettext: gettext('Could not find the resource with ID \"{{id}}\".'),\n      placeholders: {\n        id: '$1'\n      }\n    },\n  '^Too Many Requests$': {\n    gettext: gettext('Too many requests. Try again later.')\n  },\n  '^Send message \"(.+)\".$': {\n    gettext: gettext('Send message \"{{str}}\".'),\n    placeholders: {\n      str: '$1'\n    }\n  },\n  '^Update configuration to (.+).$': {\n    gettext: gettext('Update configuration to: {{ name }}.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Execute generic command: (.+).?$': {\n    gettext: gettext('Execute generic command: {{command}}'),\n    placeholders: {\n      command: '$1'\n    }\n  },\n  '^Error while processing report$': {\n    gettext: gettext('Error while processing report')\n  },\n  '^Expected 1 endpointId argument$': {\n    gettext: gettext('Expected 1 endpointId argument')\n  }\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_SIMULATION = {\n  '^Command state is invalid: (.+)$': {\n    gettext: gettext('Command state is invalid: {{violations}}'),\n    placeholders: {\n      violations: {\n        capture: '$1',\n        translate: {\n          '(\\\\w+?) - may not be null': {\n            gettext: gettext('\"{{field}}\" must not be null'),\n            placeholders: {\n              field: '$1'\n            }\n          }\n        }\n      }\n    }\n  },\n  '^Simulator state is invalid: (.+)$': {\n    gettext: gettext('Simulator state is invalid: {{violations}}'),\n    placeholders: {\n      violations: {\n        capture: '$1',\n        translate: {\n          '(\\\\w+?) - may not be null': {\n            gettext: gettext('\"{{field}}\" should not be null'),\n            placeholders: {\n              field: '$1'\n            }\n          },\n          '(\\\\w+?) - must be less than or equal to (\\\\d+)': {\n            gettext: gettext('\"{{field}}\" must be less than or equal to {{maxValue}}'),\n            placeholders: {\n              field: '$1',\n              maxValue: '$2'\n            }\n          },\n          '(\\\\w+?) - should not contain null values': {\n            gettext: gettext('\"{{field}}\" should not contain null values'),\n            placeholders: {\n              field: '$1'\n            }\n          },\n          '(\\\\w+?) - must be true': {\n            gettext: gettext('\"{{field}}\" must be true'),\n            placeholders: {\n              field: '$1'\n            }\n          },\n          '(\\\\w+?) - must not be empty': {\n            gettext: gettext('\"{{field}}\" must not be empty'),\n            placeholders: {\n              field: '$1'\n            }\n          }\n        }\n      }\n    }\n  }\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGE_REMOTE_ACCESS = {\n  '^Could not login to ssh server on endpoint \"(.+)\"\\\\. Provided credential for user \"(.+)\" is incorrect\\\\.$':\n    {\n      gettext: gettext(\n        'Could not access SSH server on endpoint \"{{endpointName}}\". Provided credentials for user \"{{userName}}\" are incorrect.'\n      ),\n      placeholders: {\n        endpointName: '$1',\n        userName: '$2'\n      }\n    },\n  '^Could not connect to endpoint (.+)\\\\. Could not verify `(.+)` host key with fingerprint `(.+)` for `(.+)` on port (.+)\\\\. If you expected that key, please remove the previous one from configuration to allow for connection\\\\.$':\n    {\n      gettext: gettext(\n        'Could not connect to endpoint \"{{endpointName}}\". Could not verify {{keyType}} host key with fingerprint {{fingerprint}} for host {{host}} on port {{port}}. If you expected this key, please remove the previous one from configuration to allow for connection.'\n      ),\n      placeholders: {\n        endpointName: '$1',\n        keyType: '$2',\n        fingerprint: '$3',\n        host: '$4',\n        port: '$5'\n      }\n    },\n  '^Could not save object remoteAccessUpdate: (.+)$': {\n    gettext: '{{errorMessages}}',\n    placeholders: {\n      errorMessages: {\n        capture: '$1',\n        translate: {\n          'Could not recognize host-key format': {\n            gettext: gettext('Could not recognize \"Host key\" format')\n          },\n          'Could not recognize key-pair format': {\n            gettext: gettext('Could not recognize the format of \"Public key\" or \"Private key\"')\n          }\n        }\n      }\n    }\n  },\n  '^Password cipher does not match$': {\n    gettext: gettext('Password cipher does not match.')\n  },\n  '^Private key must be provided in KEY_PAIR credentials$': {\n    gettext: gettext('Private key must be provided when \"Public/private keys\" option is selected.')\n  },\n  '^Protocol \"(.+?)\" does not support \"(.+?)\" credentials type$': {\n    gettext: gettext(\n      'Protocol \"{{protocol}}\" does not support \"{{credentialsType}}\" credentials type.'\n    ),\n    placeholders: {\n      protocol: '$1',\n      credentialsType: '$2'\n    }\n  },\n  '^Private key cipher does not match$': {\n    gettext: gettext('Private key cipher does not match')\n  }\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_BULKREGISTRATION = {\n  '^A bulk registration CSV template showing all mandatory fields$': {\n    gettext: gettext('A bulk registration CSV template showing all mandatory fields')\n  },\n  '^A bulk registration CSV template for NO_SEC devices with all optional fields$': {\n    gettext: gettext('A bulk registration CSV template for NO_SEC devices with all optional fields')\n  },\n  '^A general bulk registration CSV template showing all possible fields$': {\n    gettext: gettext('A general bulk registration CSV template showing all possible fields')\n  },\n  '^A bulk registration CSV template for PSK devices with all optional fields$': {\n    gettext: gettext('A bulk registration CSV template for PSK devices with all optional fields')\n  },\n  '^CSV file contained empty dataset$': {\n    gettext: gettext('No entries found in uploaded CSV file.')\n  }\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGE_DATABROKER = {\n  '^Cycle detected for route (.+?)!$': {\n    gettext: gettext('Cycle detected for route {{route}}.'),\n    placeholders: {\n      route: '$1'\n    }\n  },\n  '^Data broker processing is currently overloaded and may stop forwarding your data\\\\. Please contact support\\\\.$':\n    {\n      gettext: gettext(\n        'Data broker processing is currently overloaded and may stop forwarding your data. Please contact support.'\n      )\n    },\n  '^Data broker processing is not able to connect do destination tenant, thus data forwarding is not working\\\\. Please contact support\\\\.$':\n    {\n      gettext: gettext(\n        'Data broker processing is not able to connect to destination tenant, thus data forwarding is not working. Please contact support.'\n      )\n    },\n  '^Duplicated connector for instanceUrl (.+?)!$': {\n    gettext: gettext('Target URL {{targetUrl}} already used by another connector.'),\n    placeholders: {\n      targetUrl: '$1'\n    }\n  },\n  '^Duplicated connector for name (.+?)!$': {\n    gettext: gettext('Connector name \"{{name}}\" already used by another connector.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Connector updated$': {\n    gettext: gettext('Connector updated')\n  },\n  '^Connector (.+?) updated: filters [(.+?)] added$': {\n    gettext: gettext('Connector \"{{name}}\" updated: filters [{{filters}}] added'),\n    placeholders: {\n      name: '$1',\n      filters: '$2'\n    }\n  },\n  '^Connector deleted$': {\n    gettext: gettext('Connector deleted')\n  },\n  '^Connector (.+?) deleted$': {\n    gettext: gettext('Connector \"{{name}}\" deleted'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Connector created$': {\n    gettext: gettext('Connector created')\n  },\n  '^Connector (.+?) created: (.+?) added, (.+?)$': {\n    gettext: gettext('Connector \"{{name}}\" created: {{configuration}} added, {{baseProperties}}'),\n    placeholders: {\n      name: '$1',\n      configuration: '$2',\n      baseProperties: '$3'\n    }\n  },\n  '^Connector (.+?) updated: (.+?) added, (.+?) removed$': {\n    gettext: gettext('Connector \"{{name}}\" updated: {{newConfig}} added, {{oldConfig}} removed'),\n    placeholders: {\n      name: '$1',\n      newConfig: '$2',\n      oldConfig: '$3'\n    }\n  },\n  '^Connector (.+?) updated: (.+?) removed, (.+?) added$': {\n    gettext: gettext('Connector \"{{name}}\" updated: {{newConfig}} added, {{oldConfig}} removed'),\n    placeholders: {\n      name: '$1',\n      oldConfig: '$2',\n      newConfig: '$3'\n    }\n  }\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_SMARTREST = {\n  \"^Message with ID (.+?) doesn't exist in smart rest template (.+?)$\": {\n    gettext: gettext(\n      'Message with ID \"{{messageId}}\" doesn\\'t exist in SmartREST template with ID \"{{templateId}}\"'\n    ),\n    placeholders: {\n      messageId: '$1',\n      templateId: '$2'\n    }\n  },\n  \"^Smart rest template (.+?) doesn't exist$\": {\n    gettext: gettext('SmartREST template with ID \"{{templateId}}\" doesn\\'t exist.'),\n    placeholders: {\n      templateId: '$1'\n    }\n  }\n};\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_OPTIONS = {\n  '^Option created$': {\n    gettext: gettext('Option created.')\n  },\n  '^Option \"(.+?)\" created$': {\n    gettext: gettext('Option \"{{option}}\" created.'),\n    placeholders: {\n      option: '$1'\n    }\n  },\n  '^Option deleted$': {\n    gettext: gettext('Option deleted.')\n  },\n  '^Option \"(.+?)\" deleted$': {\n    gettext: gettext('Option \"{{option}}\" deleted.'),\n    placeholders: {\n      option: '$1'\n    }\n  },\n  '^unable to find option with given key (.+?) : Could not find entity Option by ID (.+?)!$': {\n    gettext: gettext('Unable to get tenant option: \"{{option}}\".'),\n    placeholders: {\n      option: '$2'\n    }\n  },\n  '^unable to find option with given key (.+?) : There is no system property for key (.+?)$': {\n    gettext: gettext('Unable to get system option: \"{{option}}\".'),\n    placeholders: {\n      option: '$2'\n    }\n  }\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_DATAHUB = {\n  '^DATAHUB_ADMINISTRATOR$': {\n    gettext: gettext('DataHub Administrator')\n  },\n  '^Can conduct administrative tasks and manage offloading pipelines$': {\n    gettext: gettext('Can conduct administrative tasks and manage offloading pipelines.')\n  },\n  '^DATAHUB_MANAGER$': {\n    gettext: gettext('DataHub Manager')\n  },\n  '^Can manage offloading pipelines$': {\n    gettext: gettext('Can manage offloading pipelines.')\n  },\n  '^DATAHUB_READER$': {\n    gettext: gettext('DataHub Reader')\n  },\n  '^Can execute SQL queries against the data in the data lake$': {\n    gettext: gettext('Can execute SQL queries against the data in the data lake.')\n  }\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_LPWAN = {\n  '^Authentication to the Loriot platform failed with status code (.+?). Check if the credentials are correct or if Session ID is expired.$':\n    {\n      gettext: gettext(\n        'Authentication to the LORIOT platform failed with status code {{ statusCode }}. Check if the credentials are correct or if session ID is expired.'\n      ),\n      placeholders: {\n        statusCode: '$1'\n      }\n    },\n  '^Authentication to the Loriot platform failed with status code (.+?). Check if the base URL, credentials are correct and the application with the given ID exists.$':\n    {\n      gettext: gettext(\n        'Authentication to the LORIOT platform failed with status code {{ statusCode }}. Check if the base URL, credentials are correct and the application with the given ID exists.'\n      ),\n      placeholders: {\n        statusCode: '$1'\n      }\n    },\n  '^Application output creation failed due to status code (.+?)$': {\n    gettext: gettext('Application output creation failed due to status code {{ statusCode }}.'),\n    placeholders: {\n      statusCode: '$1'\n    }\n  },\n  '^Application output update failed due to status code (.+?)$': {\n    gettext: gettext('Application output update failed due to status code {{ statusCode }}.'),\n    placeholders: {\n      statusCode: '$1'\n    }\n  },\n  '^Error creating the device due to status code (.+?). Check if the application Id, devEui, appEui and appKey are in the correct format or the device limit has been exceeded or has been registered with another account in the Loriot provider$':\n    {\n      gettext: gettext(\n        'Error creating the device due to status code {{ statusCode }}. Check if the application name, Device EUI, Application EUI and Application key are in the correct format or the device limit has been exceeded or has been registered with another account in the LORIOT provider.'\n      ),\n      placeholders: {\n        statusCode: '$1'\n      }\n    },\n  '^Error retrieving application with given ID: (.+?) with status code 400. Check if the applicationId provided is in the correct format$':\n    {\n      gettext: gettext(\n        'Error retrieving application with given ID: {{ applicationId }} with status code 400. Check if the selected application is correct'\n      ),\n      placeholders: {\n        applicationId: '$1'\n      }\n    },\n  \"^LNS connection name can't be null or blank.$\": {\n    gettext: gettext(\"LNS connection name can't be empty.\")\n  },\n  '^Unexpected error occurred while accessing the cached LNS connections map with key (.+?)$': {\n    gettext: gettext(\n      'Unexpected error occurred while accessing the cached LNS connections map with key \"{{ connectionName }}\".'\n    ),\n    placeholders: {\n      connectionName: '$1'\n    }\n  },\n  \"^LNS connection named (.+?) doesn't exist.$\": {\n    gettext: gettext('LNS connection named \"{{ connectionName }}\" doesn\\'t exist.'),\n    placeholders: {\n      connectionName: '$1'\n    }\n  },\n  '^LNS connection named (.+?) already exists.$': {\n    gettext: gettext('LNS connection named \"{{ connectionName }}\" already exists.'),\n    placeholders: {\n      connectionName: '$1'\n    }\n  },\n  \"^New LNS connection can't be null.$\": {\n    gettext: gettext(\"New LNS connection can't be empty.\")\n  },\n  \"^LNS connection to update can't be null.$\": {\n    gettext: gettext(\"LNS connection to update can't be empty.\")\n  },\n  \"^The name of the LNS connection to update can't be null.$\": {\n    gettext: gettext(\"The name of the LNS connection to update can't be empty.\")\n  },\n  '^Can not delete the LNS connection with name \"(.+?)\" as it\\'s associated with (.+?) device(s).$':\n    {\n      gettext: gettext(\n        'Could not delete the LNS connection with the name \"{{ connectionName }}\" as it\\'s associated with {{ numberOfDevices }} device(s).'\n      ),\n      placeholders: {\n        connectionName: '$1',\n        numberOfDevices: '$2'\n      }\n    },\n  '^Can not update the LNS connection with name \"(.+?)\" as it\\'s associated with (.+?) device(s).$':\n    {\n      gettext: gettext(\n        'Could not update the LNS connection with the name \"{{ connectionName }}\" as it\\'s associated with {{ numberOfDevices }} device(s).'\n      ),\n      placeholders: {\n        connectionName: '$1',\n        numberOfDevices: '$2'\n      }\n    },\n  '^Authentication to the Actility platform failed with status code (.+?). Check if the credentials are correct.$':\n    {\n      gettext: gettext(\n        'Authentication to the Actility platform failed with status code {{ statusCode }}. Check if the credentials are correct.'\n      ),\n      placeholders: {\n        statusCode: '$1'\n      }\n    },\n  '^Authentication to the Actility platform failed with status code (.+?). Check if the profile Id is correct.$':\n    {\n      gettext: gettext(\n        'Authentication to the Actility platform failed with status code {{ statusCode }}. Check if the Profile ID is correct.'\n      ),\n      placeholders: {\n        statusCode: '$1'\n      }\n    },\n  '^Authentication to the Actility platform failed. Check if the base URL (.+?) is correct.$': {\n    gettext: gettext(\n      'Authentication to the Actility platform failed. Check if the base URL {{ baseUrl }} is correct.'\n    ),\n    placeholders: {\n      baseUrl: '$1'\n    }\n  },\n  '^Authentication to the Sigfox platform failed. Check if the base URL (.+) is correct.$': {\n    gettext: gettext(\n      'Authentication to the Sigfox platform failed. Check if the base URL {{ baseUrl }} is correct.'\n    ),\n    placeholders: {\n      baseUrl: '$1'\n    }\n  },\n  '^Authentication to the Sigfox platform failed. Check if the Parent group Id and/or the credentials are correct.$':\n    {\n      gettext: gettext(\n        'Authentication to the Sigfox platform failed. Check if the Parent group ID and/or the credentials are correct.'\n      )\n    },\n  '^Authentication to the Loriot platform failed with status code (.+?). Session Id might have expired.$':\n    {\n      gettext: gettext(\n        'Authentication to the LORIOT platform failed with status code {{ statusCode }}. Session ID might have expired.'\n      ),\n      placeholders: {\n        statusCode: '$1'\n      }\n    },\n  '^Authentication to the Actility platform failed with status code (.+?). Check if the base URL and/or the credentials are correct.$':\n    {\n      gettext: gettext(\n        'Authentication to the Actility platform failed with status code {{ statusCode }}. Check if the base URL and/or the credentials are correct.'\n      ),\n      placeholders: {\n        statusCode: '$1'\n      }\n    },\n  '^Error on deleting group: (.+?) : Role (.+?) is used in SSO dynamic access mapping$': {\n    gettext: gettext(\n      'Role \"{{ roleName }}\" cannot be deleted because it is assigned to a dynamic access mapping in Single sign-on configuration.'\n    ),\n    placeholders: {\n      roleName: '$1'\n    }\n  },\n  '^The series param (.+?) has wrong format. Valid format is (.+?)$': {\n    gettext: gettext(\n      'The data cannot be retrieved because the fragment and series combination <code>{{ seriesParam }}</code> has an invalid format. Please verify your fragment and series selections in the data point configuration. The correct format should be <code>{{ validFormat }}</code>.'\n    ),\n    placeholders: {\n      seriesParam: '$1',\n      validFormat: '$2'\n    }\n  },\n  '^Http status code: 404\\n{error=\"options/Not Found\",message=\"Unable to find option by given key: sigfox-agent/provider.token\",info=\"https://www.cumulocity.com/guides/reference-guide/#error_reporting\",details=\"null\"}$':\n    {\n      gettext: gettext('Unable to find option by given key: sigfox-agent/provider.token')\n    },\n  '^Creating device on LoRa platform failed$': {\n    gettext: gettext('Could not create the device in the LoRa platform.')\n  },\n  '^No LoRa provider settings are found. Please configure the connectivity settings.$': {\n    gettext: gettext(\n      'No LoRa provider settings are found. Please configure the connectivity settings.'\n    )\n  }\n} as const;\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const PATTERN_MESSAGES_LWM2M = {\n  '^LWM2M device type$': {\n    gettext: gettext('LWM2M device type')\n  },\n  '^LWM2M server URI$': {\n    gettext: gettext('LWM2M server URI')\n  },\n  '^coaps://<LWM2M-server-domain>:<coaps-port>$': {\n    gettext: gettext('coaps://<LWM2M-server-domain>:<coaps-port>')\n  },\n  '^Endpoint client ID$': {\n    gettext: gettext('Endpoint client ID')\n  },\n  '^Server public key$': {\n    gettext: gettext('Server public key')\n  },\n  '^Generate bootstrap server config$': {\n    gettext: gettext('Generate bootstrap server config')\n  },\n  '^LWM2M bootstrap short server ID$': {\n    gettext: gettext('LWM2M bootstrap short server ID')\n  },\n  '^LWM2M short server ID$': {\n    gettext: gettext('LWM2M short server ID')\n  },\n  '^Registration lifetime$': {\n    gettext: gettext('Registration lifetime')\n  },\n  '^in seconds$': {\n    gettext: gettext('in seconds')\n  },\n  '^Security instance offset$': {\n    gettext: gettext('Security instance offset')\n  },\n  '^Default minimum period$': {\n    gettext: gettext('Default minimum period')\n  },\n  '^Default maximum period$': {\n    gettext: gettext('Default maximum period')\n  },\n  '^Binding mode$': {\n    gettext: gettext('Binding mode')\n  },\n  '^applicable for LWM2M 1\\\\.0$': {\n    gettext: gettext('applicable for LWM2M 1.0')\n  },\n  '^Awake time registration parameter$': {\n    gettext: gettext('Awake time registration parameter')\n  },\n  '^in milliseconds, 0 means device is always online$': {\n    gettext: gettext('in milliseconds, 0 means device is always online')\n  },\n  '^Use common timestamp resources 5518 and 6050 or object specific timestamp for object 6 reported by the device if available$':\n    {\n      gettext: gettext(\n        'Use common timestamp resources 5518 and 6050 or object specific timestamp for object 6 reported by the device if available'\n      )\n    },\n  '^Notification storing when disabled or offline$': {\n    gettext: gettext('Notification storing when disabled or offline')\n  },\n  '^Disable timeout$': {\n    gettext: gettext('Disable timeout')\n  },\n  '^LWM2M request timeout$': {\n    gettext: gettext('LWM2M request timeout')\n  },\n  '^in milliseconds$': {\n    gettext: gettext('in milliseconds')\n  },\n  '^Binary delivery encoding$': {\n    gettext: gettext('Binary delivery encoding')\n  },\n  '^Firmware update delivery method$': {\n    gettext: gettext('Firmware update delivery method')\n  },\n  '^Firmware update supported device protocol$': {\n    gettext: gettext('Firmware update supported device protocol')\n  },\n  '^Firmware update reset mechanism$': {\n    gettext: gettext('Firmware update reset mechanism')\n  },\n  '^Firmware update URL$': {\n    gettext: gettext('Firmware update URL')\n  },\n  '^Failed to find operation data in the internal memory store\\\\. Try again!$': {\n    gettext: gettext('Failed to find operation data in the internal memory store. Try again.')\n  },\n  '^Security mode$': {\n    gettext: gettext('Security mode')\n  },\n  '^Bootstrap PSK ID$': {\n    gettext: gettext('Bootstrap PSK ID')\n  },\n  '^Bootstrap pre-shared key$': {\n    gettext: gettext('Bootstrap pre-shared key')\n  },\n  '^LWM2M PSK ID$': {\n    gettext: gettext('LWM2M PSK ID')\n  },\n  '^LWM2M pre-shared key$': {\n    gettext: gettext('LWM2M pre-shared key')\n  },\n  '^LWM2M bulk device upload operation$': {\n    gettext: gettext('LWM2M bulk device upload operation')\n  },\n  '^This operation is only triggered by the agent when user uploads a CSV file with all required information to register new LWM2M devices\\\\. The source of the operation is the LWM2M device connector\\\\. Users are not able to trigger this operation using the shell command\\\\.$':\n    {\n      gettext: gettext(\n        'This operation is only triggered by the agent when user uploads a CSV file with all required information to register new LWM2M devices. The source of the operation is the LWM2M device connector. Users are not able to trigger this operation using the shell command.'\n      )\n    },\n  '^Write$': {\n    gettext: gettext('Write')\n  },\n  '^Execute$': {\n    gettext: gettext('Execute')\n  },\n  '^Execute with parameters$': {\n    gettext: gettext('Execute with parameters')\n  },\n  '^Execute with Parameters$': {\n    gettext: gettext('Execute with parameters')\n  },\n  '^Delete Instance$': {\n    gettext: gettext('Delete instance')\n  },\n  '^Create Instance$': {\n    gettext: gettext('Create instance')\n  },\n  '^Read Object$': {\n    gettext: gettext('Read object')\n  },\n  '^Read Instance$': {\n    gettext: gettext('Read instance')\n  },\n  '^LWM2M bulk device removal operation$': {\n    gettext: gettext('LWM2M bulk device removal operation')\n  },\n  '^This operation is only triggered by the agent when user uploads a CSV file with a list of endpoint IDs to delete from C8Y\\\\.The source of the operation is the LWM2M device connector\\\\. Users are not able to trigger this operation using the shell command\\\\.$':\n    {\n      gettext: gettext(\n        'This operation is only triggered by the agent when user uploads a CSV file with a list of endpoint IDs to delete from the platform. The source of the operation is the LWM2M device connector. Users are not able to trigger this operation using the shell command.'\n      )\n    },\n  '^Could not find device$': {\n    gettext: gettext('Could not find device')\n  },\n  '^Exception occurred while removing device (.+?)$': {\n    gettext: gettext('Exception occurred while removing device: {{ exceptionMessage }}'),\n    placeholders: {\n      exceptionMessage: '$1'\n    }\n  },\n  '^This command can be used to migrate LWM2M devices which are created in a non-standard way\\\\. It can take comma-separated device managed object IDs as parameters\\\\. If the IDs are specified then the migration will be done only for those devices\\\\. If the command is sent without any parameters then the agent will look up for possible Lwm2m devices that are not created in a standard way and try to migrate them\\\\. Usage: migrateLwm2mDevices 1122,3344 or migrateLwm2mDevices$':\n    {\n      gettext: gettext(\n        'This command can be used to migrate LWM2M devices which are created in a non-standard way. It can take comma-separated device managed object IDs as parameters. If the IDs are specified then the migration will be done only for those devices. If the command is sent without any parameters then the agent will look up for possible LWM2M devices that are not created in a standard way and try to migrate them. Usage: migrateLwm2mDevices 1122,3344 or migrateLwm2mDevices'\n      )\n    },\n  '^Unable to migrate devices$': {\n    gettext: gettext('Unable to migrate devices')\n  },\n  '^Error while processing report$': {\n    gettext: gettext('Error while processing report')\n  },\n  '^Expected 1 endpointId argument$': {\n    gettext: gettext('Expected 1 endpointId argument')\n  },\n  '^LWM2M device registration$': {\n    gettext: gettext('LWM2M device registration')\n  },\n  '^The required and optional properties to register and setup LWM2M Devices$': {\n    gettext: gettext('The required and optional properties to register and setup LWM2M devices')\n  },\n  '^Bootstrap$': {\n    gettext: gettext('Bootstrap')\n  },\n  '^Advanced$': {\n    gettext: gettext('Advanced')\n  },\n  '^Bulk LWM2M device registration$': {\n    gettext: gettext('Bulk LWM2M device registration')\n  },\n  '^This command returns a list of shell commands with description that can be created for the Lwm2m device connector\\\\.$':\n    {\n      gettext: gettext(\n        'This command returns a list of shell commands with description that can be created for the LWM2M device connector.'\n      )\n    },\n  '^The following operations are supported:$': {\n    gettext: gettext('The following operations are supported:')\n  },\n  '^PSK template$': {\n    gettext: gettext('PSK template')\n  },\n  '^A bulk registration CSV template showing all mandatory fields$': {\n    gettext: gettext('A bulk registration CSV template showing all mandatory fields')\n  },\n  '^Mandatory fields template$': {\n    gettext: gettext('Mandatory fields template')\n  },\n  '^General template$': {\n    gettext: gettext('General template')\n  },\n  '^A bulk registration CSV template for NO_SEC devices with all optional fields$': {\n    gettext: gettext('A bulk registration CSV template for NO_SEC devices with all optional fields')\n  },\n  '^A general bulk registration CSV template showing all possible fields$': {\n    gettext: gettext('A general bulk registration CSV template showing all possible fields')\n  },\n  '^A bulk registration CSV template for PSK devices with all optional fields$': {\n    gettext: gettext('A bulk registration CSV template for PSK devices with all optional fields')\n  },\n  '^NO_SEC template$': {\n    gettext: gettext('NO_SEC template')\n  }\n} as const;\n","import { PATTERN_MESSAGES_ALARMS } from './pattern-messages-alarms.data';\nimport { PATTERN_MESSAGES_APPLICATIONS } from './pattern-messages-applications.data';\nimport { PATTERN_MESSAGES_AUTHENTICATION } from './pattern-messages-authentication.data';\nimport { PATTERN_MESSAGES_BULKOPERATIONS } from './pattern-messages-bulk-operations.data';\nimport { PATTERN_MESSAGES_CEP } from './pattern-messages-cep.data';\nimport { PATTERN_MESSAGES_CERTIFICATES } from './pattern-messages-certificates.data';\nimport { PATTERN_MESSAGES_DEVICES } from './pattern-messages-devices.data';\nimport { PATTERN_MESSAGES_FIRMWARE } from './pattern-messages-firmware.data';\nimport { PATTERN_MESSAGES_MICROSERVICES } from './pattern-messages-microservices.data';\nimport { PATTERN_MESSAGES_OPERATIONS } from './pattern-messages-operations.data';\nimport { PATTERN_MESSAGES_ROLES } from './pattern-messages-roles.data';\nimport { PATTERN_MESSAGES_TENANTS } from './pattern-messages-tenants.data';\nimport { PATTERN_MESSAGES_USERS } from './pattern-messages-users.data';\nimport { PATTERN_MESSAGES_MISC } from './pattern-messages-misc.data';\nimport { PATTERN_MESSAGES_SIMULATION } from './pattern-messages-simulation.data';\nimport { PATTERN_MESSAGE_REMOTE_ACCESS } from './pattern-messages-remote-access.data';\nimport { PATTERN_MESSAGES_BULKREGISTRATION } from './pattern-messages-bulk-registration.data';\nimport { PATTERN_MESSAGE_DATABROKER } from './pattern-messages-databroker.data';\nimport { PATTERN_MESSAGES_SMARTREST } from './pattern-messages-smartrest.data';\nimport { PATTERN_MESSAGES_OPTIONS } from './pattern-messages-options.data';\nimport { PATTERN_MESSAGES_DATAHUB } from './pattern-messages-datahub.data';\nimport { PATTERN_MESSAGES_LPWAN } from './pattern-messages-lpwan.data';\nimport { PATTERN_MESSAGES_LWM2M } from './pattern-messages-lwm2m.data';\n\nexport const MESSAGES_CORE_I18N = {\n  ...PATTERN_MESSAGES_ALARMS,\n  ...PATTERN_MESSAGES_APPLICATIONS,\n  ...PATTERN_MESSAGES_AUTHENTICATION,\n  ...PATTERN_MESSAGES_DATAHUB,\n  ...PATTERN_MESSAGES_BULKOPERATIONS,\n  ...PATTERN_MESSAGES_BULKREGISTRATION,\n  ...PATTERN_MESSAGES_CEP,\n  ...PATTERN_MESSAGES_CERTIFICATES,\n  ...PATTERN_MESSAGES_DEVICES,\n  ...PATTERN_MESSAGES_FIRMWARE,\n  ...PATTERN_MESSAGES_MICROSERVICES,\n  ...PATTERN_MESSAGES_OPERATIONS,\n  ...PATTERN_MESSAGES_ROLES,\n  ...PATTERN_MESSAGES_TENANTS,\n  ...PATTERN_MESSAGES_USERS,\n  ...PATTERN_MESSAGES_LPWAN,\n  ...PATTERN_MESSAGES_LWM2M,\n  ...PATTERN_MESSAGE_REMOTE_ACCESS,\n  ...PATTERN_MESSAGE_DATABROKER,\n  ...PATTERN_MESSAGES_SIMULATION,\n  ...PATTERN_MESSAGES_SMARTREST,\n  ...PATTERN_MESSAGES_OPTIONS,\n  ...PATTERN_MESSAGES_MISC\n} as const;\n","/* tslint:disable:max-line-length */\n\n/**\n * Pattern-based i18n messages for Cumulocity IoT.\n *\n * This file re-exports all pattern messages from the patterns directory.\n * Each feature category has its own file for better maintainability:\n *\n * - alarms: Alarm-related messages\n * - applications: Application management messages\n * - authentication: Authentication and login messages\n * - bulk-operations: Bulk operation messages\n * - cep: CEP module messages\n * - certificates: Certificate and PKI messages\n * - connectors: Data broker and connector messages\n * - csv: CSV file messages\n * - devices: Device, LWM2M, LoRa, Sigfox, and device protocol messages\n * - firmware: Firmware and software messages\n * - microservices: Microservice, container, and Kubernetes messages\n * - operations: Operation and command messages\n * - roles: Role and permission messages\n * - tenants: Tenant and domain messages\n * - users: User management messages\n * - simulation: Simulation messages\n * - loriot: LORIOT provider messages\n * - remote-access: Remote access messages\n * - misc: Other miscellaneous messages\n */\n\nexport { MESSAGES_CORE_I18N } from './patterns';\n","import { gettext } from '@c8y/ngx-components/gettext';\n\n/**\n * Messages required to translate texts of events sent by the datahub microservice.\n */\nexport const MESSAGES_DATAHUB_I18N = {\n  '^Offloading task \"(.+?)\" finished successfully.$': {\n    gettext: gettext('Offloading task \"{{ taskName }}\" finished successfully.'),\n    placeholders: {\n      taskName: '$1'\n    }\n  },\n  '^Offloading task \"(.+?)\" finished erroneously.$': {\n    gettext: gettext('Offloading task \"{{ taskName }}\" finished erroneously.'),\n    placeholders: {\n      taskName: '$1'\n    }\n  },\n  '^Compaction task \"(.+?)\" finished successfully.$': {\n    gettext: gettext('Compaction task \"{{ taskName }}\" finished successfully.'),\n    placeholders: {\n      taskName: '$1'\n    }\n  },\n  '^Compaction task \"(.+?)\" finished erroneously.$': {\n    gettext: gettext('Compaction task \"{{ taskName }}\" finished erroneously.'),\n    placeholders: {\n      taskName: '$1'\n    }\n  }\n};\n","// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport { TranslateDirective, TranslateService } from '@ngx-translate/core';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n  selector: '[translate],[ngx-translate]',\n  standalone: true\n})\nexport class C8yTranslateDirective\n  extends TranslateDirective\n  implements AfterViewInit, OnDestroy, OnChanges\n{\n  /**\n   * Used to get private element property from TranslateDirective, so it doesn't throw tsErrors\n   */\n  private get _elementRef(): ElementRef {\n    return (this as any).element;\n  }\n\n  /**\n   * Used to get private translateService property from TranslateDirective, so it doesn't throw tsErrors\n   */\n  private get _translateService(): TranslateService {\n    return (this as any).translateService;\n  }\n\n  /**\n   * Used to trigger events when html is replaced by directive.\n   */\n  htmlUpdateEvent: EventEmitter<void> = new EventEmitter<void>();\n\n  /**\n   * When this directive successfully translates node, it stores its value in this property.\n   * Another translation will be performed only if new translation value differs from stored one.\n   */\n  lastTranslation: string;\n\n  /**\n   * When this directive encounters element that is HTML, it should switch to Html mode even if\n   * new translated element does not contain any HTML.\n   */\n  htmlMode: boolean;\n\n  initialValue: string;\n  destroy$ = new Subject<void>();\n  elementTranslated = false;\n\n  constructor(_translateService: TranslateService, _element: ElementRef, _ref: ChangeDetectorRef) {\n    super();\n\n    _translateService.onLangChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n      if (!this.htmlMode) {\n        _element.nativeElement.innerHTML = this.initialValue;\n        this.setTranslatedStatus(false);\n        _ref.detectChanges();\n      }\n    });\n  }\n\n  /**\n   * Overridden method from original directive.\n   * For simple text nodes, it just invokes the base method.\n   * For complex nodes, it builds translation key from whole `inner HTML`\n   * and replaces it with its translation.\n   * This prevents splitting `HTML` into pieces and attempting to translate each one separately\n   * which doesn't work, because we extract strings in whole.\n   */\n  override checkNodes(forceUpdate = false, translations?: any) {\n    if (!this.htmlMode && (this.isElementSimpleTextType() || this.isElementInnerHtmlEmpty())) {\n      /**\n       * If element does not contain complex html, then fallBack to default logic.\n       */\n      if (!this.elementTranslated) {\n        super.checkNodes(forceUpdate, translations);\n        this.setTranslatedStatus(true);\n      }\n    } else {\n      this.htmlMode = true;\n      if (this.isLookupKeyMissing()) {\n        this._elementRef.nativeElement.lookupKey = this.getLookupKey();\n      }\n      if (this.lookupKeyExist()) {\n        const newTranslation = this.getNewTranslation();\n        if (!this.lastTranslation || this.lastTranslation !== newTranslation) {\n          this.lastTranslation = newTranslation;\n          this.updateHtmlContent();\n          this.htmlUpdateEvent.emit();\n        }\n      }\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes && changes.translateParams) {\n      this.setTranslatedStatus(false);\n    }\n  }\n\n  ngOnDestroy() {\n    this.htmlUpdateEvent.complete();\n    this.destroy$.next();\n    this.destroy$.complete();\n    super.ngOnDestroy();\n  }\n\n  ngAfterViewInit() {\n    this.initialValue = this._elementRef.nativeElement.innerHTML;\n  }\n\n  setTranslatedStatus(status: boolean) {\n    this.elementTranslated = status;\n  }\n\n  /**\n   * Builds lookup key from innerHTML, removes comments (that might be added by Angular) and trims it.\n   */\n  private getLookupKey() {\n    return this._elementRef.nativeElement.innerHTML.replace(/<!--.*?-->/gs, '').trim();\n  }\n\n  private isElementSimpleTextType(): boolean {\n    return (\n      this._elementRef.nativeElement.childNodes.length === 1 &&\n      this._elementRef.nativeElement.childNodes[0].nodeType === 3\n    );\n  }\n\n  private isElementInnerHtmlEmpty(): boolean {\n    return !this._elementRef.nativeElement.innerHTML;\n  }\n\n  private isLookupKeyMissing(): boolean {\n    return !this._elementRef.nativeElement.lookupKey;\n  }\n\n  private lookupKeyExist(): boolean {\n    return this._elementRef.nativeElement.lookupKey;\n  }\n\n  private getNewTranslation(): string {\n    return this._translateService.instant(\n      this._elementRef.nativeElement.lookupKey,\n      (this as any).currentParams || {}\n    );\n  }\n\n  private updateHtmlContent(): void {\n    this._elementRef.nativeElement.innerHTML = this.lastTranslation;\n  }\n}\n","// eslint-disable-next-line @typescript-eslint/no-restricted-imports\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Pipe } from '@angular/core';\nimport { removeContextIndicators } from './translation-utils';\n\n/**\n * Provides copy of original pipe for C8yTranslateModule\n */\n@Pipe({\n  name: 'translate',\n  pure: false, // required to update the value when the promise is resolved\n  standalone: true\n})\nexport class C8yTranslatePipe extends TranslatePipe {\n  transform(query: string, ...args: any[]): any {\n    if (args[0]?.noTranslateRemoveContext) {\n      return removeContextIndicators(query);\n    }\n\n    return super.transform(query, ...args);\n  }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { Injectable } from '@angular/core';\n\nconst roleNamesToLabels = {\n  admins: gettext('Admin User`role`'),\n  business: gettext('Business User`role`'),\n  devices: gettext('Device User`role`'),\n  Manager: gettext('Asset Manager`role`'),\n  readers: gettext('Reader User`role`')\n};\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PropertyValueTransformService {\n  getName(namedObject: { name: string }) {\n    const name = namedObject && namedObject.name;\n    return roleNamesToLabels[name] || name;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PropertyValueTransformService } from './property-value-transform.service';\n\n/**\n * Service transforms the name for translation based on mapping provided by\n * PropertyValueTransformService.\n * Usage:\n *  value | nameTransform | translate\n * Example:\n *  {{ 'admins' | nameTransform | translate }}\n *  transforms original string to: 'Admin User`role`' and then translates it like 'Admin User'\n */\n@Pipe({\n  standalone: true,\n  name: 'nameTransform'\n})\nexport class NameTransformPipe implements PipeTransform {\n  constructor(private propertyTransformService: PropertyValueTransformService) {}\n  transform(value: string): string {\n    return this.propertyTransformService.getName({ name: value });\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { C8yTranslateDirective } from './c8y-translate.directive';\nimport { C8yTranslatePipe } from './c8y-translate.pipe';\nimport { NameTransformPipe } from './name-transform.pipe';\n\n/**\n * Module must be redeclared, as Components cant be declared by two modules.\n */\n@NgModule({\n  exports: [C8yTranslatePipe, C8yTranslateDirective, NameTransformPipe],\n  imports: [NameTransformPipe, C8yTranslatePipe, C8yTranslateDirective]\n})\nexport class C8yTranslateModule {}\n","import { Injectable } from '@angular/core';\n\n/**\n * A service to provide unmodified, cached translations for angular.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class CachedLocaleDictionaryService {\n  cachedDictionary: { [lang: string]: { [key: string]: string } } = {};\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Injection token for providing the context path of a plugin.\n *\n * Can e.g. be used to construct URLs to assets within the plugin.\n */\nexport const C8Y_PLUGIN_CONTEXT_PATH = new InjectionToken<string>('C8Y_PLUGIN_CONTEXT_PATH');\n\n/**\n * Injection token for providing the name of a plugin.\n *\n * Can e.g. be used to identify the plugin within the application.\n */\nexport const C8Y_PLUGIN_NAME = new InjectionToken<string>('C8Y_PLUGIN_NAME');\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { OptionsService } from '../common/options.service';\nimport { CachedLocaleDictionaryService } from './cached-locale-dictionary.service';\nimport { LOCALE_PATH } from './locale.path';\nimport { LANGUAGES } from './languages';\nimport { combineLatest, defer, Observable, of } from 'rxjs';\nimport { catchError, map, shareReplay, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { TranslateLoader, TranslationObject } from '@ngx-translate/core';\nimport { getDictionaryWithTrimmedKeys } from './translation-utils';\nimport { C8Y_PLUGIN_CONTEXT_PATH } from '../plugins/plugins-injection-token';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { uniq } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\nexport class C8yTranslationCache {\n  private cache = new Map<string, Observable<{ [key: string]: string }>>();\n\n  constructor(\n    private optionsService: OptionsService,\n    private cachedLocaleDictionaryService: CachedLocaleDictionaryService,\n    private pluginResolverService: PluginsResolveService,\n    @Inject(LOCALE_PATH) private path: string = null,\n    @Inject(LANGUAGES) private languages: { [key: string]: { url?: string } } | null = null\n  ) {}\n\n  getTranslation(lang: string, pluginContextPath?: string | null): Observable<TranslationObject> {\n    const translations$ = combineLatest([\n      defer(() => this.getTranslationsFromApp(lang)),\n      defer(() => this.getUserDefinedTranslations(lang)),\n      defer(() => this.optionsService.get$('langsDetails', {})),\n      defer(() =>\n        // TODO: Ideally we would not load the translations for all plugins if pluginContextPath is not set..\n        // but we need it like this for now to ensure strings that are provided via hooks from the plugin to the shell still get translated correctly.\n        // We would need to find a way how e.g. navigator nodes provided via a plugin would be translated with the correct TranslateService instance of the plugin instead of the shell.\n        pluginContextPath\n          ? this.getTranslationsForPlugin(lang, pluginContextPath)\n          : this.getTranslationsForPlugins(lang)\n      )\n    ]).pipe(\n      map(([appTranslations, userDefinedTranslations, langsDetails, pluginTranslations]) => {\n        const translationsFromBranding = (langsDetails && langsDetails[lang]) || {};\n        // if loading translations for a specific plugin, plugin translations have higher priority than app translations\n        if (pluginContextPath) {\n          return {\n            ...appTranslations,\n            ...pluginTranslations,\n            ...translationsFromBranding,\n            ...userDefinedTranslations\n          };\n        }\n        // otherwise, app translations should override plugin translations\n        return {\n          ...pluginTranslations,\n          ...appTranslations,\n          ...translationsFromBranding,\n          ...userDefinedTranslations\n        };\n      }),\n      tap(dictionary => {\n        this.cachedLocaleDictionaryService.cachedDictionary[lang] = dictionary;\n      }),\n      map(dictionary => getDictionaryWithTrimmedKeys(dictionary)),\n      catchError(() => of({}))\n    );\n\n    return translations$;\n  }\n\n  clearCache() {\n    this.cache.clear();\n  }\n\n  protected getTranslationsForPlugins(lang: string) {\n    return this.pluginResolverService.contextPathsFromWhereRemotesHaveBeenLoaded$.pipe(\n      takeUntil(defer(() => this.pluginResolverService.waitForPluginsToLoad())),\n      switchMap(plugins => {\n        // no need to load translations for self scoped plugins\n        plugins = uniq(plugins.filter(plugin => plugin !== this.optionsService.contextPath));\n        if (!plugins.length) {\n          return of({});\n        }\n        return combineLatest(\n          plugins.map(plugin => this.getTranslationsForPlugin(lang, plugin))\n        ).pipe(\n          map(translations => {\n            return translations.reduce((acc, translation) => ({ ...acc, ...translation }), {});\n          })\n        );\n      })\n    );\n  }\n\n  protected getTranslationsForPlugin(lang: string, pluginContextPath: string) {\n    if (!pluginContextPath) {\n      return of({});\n    }\n    const url = `/apps/${pluginContextPath}/${lang}.json`;\n    return this.getTranslationFromPath(url, lang);\n  }\n\n  protected getTranslationsFromApp(lang: string) {\n    const path = this.path || '';\n    let url = `${path}${lang}.json`;\n    if (this.languages && this.languages[lang] && this.languages[lang].url) {\n      url = this.languages[lang].url;\n    }\n\n    return this.getTranslationFromPath(url, lang);\n  }\n\n  protected getUserDefinedTranslations(lang: string) {\n    const url = `/apps/public/user-defined-translations/${lang}.json`;\n    return this.getTranslationFromPath(url, lang);\n  }\n\n  protected getTranslationFromPath(\n    path: string,\n    lang: string\n  ): Observable<{ [key: string]: string }> {\n    if (this.cache.has(path)) {\n      return this.cache.get(path);\n    }\n    const observable = defer(async () => {\n      try {\n        const fetchResponse = await fetch(path);\n        if (!fetchResponse.ok) {\n          throw new Error(`Unexpected response status: ${fetchResponse.status}`);\n        }\n\n        const responseBody = await fetchResponse.json();\n\n        if (responseBody[lang]) {\n          return responseBody[lang];\n        }\n      } catch (e) {\n        console.warn(`Failed to fetch translations from ${path}`);\n      }\n      return {};\n    }).pipe(shareReplay(1));\n    this.cache.set(path, observable);\n    return observable;\n  }\n}\n\n@Injectable()\nexport class C8yTranslationLoader implements TranslateLoader {\n  constructor(\n    private translationCache: C8yTranslationCache,\n    @Optional() @Inject(C8Y_PLUGIN_CONTEXT_PATH) private pluginContextPath: string = null\n  ) {}\n\n  getTranslation(lang: string): Observable<TranslationObject> {\n    return this.translationCache.getTranslation(lang, this.pluginContextPath);\n  }\n}\n","import {\n  ClassProvider,\n  Injectable,\n  LOCALE_ID,\n  ModuleWithProviders,\n  NgModule,\n  Provider\n} from '@angular/core';\nimport {\n  provideTranslateService,\n  provideMissingTranslationHandler,\n  provideTranslateLoader,\n  RootTranslateServiceConfig,\n  TranslateStore,\n  InterpolatableTranslation,\n  Language,\n  TranslateService,\n  TranslationObject\n} from '@ngx-translate/core';\nimport { OptionsService } from '../common/options.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { LANGUAGES } from './languages';\nimport { LOCALE_PATH } from './locale.path';\nimport { MissingTranslationCustomHandler } from './missing-translation-custom.handler';\nimport { MESSAGES_CORE_I18N } from './pattern-messages.data';\nimport { MESSAGES_DATAHUB_I18N } from './datahub.pattern-messages.data';\nimport { hookPatternMessages } from './patterns-message.hook';\nimport { C8yTranslateModule } from './c8y-translate.module';\nimport { C8yTranslationLoader } from './translation-loader.service';\nimport { trimTranslationKey } from './translation-utils';\n\n/**\n * The @angular/common/locales folder in node_modules contains files with names created based on RFC 3066bis.\n * https://www.w3.org/International/articles/bcp47/\n *\n * Same mapping also in devkit: packages\\devkit\\src\\webpack\\config\\translation.ts\n * TODO: unify and move to a common place e.g. @c8y/options once this not only includes types\n */\nconst angularLocalesLanguageMap = {\n  en: 'en-GB',\n  'en-EN': 'en-GB',\n  'en-US': 'en',\n  'ja-JP': 'ja',\n  'zh-CN': 'zh',\n  'zh-TW': 'zh',\n  'pt-BR': 'pt'\n} as const;\n\nexport function localePathFactory(options: OptionsService) {\n  return options.localePath;\n}\n\nexport function languagesFactory(options: OptionsService) {\n  return options.languages;\n}\n\nexport function localeId(appStateService: AppStateService) {\n  return {\n    get lang() {\n      return getAngularLocalesLanguageString(appStateService.state.lang);\n    },\n    toLowerCase() {\n      return this.lang.toLowerCase();\n    },\n    toString() {\n      return this.lang;\n    }\n  };\n}\n\nexport function getAngularLocalesLanguageString(language = 'en'): string {\n  const key = language as keyof typeof angularLocalesLanguageMap;\n  if (angularLocalesLanguageMap[key]) {\n    return angularLocalesLanguageMap[key];\n  }\n  return language;\n}\n\n@Injectable()\nexport class CustomTranslateStore extends TranslateStore {\n  protected override getValue(language: Language, key: string): InterpolatableTranslation {\n    // Trim the key to avoid issues with leading/trailing spaces\n    const trimmedKey = trimTranslationKey(key);\n    return super.getValue(language, trimmedKey);\n  }\n}\n\n/**\n * Custom TranslateService that prevents setting translations before the current language is set.\n * Required since apama team sets their translations too early before even the user language is determined.\n */\n@Injectable()\nexport class CustomTranslateService extends TranslateService {\n  override setTranslation(\n    lang: Language,\n    translations: TranslationObject,\n    shouldMerge?: boolean\n  ): void {\n    if (!this.getCurrentLang()) {\n      try {\n        throw new Error(\n          'You are trying to set a translation before the current language has been set. Setting the current language is being taken care of by the Web SDK. You should only set translations after the current language has been set to avoid race conditions.'\n        );\n      } catch (e) {\n        console.error(e);\n      }\n\n      return;\n    }\n    return super.setTranslation(lang, translations, shouldMerge);\n  }\n}\n\nexport function provideTranslationServiceInstance(options: RootTranslateServiceConfig = {}) {\n  const providers = provideTranslateService({\n    missingTranslationHandler: provideMissingTranslationHandler(MissingTranslationCustomHandler),\n    loader: provideTranslateLoader(C8yTranslationLoader),\n    ...options\n  });\n\n  const foundTranslateStoreIndex = providers.findIndex(p => p === TranslateStore);\n  if (foundTranslateStoreIndex !== -1) {\n    providers[foundTranslateStoreIndex] = {\n      provide: TranslateStore,\n      useClass: CustomTranslateStore\n    };\n  } else {\n    throw new Error('TranslateStore provider not found in the providers array');\n  }\n\n  // Replace TranslateService with CustomTranslateService\n  // can be removed once apama team fixes their early translation setting\n  const foundTranslateServiceProvider: ClassProvider = providers.find(\n    (p: ClassProvider) => p.provide === TranslateService\n  ) as ClassProvider;\n  if (foundTranslateServiceProvider) {\n    foundTranslateServiceProvider.useClass = CustomTranslateService;\n  } else {\n    throw new Error('TranslateService provider not found in the providers array');\n  }\n\n  return providers;\n}\n\nexport function provideI18n(): Provider[] {\n  return [\n    { provide: LOCALE_ID, useFactory: localeId, deps: [AppStateService] },\n    hookPatternMessages(MESSAGES_CORE_I18N),\n    hookPatternMessages(MESSAGES_DATAHUB_I18N),\n    { provide: LOCALE_PATH, useFactory: localePathFactory, deps: [OptionsService] },\n    { provide: LANGUAGES, useFactory: languagesFactory, deps: [OptionsService] },\n    provideTranslationServiceInstance()\n  ];\n}\n\n/**\n * The angular module definition for i18n (translation).\n * @exports I18nModule\n */\n@NgModule({\n  exports: [C8yTranslateModule]\n})\nexport class I18nModule {\n  static providers(): Provider[] {\n    return provideI18n();\n  }\n  static forRoot(): ModuleWithProviders<I18nModule> {\n    return {\n      ngModule: I18nModule,\n      providers: I18nModule.providers()\n    };\n  }\n}\n","import {\n  Injectable,\n  NgModuleRef,\n  EnvironmentInjector,\n  Type,\n  InjectionToken,\n  Optional,\n  Inject,\n  ValueProvider,\n  ClassProvider,\n  ExistingProvider,\n  Provider,\n  createNgModule,\n  createEnvironmentInjector\n} from '@angular/core';\nimport { GenericHookType, hookGeneric } from '../common/extension-hooks';\nimport { RemoteModuleFactoryWithMetadata } from '@c8y/bootstrap';\nimport { PluginsResolveService } from './plugins-resolve.service';\nimport { OptionsService } from '../common/options.service';\nimport { provideTranslationServiceInstance } from '../i18n/i18n.module';\nimport { C8Y_PLUGIN_CONTEXT_PATH, C8Y_PLUGIN_NAME } from './plugins-injection-token';\n\nexport interface RemoteModuleWithMetadata {\n  moduleRef?: NgModuleRef<unknown>;\n  remoteNgModule?: NgModuleRef<unknown> | Type<unknown>;\n  injector: EnvironmentInjector;\n  name: string;\n  fullContextPath: string;\n}\n\n/**\n * @deprecated Only meant for internal usage.\n * @internal\n */\nexport const HOOK_PLUGIN = new InjectionToken<any>('HOOK_PLUGIN');\n\n/**\n * @deprecated Only meant for internal usage.\n * @internal\n */\nexport function hookPlugin(\n  plugins: GenericHookType<any>\n): ValueProvider | ClassProvider | ExistingProvider {\n  return hookGeneric<any>(plugins, HOOK_PLUGIN, { multi: false });\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PluginsLoaderService {\n  private injectorPerContextPath = new Map<string, EnvironmentInjector>();\n\n  constructor(\n    @Optional()\n    @Inject(HOOK_PLUGIN)\n    private plugins: Array<RemoteModuleFactoryWithMetadata<string>>,\n    private injector: EnvironmentInjector,\n    private pluginsResolveService: PluginsResolveService,\n    private optionsService: OptionsService\n  ) {}\n\n  loadAllModulesAndSetState() {\n    return this.loadModulesDynamically(this.plugins);\n  }\n\n  /**\n   * Loads modules and handles hooking correctly.\n   * @param remoteNgModules The modules to load.\n   */\n  loadModulesDynamically(remoteModules: Array<RemoteModuleFactoryWithMetadata<string>>) {\n    const modulesWithMetadata = this.loadModules(remoteModules || [], this.injector);\n    const injectors = modulesWithMetadata.map(m => m.injector);\n    const refs = modulesWithMetadata\n      .map(m => {\n        if (m.moduleRef && m.remoteNgModule) {\n          return { moduleRef: m.moduleRef, remoteNgModule: m.remoteNgModule };\n        }\n        return null;\n      })\n      .filter(m => !!m);\n    const loadedPluginNames = modulesWithMetadata.map(m => m.name);\n    this.pluginsResolveService._loadedPluginNames$.next(loadedPluginNames);\n    const loadedContextPaths = modulesWithMetadata.map(m => m.fullContextPath);\n    this.pluginsResolveService._contextPathsFromWhereRemotesHaveBeenLoaded$.next(\n      loadedContextPaths\n    );\n\n    injectors.forEach(injector => this.pluginsResolveService.addInjector(injector));\n    refs.forEach(ref => this.pluginsResolveService._pluginDetails$.next(ref));\n\n    this.pluginsResolveService.refreshHooks();\n    this.pluginsResolveService.markPluginsAsLoaded();\n    return modulesWithMetadata;\n  }\n\n  /**\n   * Uses the provided remoteModule factories to load and instantiate the modules.\n   * The provided injector is used as a parent to create the module instances.\n   */\n  protected loadModules(\n    remoteModules: Array<RemoteModuleFactoryWithMetadata<string>>,\n    injector: EnvironmentInjector\n  ): Array<RemoteModuleWithMetadata> {\n    const loadedResults: Array<RemoteModuleWithMetadata> = [];\n    for (const { factory, name, fullContextPath } of remoteModules) {\n      let injectorPerContextPath = this.injectorPerContextPath.get(fullContextPath);\n      if (!injectorPerContextPath) {\n        const shouldProvideChildTranslateService =\n          this.optionsService.contextPath !== fullContextPath;\n        injectorPerContextPath = createEnvironmentInjector(\n          [\n            {\n              provide: C8Y_PLUGIN_CONTEXT_PATH,\n              useValue: fullContextPath\n            },\n            shouldProvideChildTranslateService ? provideTranslationServiceInstance() : []\n          ],\n          injector,\n          `packageInjector-${fullContextPath}`\n        );\n        this.injectorPerContextPath.set(fullContextPath, injectorPerContextPath);\n      }\n\n      const pluginSpecificInjector = createEnvironmentInjector(\n        [\n          {\n            provide: C8Y_PLUGIN_NAME,\n            useValue: name\n          }\n        ],\n        injectorPerContextPath,\n        `pluginInjector-${fullContextPath}-${name}`\n      );\n      try {\n        const moduleOrProviders = factory[name];\n        let result: Omit<RemoteModuleWithMetadata, 'name' | 'fullContextPath'>;\n        if (Array.isArray(moduleOrProviders)) {\n          result = this.loadProviders(moduleOrProviders, name, pluginSpecificInjector);\n        } else {\n          result = this.loadModule(moduleOrProviders, pluginSpecificInjector);\n        }\n        const resultWithName = {\n          ...result,\n          name,\n          fullContextPath\n        };\n        loadedResults.push(resultWithName);\n      } catch (ex) {\n        console.error(`Failed to load ${name}`, ex);\n      }\n    }\n\n    return loadedResults;\n  }\n\n  protected loadProviders(\n    providers: Provider[],\n    name: string,\n    parentInjector: EnvironmentInjector\n  ) {\n    const injector = createEnvironmentInjector(\n      providers,\n      parentInjector,\n      `pluginsInjector-${name}`\n    );\n    return { injector };\n  }\n\n  protected loadModule<T = unknown>(\n    remoteNgModule: NgModuleRef<T> | Type<T>,\n    parentInjector: EnvironmentInjector\n  ) {\n    let moduleRef: NgModuleRef<T>;\n    if (remoteNgModule instanceof NgModuleRef) {\n      // AOT\n      moduleRef = remoteNgModule;\n    } else {\n      // JIT\n      moduleRef = createNgModule(remoteNgModule, parentInjector);\n    }\n\n    return { moduleRef, remoteNgModule, injector: moduleRef.injector };\n  }\n}\n","import {\n  Inject,\n  Injectable,\n  InjectionToken,\n  isDevMode,\n  Optional,\n  StaticProvider\n} from '@angular/core';\nimport {\n  FetchClient,\n  IApplication,\n  TenantLoginOptionsService,\n  ApplicationService,\n  ICurrentTenant,\n  ICurrentUser,\n  IUser\n} from '@c8y/client';\nimport { keys, get } from 'lodash-es';\nimport { BehaviorSubject, combineLatest, Observable, of } from 'rxjs';\nimport {\n  distinctUntilChanged,\n  filter,\n  map,\n  scan,\n  switchMap,\n  shareReplay,\n  startWith,\n  debounceTime,\n  take\n} from 'rxjs/operators';\nimport { hookOptions, OptionsService } from './options.service';\nimport { StateService } from './state-service.abstract';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { ApplicationOptions } from './ApplicationOptions';\nimport { throttle } from './throttle.decorator';\nimport { hookGeneric } from './extension-hooks';\nimport { BootstrapMetaData } from '@c8y/bootstrap';\nimport { hookPlugin } from '../plugins/plugins-loader.service';\n\nexport const HOOK_CURRENT_USER = new InjectionToken<IUser | ICurrentUser>('HOOK_CURRENT_USER');\nexport const HOOK_CURRENT_APPLICATION = new InjectionToken<IApplication>(\n  'HOOK_CURRENT_APPLICATION'\n);\nexport const HOOK_CURRENT_TENANT = new InjectionToken<IApplication>('HOOK_CURRENT_TENANT');\n\nexport function hookCurrentUser(user: IUser | ICurrentUser) {\n  return hookGeneric(user, HOOK_CURRENT_USER, { multi: false });\n}\n\nexport function hookCurrentApplication(application: IApplication) {\n  return hookGeneric(application, HOOK_CURRENT_APPLICATION, { multi: false });\n}\n\nexport function hookCurrentTenant(tenant: ICurrentTenant) {\n  return hookGeneric(tenant, HOOK_CURRENT_TENANT, { multi: false });\n}\n\nexport function provideBootstrapMetadata(metadata: BootstrapMetaData): StaticProvider[] {\n  return [\n    hookOptions(metadata.options as any),\n    hookPlugin(metadata.remoteModuleFactories),\n    hookCurrentUser(metadata.currentUser),\n    hookCurrentApplication(metadata.currentApp),\n    hookCurrentTenant(metadata.currentTenant)\n  ] as const;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AppStateService extends StateService {\n  /**\n   * Saves the state. Should not be accessible directly. Use map or the getter to access\n   * the state. Use functions in the implementation to change the state.\n   */\n  state$: BehaviorSubject<any> = new BehaviorSubject<any>({\n    supportUrl: this.options.supportUrl,\n    lang: this.options.get('defaultLanguage', 'en'),\n    langs: this.getLangs(),\n    langsDetail: this.options.languages,\n    loginOptions: this.options.loginOptions,\n    activateSupportUserAvailable: undefined,\n    versions: {\n      backend: undefined,\n      ui: this.options.versions || { ngx: undefined }\n    },\n    hidePowered: this.options.hidePowered,\n    isLoading: false,\n    showRightDrawer: this.options.rightDrawer,\n    loginExtraLink: this.options.get('login_extra_link'),\n    newsletter: this.options.newsletter\n  });\n  currentSupportUserName: BehaviorSubject<string | null> = new BehaviorSubject(null);\n  currentUser: BehaviorSubject<IUser | ICurrentUser | null> = new BehaviorSubject(null);\n  currentTenant: BehaviorSubject<ICurrentTenant | null> = new BehaviorSubject(null);\n  currentApplication: BehaviorSubject<IApplication | null> = new BehaviorSubject(null);\n  currentApplicationConfig: Observable<any> = this.currentApplication.pipe(\n    filter(app => !!app),\n    map(app => app?.config || null)\n  );\n  /**\n   * An Observable of the applications available for the current user.\n   * The Observable emits a new array on user changes or if the application\n   * performs POST, PUT or DELETE requests to the application API.\n   */\n  currentAppsOfUser: Observable<IApplication[]>;\n\n  constructor(\n    private applicationService: ApplicationService,\n    public apiService: ApiService,\n    private options: OptionsService,\n    private fetchClient: FetchClient,\n    private tenantLoginOptionsService: TenantLoginOptionsService,\n    @Optional()\n    @Inject(HOOK_CURRENT_USER)\n    user?: IUser,\n    @Optional()\n    @Inject(HOOK_CURRENT_APPLICATION)\n    application?: IApplication,\n    @Optional()\n    @Inject(HOOK_CURRENT_TENANT)\n    tenant?: ICurrentTenant\n  ) {\n    super();\n    if (application) {\n      this.currentApplication.next(application);\n      this.state.app = application;\n    }\n\n    if (user) {\n      this.currentUser.next(user);\n    }\n\n    if (tenant) {\n      this.fetchClient.tenant = tenant.name;\n      this.currentTenant.next(tenant);\n    }\n\n    this.apiService.isLoading$.subscribe(isLoading => {\n      this.state.isLoading = isLoading;\n    });\n\n    if (this.options.contextPath !== 'login') {\n      this.assignApplicationKeyToDefaultHeaders();\n    }\n    this.currentAppsOfUser = this.currentAppsOfUser$();\n  }\n\n  assignApplicationKeyToDefaultHeaders() {\n    const appIsAvailable = this.state.app?.id && this.state.app.key === this.options.key;\n    if (appIsAvailable || !isDevMode()) {\n      this.fetchClient.defaultHeaders = {\n        ...(this.fetchClient.defaultHeaders || {}),\n        'X-Cumulocity-Application-Key': this.options.key\n      };\n    }\n  }\n\n  /**\n   * Returns the current state.\n   */\n  get state() {\n    return this.state$.value;\n  }\n\n  getLangs() {\n    const { languages } = this.options;\n    return languages ? keys(languages).filter(k => languages[k]) : [];\n  }\n\n  /**\n   * Returns the correct UI version. In hybrid mode for angular and ngx.\n   */\n  get uiVersion() {\n    const version = this.state.versions.ui;\n    return version.ngx || version.ng1;\n  }\n\n  /**\n   * Dynamic options are stored on the API in a specific config: {} object. They can\n   * be used to configure the app dynamically.\n   *\n   * Note: To avoids conflicts with the default Config, it is recommended\n   * to use a certain namespace.\n   */\n  async updateCurrentApplicationConfig<T = ApplicationOptions>(config: T): Promise<T> {\n    const appWithUpdatedConfig = await this.applicationService.updateApplicationConfig(\n      this.state.app.id,\n      config\n    );\n    this.currentApplication.next(appWithUpdatedConfig);\n    return appWithUpdatedConfig.config;\n  }\n\n  /**\n   * When this function called, it refreshes the values of loginOptions stored within ui state object.\n   * Function is throttled to execute the refresh once in a time specified by params of @throttled decorator,\n   * it should be called on leading edge of the timeout.\n   */\n  @throttle(600, { trailing: false })\n  async refreshLoginOptions() {\n    const loginOptions = (await this.tenantLoginOptionsService.listForCurrentTenant()).data;\n    this.state$.next({ ...this.state, loginOptions });\n  }\n\n  /**\n   * Checks current users application list and matches it against given application name.\n   * Returns true if application is in the list.\n   * @param name application name\n   */\n  async isApplicationAvailable(name: string) {\n    const apps = await this.currentAppsOfUser.pipe(take(1)).toPromise();\n    return apps.some(app => app.name === name || app.contextPath === name);\n  }\n\n  /**\n   * Sets current user (including support user).\n   * @param userInfo Info about current user and support user to be set.\n   */\n  setUser(userInfo: { user: IUser | ICurrentUser; supportUserName?: string }) {\n    this.currentSupportUserName.next(userInfo.supportUserName || null);\n    this.currentUser.next(userInfo.user);\n  }\n\n  /**\n   * Verifies if the current application is owned by the current tenant.\n   * @param app The application to verify.\n   * @returns true if it belongs to the current tenant.\n   */\n  isOwnerOfApplication(app?: IApplication): boolean {\n    if (!app) {\n      app = this.currentApplication.value;\n    }\n    const currentTenant: ICurrentTenant = this.currentTenant.value;\n    const appOwner = get(app, 'owner.tenant.id');\n    return currentTenant?.name === appOwner;\n  }\n\n  /**\n   * Verifies if the current application is owned by the current tenant.\n   * @param app The application to verify.\n   * @returns true if it belongs to the current tenant.\n   */\n  isOwnerOfApplication$(app?: IApplication): Observable<boolean> {\n    const app$ = app ? of(app) : this.currentApplication;\n    return combineLatest([app$, this.currentTenant]).pipe(\n      map(([app, tenant]) => {\n        if (!app || !tenant) {\n          return false;\n        }\n        return tenant.name === get(app, 'owner.tenant.id');\n      })\n    );\n  }\n\n  async loadDefaultOptions() {\n    const loadAndSetSupportUrl = async () => {\n      this.state.supportUrl = await this.options.getSupportUrl();\n    };\n    const loadAndSetActivateSupportUser = async () => {\n      this.state.activateSupportUserAvailable = await this.options.getActivateSupportUser();\n    };\n    const loadAndSetBackendVersion = async () => {\n      this.state.versions.backend = await this.options.getSystemOption('system', 'version');\n    };\n    await Promise.all([\n      loadAndSetSupportUrl(),\n      loadAndSetActivateSupportUser(),\n      loadAndSetBackendVersion()\n    ]);\n    this.emitNewState();\n  }\n\n  protected currentAppsOfUser$(): Observable<IApplication[]> {\n    const appChanges$ = this.onAppChangesCompletion$().pipe(startWith(undefined as void));\n    const userChanges$ = this.currentUser.pipe(\n      map(user => user?.id),\n      distinctUntilChanged()\n    );\n    return combineLatest([userChanges$, appChanges$]).pipe(\n      filter(([userId]) => !!userId),\n      switchMap(([userId]) =>\n        this.applicationService.listByUser(userId, {\n          dropOverwrittenApps: true,\n          noPaging: true\n        })\n      ),\n      map(({ data }) => data),\n      shareReplay({ bufferSize: 1, refCount: true })\n    );\n  }\n\n  /**\n   * An Observable emitting once all POST, PUT, DELETE requests to the application API finished\n   */\n  protected onAppChangesCompletion$(): Observable<void> {\n    const methods = ['POST', 'PUT', 'DELETE'];\n    return this.apiService.calls.pipe(\n      filter(\n        ({ method, url }) => methods.includes(method) && url?.includes('application/applications')\n      ),\n      map(({ phase }) => (phase === 'start' ? 1 : -1)),\n      scan((count, item) => count + item, 0),\n      map(count => count === 0),\n      distinctUntilChanged(),\n      debounceTime(500),\n      filter(completed => !!completed),\n      map(() => {\n        return;\n      })\n    );\n  }\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { IIdentified } from '@c8y/client';\nimport { BehaviorSubject, NEVER, Observable } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { RealtimeSubjectService } from './realtime-subject.service';\nimport { RealtimeMessage } from './realtime.model';\n\n/**\n * A wrapper class for handling realtime notifications in RxJS fashion.\n */\nexport abstract class RealtimeService<T> {\n  /**\n   * A flag displaying if realtime notifications are currently active.\n   */\n  get active(): boolean {\n    return this.isActive.value;\n  }\n\n  /**\n   * An observable emitting a value in case the realtime connection has been interrupted.\n   * Can be used to reload data of e.g. a datapoint graph that wasn't received while realtime was interrupted.\n   */\n  get reconnect$(): Observable<void> {\n    return this.realtimeSubject.reconnect$;\n  }\n\n  /**\n   * An observable emitting either `connected` or `disconnected` depending on the state of the realtime connection.\n   * Can be used to e.g. inform the user about the interrupted realtime connection.\n   */\n  get connectionStatus$(): Observable<'connected' | 'disconnected'> {\n    return this.realtimeSubject.connectionStatus$;\n  }\n\n  private isActive = new BehaviorSubject<boolean>(true);\n\n  constructor(protected realtimeSubject: RealtimeSubjectService) {}\n\n  /**\n   * Get an Observable of all realtime notifications.\n   *\n   * @param entityOrId Entity object or id\n   *\n   * @returns An [[Observable]] of notifications wrapped as [[RealtimeMessage]]\n   */\n  onAll$(entityOrId?: string | number | IIdentified): Observable<RealtimeMessage<T>> {\n    const subject$ = this.realtimeSubject.getObservableForChannel<T>(this.getChannel(entityOrId));\n\n    return this.isActive.pipe(switchMap(active => (active ? subject$ : NEVER)));\n  }\n\n  /**\n   * Subscribes again all realtime channels with active observers.\n   */\n  start() {\n    if (!this.active) {\n      this.isActive.next(true);\n    }\n  }\n\n  /**\n   * Stops realtime notifications and unsubscribes all realtime channels.\n   */\n  stop() {\n    if (this.active) {\n      this.isActive.next(false);\n    }\n  }\n\n  /**\n   * Get an Observable of all CREATE realtime notifications.\n   *\n   * @param entityOrId Entity object or id\n   *\n   * @returns An [[Observable]] of newly created entity objects.\n   */\n  onCreate$(entityOrId?: string | number | IIdentified): Observable<T> {\n    return this.onAll$(entityOrId).pipe(\n      filter(msg => msg.realtimeAction === 'CREATE'),\n      map(msg => msg.data as T)\n    );\n  }\n\n  /**\n   * Get an Observable of all UPDATE realtime notifications.\n   *\n   * @param entityOrId Entity object or id\n   *\n   * @returns An [[Observable]] of updated entity objects.\n   */\n  onUpdate$(entityOrId?: string | number | IIdentified): Observable<T> {\n    return this.onAll$(entityOrId).pipe(\n      filter(msg => msg.realtimeAction === 'UPDATE'),\n      map(msg => msg.data as T)\n    );\n  }\n\n  /**\n   * Get an Observable of all DELETE realtime notifications.\n   *\n   * @param entityOrId Entity object or id\n   *\n   * @returns An [[Observable]] of deleted entity objects.\n   */\n  onDelete$(entityOrId?: string | number | IIdentified): Observable<number> {\n    return this.onAll$(entityOrId).pipe(\n      filter(msg => msg.realtimeAction === 'DELETE'),\n      map(msg => coerceNumberProperty(msg.data))\n    );\n  }\n\n  protected getIdString(reference: number | string | IIdentified): string {\n    let id: string | number;\n    if (typeof reference === 'object') {\n      id = reference.id;\n    } else {\n      id = reference;\n    }\n    return String(id);\n  }\n\n  protected getChannel(entityOrId?: string | number | IIdentified) {\n    return entityOrId ? this.channel().replace('*', this.getIdString(entityOrId)) : this.channel();\n  }\n\n  protected abstract channel(): string;\n}\n","import { Injectable } from '@angular/core';\nimport { Realtime } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, share, shareReplay } from 'rxjs/operators';\nimport { RealtimeMessage } from './realtime.model';\n\n/**\n * Service (providedIn root) that ensures to only create a single realtime subscription for each channel\n */\n@Injectable({ providedIn: 'root' })\nexport class RealtimeSubjectService {\n  reconnect$: Observable<void>;\n  connectionStatus$: Observable<'connected' | 'disconnected'>;\n  private subjects$ = new Map<string, Observable<RealtimeMessage<unknown>>>();\n\n  constructor(protected realtime: Realtime) {\n    this.reconnect$ = this.createObservableForReconnect().pipe(share());\n    this.connectionStatus$ = this.createObservableForConnectionStatus().pipe(\n      distinctUntilChanged(),\n      shareReplay({ refCount: true, bufferSize: 1 })\n    );\n  }\n\n  getObservableForChannel<T>(channel: string): Observable<RealtimeMessage<T>> {\n    if (this.subjects$.has(channel)) {\n      return this.subjects$.get(channel) as Observable<RealtimeMessage<T>>;\n    }\n    const observable$ = this.createObservableForChannel<T>(channel, this.realtime);\n    const sharedObservable$ = observable$.pipe(share());\n    this.subjects$.set(channel, sharedObservable$);\n\n    return sharedObservable$;\n  }\n\n  protected createObservableForChannel<T>(\n    channel: string,\n    realtime: Realtime\n  ): Observable<RealtimeMessage<T>> {\n    return new Observable<RealtimeMessage<T>>(observer => {\n      let realtimeSubscription = realtime.subscribe(channel, msg => {\n        const data: RealtimeMessage<T> = {\n          channel: msg.channel,\n          data: msg.data.data,\n          id: msg.id,\n          realtimeAction: msg.data.realtimeAction\n        };\n        observer.next(data);\n      });\n\n      /**\n       * In (rare) case of a re-handshake, resubscribe valid subscriptions.\n       * @see https://docs.cometd.org/current/reference/#_javascript_subscribe_resubscribe\n       */\n      const reconnectSubscription = this.reconnect$.subscribe(() => {\n        try {\n          realtimeSubscription = this.realtime.resubscribe(realtimeSubscription);\n        } catch (e) {\n          console.warn('Failed to resubscribe to channel after reconnect.', channel, e);\n          observer.error(e);\n        }\n      });\n\n      return {\n        unsubscribe: () => {\n          reconnectSubscription.unsubscribe();\n          realtime.unsubscribe(realtimeSubscription);\n        }\n      };\n    });\n  }\n\n  protected createObservableForReconnect() {\n    return new Observable<void>(observer => {\n      const handle = this.realtime.addHandshakeListener(msg => {\n        if (msg.successful && msg.reestablish) {\n          observer.next();\n        }\n      });\n      return {\n        unsubscribe: () => {\n          this.realtime.removeListener(handle);\n        }\n      };\n    });\n  }\n\n  protected createObservableForConnectionStatus() {\n    return new Observable<'connected' | 'disconnected'>(observer => {\n      observer.next(!this.realtime.isDisconnected() ? 'connected' : 'disconnected');\n      const handle = this.realtime.addConnectListener(msg => {\n        observer.next(msg.successful ? 'connected' : 'disconnected');\n      });\n      return {\n        unsubscribe: () => {\n          this.realtime.removeListener(handle);\n        }\n      };\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { RealtimeService } from './realtime.service';\nimport { IManagedObject } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport { RealtimeSubjectService } from './realtime-subject.service';\n\n@Injectable()\nexport class ManagedObjectRealtimeService extends RealtimeService<IManagedObject> {\n  constructor(protected realtimeSubject: RealtimeSubjectService) {\n    super(realtimeSubject);\n  }\n\n  /**\n   * Get an Observable of all CREATE realtime notifications.\n   *\n   * @returns An [[Observable]] of newly created entity objects.\n   */\n  onCreate$(): Observable<IManagedObject> {\n    return super.onCreate$();\n  }\n\n  protected channel(): string {\n    return '/managedobjects/*';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { NEVER, Observable, Subject, from, merge } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap, shareReplay } from 'rxjs/operators';\nimport { AppStateService } from '../common/ui-state.service';\nimport { ManagedObjectRealtimeService } from '../realtime/managed-object-realtime.service';\nimport { RealtimeSubjectService } from '../realtime/realtime-subject.service';\n\n/**\n * AssetTypesRealtimeService is being used to manage a cache of all existing asset types.\n * This service is injected in the AssetOverviewNavigationFactory class, which will trigger\n * the initialization of the cache as the constructor is called.\n */\n@Injectable({ providedIn: 'root' })\nexport class AssetTypesRealtimeService {\n  private readonly DEFAULT_ASSET_ICON = 'c8y-enterprise';\n  private readonly assetTypes$: Observable<Record<string, IManagedObject>>;\n  private readonly refreshTrigger = new Subject<void>();\n  private managedObjectRealtimeService: ManagedObjectRealtimeService;\n\n  constructor(\n    private inventory: InventoryService,\n    private appStateService: AppStateService,\n    private realtimeSubject: RealtimeSubjectService\n  ) {\n    this.managedObjectRealtimeService = new ManagedObjectRealtimeService(this.realtimeSubject);\n    this.assetTypes$ = this.initAssetTypes$();\n  }\n\n  /**\n   * Returns an asset type from the cache based on the unique name property.\n   * @param name Name of the asset type.\n   * @returns IManagedObject which represents the asset type.\n   */\n  getAssetTypeByName$(name: string): Observable<IManagedObject> {\n    return this.assetTypes$.pipe(map(assetTypes => assetTypes[name]));\n  }\n\n  /**\n   * Returns an asset type from the cache based on the id.\n   * @param assetTypeId Id of the asset type.\n   * @returns IManagedObject which represents the asset type.\n   */\n  getAssetTypeById$(assetTypeId: string): Observable<IManagedObject> {\n    return this.assetTypes$.pipe(\n      map(assetTypes =>\n        Object.values(assetTypes).find((assetType: IManagedObject) => assetType.id === assetTypeId)\n      )\n    );\n  }\n\n  /**\n   * Returns all the available asset types from the cache.\n   * @returns available asset types.\n   */\n  getAssetTypesCache$(): Observable<Record<string, IManagedObject>> {\n    return this.assetTypes$;\n  }\n\n  /**\n   * Extracts an icon from an asset type.\n   * @param type Type of the asset type.\n   * @returns Returns an icon for a given asset type.\n   */\n  getIcon$(type: string): Observable<string> {\n    const assetType = this.getAssetTypeByName$(type);\n    return assetType.pipe(\n      map(\n        assetType =>\n          assetType?.icon?.name || assetType?.c8y_IsAssetType?.icon?.name || this.DEFAULT_ASSET_ICON\n      )\n    );\n  }\n\n  /**\n   * Refreshes the asset types cache\n   */\n  refreshCache(): void {\n    this.refreshTrigger.next();\n  }\n\n  private initAssetTypes$(): Observable<Record<string, IManagedObject>> {\n    const triggerRefresh = merge(\n      this.appStateService.currentUser.pipe(\n        map(user => user?.id),\n        distinctUntilChanged(),\n        filter(userId => !!userId)\n      ),\n      this.refreshTrigger\n    );\n    return triggerRefresh.pipe(\n      switchMap(() => this.getAssetTypes$()),\n      shareReplay(1)\n    );\n  }\n\n  /**\n   * Queries available asset types and adds every asset type to the local cache.\n   * @returns available asset types.\n   */\n  private async getAssetTypes(): Promise<Record<string, IManagedObject>> {\n    const assetTypesCache = {};\n    const query = {\n      __filter: {\n        __or: [{ type: 'c8y_AssetDefinition' }, { __has: 'c8y_IsAssetType' }]\n      }\n    };\n    const { data } = await this.inventory.listQuery(query, {\n      withChildren: false,\n      pageSize: 2000\n    });\n    data.forEach((assetType: IManagedObject) => {\n      assetTypesCache[assetType.name] = assetType;\n    });\n    return assetTypesCache;\n  }\n\n  private getAssetTypes$(): Observable<Record<string, IManagedObject>> {\n    const assetTypeUpdates$ = this.subscribeToCacheInvalidatorUpdates$().pipe(\n      switchMap(() => this.getAssetTypes())\n    );\n    return merge(from(this.getAssetTypes()), assetTypeUpdates$);\n  }\n\n  /**\n   * Validates whether the MO to update local asset types cache is already present.\n   * If present, the MO gets subscribed for future updates.\n   * else, the MO will not be subscribed\n   */\n  private subscribeToCacheInvalidatorUpdates$(): Observable<IManagedObject> {\n    return from(this.getAssetTypesCacheInvalidator()).pipe(\n      switchMap(id => (id ? this.managedObjectRealtimeService.onUpdate$(id) : NEVER))\n    );\n  }\n\n  /**\n   * Gets the MO that is used to update the local asset types cache.\n   * @returns the id of the MO that has 'c8yAssetTypesCacheInvalidator' fragment, or 'null'\n   */\n  private async getAssetTypesCacheInvalidator(): Promise<string | null> {\n    const { data } = await this.inventory.list({\n      fragmentType: 'c8yAssetTypesCacheInvalidator'\n    });\n    return data.length > 0 ? data[0].id : null;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { GroupFragment } from './group-fragment.model';\nimport { firstValueFrom } from 'rxjs';\nimport { AssetTypesRealtimeService } from '../asset-types/asset-types.realtime.service';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\nconst MO_TYPES = [\n  'asset',\n  'dynamicGroup',\n  'brokerSource',\n  'brokerSourceInactive',\n  'group',\n  'other'\n] as const;\n\ntype MoTypes = (typeof MO_TYPES)[number];\n\ntype AssetTypes = Omit<MoTypes, 'brokerSource' | 'brokerSourceInactive'>;\n\ntype GroupIcon = {\n  icon: SupportedIconsSuggestions;\n  iconOpen?: SupportedIconsSuggestions;\n  iconClass?: string;\n};\n\ntype GroupIcons = Partial<Record<MoTypes, GroupIcon>>;\n\n/**\n * Enumerates the supported asset paths.\n */\nexport enum ASSET_PATH {\n  /**\n   * The default asset path.\n   */\n  DEFAULT = 'group',\n\n  /**\n   * The asset path for devices.\n   */\n  DEVICE = 'device'\n}\n/**\n * Asset paths.\n */\ntype AssetPath = `${ASSET_PATH}`;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class GroupService {\n  readonly icons = {\n    brokerSourceInactive: {\n      icon: 'c8y-group-remote-inactive',\n      iconOpen: 'c8y-group-remote-inactive'\n    },\n    brokerSource: {\n      icon: 'c8y-group-remote',\n      iconOpen: 'c8y-group-remote-open'\n    },\n    group: {\n      icon: 'c8y-group',\n      iconOpen: 'c8y-group-open'\n    },\n    dynamicGroup: {\n      icon: 'c8y-group-smart',\n      iconOpen: 'c8y-group-smart-open'\n    },\n    other: {\n      icon: 'exchange',\n      iconClass: 'statusUnknown'\n    }\n  } as const satisfies GroupIcons;\n\n  /**\n   * A mapping of managed object types to their corresponding asset path.\n   */\n  assetPaths: Map<AssetTypes, AssetPath> = new Map([\n    ['group', ASSET_PATH.DEFAULT],\n    ['dynamicGroup', ASSET_PATH.DEFAULT],\n    ['asset', ASSET_PATH.DEFAULT],\n    ['device', ASSET_PATH.DEVICE],\n    ['other', ASSET_PATH.DEVICE]\n  ]);\n\n  dataBrokerSourceFragmentInactive = `_${GroupFragment.dataBrokerSourceFragment}`;\n\n  constructor(private assetTypesRealtimeService: AssetTypesRealtimeService) {}\n\n  /**\n   * Finds an icon based on the asset type; if none is found, it looks for an asset-specific icon,\n   * and if that is also unavailable, it uses the default icon.\n   * @param mo Managed object to be checked.\n   * @param open Determines whether the method should return an alternative icon showing the open state.\n   * @param fallbackIcon If no icon is found, this icon is returned.\n   * @returns Returns an icon.\n   */\n  async getIcon(mo: IManagedObject, open = false, fallbackIcon?: string): Promise<string> {\n    const genericMoType = this.determineMoType(mo);\n    const defaultIcon = 'c8y-enterprise';\n    if (genericMoType === 'asset') {\n      const icon = await this.getAssetCustomIcon(mo.type);\n      if (icon === defaultIcon && mo.icon && mo.icon.name !== '') {\n        return mo.icon.name;\n      }\n      return icon;\n    }\n\n    if (fallbackIcon && genericMoType === 'other') {\n      return fallbackIcon;\n    }\n\n    const typeIcons: GroupIcon = this.getDefaultIcon(genericMoType);\n    return open ? typeIcons.iconOpen : typeIcons.icon;\n  }\n\n  /**\n   * Checks whether a given managed object is a group.\n   * @param mo Managed object to be checked.\n   * @returns Returns true if the managed object is a group.\n   */\n  isGroup(mo: IManagedObject): boolean {\n    return !!mo[GroupFragment.groupFragmentType] || mo.type === GroupFragment.groupType;\n  }\n\n  /**\n   * Checks whether a given managed object is a dynamic group.\n   * @param mo Managed object to be checked.\n   * @returns Returns true if the managed object is a dynamic group.\n   */\n  isDynamicGroup(mo: IManagedObject): boolean {\n    return !!mo[GroupFragment.dynamicGroupFragment] || mo.type === GroupFragment.dynamicGroupType;\n  }\n\n  /**\n   * Checks whether a given managed object is a data broker.\n   * @param mo Managed object to be checked.\n   * @returns Returns true if the managed object is a data broker.\n   */\n  isDataBroker(mo: IManagedObject): boolean {\n    return (\n      !!mo[GroupFragment.dataBrokerSourceFragment] || !!mo[this.dataBrokerSourceFragmentInactive]\n    );\n  }\n\n  /**\n   * Checks whether a given managed object is a data broker active.\n   * @param mo Managed object to be checked.\n   * @returns Returns true if the managed object is a data broker active.\n   */\n  isDataBrokerActive(mo: IManagedObject) {\n    return (\n      !!mo[GroupFragment.dataBrokerSourceFragment] && !mo[this.dataBrokerSourceFragmentInactive]\n    );\n  }\n\n  /**\n   * Checks whether a given managed object is an asset.\n   * @param mo Managed object to be checked.\n   * @returns Returns true if the managed object is an asset.\n   */\n  isAsset(mo: IManagedObject) {\n    return !!mo.c8y_IsAsset;\n  }\n\n  /**\n   * Checks whether the object belongs to any type of group.\n   * Types of groups: group, dynamic group, data broker, data broker active.\n   * @param mo Managed object to be checked.\n   * @returns Returns true if the managed object belongs to the group category.\n   */\n  isAnyGroup(mo: IManagedObject) {\n    return (\n      this.isGroup(mo) ||\n      this.isDynamicGroup(mo) ||\n      this.isDataBroker(mo) ||\n      this.isDataBrokerActive(mo)\n    );\n  }\n\n  /**\n   * Checks whether a given managed object is a device.\n   * @param mo Managed object to be checked.\n   * @returns Returns true if the managed object is a device.\n   */\n  isDevice(mo: IManagedObject) {\n    return !!mo.c8y_IsDevice;\n  }\n\n  /**\n   * Retrieves the path associated with a given managed object.\n   * @param mo The managed object for which the asset path is to be retrieved.\n   * @returns The path associated with the managed object's type.\n   */\n  getAssetPath(mo: IManagedObject): AssetPath {\n    return this.assetPaths.get(this.determineMoType(mo));\n  }\n\n  private getAssetCustomIcon(moType: string): Promise<string> {\n    const icon$ = this.assetTypesRealtimeService.getIcon$(moType);\n    return firstValueFrom(icon$);\n  }\n\n  private getDefaultIcon<T extends keyof typeof this.icons>(moType: T): (typeof this.icons)[T] {\n    return this.icons[moType];\n  }\n\n  private determineMoType(mo: IManagedObject): MoTypes {\n    if (this.isAsset(mo)) {\n      return 'asset';\n    }\n\n    if (this.isDynamicGroup(mo)) {\n      return 'dynamicGroup';\n    }\n\n    if (this.isDataBrokerActive(mo)) {\n      return 'brokerSource';\n    }\n\n    if (this.isDataBroker(mo)) {\n      return 'brokerSourceInactive';\n    }\n\n    if (this.isGroup(mo)) {\n      return 'group';\n    }\n\n    return 'other';\n  }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GroupService } from './group.service';\nimport { IManagedObject } from '@c8y/client';\n\n/**\n * Converts a managed object into a context-aware URL, depending on its type and fragments.\n * Usage:\n *\n * ```html\n *  {{ managedObject | assetLink }} <!-- e.g. '/device/<moId>' or '/group/<moId> -->\n * ```\n */\n@Pipe({\n  name: 'assetLink',\n  standalone: true\n})\nexport class AssetLinkPipe implements PipeTransform {\n  private groupService = inject(GroupService);\n\n  transform(mo: IManagedObject): string {\n    if (!mo) {\n      return '';\n    }\n    const assetPath = this.groupService.getAssetPath(mo);\n    return `/${assetPath}/${mo.id}`;\n  }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { isNaN, isFinite } from 'lodash-es';\n\ninterface BytesOptions {\n  precision?: number;\n  binary?: boolean;\n}\n\n/**\n * Converts the file size to a readable format.\n * Supports both decimal (default) and binary units.\n *\n * Usage:\n * ```html\n * {{ myData | bytes }}                              <!-- e.g. 100.1 MB (decimal) -->\n * {{ myData | bytes:2 }}                           <!-- e.g. 100.12 MB (decimal) -->\n * {{ myData | bytes:1:true }}                      <!-- e.g. 97.7 MiB (binary) -->\n * {{ myData | bytes:{binary: true} }}              <!-- e.g. 97.7 MiB (binary) -->\n * {{ myData | bytes:{precision: 2, binary: true} }} <!-- e.g. 97.66 MiB (binary) -->\n * ```\n *\n * @param value The number of bytes to convert\n * @param precisionOrOptions Number of decimal places or options object\n * @param binary Whether to use binary (1024) or decimal (1000) units (legacy parameter)\n *\n * Options object properties:\n * - precision: number of decimal places (default: 1)\n * - binary: whether to use binary units (default: false)\n *\n * Decimal units: bytes, kB, MB, GB, TB, PB\n * Binary units: bytes, KiB, MiB, GiB, TiB, PiB\n */\n@Pipe({ name: 'bytes', standalone: true })\nexport class BytesPipe implements PipeTransform {\n  static bytes(\n    bytes: number,\n    precisionOrOptions: number | BytesOptions = 1,\n    binary = false,\n    translateService?: TranslateService\n  ): string | number {\n    const decimalUnits = [\n      gettext('bytes'),\n      gettext('kB'),\n      gettext('MB'),\n      gettext('GB'),\n      gettext('TB'),\n      gettext('PB')\n    ];\n    const binaryUnits = [\n      gettext('bytes'),\n      gettext('KiB'),\n      gettext('MiB'),\n      gettext('GiB'),\n      gettext('TiB'),\n      gettext('PiB')\n    ];\n    if (translateService) {\n      for (let i = 0; i < decimalUnits.length; i++) {\n        decimalUnits[i] = translateService.instant(decimalUnits[i]);\n      }\n      for (let i = 0; i < binaryUnits.length; i++) {\n        binaryUnits[i] = translateService.instant(binaryUnits[i]);\n      }\n    }\n    const bytesLabel = decimalUnits[0];\n\n    if (isNaN(bytes) || !isFinite(bytes)) {\n      return '-';\n    }\n    if (bytes === 0) {\n      return `0 ${bytesLabel}`;\n    }\n    let precision: number;\n    let isBinary = binary;\n\n    if (typeof precisionOrOptions === 'object') {\n      precision = precisionOrOptions.precision ?? 1;\n      isBinary = precisionOrOptions.binary ?? false;\n    } else {\n      precision = precisionOrOptions;\n    }\n\n    const base = isBinary ? 1024 : 1000;\n    const units = isBinary ? binaryUnits : decimalUnits;\n\n    const num = Math.floor(Math.log(bytes) / Math.log(base));\n    const result = (bytes / base ** Math.floor(num)).toFixed(precision);\n\n    return `${result} ${units[num]}`;\n  }\n\n  private translateService = inject(TranslateService);\n\n  transform(\n    value: number,\n    precisionOrOptions: number | BytesOptions = 1,\n    binary = false\n  ): string | number {\n    return BytesPipe.bytes(value, precisionOrOptions, binary, this.translateService);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ColorService {\n  async generateColor(data: string): Promise<string> {\n    const hashedString = await this.sha256(data);\n    return this.stringToColor(hashedString);\n  }\n\n  async generateColorForDatapoint(fragment: string, series: string): Promise<string> {\n    return await this.generateColor(JSON.stringify({ fragment, series }));\n  }\n\n  protected async sha256(message: string): Promise<string> {\n    // encode as UTF-8\n    const msgBuffer = new TextEncoder().encode(message);\n\n    // hash the message\n    const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n\n    // convert ArrayBuffer to Array\n    const hashArray = Array.from(new Uint8Array(hashBuffer));\n\n    // convert bytes to hex string\n    const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n    return hashHex;\n  }\n\n  protected stringToColor(str: string): string {\n    let hash = 0;\n    for (let i = 0; i < str.length; i++) {\n      // tslint:disable-next-line: no-bitwise\n      hash = str.charCodeAt(i) + ((hash << 5) - hash);\n    }\n    let color = '#';\n    for (let i = 0; i < 3; i++) {\n      // tslint:disable-next-line: no-bitwise\n      const value = (hash >> (i * 8)) & 0xff;\n      color += value.toString(16).padStart(2, '0').substring(-2);\n    }\n    return color;\n  }\n}\n","/**\n * The maximum pageSize used in API queries to c8y.\n */\nexport const MAX_PAGE_SIZE = 2000;\n","const cache = new Map();\n/**\n * @ignore\n */\nexport async function loadLocale(moduleLang: string) {\n  if (cache.has(moduleLang)) {\n    return cache.get(moduleLang);\n  }\n  try {\n    // Loading @angular/common dynamically aliased to angular.common.\n    // Check packages/devkit/src/webpack/config/base.ts for more information.\n    const module = await import(`angular-common/locales/${moduleLang}.js`);\n    cache.set(moduleLang, module);\n    return module;\n  } catch (error) {\n    console.warn(`Could not load locale for ${moduleLang}`);\n    throw error;\n  }\n}\n","import { registerLocaleData } from '@angular/common';\nimport { Inject, Injectable, Optional, DOCUMENT } from '@angular/core';\nimport { TranslateService as NgxTranslateService } from '@ngx-translate/core';\nimport { OptionsService } from '../common/options.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { getAngularLocalesLanguageString } from './i18n.module';\nimport { loadLocale } from './load-locale';\nimport {\n  defineLocale,\n  deLocale,\n  enGbLocale,\n  esLocale,\n  frLocale,\n  jaLocale,\n  koLocale,\n  nlLocale,\n  plLocale,\n  ptBrLocale,\n  zhCnLocale\n} from 'ngx-bootstrap/chronos';\nimport { BsLocaleService } from 'ngx-bootstrap/datepicker';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { filter, lastValueFrom, mergeMap, Observable, startWith, tap } from 'rxjs';\nimport { Languages, LanguagesLangCode } from '@c8y/options';\n\n/**\n * A service to manage the language of the application.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class TranslateService {\n  static SAVE_LANGUAGE_KEY = 'c8y_language';\n  static defaultLang() {\n    return window.localStorage.getItem(TranslateService.SAVE_LANGUAGE_KEY);\n  }\n  langsDetail: Languages = this.options.get('languages', {});\n  langs: string[] = Object.keys(this.langsDetail).filter(k => this.langsDetail[k]);\n  private DEFAULT_SEPARATOR = '_';\n\n  constructor(\n    private ngxTranslate: NgxTranslateService,\n    private ui: AppStateService,\n    private options: OptionsService,\n    private pluginsResolveService: PluginsResolveService,\n    @Inject(DOCUMENT) private document: Document,\n    @Optional() private bsLocaleService: BsLocaleService\n  ) {\n    const queryStringLang = this.queryStringLang();\n    if (queryStringLang) {\n      this.saveInLocalStorage(queryStringLang);\n    }\n  }\n\n  /**\n   * Switches the app to given locale (incl. Angular, Bootstrap, translations).\n   * @param localeCode The locale code. Supported formats:\n   * - two-letter codes for language only, for example: `en`, `de`\n   * - four-letter codes for language and country, separated with underscore or dash, for example: `zh_CN`, `zh_cn`, `zh-CN`, `zh-cn`\n   */\n  async switchToLanguage(localeCode: string) {\n    const { langCountryCode: ngxLocaleCode, langCode: ngxLocaleCodeFallback } =\n      this.parseLocaleCode(localeCode, '-');\n    await this.loadLocalesWithFallback(ngxLocaleCode, ngxLocaleCodeFallback);\n\n    const { langCode: bsLocaleCode, langCountryCode: ngxTranslateLocaleCode } =\n      this.parseLocaleCode(localeCode);\n    this.setBsLocale(bsLocaleCode);\n    await this.setLanguage(ngxTranslateLocaleCode);\n  }\n\n  async loadLocalesWithFallback(moduleLang: string, fallbackLang?: string) {\n    try {\n      await this.loadLocales(moduleLang);\n      return;\n    } catch (e) {\n      if (fallbackLang && fallbackLang !== moduleLang) {\n        console.warn(`Failed to load locale \"${moduleLang}\", falling back to \"${fallbackLang}\"`);\n      } else {\n        console.error(`Failed to load locale \"${moduleLang}\"`, e);\n        throw e;\n      }\n    }\n\n    try {\n      await this.loadLocales(fallbackLang || 'en');\n    } catch (e) {\n      console.error(`Failed to load fallback locale \"${fallbackLang}\" as well`, e);\n      throw e;\n    }\n  }\n\n  async loadLocales(moduleLang: string) {\n    const module: any = await loadLocale(getAngularLocalesLanguageString(moduleLang));\n    registerLocaleData(module.default);\n  }\n\n  async setLanguage(lang: string) {\n    await this.performForAllTranslateServiceInstances(s => s.use(lang));\n    this.ui.state$.next({ ...this.ui.state, lang });\n\n    this.document.documentElement.lang = lang;\n  }\n\n  /**\n   * Finds the first supported language\n   */\n  firstSupportedLanguage() {\n    const languages = [this.queryStringLang(), this.localStorageLang()]\n      .concat([this.options.get('defaultLanguage')])\n      .concat(this.browserLangs())\n      .concat(['en'])\n      .filter(Boolean)\n      .map(lang => lang.toLowerCase());\n\n    const preferredLanguage = languages.find(lang => this.getSupported(lang));\n    return this.getSupported(preferredLanguage);\n  }\n\n  /**\n   * Converts a iso language code to a PO language code (e.g. de-de gets de_de).\n   * @param lang The iso language code.\n   */\n  convertToLanguageCodePO(lang: string): string {\n    const sep = lang.indexOf('-') > -1 ? '-' : this.DEFAULT_SEPARATOR;\n    const [langMain, langSpecific] = lang.split(sep);\n    const langLast = langSpecific ? `${this.DEFAULT_SEPARATOR}${langSpecific}` : '';\n    return `${langMain}${langLast}`;\n  }\n\n  /**\n   * Returns the language in the native language.\n   * @param lang The language two-letter code.\n   * @return The native name.\n   */\n  getNativeLanguage(lang: string): string {\n    const langData: Partial<LanguagesLangCode> = (this.langsDetail || {})[lang] || {};\n    return langData.nativeName || lang;\n  }\n\n  saveInLocalStorage(lang: string) {\n    window.localStorage.setItem(TranslateService.SAVE_LANGUAGE_KEY, lang);\n  }\n\n  getSupported(localeCode: string): undefined | string {\n    if (!localeCode || typeof localeCode !== 'string') {\n      return undefined;\n    }\n    const localeCodeParsed = this.parseLocaleCode(localeCode);\n    const localeCodesParsed = this.langs.map(lang => this.parseLocaleCode(lang));\n    const langCountryCodeMatch = localeCodesParsed.find(\n      ({ langCountryCode }) => langCountryCode === localeCodeParsed.langCountryCode\n    );\n    if (langCountryCodeMatch) {\n      return langCountryCodeMatch.langCountryCode;\n    }\n    const langCodeMatch = localeCodesParsed.find(\n      ({ langCode }) => langCode === localeCodeParsed.langCode\n    );\n    if (langCodeMatch) {\n      return langCodeMatch.langCountryCode;\n    }\n    return undefined;\n  }\n\n  /**\n   * Gets the language from the query parameter.\n   * @return The language two-letter code.\n   */\n  queryStringLang() {\n    return this.getQueryParameter('lang');\n  }\n\n  private getAllTranslateServiceInstances(): Observable<NgxTranslateService> {\n    const allPluginInjectors = this.pluginsResolveService\n      .getFromAllInjectors(NgxTranslateService)\n      .pipe(startWith(this.ngxTranslate));\n    return allPluginInjectors;\n  }\n\n  private performForAllTranslateServiceInstances(\n    action: (s: NgxTranslateService) => Observable<any>\n  ): Promise<any[]> {\n    const processedTranslateServiceInstances = [];\n    return lastValueFrom(\n      this.getAllTranslateServiceInstances().pipe(\n        filter(service => !processedTranslateServiceInstances.includes(service)),\n        tap(service => {\n          processedTranslateServiceInstances.push(service);\n        }),\n        mergeMap(s => action(s))\n      )\n    );\n  }\n\n  private parseLocaleCode(\n    localeCode: string,\n    outputSeparator = '_'\n  ): { langCode: string; langCountryCode: string } {\n    // - 2 letter language code\n    // - optional region code that's either 2 letters OR 3 digits\n    const matches = localeCode.match(/^([a-z]{2})([_-]([a-z]{2}|[0-9]{3}))?$/i);\n    if (!matches) {\n      throw new Error(\n        `Could not parse locale code \"${localeCode}\". Expected format: language code (2 letters) optionally followed by region code (2 letters or 3 digits) separated with \"_\" or \"-\", e.g. \"en-US\" or \"es-419\".`\n      );\n    }\n    const langCode = matches[1].toLowerCase();\n    const regionCode = matches[3]?.toUpperCase();\n    const langCountryCode = `${langCode}${regionCode ? `${outputSeparator}${regionCode}` : ''}`;\n    return { langCode, langCountryCode };\n  }\n\n  /**\n   * Gets the language from local storage.\n   * @return The language two-letter code.\n   */\n  private localStorageLang() {\n    return TranslateService.defaultLang();\n  }\n\n  /**\n   * Determines which language is set in the browser.\n   * @return The languages the browser supports as string array.\n   */\n  private browserLangs() {\n    const { navigator } = window;\n    const browserLanguagePropertyKeys = [\n      'languages',\n      'language',\n      'browserLanguage',\n      'systemLanguage',\n      'userLanguage'\n    ];\n    return browserLanguagePropertyKeys.reduce((languages, property) => {\n      const propertyLanguages = navigator[property];\n      if (typeof propertyLanguages === 'string') {\n        languages.push(propertyLanguages);\n      } else if (Array.isArray(propertyLanguages)) {\n        languages = languages.concat(propertyLanguages);\n      }\n      return languages;\n    }, []);\n  }\n\n  private getQueryParameter(queryKey) {\n    const params = new URLSearchParams(window.location.search);\n    const value = params.get(queryKey);\n    return value;\n  }\n\n  /**\n   * Sets locale for ngx-bootstrap.\n   * @param lang A two-letter language code.\n   * @private\n   */\n  private setBsLocale(lang) {\n    switch (lang) {\n      case 'de': {\n        defineLocale(lang, deLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      case 'en': {\n        // 'en-gb' is created because overwriting default 'en' breaks date-picker somehow\n        defineLocale('en-gb', enGbLocale);\n        this.bsLocaleService.use('en-gb');\n        break;\n      }\n      case 'es': {\n        defineLocale(lang, esLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      case 'fr': {\n        defineLocale(lang, frLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      case 'ja': {\n        defineLocale(lang, jaLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      case 'ko': {\n        defineLocale(lang, koLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      case 'nl': {\n        defineLocale(lang, nlLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      case 'pl': {\n        defineLocale(lang, plLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      case 'pt': {\n        defineLocale(lang, ptBrLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      case 'zh': {\n        defineLocale(lang, zhCnLocale);\n        this.bsLocaleService.use(lang);\n        break;\n      }\n      default: {\n        defineLocale('en-gb', enGbLocale);\n        this.bsLocaleService.use('en-gb');\n      }\n    }\n  }\n}\n","import {\n  ComponentRef,\n  Directive,\n  EnvironmentInjector,\n  Injector,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  Type,\n  ViewContainerRef,\n  createEnvironmentInjector,\n  inject\n} from '@angular/core';\n\n/**\n * Simplified version of [NgComponentOutlet](https://github.com/angular/angular/blob/main/packages/common/src/directives/ng_component_outlet.ts)\n *\n * In contrast to NgComponentOutlet it allows to set the environment injector.\n *\n * A [PR](https://github.com/angular/angular/pull/54764) has been raised to add that functionality in Angular.\n *\n * TODO: Remove this directive once the PR is merged.\n */\n@Directive({\n  selector: '[c8yComponentOutlet]',\n  standalone: true\n})\nexport class C8yComponentOutlet implements OnChanges, OnDestroy {\n  @Input() c8yComponentOutlet: Type<any> | null = null;\n\n  @Input() c8yComponentOutletInjector?: Injector;\n\n  @Input() c8yComponentOutletEnvironmentInjector?: EnvironmentInjector;\n\n  @Input() c8yComponentOutletProviders?: Type<unknown>[];\n\n  @Input() c8yComponentOutletInitialState?: any;\n\n  private _componentRef: ComponentRef<any> | undefined;\n  private environment = inject(EnvironmentInjector);\n  private _newEnvInjector: EnvironmentInjector;\n\n  constructor(private __viewContainerRef: ViewContainerRef) {}\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (this._needToReCreateComponentInstance(changes)) {\n      this.__viewContainerRef.clear();\n      this._componentRef = undefined;\n\n      if (this.c8yComponentOutlet) {\n        // creating a new injector ensures that the Angular Chrome extension properly shows the element hierarchy\n        const injector = Injector.create({\n          providers: this.c8yComponentOutletProviders || [],\n          parent: this.c8yComponentOutletInjector || this.__viewContainerRef.injector,\n          name: 'c8yComponentOutletInjector'\n        });\n\n        this._newEnvInjector = createEnvironmentInjector(\n          this.c8yComponentOutletProviders || [],\n          this.c8yComponentOutletEnvironmentInjector || this.environment\n        );\n        this._componentRef = this.__viewContainerRef.createComponent(this.c8yComponentOutlet, {\n          injector,\n          environmentInjector: this._newEnvInjector\n        });\n        Object.assign(this._componentRef.instance, this.c8yComponentOutletInitialState || {});\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.__viewContainerRef.clear();\n    this._newEnvInjector?.destroy();\n    this._componentRef?.destroy();\n  }\n\n  private _needToReCreateComponentInstance(changes: SimpleChanges): boolean {\n    // Note: square brackets property accessor is safe for Closure compiler optimizations (the\n    // `changes` argument of the `ngOnChanges` lifecycle hook retains the names of the fields that\n    // were changed).\n    return (\n      changes['c8yComponentOutlet'] !== undefined ||\n      changes['c8yComponentOutletInjector'] !== undefined ||\n      changes['c8yComponentOutletEnvironmentInjector'] !== undefined ||\n      changes['c8yComponentOutletProviders'] !== undefined ||\n      changes['c8yComponentOutletInitialState'] !== undefined\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { AppStateService } from './ui-state.service';\n\ninterface DateFormatOptions {\n  locale?: string;\n  useUppercaseFormat?: boolean;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DateFormatService {\n  constructor(private appStateService: AppStateService) {}\n\n  /**\n   * Returns date format pattern based on locale and formatting syntax.\n   *\n   * @param formattingOptions - Object containing formatting options\n   * @returns A string containing the date format pattern for the specified locale\n   */\n  getDateFormat(formattingOptions?: DateFormatOptions): string {\n    let locale = formattingOptions?.locale || this.appStateService.state.lang;\n    const useUppercaseFormat =\n      formattingOptions?.useUppercaseFormat !== undefined\n        ? formattingOptions.useUppercaseFormat\n        : true;\n\n    // Intl.DateTimeFormat requires locale to be in the format e.g. 'en-US' instead of 'en_US'\n    locale = locale.replace(/_/g, '-');\n\n    if (locale.toLowerCase() === 'en' || !this.isValidLocale(locale)) {\n      locale = 'en-GB';\n    }\n\n    const formatter = new Intl.DateTimeFormat(locale, {\n      year: 'numeric',\n      month: 'numeric',\n      day: 'numeric'\n    });\n\n    const patterns = {\n      day: useUppercaseFormat ? 'DD' : 'dd',\n      month: 'MM',\n      year: useUppercaseFormat ? 'YYYY' : 'yyyy'\n    };\n\n    return formatter\n      .formatToParts(new Date(2020, 0, 1))\n      .map(part => (part.type === 'literal' ? part.value : patterns[part.type] || ''))\n      .join('');\n  }\n\n  /**\n   * Determines whether a given locale should use 12-hour clock format with AM/PM.\n   *\n   * @param locale - The locale code (e.g., 'en', 'pl', 'en_US')\n   * @returns boolean indicating whether meridian format (AM/PM) should be used\n   */\n  shouldUseMeridianFormat(locale = this.appStateService.state.lang): boolean {\n    if (!this.isNonEmptyString(locale)) {\n      return false;\n    }\n\n    try {\n      let normalizedLocale = locale.replace(/_/g, '-');\n\n      // Normalize 'en' to 'en-GB' to match application locale conventions\n      if (normalizedLocale.toLowerCase() === 'en') {\n        normalizedLocale = 'en-GB';\n      }\n\n      const formatter = new Intl.DateTimeFormat(normalizedLocale, { hour: 'numeric' });\n      return formatter\n        .formatToParts(new Date(2020, 0, 1, 13, 0, 0))\n        .some(part => part.type === 'dayPeriod');\n    } catch (error) {\n      return false;\n    }\n  }\n\n  private isNonEmptyString(locale: string): boolean {\n    return typeof locale === 'string' && locale.trim().length > 0;\n  }\n\n  private isValidLocale(locale: string): boolean {\n    try {\n      const supportedLocales = Intl.DateTimeFormat.supportedLocalesOf([locale]);\n\n      return supportedLocales.length > 0;\n    } catch (e) {\n      return false;\n    }\n  }\n}\n","import {\n  DATE_PIPE_DEFAULT_OPTIONS,\n  DATE_PIPE_DEFAULT_TIMEZONE,\n  DatePipeConfig,\n  DatePipe as NgDatePipe // eslint-disable-line @typescript-eslint/no-restricted-imports\n} from '@angular/common';\nimport { Inject, LOCALE_ID, Optional, Pipe } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { getAngularLocalesLanguageString } from '../i18n/i18n.module';\nimport { DateFormatService } from './date-format.service';\nimport { AppStateService } from './ui-state.service';\n\n/**\n * The range of times supported by ECMAScript Date objects in milliseconds.\n * @see http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.1\n */\nexport const ES_MAX_TIME_MILLISECONDS = 8640000000000000;\n\n/**\n * Formats a date value according to locale rules. If no other format specified it defaults to `medium`\n * used as standard date/time format.\n *\n * Extends Angular's DatePipe in a way so that date values exceeding the range supported by ECMAScript\n * are displayed as earliest/latest supported point in time printed in the desired format pre- or postfixed\n * by the word `before` or `after`, respectively.\n * In all other cases the pipe behaves as the standard [DatePipe](https://angular.io/api/common/DatePipe).\n *\n * ```html\n * <span class=\"highlight\">{{ deadline | c8yDate }}</span> <!-- e.g. 7 May 2020, 17:45:19 (en-GB) or 07.05.2020, 17:45:19 (de) -->\n * <span>{{ lastUpdated | c8yDate: 'a h:MM:ss' }}</span> <!-- e.g. pm 5:45:19 -->\n * <span>{{ 8640000000000000 + 1 | c8yDate }}</span> <!-- e.g. after 13 Sep 275760, 03:00:00 -->\n * <span>{{ timestamp | c8yDate: 'adaptiveDate' }}</span> <!-- e.g. 2:45 PM for today's date or Oct 23, 2025 for other dates -->\n * ```\n *\n * The `adaptiveDate` format type automatically selects the appropriate format based on the date:\n * - For dates from today: Uses the `shortTime` format (e.g., \"2:45 PM\")\n * - For all other dates: Uses the `mediumDate` format (e.g., \"Oct 23, 2025\")\n */\n@Pipe({ name: 'c8yDate', standalone: true })\nexport class DatePipe extends NgDatePipe {\n  constructor(\n    @Inject(LOCALE_ID) locale: string,\n    private translateService: TranslateService,\n    @Optional() private appStateService?: AppStateService,\n    @Optional() private dateFormatService?: DateFormatService,\n    @Inject(DATE_PIPE_DEFAULT_TIMEZONE) @Optional() defaultTimezone?: string | null,\n    @Inject(DATE_PIPE_DEFAULT_OPTIONS) @Optional() defaultOptions?: DatePipeConfig | null\n  ) {\n    super(locale, defaultTimezone, { dateFormat: 'medium', ...defaultOptions });\n  }\n\n  transform(value: any, format?: string, timezone?: string, locale?: string): any {\n    let currentLocale = locale;\n    if (!currentLocale && this.appStateService) {\n      currentLocale = this.appStateService.state.lang;\n    }\n\n    // Apply locale mapping to ensure consistent Angular locale usage\n    currentLocale = getAngularLocalesLanguageString(currentLocale);\n\n    // Handle adaptiveDate format type\n    if (format === 'adaptiveDate' && value) {\n      const inputDate = new Date(value);\n      const today = new Date(Date.now());\n\n      // Check if the date is from today by comparing year, month, and day\n      const isToday =\n        inputDate.getFullYear() === today.getFullYear() &&\n        inputDate.getMonth() === today.getMonth() &&\n        inputDate.getDate() === today.getDate();\n\n      // Use 'shortTime' format for today's dates, 'mediumDate' for other dates\n      format = isToday ? 'shortTime' : 'mediumDate';\n    }\n\n    if (format === 'short' && this.dateFormatService && currentLocale) {\n      // Angular doesn't provide a predefined format with leading zeros (e.g., \"01.01.2025\")\n      // The 'shortDate' format would display as \"1/1/25\" (without leading zeros and with 2-digit year)\n      // Using custom date formatter ensures consistency with date formats across the application\n      format = this.dateFormatService.getDateFormat({\n        locale: currentLocale,\n        useUppercaseFormat: false\n      });\n    }\n\n    let valueInBounds = value;\n    let valueBefore = false;\n    let valueBeyond = false;\n\n    if (typeof value === 'number' && !isNaN(value)) {\n      valueInBounds = Math.min(value, ES_MAX_TIME_MILLISECONDS);\n      valueInBounds = Math.max(valueInBounds, -ES_MAX_TIME_MILLISECONDS);\n\n      valueBefore = value < -ES_MAX_TIME_MILLISECONDS;\n      valueBeyond = value > ES_MAX_TIME_MILLISECONDS;\n    }\n    let result: string = super.transform(valueInBounds, format, timezone, currentLocale);\n\n    if (valueBefore) {\n      result = this.translateService.instant(gettext(`before {{date}}`), { date: result });\n    } else if (valueBeyond) {\n      result = this.translateService.instant(gettext(`after {{date}}`), { date: result });\n    }\n\n    return result;\n  }\n}\n","import { Directive, ElementRef, HostListener, Renderer2 } from '@angular/core';\nimport { forEach } from 'lodash-es';\n\n/**\n * A directive to determine if a dropdown should open to the top or as usual to the bottom.\n * It starts by checking the available space on the closese parent container with the class\n * `inner-scroll`, fallback to the `window.innerHeight` if no parent is found.\n * This directive has a direct dependency to the bootstrap dropdown (!)\n *\n * Preconditions:\n *  - Bootstrap dropdown is used\n *  - Bootstrap dropdown is not used with container=\"body\"\n *  - Bootstrap dropdown is used like it is intended and documented for e.g.\n * ```html\n * <div dropdown class=\"dropdown\">\n *  <button class=\"dropdown-toggle\" dropdownToggle>Toggle</button>\n *  <ul class=\"dropdown-menu\" *dropdownMenu>\n *    <!-- Content here -->\n *  </ul>\n * </div>\n * ```\n *\n * ```html\n * <div dropdown c8yBsDropdownDirection class=\"dropdown\">\n *  <button class=\"dropdown-toggle\" dropdownToggle>Toggle</button>\n *  <ul class=\"dropdown-menu\" *dropdownMenu>\n *    <!-- Content here -->\n *  </ul>\n * </div>\n * ```\n * Make use of the bootstrap dropdown as usual and additionally add the direction directive to it.\n */\n\n@Directive({\n  selector: '[dropdown][c8yBsDropdownDirection],[dropdown][c8yDropdownDirection]',\n  standalone: true\n})\nexport class DropdownDirectionDirective {\n  private readonly MARGIN_BOTTOM: number = 10;\n  private readonly VISIBILITY: string = 'visibility';\n  private readonly DROPUP: string = 'dropup';\n  private readonly MENUHEIGHT: number = 278;\n  private readonly MAX_ANCESTOR_SEARCH_ITERATIONS = 15;\n\n  constructor(\n    private elementRef: ElementRef,\n    private renderer: Renderer2\n  ) {}\n\n  @HostListener('click')\n  onClick() {\n    const open: boolean = this.elementRef.nativeElement.classList.contains('open');\n\n    if (open) {\n      let menu: HTMLElement;\n      let toggle: HTMLElement;\n      forEach(this.elementRef.nativeElement.children, (element: HTMLElement) => {\n        if (element.classList.contains('dropdown-menu')) {\n          menu = element;\n        }\n        if (\n          element.classList.contains('dropdown-toggle') ||\n          element.hasAttribute('dropdownToggle')\n        ) {\n          toggle = element;\n        }\n      });\n      if (menu && toggle) {\n        this.renderer.setStyle(menu, this.VISIBILITY, 'hidden');\n        this.shouldDropup(menu, toggle);\n        this.renderer.removeStyle(menu, this.VISIBILITY);\n      }\n    }\n  }\n  private shouldDropup(container: HTMLElement, position: HTMLElement) {\n    const containerHeight: number = container.getBoundingClientRect().height;\n\n    const positionTopOffset: number = position.getBoundingClientRect().top;\n    const containerDropPosition: number = positionTopOffset - container.scrollTop;\n\n    let layoutViewport: number;\n    let currentElement = container;\n    let foundScrollableAncestor = false;\n    let iterationsCount = 0;\n    while (currentElement.parentElement && iterationsCount < this.MAX_ANCESTOR_SEARCH_ITERATIONS) {\n      currentElement = currentElement.parentElement;\n      if (currentElement.classList.contains('inner-scroll')) {\n        layoutViewport = currentElement.clientHeight;\n        foundScrollableAncestor = true;\n        break;\n      }\n      iterationsCount++;\n    }\n    if (!foundScrollableAncestor) {\n      layoutViewport = window.innerHeight;\n    }\n    const sum = Math.max(containerHeight, containerDropPosition) + this.MARGIN_BOTTOM;\n\n    const remainingSpaceAboveTrigger = positionTopOffset;\n\n    // Check if the dropdown menu's height is greater than the remaining space\n    if (this.MENUHEIGHT > remainingSpaceAboveTrigger) {\n      // Open the dropdown downwards\n      this.renderer.removeClass(this.elementRef.nativeElement, this.DROPUP);\n    } else if (sum >= layoutViewport) {\n      // Open the dropdown upwards\n      this.renderer.addClass(this.elementRef.nativeElement, this.DROPUP);\n    } else if (this.elementRef.nativeElement.classList.contains(this.DROPUP)) {\n      // Open the dropdown downwards\n      this.renderer.removeClass(this.elementRef.nativeElement, this.DROPUP);\n    }\n  }\n}\n","import { Directive, TemplateRef } from '@angular/core';\n\n/**\n * Injects data statistics object of type `DataSourceStats` into your template\n * so that you can adjust your empty state messages according to them.\n *\n * Works only within the `c8y-data-grid` component.\n *\n * ```html\n * <c8y-data-grid [...]>\n * <c8y-ui-empty-state\n *   *emptyStateContext=\"let stats\"\n *   [title]=\"\n *     stats?.size > 0\n *       ? (noMatchingDevices | translate)\n *       : (noDevicesToDisplay | translate)\n *   \"\n *   [...]\n * ></c8y-ui-empty-state>\n * [...]\n * </c8y-data-grid>\n * ```\n */\n\n@Directive({\n  selector: '[emptyStateContext]',\n  standalone: true\n})\nexport class EmptyStateContextDirective {\n  constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { gettext as OwnEntryPointGettext } from '@c8y/ngx-components/gettext';\n\nlet errorLogged = false;\n\n// kept here for backwards compatibility\n// gettext was moved into separate entry point\n/**\n * @deprecated Use `import { gettext } from '@c8y/ngx-components/gettext';` instead.\n */\nexport function gettext<T extends string>(str: T): T {\n  // limit console spam to one message\n  if (!errorLogged) {\n    errorLogged = true;\n    try {\n      // Trigger stack trace to help identify where the deprecated function was used\n      throw new Error(\n        \"`gettext` was moved into separate entry point. Use `import { gettext } from '@c8y/ngx-components/gettext';` instead.\"\n      );\n    } catch (e) {\n      console.error(e);\n    }\n  }\n\n  return OwnEntryPointGettext(str);\n}\n","import { NgClass, NgIf, NgTemplateOutlet } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { IconDirective } from '../icon.directive';\nimport { C8yTranslatePipe } from '../../i18n';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * A component to show generic empty state.\n * Title and subtitle should be used with translate pipe to mark strings for translation.\n * Component can be displayed vertically (default) or horizontally.\n * Additional markup elements can be placed inside the tag.\n *\n * ```html\n * <c8y-ui-empty-state\n *   [icon]=\"'c8y-icon'\"\n *   [title]=\"'Place your title here' | translate\"\n *   [subtitle]=\"'Place your subtitle here' | translate\"\n *   [horizontal]=\"true\"\n * >\n *   (...)\n * </c8y-ui-empty-state>\n * ```\n */\n@Component({\n  selector: 'c8y-ui-empty-state',\n  templateUrl: './empty-state.component.html',\n  standalone: true,\n  imports: [NgIf, NgClass, IconDirective, NgTemplateOutlet, C8yTranslatePipe]\n})\nexport class EmptyStateComponent {\n  /** Icon name. */\n  @Input() icon: SupportedIconsSuggestions;\n  /** Required title. */\n  @Input() title: string;\n  /** Optional subtitle. */\n  @Input() subtitle: string;\n  /** Whether to display it in horizontal layout. */\n  @Input() horizontal: boolean;\n}\n","<div class=\"c8y-empty-state\" [ngClass]=\"{ 'c8y-empty-state--horizontal': horizontal }\">\n  <i [c8yIcon]=\"icon\" class=\"c8y-icon-duocolor\"></i>\n\n  <ng-container *ngIf=\"!horizontal\">\n    <div>\n      <h3 class=\"text-medium\">{{ title | translate }}</h3>\n      <p class=\"p-b-16\" *ngIf=\"subtitle\">{{ subtitle | translate }}</p>\n      <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"horizontal\">\n    <div class=\"d-flex d-col j-c-center\">\n      <p class=\"text-medium a-s-start\">{{ title | translate }}</p>\n      <p *ngIf=\"subtitle\" class=\"small a-s-start\">{{ subtitle | translate }}</p>\n      <div class=\"small a-s-start\">\n        <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n      </div>\n    </div>\n  </ng-container>\n\n  <ng-template #content>\n    <ng-content></ng-content>\n  </ng-template>\n</div>\n","import {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Output,\n  TemplateRef\n} from '@angular/core';\nimport { IIdentified, Paging } from '@c8y/client';\nimport { NgIf, NgClass, NgTemplateOutlet } from '@angular/common';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { IconDirective } from './icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-load-more',\n  templateUrl: './load-more.component.html',\n  standalone: true,\n  imports: [NgIf, NgClass, C8yTranslateDirective, NgTemplateOutlet, IconDirective, C8yTranslatePipe]\n})\nexport class LoadMoreComponent {\n  @Input()\n  paging: Paging<any>;\n  @Input()\n  useIntersection = true;\n  @Input()\n  hidden = false;\n  @Input()\n  container: ElementRef;\n  @Input()\n  class = 'c8y-list__item';\n  @Input()\n  maxIterations = 10;\n  @Input()\n  noMoreDataHint: TemplateRef<any>;\n  @Input()\n  loadingTemplate: TemplateRef<any>;\n  @Input()\n  hideNoMoreDataHint = false;\n  @Input()\n  loadNextLabel: string;\n  @Input()\n  loadingLabel: string;\n  @Output()\n  onLoad = new EventEmitter<IIdentified>();\n\n  isLoading = false;\n  counter = 0;\n  hasNoMoreData = false;\n  private loadUntilIntersected;\n  private readonly LOAD_SAME_PAGE_THRESHOLD = 50;\n  private intersectionObserver: IntersectionObserver;\n  private destroyed = false;\n\n  @HostBinding('class')\n  get hostClass() {\n    return this.hidden || (!this.hasMore && !this.hasNoMoreData) ? '' : this.class;\n  }\n\n  get hasMore() {\n    return (\n      this.paging && (this.paging.totalPages > this.paging.currentPage || !!this.paging.nextPage)\n    );\n  }\n\n  get isLastPage() {\n    return this.paging && this.paging.totalPages === this.paging.currentPage;\n  }\n\n  constructor(\n    private element: ElementRef,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  ngAfterContentInit(): void {\n    this.destroyed = false;\n    if (this.useIntersection && 'IntersectionObserver' in window) {\n      this.intersectionObserver = new IntersectionObserver(event => this.buttonInView(event[0]), {\n        root: this.container ? this.container.nativeElement : null\n      });\n      this.intersectionObserver.observe(this.element.nativeElement);\n    }\n    this.hasNoMoreData = this.shouldShowNoMoreDataHint();\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed = true;\n    if (this.intersectionObserver) {\n      this.intersectionObserver.disconnect();\n      this.intersectionObserver.unobserve(this.element.nativeElement);\n      clearTimeout(this.loadUntilIntersected);\n    }\n  }\n\n  async loadMore(event?) {\n    if (!this.destroyed) {\n      this.isLoading = true;\n      this.cdRef.detectChanges();\n      if (event) {\n        event.stopPropagation();\n      }\n      if (this.hasMore) {\n        const result = await this.paging.next();\n        this.paging = result.paging;\n        this.onLoad.emit(result.data);\n        this.intersectionLoading();\n        this.hasNoMoreData = this.shouldShowNoMoreDataHint();\n      } else {\n        this.counter = 0;\n        this.isLoading = false;\n      }\n      this.cdRef.detectChanges();\n    }\n  }\n\n  private intersectionLoading() {\n    if (this.useIntersection && this.hasMore && this.loadUntilIntersected !== null) {\n      this.loadUntilIntersected = setTimeout(() => this.loadMore(), this.getLoadingThreshold());\n      this.useIntersection = this.shouldSwitchMode();\n    } else {\n      this.isLoading = false;\n      this.loadUntilIntersected = undefined;\n      this.cdRef.detectChanges();\n    }\n  }\n\n  private getLoadingThreshold(): number {\n    return this.LOAD_SAME_PAGE_THRESHOLD * this.counter++;\n  }\n\n  private shouldShowNoMoreDataHint() {\n    return (this.counter !== 0 || this.noMoreDataHint) && !this.hasMore;\n  }\n\n  private shouldSwitchMode() {\n    return this.counter < this.maxIterations || this.hidden;\n  }\n\n  private buttonInView(event) {\n    if (event.isIntersecting) {\n      this.loadMore();\n    } else if (this.loadUntilIntersected) {\n      clearTimeout(this.loadUntilIntersected);\n      this.loadUntilIntersected = null;\n      this.isLoading = false;\n      this.cdRef.detectChanges();\n    } else {\n      // avoiding a race condition when timeout is faster\n      // cleared then set\n      this.loadUntilIntersected = null;\n    }\n  }\n}\n","<button\n  class=\"btn btn-default btn-block text-center\"\n  type=\"button\"\n  title=\"{{ 'Load more' | translate }}\"\n  [ngClass]=\"{ 'btn-pending': isLoading }\"\n  [style.visibility]=\"hidden ? 'hidden' : 'visible'\"\n  [style.height]=\"hidden ? '1px' : null\"\n  (click)=\"loadMore($event)\"\n  *ngIf=\"hasMore && !(loadingTemplate && isLoading)\"\n>\n  <ng-container *ngIf=\"!isLoading\">\n    <span *ngIf=\"loadNextLabel; else loadPage\" [innerHTML]=\"loadNextLabel | translate\"></span>\n    <ng-template #loadPage>\n      <span translate ngNonBindable [translateParams]=\"{ pageNo: paging.currentPage + 1 }\">\n        Load page {{ pageNo }}\n      </span>\n    </ng-template>\n  </ng-container>\n  <ng-container *ngIf=\"isLoading\">\n    <span *ngIf=\"loadingLabel; else loading\" [innerHTML]=\"loadingLabel | translate\"></span>\n    <ng-template #loading>\n      <span translate ngNonBindable [translateParams]=\"{ pageNo: paging.currentPage + 1 }\">\n        Page {{ pageNo }} is loading…\n      </span>\n    </ng-template>\n  </ng-container>\n</button>\n\n<ng-container *ngIf=\"hasNoMoreData && !hideNoMoreDataHint && !isLoading\">\n  <ng-container *ngTemplateOutlet=\"noMoreDataHint || finishHint\"></ng-container>\n</ng-container>\n\n<ng-template #finishHint>\n  <div class=\"legend form-block center last-record\" title=\"{{ 'Last record' | translate }}\">\n    <i [c8yIcon]=\"'circle'\"></i>\n  </div>\n</ng-template>\n\n<ng-container *ngIf=\"loadingTemplate && isLoading\">\n  <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n</ng-container>\n","import { CdkVirtualScrollViewport, VirtualScrollStrategy } from '@angular/cdk/scrolling';\nimport { fromEvent, Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';\n\n// This is an adapted version of the original FixedSizeVirtualScrollStrategy\n// https://github.com/angular/components/blob/master/src/cdk/scrolling/fixed-size-virtual-scroll.ts\nexport class VirtualScrollWindowStrategy implements VirtualScrollStrategy {\n  scrolledIndexChange: Observable<number>;\n\n  private destroy$: Observable<void>;\n\n  private _viewport: CdkVirtualScrollViewport | null = null;\n\n  private _itemSizePx: number;\n  private _offsetSizePx: number;\n  private _minBufferPx: number;\n  private _maxBufferPx: number;\n\n  private readonly _scrolledIndexChange = new Subject<number>();\n  private readonly destroy = new Subject<void>();\n\n  constructor(itemSizePx: number, offsetSizePx: number, minBufferPx: number, maxBufferPx: number) {\n    this._itemSizePx = itemSizePx;\n    this._offsetSizePx = offsetSizePx;\n    this._minBufferPx = minBufferPx;\n    this._maxBufferPx = maxBufferPx;\n\n    this.scrolledIndexChange = this._scrolledIndexChange.pipe(distinctUntilChanged());\n    this.destroy$ = this.destroy.asObservable();\n  }\n\n  /**\n   * Attaches this scroll strategy to a viewport.\n   * @param viewport The viewport to attach this strategy to.\n   */\n  attach(viewport: CdkVirtualScrollViewport) {\n    this._viewport = viewport;\n    this._updateTotalContentSize();\n    this._updateRenderedRange();\n\n    fromEvent(window, 'scroll')\n      .pipe(takeUntil(this.destroy$), debounceTime(10))\n      .subscribe(() => {\n        this._updateRenderedRange();\n      });\n  }\n\n  /** Detaches this scroll strategy from the currently attached viewport. */\n  detach() {\n    this._scrolledIndexChange.complete();\n    this._viewport = null;\n\n    this.destroy.next();\n    this.destroy.complete();\n  }\n\n  /**\n   * Update the item size and buffer size.\n   * @param itemSize The size of the items in the virtually scrolling list.\n   * @param offsetSizePx The size of the offset (in pixels)..\n   * @param minBufferPx The minimum amount of buffer (in pixels) before needing to render more\n   * @param maxBufferPx The amount of buffer (in pixels) to render when rendering more.\n   */\n  updateItemAndBufferSize(\n    itemSize: number,\n    offsetSizePx: number,\n    minBufferPx: number,\n    maxBufferPx: number\n  ) {\n    this._itemSizePx = itemSize;\n    this._offsetSizePx = offsetSizePx;\n    this._minBufferPx = minBufferPx;\n    this._maxBufferPx = maxBufferPx;\n\n    this._updateTotalContentSize();\n    this._updateRenderedRange();\n  }\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  onContentScrolled() {\n    this._updateRenderedRange();\n  }\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  onDataLengthChanged() {\n    this._updateTotalContentSize();\n    this._updateRenderedRange();\n  }\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  onContentRendered() {\n    /* no-op */\n  }\n\n  /** @docs-private Implemented as part of VirtualScrollStrategy. */\n  onRenderedOffsetChanged() {\n    /* no-op */\n  }\n\n  /**\n   * Scroll to the offset for the given index.\n   * @param index The index of the element to scroll to.\n   * @param behavior The ScrollBehavior to use when scrolling.\n   */\n  scrollToIndex(index: number, behavior: ScrollBehavior): void {\n    if (this._viewport) {\n      this._viewport.scrollToOffset(index * this._itemSizePx, behavior);\n    }\n  }\n\n  /** Update the viewport's total content size. */\n  private _updateTotalContentSize() {\n    if (!this._viewport) {\n      return;\n    }\n\n    this._viewport.setTotalContentSize(\n      this._viewport.getDataLength() * this._itemSizePx + this._offsetSizePx\n    );\n    (this._viewport as any)._changeDetectorRef.detectChanges();\n\n    setTimeout(() => {\n      const children = this._viewport.elementRef.nativeElement.children[0].children;\n      if (children.length > 0) {\n        this._itemSizePx = children[0]?.clientHeight;\n        this._viewport.setTotalContentSize(\n          this._viewport.getDataLength() * this._itemSizePx + this._offsetSizePx\n        );\n      }\n    }, 100);\n  }\n\n  /** Update the viewport's rendered range. */\n  private _updateRenderedRange() {\n    if (!this._viewport) {\n      return;\n    }\n\n    // Use the window as a reference for viewPort size and offset\n    const viewportSize = window.innerHeight;\n    let scrollOffset = window.pageYOffset;\n\n    const renderedRange = this._viewport.getRenderedRange();\n    const newRange = { start: renderedRange.start, end: renderedRange.end };\n\n    const dataLength = this._viewport.getDataLength();\n    // Prevent NaN as result when dividing by zero.\n    let firstVisibleIndex = this._itemSizePx > 0 ? scrollOffset / this._itemSizePx : 0;\n\n    // If user scrolls to the bottom of the list and data changes to a smaller list\n    if (newRange.end > dataLength) {\n      // We have to recalculate the first visible index based on new data length and viewport size.\n      const maxVisibleItems = Math.ceil(viewportSize / this._itemSizePx);\n      const newVisibleIndex = Math.max(\n        0,\n        Math.min(firstVisibleIndex, dataLength - maxVisibleItems)\n      );\n\n      // If first visible index changed we must update scroll offset to handle start/end buffers\n      // Current range must also be adjusted to cover the new position (bottom of new list).\n      if (firstVisibleIndex !== newVisibleIndex) {\n        firstVisibleIndex = newVisibleIndex;\n        scrollOffset = newVisibleIndex * this._itemSizePx;\n        newRange.start = Math.floor(firstVisibleIndex);\n      }\n\n      newRange.end = Math.max(0, Math.min(dataLength, newRange.start + maxVisibleItems));\n    }\n\n    const startBuffer = scrollOffset - newRange.start * this._itemSizePx;\n    if (startBuffer < this._minBufferPx && newRange.start !== 0) {\n      const expandStart = Math.ceil((this._maxBufferPx - startBuffer) / this._itemSizePx);\n      newRange.start = Math.max(0, newRange.start - expandStart);\n      newRange.end = Math.min(\n        dataLength,\n        Math.ceil(firstVisibleIndex + (viewportSize + this._minBufferPx) / this._itemSizePx)\n      );\n    } else {\n      const endBuffer = newRange.end * this._itemSizePx - (scrollOffset + viewportSize);\n      if (endBuffer < this._minBufferPx && newRange.end !== dataLength) {\n        const expandEnd = Math.ceil((this._maxBufferPx - endBuffer) / this._itemSizePx);\n        if (expandEnd > 0) {\n          newRange.end = Math.min(dataLength, newRange.end + expandEnd);\n          newRange.start = Math.max(\n            0,\n            Math.floor(firstVisibleIndex - this._minBufferPx / this._itemSizePx)\n          );\n        }\n      }\n    }\n\n    this._viewport.setRenderedRange(newRange);\n    this._viewport.setRenderedContentOffset(this._itemSizePx * newRange.start);\n    this._scrolledIndexChange.next(Math.floor(firstVisibleIndex));\n  }\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport { VIRTUAL_SCROLL_STRATEGY } from '@angular/cdk/scrolling';\nimport { Directive, forwardRef, Input, OnChanges } from '@angular/core';\nimport { VirtualScrollWindowStrategy } from './virtual-scroll-window-strategy';\n\n/**\n * Provider factory for `VirtualScrollWindowStrategy` that simply extracts the already created\n * `VirtualScrollWindowStrategy` from the given directive.\n * @param windowDir The instance of `VirtualScrollWindowDirective` to extract the\n *     `VirtualScrollWindowStrategy` from.\n */\nexport function _virtualScrollWindowStrategyFactory(windowDir: VirtualScrollWindowDirective) {\n  return windowDir._scrollStrategy;\n}\n\n// This is an adapted version of the original CdkFixedSizeVirtualScroll\n// https://github.com/angular/components/blob/master/src/cdk/scrolling/fixed-size-virtual-scroll.ts\n@Directive({\n  selector: 'cdk-virtual-scroll-viewport[windowVirtualScrollStrategy]',\n  providers: [\n    {\n      provide: VIRTUAL_SCROLL_STRATEGY,\n      useFactory: _virtualScrollWindowStrategyFactory,\n      deps: [forwardRef(() => VirtualScrollWindowDirective)]\n    }\n  ],\n  standalone: true\n})\nexport class VirtualScrollWindowDirective implements OnChanges {\n  /** The size of the items in the list (in pixels). */\n  @Input()\n  get itemSizePx(): number {\n    return this._itemSizePx;\n  }\n  set itemSizePx(value: number) {\n    this._itemSizePx = coerceNumberProperty(value);\n  }\n  _itemSizePx = 20;\n\n  /**\n   * The minimum amount of buffer rendered beyond the viewport (in pixels).\n   * If the amount of buffer dips below this number, more items will be rendered. Defaults to 100px.\n   */\n  @Input()\n  get minBufferPx(): number {\n    return this._minBufferPx;\n  }\n  set minBufferPx(value: number) {\n    this._minBufferPx = coerceNumberProperty(value);\n  }\n  _minBufferPx = 100;\n\n  /**\n   * The number of pixels worth of buffer to render for when rendering new items. Defaults to 200px.\n   */\n  @Input()\n  get maxBufferPx(): number {\n    return this._maxBufferPx;\n  }\n  set maxBufferPx(value: number) {\n    this._maxBufferPx = coerceNumberProperty(value);\n  }\n  _maxBufferPx = 200;\n\n  /** The size of the offset (in pixels). */\n  @Input()\n  get offsetSizePx(): number {\n    return this._offsetSizePx;\n  }\n  set offsetSizePx(value: number) {\n    this._offsetSizePx = coerceNumberProperty(value);\n  }\n  _offsetSizePx = 0;\n\n  /** The scroll strategy used by this directive. */\n  _scrollStrategy: VirtualScrollWindowStrategy = new VirtualScrollWindowStrategy(\n    this.itemSizePx,\n    this.offsetSizePx,\n    this.minBufferPx,\n    this.maxBufferPx\n  );\n\n  ngOnChanges() {\n    this._scrollStrategy.updateItemAndBufferSize(\n      this.itemSizePx,\n      this.offsetSizePx,\n      this.minBufferPx,\n      this.maxBufferPx\n    );\n  }\n}\n","import {\n  CdkFixedSizeVirtualScroll,\n  CdkVirtualForOf,\n  CdkVirtualScrollViewport\n} from '@angular/cdk/scrolling';\nimport { AsyncPipe, NgIf, NgSwitch, NgSwitchCase, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewChecked,\n  Component,\n  DestroyRef,\n  inject,\n  Input,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, of, pipe, Subject } from 'rxjs';\nimport { debounceTime, map, tap } from 'rxjs/operators';\nimport { VirtualScrollWindowDirective } from './virtual-scroll-window.directive';\n\n@Component({\n  selector: 'c8y-virtual-scroller-wrapper',\n  templateUrl: './virtual-scroller-wrapper.component.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    NgSwitch,\n    NgSwitchCase,\n    CdkVirtualScrollViewport,\n    VirtualScrollWindowDirective,\n    CdkVirtualForOf,\n    NgTemplateOutlet,\n    CdkFixedSizeVirtualScroll,\n    AsyncPipe\n  ]\n})\nexport class VirtualScrollerWrapperComponent implements AfterViewChecked {\n  @ViewChild(CdkVirtualScrollViewport)\n  virtualScrollViewport: CdkVirtualScrollViewport;\n\n  @Input() items: unknown[];\n  @Input() itemHeight: number;\n  @Input() containerHeight: number;\n  @Input() template: TemplateRef<any>;\n  @Input() filterPipe = pipe(tap());\n  @Input() strategy: 'fixed' | 'window';\n\n  items$: Observable<unknown>;\n\n  private checkViewportSize$ = new Subject<void>();\n\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor() {\n    this.checkViewportSize$\n      .pipe(debounceTime(25), takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        if (this.virtualScrollViewport) {\n          this.virtualScrollViewport.checkViewportSize();\n        }\n      });\n  }\n\n  @Input() trackByFn = (i, item) => {\n    return item.id;\n  };\n\n  ngAfterViewChecked(): void {\n    if (this.virtualScrollViewport) {\n      this.checkViewportSize$.next();\n    }\n  }\n\n  apply() {\n    this.items$ = of(this.items).pipe(\n      src => this.filterPipe(src),\n      map(item => item)\n    );\n  }\n}\n","<ng-container\n  *ngIf=\"items$ | async as items\"\n  [ngSwitch]=\"strategy\"\n>\n  <ng-container *ngSwitchCase=\"'window'\">\n    <cdk-virtual-scroll-viewport\n      class=\"inner-scroll\"\n      windowVirtualScrollStrategy\n      [itemSizePx]=\"itemHeight\"\n      data-cy=\"c8y-virtual-scroll-wrapper--window\"\n    >\n      <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\">\n        <ng-container\n          *ngTemplateOutlet=\"template; context: { $implicit: item, index: i }\"\n        ></ng-container>\n      </div>\n    </cdk-virtual-scroll-viewport>\n  </ng-container>\n\n  <ng-container *ngSwitchCase=\"'fixed'\">\n    <cdk-virtual-scroll-viewport\n      class=\"inner-scroll\"\n      [style.height]=\"containerHeight + 'px'\"\n      [itemSize]=\"itemHeight\"\n      data-cy=\"c8y-virtual-scroll-wrapper--fixed\"\n    >\n      <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\">\n        <ng-container\n          *ngTemplateOutlet=\"template; context: { $implicit: item, index: i }\"\n        ></ng-container>\n      </div>\n    </cdk-virtual-scroll-viewport>\n  </ng-container>\n</ng-container>\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n  ChangeDetectorRef,\n  Directive,\n  EmbeddedViewRef,\n  EventEmitter,\n  Input,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n  ViewContainerRef,\n  ViewRef\n} from '@angular/core';\nimport { IIdentified, IResultList, Paging } from '@c8y/client';\nimport { assign, get } from 'lodash-es';\nimport {\n  combineLatest,\n  isObservable,\n  Observable,\n  of,\n  pipe,\n  Subject,\n  Subscription,\n  UnaryFunction\n} from 'rxjs';\nimport { filter, map, takeUntil, tap } from 'rxjs/operators';\nimport { RealtimeService } from '../realtime/realtime.service';\nimport { ForOfFilterPipe, ForOfRealtimeOptions } from './forOf.model';\nimport { LoadMoreComponent } from './load-more.component';\nimport { LoadMoreMode } from './load-more.model';\nimport { VirtualScrollerWrapperComponent } from './virtual-scroll/virtual-scroller-wrapper.component';\n\n/**\n * A directive to iterate over `IResultList<T>` data from `@c8y/client`.\n * Depending on the `[c8yForLoadMore]` a load more button is:\n *  - **auto**: Tries to automatically load more data (default maximum 10 iterations; can be\n *          change with maxIterations settings).\n *  - **show**: Shows a load more button for the user to decide\n *  - **none**: Doesn't perform any load more action.\n *  - **hidden**: Loads more data automatically but with no visible button for the user.\n *\n * Additional, any rxjs operator pipe can be applied to the `[c8yForPipe]` input, e.g. to\n * filter the data displayed currently as well as the data loaded by subsequent requests.\n *\n * ```html\n * <div *c8yFor=\"let device of devices; loadMore: 'auto'; let i = index; pipe: filterPipe;\">\n *  {{ i + 1 }}. {{device.name}}\n * </div>\n * ```\n * The above example will list all entities that are applied to `devices`:\n * ```typescript\n * this.devices = this.inventoryService.list({ pageSize: 10, fragmentType: 'c8y_IsDevice' })\n * ```\n * It will display the first `10` items, if there is more space left on the screen, and there are more\n * than `10` devices, it will automatically load up to 10 pages more. If it still can't fit the screen\n * it will stop and switch to `show` mode.\n *\n * A pipe can be applied e.g. for filtering or grouping. This pipe is attached to every follow up\n * request done by the load more component:\n * ```typescript\n * this.filterPipe = pipe(\n *    map((data: []) => {\n *     return data.filter(\n *      (mo: any) => mo.name && mo.name.toLowerCase().indexOf(value.toLowerCase()) > -1\n *    );\n *  })\n * );\n * ```\n * The pipe must be an rxjs pipe and can take any operator.\n *\n * Example with realtime support and items count output (e.g. for handling empty state and header):\n *\n * ```html\n * <c8y-list-group>\n *   <div class=\"c8y-empty-state\" *ngIf=\"count === 0\">\n *     (...)\n *   </div>\n *\n *   <div class=\"page-sticky-header hidden-xs c8y-list__item c8y-list--timeline\" *ngIf=\"count > 0\">\n *     (...)\n *   </div>\n *\n *   <ng-template\n *     c8yFor\n *     let-operation\n *     [c8yForOf]=\"items$\"\n *     [c8yForPipe]=\"filterPipe\"\n *     [c8yForRealtime]=\"realtime\"\n *     [c8yForRealtimeOptions]=\"realtimeOptions\"\n *     (c8yForCount)=\"count = $event\"\n *   >\n *     <c8y-li-timeline>\n *       (...)\n *     </c8y-li-timeline>\n *   </ng-template>\n * </c8y-list-group>\n * ```\n *\n * ```typescript\n * @Component({\n *   (...)\n * })\n * export class ExampleComponent {\n *   @Input() deviceId: IIdentified;\n *   items$ = this.operationService.list({\n *     deviceId: this.deviceId,\n *     fragmentType: 'c8y_MyOperation',\n *     dateFrom: new Date(0).toISOString(),\n *     dateTo: new Date(Date.now()).toISOString(),\n *     revert: true,\n *     withTotalPages: true\n *   });\n *   filterPipe = pipe(map((ops: IOperation[]) => ops.filter(op => op.c8y_MyOperation)));\n *   realtimeOptions: ForOfRealtimeOptions = {\n *     entityOrId: this.deviceId,\n *     removeOnUpdate: true,\n *     insertOnUpdate: true\n *   } as ForOfRealtimeOptions;\n *   count: number;\n *\n *   constructor(\n *     private operationService: OperationService,\n *     public realtime: OperationRealtimeService\n *   ) {}\n * }\n * ```\n */\n@Directive({\n  selector: '[c8yFor]',\n  standalone: true\n})\nexport class ForOfDirective {\n  private cachedData: IIdentified[] = [];\n  private paging: Paging<IIdentified>;\n  private loadMoreMode: LoadMoreMode = 'auto';\n  private dataPipe: ForOfFilterPipe = pipe(tap());\n  private itemDataPipe: UnaryFunction<Observable<IIdentified>, Observable<IIdentified>> = pipe(\n    map(item => [item]),\n    src => this.dataPipe(src),\n    map(([item]) => {\n      return item;\n    })\n  );\n  private pagingSub: Subscription;\n  private obs$: Observable<IIdentified[]>;\n  private loadMore: LoadMoreComponent;\n  private loadingTemplate: TemplateRef<any>;\n  private maxIterations = 10;\n  private notFoundTemplate: TemplateRef<any>;\n  private loadNextLabel: string;\n  private loadingLabel: string;\n  private realtime: RealtimeService<IIdentified>;\n  private realtimeOptions: ForOfRealtimeOptions = {};\n  private comparator: (itemA: IIdentified, itemB: IIdentified) => number;\n  private unsubscribe$: Subject<void> = new Subject();\n  private virtualScrollInstance: VirtualScrollerWrapperComponent;\n\n  private get shouldUseLoadMoreButton() {\n    return (\n      this.loadMoreMode === 'auto' || this.loadMoreMode === 'show' || this.loadMoreMode === 'hidden'\n    );\n  }\n\n  private get hasMoreData() {\n    return this.loadMore && this.loadMore.hasMore;\n  }\n\n  private get length() {\n    return this.cachedData.length;\n  }\n\n  /**\n   * The data setter. Must be a response from @c8y/data or an observable.\n   * You can pass an observable with null to explicitly clear the list.\n   */\n  @Input()\n  set c8yForOf(fetchData: IResultList<IIdentified> | Observable<IResultList<IIdentified>>) {\n    if (fetchData) {\n      this.obs$ = (isObservable(fetchData) ? fetchData : of(fetchData)).pipe(\n        map(result => {\n          if (result === null) {\n            this.paging = null;\n            return [];\n          }\n          const { paging, data } = result;\n          this.paging = paging;\n          return data;\n        })\n      );\n    }\n  }\n\n  /**\n   * The mode setter:\n   *  - **auto**: Tries to automatically load more data (default maximum 10 iterations; can be\n   *          change with maxIterations settings).\n   *  - **show**: Shows a load more button for the user to decide\n   *  - **none**: Doesn't perform any load more action.\n   *  - **hidden**: Loads more data automatically but with no visible button for the user.\n   */\n  @Input()\n  set c8yForLoadMore(type: ForOfDirective['loadMoreMode']) {\n    this.loadMoreMode = type;\n  }\n\n  /**\n   * The pipe setter to attach any rxjs pipe to the current and more loaded data.\n   */\n  @Input()\n  set c8yForPipe(dataPipe: ForOfDirective['dataPipe']) {\n    if (dataPipe) {\n      this.dataPipe = dataPipe;\n    }\n  }\n\n  /**\n   * A template to use if no data is found at all (e.g. if you apply a filter pipe).\n   */\n  @Input()\n  set c8yForNotFound(notFoundTemplate: ForOfDirective['notFoundTemplate']) {\n    this.notFoundTemplate = notFoundTemplate;\n    if (this.loadMore) {\n      this.loadMore.noMoreDataHint = notFoundTemplate;\n    }\n  }\n\n  /**\n   * The maximum numbers of iterations to call data from the api.\n   */\n  @Input()\n  set c8yForMaxIterations(maxIterations: number) {\n    this.maxIterations = maxIterations;\n  }\n\n  /**\n   * A custom loading component.\n   */\n  @Input()\n  set c8yForLoadingTemplate(loadingTemplate: ForOfDirective['loadingTemplate']) {\n    this.loadingTemplate = loadingTemplate;\n  }\n\n  /**\n   * Load next text label.\n   */\n  @Input()\n  set c8yForLoadNextLabel(loadNextLabel: string) {\n    this.loadNextLabel = loadNextLabel;\n  }\n\n  /**\n   * Loading text label.\n   */\n  @Input()\n  set c8yForLoadingLabel(loadingLabel: string) {\n    this.loadingLabel = loadingLabel;\n  }\n\n  /**\n   * A `RealtimeService` instance.\n   */\n  @Input()\n  set c8yForRealtime(source: ForOfDirective['realtime']) {\n    this.realtime = source;\n  }\n\n  /**\n   * Realtime options.\n   */\n  @Input()\n  set c8yForRealtimeOptions(realtimeOptions: ForOfDirective['realtimeOptions']) {\n    this.realtimeOptions = realtimeOptions;\n  }\n\n  /**\n   * A comparator function for comparing list items. Used to determine\n   * the position at which a new element should be added to the list.\n   */\n  @Input()\n  set c8yForComparator(comparator: ForOfDirective['comparator']) {\n    this.comparator = comparator;\n  }\n\n  /**\n   * Enable virtual scroll rendering method.\n   */\n  @Input()\n  c8yForEnableVirtualScroll = false;\n\n  /**\n   * Provides fixed item size for virtual scroll window strategy.\n   */\n  @Input()\n  c8yForVirtualScrollElementSize;\n\n  /**\n   * Sets mode of virtual scroller instance.\n   * window is used for case when whole viewport is scrolled.\n   * fixed can be used on inner-scroll containers.\n   */\n  @Input()\n  c8yForVirtualScrollStrategy: 'fixed' | 'window' = 'window';\n\n  /**\n   * When used fixed strategy, there needs to be fixed height set on scrolling container.\n   */\n  @Input()\n  c8yForVirtualScrollContainerHeight: number;\n\n  /**\n   * The number of items currently loaded in the list.\n   *\n   * Note: This can only be used if the `forOf` isn't used with\n   * the sugared asterisk (*) syntax. Instead you need to use an ng-template:\n   * ```html\n   * <ng-template\n   *  c8yFor\n   *  let-operation\n   *  [c8yForOf]=\"operations$\"\n   *  (c8yForCount)=\"operationCount = $event\"\n   * >\n   * </ng-template>\n   * ```\n   */\n  @Output()\n  private c8yForCount = new EventEmitter<number>();\n\n  /**\n   * The items change event emitting the newly loaded items.\n   *\n   * Note: This can only be used if the `forOf` isn't used with\n   * the sugared asterisk (*) syntax. Instead you need to use an ng-template:\n   * ```html\n   * <ng-template\n   *  c8yFor\n   *  let-operation\n   *  [c8yForOf]=\"operations$\"\n   *  (c8yForChange)=\"onChangeForOf($event)\"\n   * >\n   * </ng-template>\n   * ```\n   */\n  @Output()\n  private c8yForChange = new EventEmitter<unknown[]>();\n\n  /**\n   * The current instance of the `LoadMoreComponent`.\n   */\n  @Output()\n  private c8yForLoadMoreComponent = new EventEmitter<LoadMoreComponent>();\n\n  private count = 0;\n\n  constructor(\n    private tpl: TemplateRef<any>,\n    private vcr: ViewContainerRef,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    this.handleRealtime();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.obs$ && (changes.c8yForPipe || changes.c8yForOf)) {\n      this.unsubscribePaging();\n\n      if (this.virtualScrollInstance) {\n        this.virtualScrollInstance.filterPipe = this.dataPipe;\n        if (this.c8yForVirtualScrollStrategy === 'window') {\n          window.scrollTo({ top: 0 });\n        }\n      }\n\n      // only re-rendering  on filtering if all data is already loaded\n      // from the backend\n      const reRender = !this.hasMoreData && !!changes.c8yForPipe && !changes.c8yForOf;\n\n      if (reRender) {\n        this.obs$ = of(this.cachedData);\n      }\n      this.pagingSub = this.obs$\n        .pipe(\n          tap(data => {\n            if (!reRender) {\n              this.cachedData = data;\n            }\n          })\n        )\n        .pipe(src => this.dataPipe(src))\n        .subscribe((data: []) => {\n          this.updateCount(data.length);\n          this.c8yForChange.emit(data);\n          this.render(data, reRender);\n        });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribePaging();\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n\n  private handleRealtime() {\n    if (this.realtime) {\n      this.handleRealtimeCreate();\n      this.handleRealtimeUpdate();\n      this.handleRealtimeDelete();\n    }\n  }\n\n  /**\n   * On create notification:\n   * - if item passes data pipe, then insert it.\n   * @private\n   */\n  private handleRealtimeCreate() {\n    const { entityOrId } = this.realtimeOptions;\n    this.realtime\n      .onCreate$(entityOrId)\n      .pipe(\n        item$ => this.itemDataPipe(item$),\n        filter(item => !!item),\n        takeUntil(this.unsubscribe$)\n      )\n      .subscribe(item => this.insert(item));\n  }\n\n  /**\n   * On update notification:\n   * - if item is displayed and passes data pipe, then update it,\n   * - if item is displayed and doesn't pass data pipe, then remove it (if `removeOnUpdate` is true),\n   * - if item is not displayed and passes data pipe, then insert it (if `insertOnUpdate` is true),\n   * - if item is not displayed and doesn't pass data pipe, then ignore it.\n   * @private\n   */\n  private handleRealtimeUpdate() {\n    const { entityOrId } = this.realtimeOptions;\n    this.realtime\n      .onUpdate$(entityOrId)\n      .pipe(\n        item$ =>\n          combineLatest([\n            item$,\n            item$.pipe(\n              src => this.itemDataPipe(src),\n              map(item => item !== undefined)\n            )\n          ]),\n        takeUntil(this.unsubscribe$)\n      )\n      .subscribe(([item, passesDataPipe]) => {\n        const { insertOnUpdate, removeOnUpdate } = this.realtimeOptions;\n        const displayed = this.isDisplayed(coerceNumberProperty(item.id));\n        if (displayed) {\n          if (passesDataPipe) {\n            this.update(item);\n          } else if (removeOnUpdate) {\n            this.remove(coerceNumberProperty(item.id));\n          }\n        } else if (passesDataPipe && insertOnUpdate) {\n          this.insert(item);\n        }\n      });\n  }\n\n  /**\n   * On delete notification:\n   * - remove item from the list (if not there, it will be just ignored).\n   * @private\n   */\n  private handleRealtimeDelete() {\n    const { entityOrId } = this.realtimeOptions;\n    this.realtime\n      .onDelete$(entityOrId)\n      .pipe(takeUntil(this.unsubscribe$))\n      .subscribe(id => this.remove(coerceNumberProperty(id)));\n  }\n\n  private render(data, reRender = false): void {\n    if (this.c8yForEnableVirtualScroll) {\n      if (!this.virtualScrollInstance) {\n        this.virtualScrollInstance = this.createVirtualScrollWrapperComponent();\n        if (this.shouldUseLoadMoreButton) {\n          this.loadMore = this.createLoadMoreButtonComponent(false);\n        }\n      }\n\n      this.setVirtualScrollContents(data);\n      return;\n    }\n\n    this.vcr.clear();\n\n    data.forEach((item, index) => {\n      const context = {\n        $implicit: item,\n        index,\n        length: this.length,\n        hasMore: this.hasMoreData,\n        loadMoreComponent: this.loadMore\n      };\n      this.vcr.createEmbeddedView(this.tpl, context);\n    });\n\n    if (this.shouldUseLoadMoreButton) {\n      this.loadMore = this.createLoadMoreButtonComponent(reRender);\n    }\n  }\n\n  private append(data) {\n    if (this.c8yForEnableVirtualScroll) {\n      this.appendVirtualScrollContent(data);\n      return;\n    }\n\n    data.forEach(item => {\n      const index = this.shouldUseLoadMoreButton ? this.vcr.length - 1 : this.vcr.length;\n      const context = {\n        $implicit: item,\n        index,\n        length: this.length,\n        hasMore: this.hasMoreData,\n        loadMoreComponent: this.loadMore\n      };\n      this.vcr.createEmbeddedView(this.tpl, context, index);\n    });\n  }\n\n  private loadMoreData(data) {\n    if (data.length > 0) {\n      this.updateCount(data.length);\n      this.c8yForChange.emit(data);\n      this.append(data);\n    }\n    this.cdRef.detectChanges();\n  }\n\n  private createLoadMoreButtonComponent(reRender) {\n    const componentRef = this.vcr.createComponent(LoadMoreComponent);\n    const instance = componentRef.instance as LoadMoreComponent;\n    instance.paging = this.paging;\n    instance.useIntersection = this.loadMoreMode === 'auto' || this.loadMoreMode === 'hidden';\n    instance.hidden = this.loadMoreMode === 'hidden';\n    instance.maxIterations = this.maxIterations;\n    instance.noMoreDataHint = this.notFoundTemplate;\n    instance.loadingTemplate = this.loadingTemplate;\n    instance.loadNextLabel = this.loadNextLabel;\n    instance.loadingLabel = this.loadingLabel;\n    this.c8yForLoadMoreComponent.emit(instance);\n    this.pagingSub = instance.onLoad\n      .pipe(\n        map((data: []) => this.checkForDuplicates(data)),\n        tap((data: []) => {\n          this.cachedData = this.cachedData.concat(data);\n        })\n      )\n      .pipe(src => this.dataPipe(src))\n      .subscribe(data => this.loadMoreData(data));\n    if (reRender) {\n      assign(instance, this.loadMore);\n    }\n    return instance;\n  }\n\n  private createVirtualScrollWrapperComponent() {\n    const componentRef = this.vcr.createComponent(VirtualScrollerWrapperComponent);\n    const instance = componentRef.instance as VirtualScrollerWrapperComponent;\n    instance.items = this.cachedData;\n    instance.itemHeight = this.c8yForVirtualScrollElementSize;\n    instance.template = this.tpl;\n    instance.strategy = this.c8yForVirtualScrollStrategy;\n    instance.containerHeight = this.c8yForVirtualScrollContainerHeight;\n\n    return instance;\n  }\n\n  private insert(item) {\n    let index = 0;\n\n    if (this.comparator && this.cachedData.length) {\n      let comparisionResult: number;\n      do {\n        const view: EmbeddedViewRef<any> = this.vcr.get(index) as EmbeddedViewRef<any>;\n        const itemB = get(view, 'context.$implicit');\n        comparisionResult = item && itemB ? this.comparator(item, itemB) : 0;\n        if (comparisionResult <= 0) {\n          index++;\n        }\n      } while (comparisionResult <= 0 && index < this.cachedData.length);\n    }\n\n    // Do not append elements after the last one currently loaded,\n    // as it may belong further down there on the list and will\n    // be eventually loaded with one of the next pages.\n    if (index < this.cachedData.length || this.cachedData.length === 0) {\n      const context = {\n        $implicit: item,\n        index,\n        length: this.length,\n        hasMore: this.hasMoreData\n      };\n\n      this.cachedData.splice(index, 0, item);\n      const viewRef: ViewRef = this.tpl.createEmbeddedView(context);\n      this.vcr.insert(viewRef, index);\n      this.updateCount(1);\n    }\n  }\n\n  private update(updatedItem) {\n    this.forMatchingEmbeddedViewRef(\n      (item: IIdentified) => item && updatedItem && item.id === updatedItem.id,\n      (view: EmbeddedViewRef<any>) => {\n        view.context.$implicit = updatedItem;\n        view.markForCheck();\n      }\n    );\n  }\n\n  private remove(idToRemove) {\n    if (this.isDisplayed(idToRemove)) {\n      this.updateCount(-1);\n    }\n\n    const index = this.cachedData.findIndex(op => op.id === idToRemove);\n    this.cachedData.splice(index, 1);\n\n    this.forMatchingEmbeddedViewRef(\n      (item: IIdentified) => item && coerceNumberProperty(item.id, NaN) === idToRemove,\n      (view: EmbeddedViewRef<any>) => view.destroy()\n    );\n\n    this.c8yForChange.emit([...this.cachedData]);\n    this.cdRef.detectChanges();\n  }\n\n  private updateCount(countChange: number) {\n    this.count += countChange;\n    this.c8yForCount.emit(this.count);\n  }\n\n  private isDisplayed(idToCheck) {\n    let displayed = false;\n    this.forMatchingEmbeddedViewRef(\n      (item: IIdentified) => item && coerceNumberProperty(item.id, NaN) === idToCheck,\n      () => {\n        displayed = true;\n      }\n    );\n    return displayed;\n  }\n\n  private forMatchingEmbeddedViewRef(\n    filterFn: (item: IIdentified) => boolean,\n    callbackFn: (view: EmbeddedViewRef<any>) => void\n  ) {\n    for (let i = 0; i < this.vcr.length; i++) {\n      const view: EmbeddedViewRef<any> = this.vcr.get(i) as EmbeddedViewRef<any>;\n      const item: IIdentified = get(view, 'context.$implicit');\n      if (filterFn(item)) {\n        callbackFn(view);\n      }\n    }\n  }\n\n  private checkForDuplicates(data: IIdentified[]): IIdentified[] {\n    return this.realtime\n      ? data.filter(item => !this.cachedData.some(cached => cached.id === item.id))\n      : data;\n  }\n\n  private unsubscribePaging() {\n    if (this.pagingSub) {\n      this.pagingSub.unsubscribe();\n    }\n  }\n\n  private setVirtualScrollContents(items) {\n    if (this.c8yForEnableVirtualScroll && this.virtualScrollInstance) {\n      this.virtualScrollInstance.items = items;\n      this.virtualScrollInstance.apply();\n    }\n  }\n\n  private appendVirtualScrollContent(items) {\n    if (this.c8yForEnableVirtualScroll && this.virtualScrollInstance) {\n      this.virtualScrollInstance.items = this.virtualScrollInstance.items.concat(items);\n      this.virtualScrollInstance.apply();\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  IFetchResponse,\n  IManagedObjectBinary,\n  InventoryBinaryService,\n  SystemOptionsService\n} from '@c8y/client';\nimport { every, first, flatten, get, isNaN, isUndefined, keys, map, uniq, min } from 'lodash-es';\nimport { saveAs } from 'file-saver';\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\nimport { catchError, switchMap, startWith, share } from 'rxjs/operators';\nimport { Stream } from 'stream';\n\nexport interface IFetchWithProgress {\n  totalBytes: number;\n  bufferedBytes: number;\n  percentage: number;\n  bytesPerSecond: number;\n  blob?: Blob;\n}\n\nexport enum GENERIC_FILE_TYPE {\n  ARCHIVE = 'archive',\n  AUDIO = 'audio',\n  CODE = 'code',\n  EXCEL = 'excel',\n  IMAGE = 'image',\n  PDF = 'pdf',\n  POWERPOINT = 'powerpoint',\n  TEXT = 'text',\n  VIDEO = 'video',\n  WORD = 'word',\n  EPL = 'epl',\n  FONT = 'font'\n}\n@Injectable({ providedIn: 'root' })\nexport class FilesService {\n  readonly DEFAULT_BYTES_LIMIT = 52428800;\n  readonly FILENAME_MAX_LENGTH = 128;\n\n  fileTypeExtensionsMap = {\n    [GENERIC_FILE_TYPE.ARCHIVE]: {\n      exts: ['7z', 'apk', 'cab', 'gz', 'iso', 'jar', 'rar', 'tar', 'zip'] as const\n    },\n    [GENERIC_FILE_TYPE.AUDIO]: {\n      exts: [\n        '3gp',\n        'aiff',\n        'aac',\n        'amr',\n        'm4a',\n        'm4p',\n        'mp3',\n        'oga',\n        'ogg',\n        'raw',\n        'wav',\n        'wma'\n      ] as const\n    },\n    [GENERIC_FILE_TYPE.CODE]: {\n      exts: ['aspx', 'exe', 'htm', 'html', 'jad', 'js', 'json', 'jsp', 'php', 'xml'] as const\n    },\n    [GENERIC_FILE_TYPE.EXCEL]: {\n      exts: ['xls', 'xlsx'] as const\n    },\n    [GENERIC_FILE_TYPE.IMAGE]: {\n      exts: ['bmp', 'gif', 'jpeg', 'jpg', 'png', 'tiff', 'svg', 'ico', 'apng', 'webp'] as const\n    },\n    [GENERIC_FILE_TYPE.PDF]: {\n      exts: ['pdf'] as const\n    },\n    [GENERIC_FILE_TYPE.POWERPOINT]: {\n      exts: ['ppt', 'pptx'] as const\n    },\n    [GENERIC_FILE_TYPE.TEXT]: {\n      exts: ['txt'] as const\n    },\n    [GENERIC_FILE_TYPE.VIDEO]: {\n      exts: ['asf', 'avi', 'flv', 'mov', 'mp4', 'ogv', 'qt', 'rm', 'rmvb', 'wmv', '3gp'] as const\n    },\n    [GENERIC_FILE_TYPE.WORD]: {\n      exts: ['doc', 'docx'] as const\n    },\n    [GENERIC_FILE_TYPE.EPL]: {\n      exts: ['mon'] as const\n    },\n    [GENERIC_FILE_TYPE.FONT]: {\n      exts: ['ttf', 'otf', 'woff', 'woff2'] as const\n    }\n  } as const satisfies { [key: string]: { exts: ReadonlyArray<string> } };\n\n  private fileSizeLimitCfg = {\n    systemOption: {\n      category: 'files',\n      key: 'max.size'\n    },\n    defaultBytesLimit: this.DEFAULT_BYTES_LIMIT,\n    actualBytesLimit: undefined\n  };\n\n  constructor(\n    private systemOptionsService: SystemOptionsService,\n    private inventoryBinaryService: InventoryBinaryService\n  ) {}\n\n  /**\n   * Checks if files have valid size.\n   * @param files Files to check.\n   * @returns Returns true if each file has the correct size.\n   */\n  async haveValidSizes(files: FileList, maxFileSizeInBytes?: number): Promise<boolean> {\n    const limit = min([maxFileSizeInBytes, await this.loadBytesSizeLimit()]);\n    return every(files, (f: File) => {\n      return this.size(f) <= limit;\n    });\n  }\n\n  /**\n   * Checks the system file size limit, if not available returns the default value.\n   * Default limit: [DEFAULT_BYTES_LIMIT]{@link DEFAULT_BYTES_LIMIT}\n   * @returns Returns promise with the limit value.\n   */\n  async loadBytesSizeLimit(): Promise<number> {\n    let bytesLimit = this.DEFAULT_BYTES_LIMIT;\n    if (this.fileSizeLimitCfg.actualBytesLimit) {\n      return this.fileSizeLimitCfg.actualBytesLimit;\n    }\n    const { systemOption } = this.fileSizeLimitCfg;\n\n    try {\n      const {\n        data: { value: actualBytesLimit }\n      } = await this.systemOptionsService.detail(systemOption);\n\n      if (!actualBytesLimit) {\n        return bytesLimit;\n      }\n\n      const parsedActualBytesLimit = parseInt(actualBytesLimit, 10);\n      if (isNaN(parsedActualBytesLimit)) {\n        return bytesLimit;\n      }\n\n      this.fileSizeLimitCfg.actualBytesLimit = parsedActualBytesLimit;\n      bytesLimit = parsedActualBytesLimit;\n    } catch (error) {\n      // do nothing\n    }\n    return bytesLimit;\n  }\n\n  /**\n   * Checks the size of the file\n   * @param file File to check.\n   * @returns Returns size of the file in bytes.\n   */\n  size(file: File | IManagedObjectBinary): number {\n    const fileLength = get(file, 'length') || get(file, 'size');\n    const attachments = get(file, '_attachments');\n    const attachmentsObj = get(attachments, first(keys(attachments)));\n    return isUndefined(fileLength) ? get(attachmentsObj, 'length') : fileLength;\n  }\n\n  /**\n   * Checks whether files have allowed extensions.\n   * If the accept parameter is not specified, all extensions are accepted.\n   * @param files Files to check.\n   * @param accept String of comma separated file extensions and generic types ([GENERIC_FILE_TYPE]{@link GENERIC_FILE_TYPE}), e.g. .zip,.7z,excel.\n   * @returns  Returns true if each file has allowed extension.\n   */\n  haveValidExtensions(files: FileList | File | File[], accept: string): boolean {\n    if (!accept) {\n      return true;\n    }\n    const filesArray = (files as FileList).item\n      ? Array.from(files as FileList)\n      : Array.isArray(files)\n        ? files\n        : [files];\n\n    const filesExts = filesArray.map((file: File) => this.getFileExtension(file)?.toLowerCase());\n    const allowedExts = this.extractFileExtensions(accept);\n    return filesExts.every(ext => allowedExts.includes(ext));\n  }\n\n  /**\n   * Checks if file names have allowed extension.\n   * If the accept parameter is not specified, all extensions are accepted.\n   * @param fileNames The file names to check.\n   * @param accept String of comma separated file extensions and generic types ([GENERIC_FILE_TYPE]{@link GENERIC_FILE_TYPE}), e.g. .zip,.7z,excel.\n   * @returns  Returns true if each file has allowed extension.\n   */\n  fileNamesHaveValidExtension(fileNames: string | string[], accept: string): boolean {\n    if (!accept) {\n      return true;\n    }\n    fileNames = Array.isArray(fileNames) ? fileNames : [fileNames];\n    const filesExts = fileNames.map((file: string) => this.getFileExtension(file)?.toLowerCase());\n    const allowedExts = this.extractFileExtensions(accept);\n    return filesExts.every(ext => allowedExts.includes(ext));\n  }\n\n  /**\n   * Checks if each file has a valid filename length.\n   * @param files Files to check.\n   * @returns Returns true if each file has a valid filename length.\n   */\n  checkMaxLength(files: FileList): boolean {\n    return every(files, (f: File) => {\n      return this.FILENAME_MAX_LENGTH > f.name.length;\n    });\n  }\n\n  /**\n   * Extracts the file extension.\n   * @param fileOrFileName File or name of file from which the extension should be extracted.\n   * @returns Returns the file extension or undefined if the file has no extension.\n   */\n  getFileExtension(fileOrFileName: File | string): string | undefined {\n    const fileNameAndFileExt = (\n      typeof fileOrFileName === 'string' ? fileOrFileName : fileOrFileName.name\n    ).split('.');\n    if (fileNameAndFileExt.length === 1) {\n      // no file ext\n      return undefined;\n    }\n    return fileNameAndFileExt.pop();\n  }\n\n  /**\n   * List of file extensions.\n   * @returns Returns list of file extensions.\n   */\n  getFileExtensions(): string[] {\n    return uniq(flatten(map(this.fileTypeExtensionsMap, ({ exts }) => exts)));\n  }\n\n  /**\n   * The list of generic file types.\n   * @returns Returns the list of generic file types.\n   */\n  getGenericFileTypes(): GENERIC_FILE_TYPE[] {\n    return Object.keys(this.fileTypeExtensionsMap) as GENERIC_FILE_TYPE[];\n  }\n\n  /**\n   * @ignore\n   */\n  mapGenericFileTypesToExtensions(genericFileTypes: GENERIC_FILE_TYPE[] = []): string[] {\n    const fileExts = genericFileTypes.map(gT => {\n      const { exts } = this.fileTypeExtensionsMap[gT];\n      return exts;\n    });\n\n    return uniq(flatten(fileExts));\n  }\n  /**\n   * Extracts a list of file extensions from a string.\n   * Can accept generic file types check: [GENERIC_FILE_TYPE]{@link GENERIC_FILE_TYPE}.\n   *\n   * @param str String from which the file extensions are extracted (comma separated values).\n   * Accepted string format:\n   * * \".zip,.iso\",\n   * * \"zip,ISO\",\n   * * \"archive\".\n   * Important: generic types cannot contain a dot. All values with a dot are treated as a normal extension.\n   * @returns Returns a list of the file extensions.\n   */\n  extractFileExtensions(str: string): string[] {\n    if (!str) {\n      return [];\n    }\n    const types = str.split(',').map(t => t.toLowerCase().trim());\n\n    const genericTypes = types.filter((t: string) => this.isGenericType(t));\n    const defaultFileExts = types.filter((t: string) => !this.isGenericType(t));\n\n    const allTypes = [\n      ...this.mapGenericFileTypesToExtensions(genericTypes as GENERIC_FILE_TYPE[]),\n      ...defaultFileExts\n    ].map(t => t.replace('.', ''));\n\n    return uniq(allTypes);\n  }\n\n  /**\n   * Converts a file to a base64 image string.\n   *\n   * @param file The file to convert to base 64.\n   * @returns The image string in base64 format.\n   */\n  toBase64(file: File): Promise<string> {\n    return new Promise((resolve, reject) => {\n      const reader = new FileReader();\n      reader.readAsDataURL(file);\n      reader.onload = () => resolve(String(reader.result));\n      reader.onerror = error => reject(error);\n    });\n  }\n\n  /**\n   * Allows to get a File representation of an managed object binary. Can be used\n   * to convert this file toBase64 to show it to the end-user.\n   * @param binary The binary managed object\n   * @returns The file representation.\n   */\n  async getFile(binary: IManagedObjectBinary): Promise<File> {\n    const res = await this.inventoryBinaryService.download(binary.id);\n    const arrayBuffer = await res.arrayBuffer();\n    return new File([arrayBuffer], binary.name, { type: binary.contentType });\n  }\n\n  /**\n   * Allows to calculate the hash sum of the provided file.\n   * @param file The file to hash.\n   * @returns The SHA-256 hash of the file.\n   */\n  async getHashSumOfFile(file: File | Blob): Promise<string> {\n    const buffer = await file.arrayBuffer();\n    const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n    const hashArray = Array.from(new Uint8Array(hashBuffer));\n    const hashHex = hashArray.map(bytes => bytes.toString(16).padStart(2, '0')).join('');\n    return hashHex;\n  }\n\n  /**\n   * Allows to download a file (opens the browser download prompt).\n   * @param binary The binary managed object.\n   */\n  async download(binary: IManagedObjectBinary) {\n    const file = await this.getFile(binary);\n    saveAs(file);\n  }\n\n  /**\n   * Loads the file to JavaScript memory.\n   * Returns an observable that emits progression status object,\n   * and after download is completed, blob property is populated with Blob result object.\n   * Unsubscribing from the returned observable aborts the file fetch request.\n   *\n   * @param binary The binary managed object.\n   */\n  fetchFileWithProgress$(binary: IManagedObjectBinary): Observable<IFetchWithProgress> {\n    const progress: IFetchWithProgress = {\n      totalBytes: +binary.length,\n      bufferedBytes: 0,\n      percentage: 0,\n      bytesPerSecond: 0\n    };\n\n    return of(new AbortController()).pipe(\n      switchMap(async abortController => ({\n        abortController,\n        startTimestamp: new Date().getTime(),\n        response: await this.inventoryBinaryService.download(binary.id, {\n          signal: abortController.signal\n        })\n      })),\n      switchMap(({ response, abortController, startTimestamp }) =>\n        this.processResponse$(abortController, response, startTimestamp, progress, binary.type)\n      ),\n      startWith(progress),\n      share(),\n      catchError(err => throwError(err))\n    );\n  }\n\n  uploadFileWithProgress$(file: Stream | Buffer | File | Blob): Observable<IFetchWithProgress> {\n    const uploadStartTimestamp = new Date().getTime();\n    const subject = new BehaviorSubject<IFetchWithProgress>({\n      percentage: 0,\n      totalBytes: null,\n      bufferedBytes: 0,\n      bytesPerSecond: 0\n    });\n    const onProgress = (event: ProgressEvent) => {\n      const eventTimestamp = new Date().getTime();\n      const duration = eventTimestamp - uploadStartTimestamp;\n      subject.next({\n        percentage: Math.round((event.loaded / event.total) * 100),\n        totalBytes: event.total,\n        bufferedBytes: event.loaded,\n        bytesPerSecond: Math.round(event.loaded / Math.round(duration / 1000))\n      });\n    };\n\n    const xhr = this.inventoryBinaryService.createWithProgress(file, onProgress);\n    const uploadPromise = this.inventoryBinaryService.getXMLHttpResponse(xhr);\n    uploadPromise.then(() => {\n      subject.complete();\n    });\n\n    return subject.asObservable();\n  }\n\n  private processResponse$(\n    abortController: AbortController,\n    response: IFetchResponse,\n    startTimestamp: number,\n    progress: IFetchWithProgress,\n    binaryType: string\n  ): Observable<IFetchWithProgress> {\n    return new Observable(sub => {\n      const reader = response.body.getReader();\n      const chunks = [];\n\n      const readStream = async () => {\n        try {\n          while (true) {\n            const { done, value } = await reader.read();\n\n            if (done) {\n              progress.blob = new Blob(chunks, { type: binaryType });\n              sub.next({ ...progress });\n              sub.complete();\n              break;\n            }\n\n            chunks.push(value);\n\n            progress.bufferedBytes += value.length;\n            const currentTimestamp = new Date().getTime();\n            const timestampDiff = currentTimestamp - startTimestamp;\n            progress.bytesPerSecond = Math.round(\n              progress.bufferedBytes / Math.round(timestampDiff / 1000)\n            );\n            progress.percentage = Math.round((progress.bufferedBytes / progress.totalBytes) * 100);\n            sub.next({ ...progress });\n          }\n        } catch (e) {\n          abortController.abort();\n          sub.error(e);\n        }\n      };\n      readStream();\n\n      return {\n        unsubscribe() {\n          abortController.abort();\n          sub.complete();\n        }\n      };\n    });\n  }\n\n  private isGenericType(type: string) {\n    return Object.values(GENERIC_FILE_TYPE).includes(type as GENERIC_FILE_TYPE);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { FilesService, GENERIC_FILE_TYPE } from './files.service';\n\n/**\n * Returns a generic file icon name matching the extension of the given File object.\n * One of the following icon names may be returned: file-archive-o, file-audio-o,\n * document-with-code, file, file-excel-o, file-image-o, pdf-2, file-powerpoint-o,\n * file-text, file-video-o, file-word-o, file, or unknown.\n *\n * ```html\n * <div *ngFor=\"let file of droppedFiles\">\n *\t<i class=\"icon\" [c8yIcon]=\"file | fileIcon\"></i>\n * </div>\n * ```\n */\n@Pipe({\n  name: 'fileIcon',\n  standalone: true\n})\nexport class GenericFileIconPipe implements PipeTransform {\n  constructor(public filesService: FilesService) {}\n\n  transform(file: File): string {\n    const genericType = this.getGenericType(file);\n    return this.getIcon(genericType);\n  }\n\n  getGenericType(file: File): GENERIC_FILE_TYPE | 'unknown' {\n    const extension = this.filesService.getFileExtension(file);\n\n    for (const val of Object.values(GENERIC_FILE_TYPE)) {\n      const type = this.matchGenericType(val, extension);\n\n      if (type) {\n        return type;\n      }\n    }\n    return 'unknown';\n  }\n\n  getIcon(genericType: GENERIC_FILE_TYPE | 'unknown'): string {\n    switch (genericType) {\n      case GENERIC_FILE_TYPE.ARCHIVE:\n        return 'file-archive-o';\n      case GENERIC_FILE_TYPE.AUDIO:\n        return 'file-audio-o';\n      case GENERIC_FILE_TYPE.CODE:\n        return 'document-with-code';\n      case GENERIC_FILE_TYPE.EPL:\n        return 'file';\n      case GENERIC_FILE_TYPE.EXCEL:\n        return 'file-excel-o';\n      case GENERIC_FILE_TYPE.IMAGE:\n        return 'file-image-o';\n      case GENERIC_FILE_TYPE.PDF:\n        return 'pdf-2';\n      case GENERIC_FILE_TYPE.POWERPOINT:\n        return 'file-powerpoint-o';\n      case GENERIC_FILE_TYPE.TEXT:\n        return 'file-text';\n      case GENERIC_FILE_TYPE.VIDEO:\n        return 'file-video-o';\n      case GENERIC_FILE_TYPE.WORD:\n        return 'file-word-o';\n      default:\n        return 'file';\n    }\n  }\n\n  private matchGenericType<T extends keyof FilesService['fileTypeExtensionsMap']>(\n    type: T,\n    ext: FilesService['fileTypeExtensionsMap'][T]['exts'][number]\n  ): T;\n  private matchGenericType<T extends keyof FilesService['fileTypeExtensionsMap']>(\n    type: T,\n    ext: string\n  ): T | undefined;\n  private matchGenericType<T extends keyof FilesService['fileTypeExtensionsMap']>(\n    type: T,\n    ext: string\n  ): GENERIC_FILE_TYPE | undefined {\n    const fileTypesMap = this.filesService.fileTypeExtensionsMap;\n    const extensions: ReadonlyArray<string> = fileTypesMap[type].exts;\n    return extensions.includes(ext) ? type : undefined;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { GroupService } from './group.service';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n@Pipe({\n  name: 'getGroupIcon',\n  standalone: true\n})\nexport class GetGroupIconPipe implements PipeTransform {\n  constructor(\n    private groupService: GroupService,\n    private inventoryService: InventoryService\n  ) {}\n\n  async transform(\n    moOrId: IManagedObject | string,\n    open = false,\n    defaultIcon?: SupportedIconsSuggestions\n  ): Promise<string> {\n    let mo: IManagedObject;\n    if (typeof moOrId === 'string') {\n      try {\n        const { data } = await this.inventoryService.detail(moOrId);\n        mo = data;\n      } catch {\n        return 'c8y-group';\n      }\n    } else {\n      mo = moOrId;\n    }\n    if (!mo.c8y_IsDevice) {\n      return this.groupService.getIcon(mo, open, 'c8y-group-open');\n    }\n    return this.groupService.getIcon(mo, open, defaultIcon);\n  }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const internalApps = {\n  administration: gettext('Administration'),\n  cockpit: gettext('Cockpit'),\n  devicemanagement: gettext('Device Management'),\n  'digital-twin-manager': gettext('Digital Twin Manager'),\n  streaminganalytics: gettext('Streaming Analytics'),\n  'ai-agents': gettext('AI Agents'),\n  'ai-plugins': gettext('AI Plugins')\n} as const;\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { find, get, isUndefined, negate } from 'lodash-es';\nimport { Observable, of } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { internalApps } from './humanize-app-name.model';\n\n/**\n * Humanize an application name and translates it.\n *\n * ```html\n * <p>{{ appNameOrApp | humanizeAppName | async }}</p>\n * ```\n */\n@Pipe({ name: 'humanizeAppName', standalone: true })\nexport class HumanizeAppNamePipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  transform(appNameOrApp?: IApplication | string): Observable<string> {\n    if (!appNameOrApp) {\n      return of('');\n    }\n\n    const appName = this.getAppName(appNameOrApp);\n\n    let text;\n    if (this.isPublicApp(appNameOrApp)) {\n      text = gettext('{{ appName | translate }} (public)');\n    } else {\n      text = appName;\n    }\n    return this.translateService.stream(text, { appName });\n  }\n\n  private getAppName(appNameOrApp?: IApplication | string): string {\n    const appName = this.getFirstDefined([\n      get(appNameOrApp, 'name'),\n      get(appNameOrApp, 'contextPath'),\n      typeof appNameOrApp === 'string' ? appNameOrApp : undefined,\n      gettext('<no name>')\n    ]);\n    return internalApps[appName] || this.humanize(appName);\n  }\n\n  private getFirstDefined(values) {\n    return find(values, negate(isUndefined));\n  }\n\n  private isPublicApp(appNameOrApp: IApplication | string): boolean {\n    return Boolean(get(appNameOrApp, 'public'));\n  }\n\n  private humanize(str = ''): string {\n    return str\n      .split('_')\n      .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n      .join(' ');\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { upperFirst } from 'lodash-es';\n\n/**\n * Transforms a string into a human-readable format.\n *\n * ```html\n * <p>{{ 'c8y_hello world' | humanize }}</p> <!-- e.g. Hello world -->\n * ```\n */\n@Pipe({ name: 'humanize', standalone: true })\nexport class HumanizePipe implements PipeTransform {\n  static humanize(str = ''): string {\n    str = str\n      .replace(/\\./g, ' ')\n      .replace(/c8y[\\s,_]*/gi, '')\n      .replace(/_/g, ' ')\n      .replace(/([A-Z][a-z])/g, ' $1')\n      .replace(/^\\$\\.?/, '')\n      .replace(/^\\s*/, '')\n      .replace(/\\s*$/, '')\n      .replace(/\\s+/g, ' ');\n\n    return upperFirst(str);\n  }\n\n  transform(str: string): string {\n    return HumanizePipe.humanize(str);\n  }\n}\n","import { memoize as _memoize } from 'lodash-es';\n\n/**\n * Decorator to memoize function results.\n * @param resolver Cache key resolver function, used by memoize from lodash.\n */\nexport function memoize(resolver?) {\n  return (target, fnName, descriptor) => {\n    const fn = descriptor.value;\n    descriptor.value = function (...args) {\n      const memoizedFnName = `_${fnName}Memoized`;\n      if (!this[memoizedFnName]) {\n        this[memoizedFnName] = _memoize(fn, resolver);\n      }\n      return this[memoizedFnName](...args);\n    };\n  };\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IManagedObject, InventoryService, UserService } from '@c8y/client';\nimport { isEmpty, property } from 'lodash-es';\nimport { memoize } from './memoize.decorator';\nimport { AppStateService } from './ui-state.service';\n\nexport type CanEditConfig = {\n  /**\n   * Skips roles check.\n   */\n  skipRolesCheck?: boolean;\n  /**\n   * Skips managed object ownership check.\n   */\n  skipOwnerCheck?: boolean;\n  /**\n   * Skips checks with a query to the inventory API.\n   */\n  skipRequestCheck?: boolean;\n};\n\n@Injectable({ providedIn: 'root' })\nexport class Permissions {\n  static ROLE_ADVANCED_SOFTWARE_ADMIN = 'ROLE_ADVANCED_SOFTWARE_ADMIN';\n  static ROLE_ADVANCED_SOFTWARE_READ = 'ROLE_ADVANCED_SOFTWARE_READ';\n  static ROLE_ALARM_ADMIN = 'ROLE_ALARM_ADMIN';\n  static ROLE_ALARM_READ = 'ROLE_ALARM_READ';\n  static ROLE_ANALYTICSBUILDER_READ = 'ROLE_ANALYTICSBUILDER_READ';\n  static ROLE_APPLICATION_MANAGEMENT_ADMIN = 'ROLE_APPLICATION_MANAGEMENT_ADMIN';\n  static ROLE_APPLICATION_MANAGEMENT_READ = 'ROLE_APPLICATION_MANAGEMENT_READ';\n  static ROLE_AUDIT_ADMIN = 'ROLE_AUDIT_ADMIN';\n  static ROLE_AUDIT_READ = 'ROLE_AUDIT_READ';\n  static ROLE_BINARY_ADMIN = 'ROLE_BINARY_ADMIN';\n  static ROLE_BINARY_CREATE = 'ROLE_BINARY_CREATE';\n  static ROLE_BINARY_READ = 'ROLE_BINARY_READ';\n  static ROLE_BULK_OPERATION_ADMIN = 'ROLE_BULK_OPERATION_ADMIN';\n  static ROLE_BULK_OPERATION_READ = 'ROLE_BULK_OPERATION_READ';\n  static ROLE_CEP_MANAGEMENT_ADMIN = 'ROLE_CEP_MANAGEMENT_ADMIN';\n  static ROLE_CEP_MANAGEMENT_READ = 'ROLE_CEP_MANAGEMENT_READ';\n  static ROLE_DATA_BROKER_ADMIN = 'ROLE_DATA_BROKER_ADMIN';\n  static ROLE_DATA_BROKER_READ = 'ROLE_DATA_BROKER_READ';\n  static ROLE_DEVICE_CONTROL_ADMIN = 'ROLE_DEVICE_CONTROL_ADMIN';\n  static ROLE_DEVICE_CONTROL_READ = 'ROLE_DEVICE_CONTROL_READ';\n  static ROLE_EMAIL_CREATE = 'ROLE_EMAIL_CREATE';\n  static ROLE_EPLAPPS_READ = 'ROLE_EPLAPPS_READ';\n  static ROLE_EVENT_ADMIN = 'ROLE_EVENT_ADMIN';\n  static ROLE_EVENT_READ = 'ROLE_EVENT_READ';\n  static ROLE_GENERIC_MQTT_ADMIN = 'ROLE_GENERIC_MQTT_ADMIN';\n  static ROLE_IDENTITY_ADMIN = 'ROLE_IDENTITY_ADMIN';\n  static ROLE_IDENTITY_READ = 'ROLE_IDENTITY_READ';\n  static ROLE_INVENTORY_ADMIN = 'ROLE_INVENTORY_ADMIN';\n  static ROLE_INVENTORY_CREATE = 'ROLE_INVENTORY_CREATE';\n  static ROLE_INVENTORY_READ = 'ROLE_INVENTORY_READ';\n  static ROLE_MACHINE_LEARNING_READ = 'ROLE_MACHINE_LEARNING_READ';\n  static ROLE_MANAGED_OBJECT_ADMIN = 'ROLE_MANAGED_OBJECT_ADMIN';\n  static ROLE_MANAGED_OBJECT_CREATE = 'ROLE_MANAGED_OBJECT_CREATE';\n  static ROLE_MANAGED_OBJECT_READ = 'ROLE_MANAGED_OBJECT_READ';\n  static ROLE_MEASUREMENT_ADMIN = 'ROLE_MEASUREMENT_ADMIN';\n  static ROLE_MEASUREMENT_READ = 'ROLE_MEASUREMENT_READ';\n  static ROLE_MQTT_CONNECT_ADMIN = 'ROLE_MQTT_CONNECT_ADMIN';\n  static ROLE_MQTT_SERVICE_ADMIN = 'ROLE_MQTT_SERVICE_ADMIN';\n  static ROLE_NOTIFICATION_2_ADMIN = 'ROLE_NOTIFICATION_2_ADMIN';\n  static ROLE_OPTION_MANAGEMENT_ADMIN = 'ROLE_OPTION_MANAGEMENT_ADMIN';\n  static ROLE_OPTION_MANAGEMENT_READ = 'ROLE_OPTION_MANAGEMENT_READ';\n  static ROLE_PROVISIONING_CREATE = 'ROLE_PROVISIONING_CREATE';\n  static ROLE_PROVISIONING_READ = 'ROLE_PROVISIONING_READ';\n  static ROLE_PROVISIONING_UPDATE = 'ROLE_PROVISIONING_UPDATE';\n  static ROLE_REMOTE_ACCESS_ADMIN = 'ROLE_REMOTE_ACCESS_ADMIN';\n  static ROLE_RETENTION_RULE_ADMIN = 'ROLE_RETENTION_RULE_ADMIN';\n  static ROLE_RETENTION_RULE_READ = 'ROLE_RETENTION_RULE_READ';\n  static ROLE_SCHEDULE_REPORT_ADMIN = 'ROLE_SCHEDULE_REPORT_ADMIN';\n  static ROLE_SIMULATOR_ADMIN = 'ROLE_SIMULATOR_ADMIN';\n  static ROLE_SMARTGROUP_ADMIN = 'ROLE_SMARTGROUP_ADMIN';\n  static ROLE_SMARTGROUP_CREATE = 'ROLE_SMARTGROUP_CREATE';\n  static ROLE_SMARTGROUP_UPDATE = 'ROLE_SMARTGROUP_UPDATE';\n  static ROLE_SMARTRULE_ADMIN = 'ROLE_SMARTRULE_ADMIN';\n  static ROLE_SMARTRULE_READ = 'ROLE_SMARTRULE_READ';\n  static ROLE_SMS_ADMIN = 'ROLE_SMS_ADMIN';\n  static ROLE_SMS_READ = 'ROLE_SMS_READ';\n  static ROLE_SUPPORT_ADMIN = 'ROLE_SUPPORT_ADMIN';\n  static ROLE_SUPPORT_READ = 'ROLE_SUPPORT_READ';\n  static ROLE_TENANT_ADMIN = 'ROLE_TENANT_ADMIN';\n  static ROLE_TENANT_MANAGEMENT_ADMIN = 'ROLE_TENANT_MANAGEMENT_ADMIN';\n  static ROLE_TENANT_MANAGEMENT_CREATE = 'ROLE_TENANT_MANAGEMENT_CREATE';\n  static ROLE_TENANT_MANAGEMENT_READ = 'ROLE_TENANT_MANAGEMENT_READ';\n  static ROLE_TENANT_MANAGEMENT_UPDATE = 'ROLE_TENANT_MANAGEMENT_UPDATE';\n  static ROLE_TENANT_STATISTICS_READ = 'ROLE_TENANT_STATISTICS_READ';\n  static ROLE_USER_MANAGEMENT_ADMIN = 'ROLE_USER_MANAGEMENT_ADMIN';\n  static ROLE_USER_MANAGEMENT_CREATE = 'ROLE_USER_MANAGEMENT_CREATE';\n  static ROLE_USER_MANAGEMENT_OWN_ADMIN = 'ROLE_USER_MANAGEMENT_OWN_ADMIN';\n  static ROLE_USER_MANAGEMENT_OWN_READ = 'ROLE_USER_MANAGEMENT_OWN_READ';\n  static ROLE_USER_MANAGEMENT_READ = 'ROLE_USER_MANAGEMENT_READ';\n\n  constructor(\n    private appState: AppStateService,\n    private inventory: InventoryService,\n    private user: UserService\n  ) {}\n\n  /**\n   * Checks if the current user has write permissions for the given mo\n   * (either through global role, individual device permissions or via inventory roles).\n   *\n   * ```ts\n   * async canEditGroup(group: IManagedObject): Promise<boolean> {\n   *   return await this.permissions.canEdit(\n   *     [Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_MANAGED_OBJECT_ADMIN],\n   *     group\n   *   );\n   * }\n   * ```\n   *\n   * @param roleIds The array of role ids to check if the current user have at least one of them.\n   * @param mo The managed object for which we are checking whether the user has access.\n   * @param config A configuration object that can take the following values: `skipRolesCheck`: `boolean` - skips roles check, `skipOwnerCheck`: `boolean` - skips ownership check, `skipRequestCheck`: `boolean` - skips checks with a query to the inventory API. UI will make a query to backend whether the user can edit the managed object. A rejection from BE indicates a lack of permission.\n   *\n   * @returns A Promise resolving to a boolean value. `true` if editing is permitted based on the given parameters and configuration; otherwise, `false`.\n   *\n   */\n  canEdit(\n    roleIds: string[],\n    mo: IManagedObject | IIdentified,\n    config: CanEditConfig = {\n      skipRolesCheck: false,\n      skipOwnerCheck: false,\n      skipRequestCheck: false\n    }\n  ): Promise<boolean> {\n    return this.checkIfCanEdit(roleIds, mo, config);\n  }\n\n  /**\n   * Checks if the current user has the specified role.\n   *\n   * ```ts\n   * hasSmsReadRole(): boolean {\n   *  return this.permissions.hasRole(Permissions.ROLE_SMS_READ);\n   * };\n   * ```\n   *\n   * @param roleId The ID of the role to check against the current user's roles.\n   * @returns A boolean value indicating whether the current user has the specified role.\n   * @throws Error if no user is currently logged in.\n   *\n   */\n  hasRole(roleId: string): boolean {\n    const currentUser = this.appState.currentUser.value;\n    if (!currentUser) {\n      throw new Error('Roles can only be requested if the user is logged in.');\n    }\n    return this.user.hasRole(currentUser, roleId);\n  }\n\n  /**\n   * Checks if the current user possesses all the specified roles.\n   *\n   * ```ts\n   * hasMOReadAndBinaryReadRoles(): boolean {\n   *   return this.permissions.hasAllRoles([\n   *     Permissions.ROLE_MANAGED_OBJECT_READ,\n   *     Permissions.ROLE_BINARY_READ\n   *   ]);\n   * }\n   * ```\n   *\n   * @param roleIds An array of strings representing the role IDs to check against the current user's roles.\n   * @returns A boolean value indicating whether the current user has all the specified roles.\n   * @throws Error if no user is currently logged in.\n   *\n   */\n  hasAllRoles(roleIds: string[]): boolean {\n    const currentUser = this.appState.currentUser.value;\n    if (!currentUser) {\n      throw new Error('Roles can only be requested if the user is logged in.');\n    }\n    return this.user.hasAllRoles(currentUser, roleIds);\n  }\n\n  /**\n   * Checks if the current user possesses any of the specified roles.\n   *\n   * ```ts\n   * hasTenantAdminOrTenantManagementAdminRoles(): boolean {\n   *  return this.permissions.hasAnyRole([\n   *    Permissions.ROLE_TENANT_ADMIN,\n   *    Permissions.ROLE_TENANT_MANAGEMENT_ADMIN\n   *  ]);\n   * };\n   * ```\n   *\n   * @param roleIds An array of strings representing the role IDs to check against the current user's roles.\n   * @returns A boolean value indicating whether the current user has any of the specified roles.\n   * @throws Error if no user is currently logged in.\n   *\n   */\n  hasAnyRole(roleIds: string[]): boolean {\n    const currentUser = this.appState.currentUser.value;\n    if (!currentUser) {\n      throw new Error('Roles can only be requested if the user is logged in.');\n    }\n    return this.user.hasAnyRole(currentUser, roleIds);\n  }\n\n  /**\n   * Checks if the current user possesses any of the specified global roles.\n   *\n   * ```ts\n   * hasAnyGlobalRoles(dashboard: ContextDashboardManagedObject): boolean {\n   *   const globalRolesIds = dashboard?.c8y_Dashboard?.globalRolesIds;\n   *   return this.permissions.hasAnyGlobalRole(globalRolesIds);\n   * }\n   * ```\n   *\n   * @param globalRolesIds An array of numbers representing the global role IDs to check against the current user's roles.\n   * @returns A boolean value indicating whether the current user has any of the specified global roles.\n   * @throws Error if no user is currently logged in.\n   *\n   */\n  hasAnyGlobalRole(globalRolesIds: number[]): boolean {\n    const currentUser = this.appState.currentUser.value;\n    if (!currentUser) {\n      throw new Error('Global roles can only be requested if the user is logged in.');\n    }\n    return this.user.hasAnyGlobalRole(currentUser, globalRolesIds);\n  }\n\n  /**\n   * Checks if the current user is the owner of the managed object.\n   * Utilizes memoization to cache the result based on the managed object's id,\n   * improving performance for subsequent checks of the same object.\n   *\n   * ```ts\n   * const managedObject = { id: '123', owner: 'johnDoe' };\n   * this.checkIfOwner(managedObject).then(isOwner => {\n   *   console.log(isOwner);\n   * });\n   * ```\n   *\n   * @param mo The managed object to check ownership against.\n   * @returns A promise that resolves to `true` if the current user is the owner of the managed object, and `false` otherwise.\n   *\n   */\n  @memoize(property('id'))\n  protected async checkIfOwner(mo: IManagedObject | IIdentified): Promise<boolean> {\n    const currentUserName = await this.appState.currentUser.value.userName;\n    const { data } = await this.inventory.detail(mo.id);\n    return currentUserName === data.owner;\n  }\n\n  /**\n   * Attempts to perform a partial update on a managed object as a means to check for edit permissions.\n   * Utilizes memoization to cache the result based on the managed object's id,\n   * thereby avoiding unnecessary repeated requests for the same object.\n   *\n   * This method essentially tests if the current user has permission to update the managed object,\n   * serving as an indirect permission check.\n   *\n   * ```ts\n   * const managedObject = { id: '456' };\n   * this.checkWithRequest(managedObject).then(hasPermission => {\n   *   console.log(hasPermission);\n   * }).catch(error => {\n   *   console.error(error);\n   * });\n   * ```\n   *\n   * @param mo The managed object to test edit permissions on.\n   * @returns A promise that resolves to `true` if the update request succeeds (indicating edit permissions), and `false` if it fails.\n   *\n   */\n  @memoize(property('id'))\n  protected async checkWithRequest(mo: IManagedObject | IIdentified): Promise<boolean> {\n    if (isEmpty(mo.id)) {\n      return Promise.resolve(false);\n    }\n    const moId = mo.id.toString();\n    const partialUpdateObject: Partial<IManagedObject> = {\n      id: moId\n    };\n    return this.inventory\n      .update(partialUpdateObject)\n      .then(() => {\n        return true;\n      })\n      .catch(() => {\n        return false;\n      });\n  }\n\n  /**\n   * Checks if the current user has the necessary permissions to edit a managed object.\n   * This method considers various conditions to determine editability, including role checks,\n   * ownership, and custom request-based checks. Each of these checks can be optionally skipped\n   * based on the provided configuration.\n   *\n   * @param roleIds An array of role IDs to check against the current user's roles.\n   * @param mo The managed object or an identified resource to check edit permissions for.\n   * @param config Configuration options to customize the checks performed. This includes options to skip role checks, owner checks, or custom request checks.\n   * @returns A promise that resolves to `true` if the current user can edit the managed object based on the given conditions, and `false` otherwise.\n   *\n   */\n  private async checkIfCanEdit(\n    roleIds: string[],\n    mo: IManagedObject | IIdentified,\n    config: CanEditConfig\n  ): Promise<boolean> {\n    if (!config?.skipRolesCheck && (await this.hasAnyRole(roleIds))) {\n      return true;\n    } else if (!config?.skipOwnerCheck && (await this.checkIfOwner(mo))) {\n      return true;\n    } else if (!config?.skipRequestCheck && (await this.checkWithRequest(mo))) {\n      return true;\n    }\n    return false;\n  }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { Permissions } from './permissions.service';\n\n/**\n * A structural directive that conditionally includes a template only if the user has\n * all or any of the roles passed as an input. By default the directive checks all roles:\n *\n * ```html\n * <button *c8yIfAllowed=\"['ROLE_RECORD_DELETE', 'ROLE_ENTRY_DELETE']\" (click)=\"delete()\" title=\"Delete\">\n *   Delete\n * </button>\n * ```\n *\n * To check if the user has any of the required roles to view the element you need to use the `allowAny` input:\n *\n * ```html\n * <button *c8yIfAllowed=\"['ROLE_RECORD_DELETE', 'ROLE_ENTRY_DELETE']; allowAny: true\" (click)=\"delete()\" title=\"Delete\">\n *   Delete\n * </button>\n * ```\n *\n * or use the shorter version\n *\n * ```html\n * <button *c8yIfAllowed=\"['ROLE_RECORD_DELETE', 'ROLE_ENTRY_DELETE']; allowAny\" (click)=\"delete()\" title=\"Delete\">\n *   Delete\n * </button>\n * ```\n */\n@Directive({\n  selector: '[c8yIfAllowed]',\n  standalone: true\n})\nexport class IfAllowedDirective {\n  /**\n   * One or many roles required for the element to be rendered\n   */\n  @Input()\n  set c8yIfAllowed(roleIds: string | string[]) {\n    this.rolesIds = Array.isArray(roleIds) ? roleIds : !!roleIds ? [roleIds] : [];\n  }\n\n  /**\n   * Switches to the mode where at least one of the provided roles is sufficient for the element to be rendered\n   */\n  @Input()\n  set c8yIfAllowedAllowAny(allowAny: boolean) {\n    this.allowAny = allowAny === null || allowAny;\n  }\n\n  private rolesIds: string[];\n  private allowAny = false;\n\n  constructor(\n    private template: TemplateRef<any>,\n    private container: ViewContainerRef,\n    private permissions: Permissions\n  ) {}\n\n  ngOnInit() {\n    if (\n      !this.rolesIds ||\n      !this.rolesIds.length ||\n      (this.allowAny\n        ? this.permissions.hasAnyRole(this.rolesIds)\n        : this.permissions.hasAllRoles(this.rolesIds))\n    ) {\n      this.container.createEmbeddedView(this.template);\n    }\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NgIf } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n';\n\n@Component({\n  selector: 'c8y-loading',\n  templateUrl: './loading.component.html',\n  standalone: true,\n  imports: [NgIf, C8yTranslatePipe]\n})\nexport class LoadingComponent {\n  /**\n   * Defining the layout of the loading component. By default the\n   * component loading activity is used.\n   */\n  @Input() layout: 'component' | 'application' | 'page' = 'component';\n\n  /**\n   * If set, a progress bar is shown. The layout property is ignored.\n   */\n  @Input() progress: number = null;\n\n  /**\n   * Showing a message while loading. The application layout by default shows the label `Loading…`.\n   */\n  @Input() message: string = null;\n\n  /**\n   * @ignore\n   */\n  get defaultLoadingMessage() {\n    if (this.message !== null) {\n      return this.message;\n    }\n    return this.layout === 'application' ? gettext('Loading…') : null;\n  }\n}\n","<div\n  class=\"spinner p-relative\"\n  *ngIf=\"layout === 'component' && progress === null\"\n>\n  <div class=\"rect1\"></div>\n  <div class=\"rect2\"></div>\n  <div class=\"rect3\"></div>\n  <div class=\"rect4\"></div>\n  <div class=\"rect5\"></div>\n</div>\n\n<div\n  class=\"spinner-snake\"\n  *ngIf=\"layout === 'application' && progress === null\"\n></div>\n\n<div\n  class=\"loading-bar active\"\n  *ngIf=\"layout === 'page' && progress === null\"\n></div>\n\n<div\n  class=\"progress progress-striped active\"\n  *ngIf=\"progress !== null\"\n>\n  <div\n    class=\"progress-bar\"\n    [style.width]=\"progress + '%'\"\n    [attr.aria-label]=\"'Progress' | translate\"\n    aria-valuemin=\"0\"\n    aria-valuemax=\"100\"\n    [attr.aria-valuenow]=\"progress\"\n    role=\"progressbar\"\n  ></div>\n</div>\n\n<p\n  class=\"text-center\"\n  *ngIf=\"defaultLoadingMessage\"\n>\n  {{ defaultLoadingMessage | translate }}\n</p>\n","/*\n * Implementation of pure \"Mapping\" pipe based on\n * https://codeburst.io/angular-bad-practices-eab0e594ce92#389b\n */\n\nimport { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'map',\n  standalone: true\n})\nexport class MapFunctionPipe implements PipeTransform {\n  /*\n   * This will be a universal pipe for array mappings. You may add more\n   * type checkings and runtime checkings to make sure it works correctly everywhere.\n   */\n  transform(value, mappingFunction: (arg: any) => any, thisArg?: any) {\n    return mappingFunction.apply(thisArg || this, Array.isArray(value) ? value : [value]);\n  }\n}\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { from, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\n/**\n * A pipe that transforms a Markdown string into sanitized HTML.\n *\n *\n * ```html\n * <div [innerHTML]=\"'[Example markdown link](#)' | markdownToHtml | async\"></div>\n * ```\n */\n@Pipe({\n  name: 'markdownToHtml',\n  standalone: true\n})\nexport class MarkdownToHtmlPipe implements PipeTransform {\n  constructor(private sanitizer: DomSanitizer) {}\n\n  transform(markdown: string, args?: { baseUrl: string }): Observable<string> {\n    return markdown\n      ? from(import('marked')).pipe(\n          map(marked => {\n            const renderer = new marked.Renderer();\n            const baseUrl = args?.baseUrl || '';\n            if (baseUrl) {\n              const originalRendererImage = renderer.image;\n              renderer.image = image => {\n                const { href } = image;\n                image.href = baseUrl + href;\n                return originalRendererImage.call(renderer, image);\n              };\n            }\n            const anchorWithAttributes = `<a target=\"_blank\" rel=\"noreferrer noopener nofollow\" `;\n\n            const originalRendererLink = renderer.link;\n            renderer.link = link => {\n              const { href } = link;\n              const url = new URL(href, window.location.origin);\n              const { hostname, protocol } = window.location;\n              const localLink = url.hostname === hostname && url.protocol === protocol;\n              const html = originalRendererLink.call(renderer, link);\n              return localLink ? html : html.replace(/^<a /, anchorWithAttributes);\n            };\n\n            const originalRendererHtml = renderer.html;\n            renderer.html = html => {\n              const anchorWithAttributes = `<a target=\"_blank\" rel=\"noreferrer noopener nofollow\" `;\n              html.text = html.text.replace(/<a /, anchorWithAttributes);\n              html.raw = html.raw.replace(/<a /, anchorWithAttributes);\n              return originalRendererHtml.call(renderer, html);\n            };\n            return marked.parse(markdown, { renderer });\n          }),\n          map(html => this.sanitizer.sanitize(SecurityContext.HTML, html)),\n          catchError(e => {\n            console.warn(e);\n            return of('<p>Failed to process markdown file.</p>');\n          })\n        )\n      : of('');\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { InventoryService } from '@c8y/client';\nimport { memoize } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\nexport class MoNameCacheService {\n  private clearCacheTimer = [];\n  private cacheLifeSpan = 5 * 60 * 1000; // 5 minutes\n\n  getMoName = memoize(async id => {\n    const { data } = await this.inventoryService.detail(id);\n    return data.name ? data.name : '';\n  });\n\n  constructor(private inventoryService: InventoryService) {}\n\n  resetCacheTimer(id) {\n    clearTimeout(this.clearCacheTimer[id]);\n    this.clearCacheTimer[id] = setTimeout(() => {\n      this.getMoName.cache.delete(id);\n    }, this.cacheLifeSpan);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { MoNameCacheService } from './mo-name-cache.service';\n\n@Pipe({\n  name: 'moName',\n  standalone: true\n})\nexport class MoNamePipe implements PipeTransform {\n  constructor(private moNamePipeService: MoNameCacheService) {}\n\n  async transform(entityOrId: Partial<IManagedObject>) {\n    if (typeof entityOrId === 'object') {\n      return entityOrId.name ? entityOrId.name : '';\n    }\n    this.moNamePipeService.resetCacheTimer(entityOrId);\n    return await this.moNamePipeService.getMoName(entityOrId);\n  }\n}\n","import { DecimalPipe as NgDecimalPipe } from '@angular/common';\nimport { Inject, LOCALE_ID, Pipe } from '@angular/core';\n\nexport const NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\n\n/**\n * Formats a value according to digit options and locale rules.\n * Extends the behavior of Angular's <code>number</code> pipe by\n * providing an option to define if a truncated value should be\n * rounded up or down (with the <code>number</code> pipe the\n * value will be rounded using the \"to-nearest\" method).\n *\n * ```html\n * <span>{{ 3.45612 | c8yNumber: 'ceil':'1.1-3' }}</span> <!-- 3.457 -->\n * <span>{{ 3.46 | c8yNumber: 'ceil':'1.3-3' }}</span> <!-- 3.460 -->\n * <span>{{ 3.45685 | c8yNumber: 'floor':'1.1-3' }}</span> <!-- 3.456 -->\n * ```\n */\n@Pipe({ name: 'c8yNumber', standalone: true })\nexport class NumberPipe extends NgDecimalPipe {\n  constructor(@Inject(LOCALE_ID) locale: string) {\n    super(locale);\n  }\n\n  transform(\n    value: number | string,\n    round: 'ceil' | 'floor' | null | undefined,\n    digitsInfo?: string,\n    locale?: string\n  ): string | null;\n  transform(\n    value: null | undefined,\n    round: 'ceil' | 'floor' | null | undefined,\n    digitsInfo?: string,\n    locale?: string\n  ): null;\n  /**\n   * @param value The value to be formatted.\n   * @param round When the value needs to be truncated defines if it will be rounded up (='ceil') or down (='floor')\n   * @param digitsInfo Sets digit and decimal representation.\n   * @param locale Specifies what locale format rules to use.\n   */\n  transform(\n    value: number | string | null | undefined,\n    round: 'ceil' | 'floor' | null | undefined,\n    digitsInfo?: string,\n    locale?: string\n  ): string {\n    if (round) {\n      let maxFractionPart = 0;\n      if (digitsInfo) {\n        const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);\n\n        if (parts === null) {\n          throw new Error(`${digitsInfo} is not a valid digit info`);\n        }\n        maxFractionPart = Number.parseInt(parts[5], 10);\n      }\n\n      const multiplicator = Math.pow(10, maxFractionPart);\n\n      value = strToNumber(value);\n      value = Math[round](value * multiplicator) / multiplicator;\n    }\n    return super.transform(value, digitsInfo, locale);\n  }\n}\n\n/**\n * Transforms a string into a number (if needed).\n */\nfunction strToNumber(value: number | string): number {\n  // Convert strings to numbers\n  if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {\n    return Number(value);\n  }\n  if (typeof value !== 'number') {\n    throw new Error(`${value} is not a number`);\n  }\n  return value;\n}\n","import { NgClass, NgIf, NgStyle } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'c8y-operation-result',\n  templateUrl: './operation-result.component.html',\n  standalone: true,\n  imports: [NgIf, NgStyle, NgClass]\n})\nexport class OperationResultComponent {\n  @Input() text: string;\n  @Input() vertical: boolean;\n  @Input() size: number;\n  @Input() type: string;\n}\n","<style>\n  .stroke-anim {\n    animation: stroke-anim 0.75s ease-in-out 0s 1 forwards;\n  }\n  .check-anim {\n    animation: check-anim 0.35s ease-in-out 0.5s 1 forwards;\n  }\n  .symbol-anim {\n    animation: symbol-anim 0.35s ease-in-out 0.5s 1 forwards;\n  }\n\n  @keyframes stroke-anim {\n    0% {\n      stroke-dashoffset: 60;\n    }\n    100% {\n      stroke-dashoffset: 0;\n    }\n  }\n\n  @keyframes check-anim {\n    0% {\n      stroke-dashoffset: 28;\n    }\n    100% {\n      stroke-dashoffset: 0;\n    }\n  }\n  @keyframes symbol-anim {\n    0% {\n      stroke-dashoffset: 7;\n    }\n    100% {\n      stroke-dashoffset: 0;\n    }\n  }\n\n  .delay-05 {\n    animation-delay: 0.5s;\n  }\n</style>\n<div class=\"d-flex a-i-center p-24 m-24 p-b-0\" [ngClass]=\"{ 'd-col j-c-center': vertical }\">\n  <svg *ngIf=\"type === 'success'\" class=\"flex-no-shrink\" viewBox=\"0 0 24 24\" [ngStyle]=\"{ 'max-width.px': size || 64 }\">\n    <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\">\n      <polyline\n        stroke=\"var(--input-validation-success, #008800)\"\n        stroke-width=\"2\"\n        stroke-linejoin=\"round\"\n        points=\"7.8678862 11.508 11.9656988 15.984 20.2137797 7.44836856\"\n        class=\"check-anim\"\n        stroke-dasharray=\"28\"\n        stroke-dashoffset=\"28\"\n      ></polyline>\n      <path\n        d=\"M18.3656773,3.02795925 C16.5689809,1.75089408 14.3721808,1 12,1 C5.92486775,1 1,5.92486775 1,12 C1,18.0751322 5.92486775,23 12,23 C18.0751322,23 23,18.0751322 23,12\"\n        id=\"Path\"\n        class=\"stroke-anim\"\n        stroke=\"var(--input-validation-success, #008800)\"\n        stroke-width=\"2\"\n        stroke-dasharray=\"60\"\n        stroke-dashoffset=\"60\"\n      ></path>\n    </g>\n  </svg>\n\n  <svg *ngIf=\"type === 'error'\" class=\"flex-no-shrink\" viewBox=\"0 0 24 24\" [ngStyle]=\"{ 'max-width.px': size || 64 }\">\n    <g id=\"Artboard-Copy-3\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n      <line\n        x1=\"12\"\n        y1=\"13.5356315\"\n        x2=\"12\"\n        y2=\"7\"\n        id=\"Path-2\"\n        stroke=\"var(--input-validation-error, #E0000E)\"\n        class=\"symbol-anim\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        stroke-dasharray=\"7\"\n        stroke-dashoffset=\"7\"\n      ></line>\n      <line\n        x1=\"12\"\n        y1=\"17.7678157\"\n        x2=\"12\"\n        y2=\"17.2321843\"\n        id=\"Path-2\"\n        stroke=\"var(--input-validation-error, #E0000E)\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        stroke-dasharray=\"7\"\n        stroke-dashoffset=\"7\"\n        class=\"symbol-anim\"\n      ></line>\n      <circle\n        id=\"Oval\"\n        stroke=\"var(--input-validation-error, #E0000E)\"\n        stroke-width=\"2\"\n        cx=\"12\"\n        cy=\"12\"\n        r=\"11\"\n        class=\"stroke-anim\"\n        stroke-dasharray=\"70\"\n        stroke-dashoffset=\"70\"\n        stroke-linejoin=\"round\"\n      ></circle>\n    </g>\n  </svg>\n\n  <svg *ngIf=\"type === 'warning'\" class=\"flex-no-shrink\" viewBox=\"0 0 24 24\" [ngStyle]=\"{ 'max-width.px': size || 64 }\">\n    <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n      <line\n        x1=\"12\"\n        y1=\"13.5356315\"\n        x2=\"12\"\n        y2=\"7\"\n        id=\"Path-2\"\n        stroke=\"var(--input-validation-warning, #FF801F)\"\n        class=\"symbol-anim\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        stroke-dasharray=\"7\"\n        stroke-dashoffset=\"7\"\n      ></line>\n      <line\n        x1=\"12\"\n        y1=\"17.7678157\"\n        x2=\"12\"\n        y2=\"17.2321843\"\n        id=\"Path-2\"\n        stroke=\"var(--input-validation-warning, #FF801F)\"\n        stroke-width=\"2\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        stroke-dasharray=\"7\"\n        stroke-dashoffset=\"7\"\n        class=\"symbol-anim\"\n      ></line>\n\n      <g\n        fill-rule=\"nonzero\"\n        stroke=\"var(--input-validation-warning, #FF801F)\"\n        stroke-width=\"2\"\n        class=\"stroke-anim\"\n        stroke-dashoffset=\"1000\"\n        stroke-dasharray=\"90\"\n        stroke-linecap=\"round\"\n        stroke-linejoin=\"round\"\n        stroke-linejoin=\"round\"\n      >\n        <path d=\"M12,1 L23,21 L1,21 L12,1 Z\" id=\"Path\"></path>\n      </g>\n    </g>\n  </svg>\n  <p *ngIf=\"text\" class=\"text-medium animated fadeIn delay-05 m-8\" [ngClass]=\"{ 'text-center': vertical }\">\n    {{ text }}\n  </p>\n</div>\n","import { assign } from 'lodash-es';\nimport {\n  Directive,\n  ElementRef,\n  Injector,\n  Input,\n  Renderer2,\n  TemplateRef,\n  Type,\n  ViewContainerRef\n} from '@angular/core';\n\n/**\n * Directive to set a DOM node, a TemplateRef or any Component to a container or any node.\n * ```html\n * <div *c8yOutlet=\"template\"></div>\n * <div *c8yOutlet=\"DeviceStatusComponent; properties: { node }\"></div>\n * <div *c8yOutlet=\"nodes\"></div>\n * ```\n *\n * Note: When passing a native `HTMLElement`, be aware that a single element instance can only exist in one\n * place in the DOM. If you need to render the same element in multiple locations, the passed element\n * should have a `createCopy` function that returns a new instance or a clone of the element.\n */\n@Directive({\n  selector: '[c8yOutlet]',\n  standalone: true\n})\nexport class OutletDirective {\n  private properties = {};\n  private _element;\n  private _template: TemplateRef<any> | Type<any> | Element;\n\n  constructor(\n    private viewContainer: ViewContainerRef,\n    private injector: Injector,\n    private renderer: Renderer2,\n    private el: ElementRef\n  ) {}\n\n  /**\n   * Directive to set a `DOM node`, a `TemplateRef` or any `Component` to a container or any node.\n   * ```html\n   * <div *c8yOutlet=\"template\"></div>\n   * <div *c8yOutlet=\"DeviceStatusComponent; properties: { node }\"></div>\n   * <div *c8yOutlet=\"nodes\"></div>\n   * ```\n   */\n  @Input() set c8yOutlet(template: TemplateRef<any> | Type<any> | Element) {\n    this._template = template;\n  }\n\n  /**\n   * Additional properties that should be added to the component\n   * instance.\n   */\n  @Input() set c8yOutletProperties(value) {\n    this.properties = value;\n  }\n\n  /**\n   * Allows to use a different injector.\n   */\n  @Input() set c8yOutletInjector(value: Injector) {\n    this.injector = value;\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnChanges(): void {\n    this.render(this._template);\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnDestroy(): void {\n    this.destroy();\n  }\n\n  private render(template: TemplateRef<any> | Type<any> | Element) {\n    if (!template) {\n      return;\n    }\n    if (this._element instanceof Element) {\n      this.renderer.removeChild(this._element.parentElement, this._element);\n    }\n    this.viewContainer.clear();\n\n    // case TemplateRef -> <div *c8yOutlet=\"template\"></div>\n    if (template instanceof TemplateRef) {\n      this.viewContainer.createEmbeddedView(template);\n\n      // case DOM Element -> <div *c8yOutlet=\"nodes\"></div>\n    } else if (template instanceof Element) {\n      const parent = this.renderer.parentNode(this.el.nativeElement);\n      this.destroy();\n\n      /**\n       * Because compiled element can be used only once, we need to create copy of it\n       * in order to display it in multiple locations.\n       * For example standard \"More\" menu, and its RWD version.\n       */\n      if ((template as any).createCopy) {\n        this._element = (template as any).createCopy();\n      } else {\n        this._element = template;\n      }\n\n      this.renderer.insertBefore(parent, this._element, this.el.nativeElement);\n    } else {\n      // case Component -> <div *c8yOutlet=\"DeviceStatusComponent; properties: { node }\"></div>\n      const component = this.viewContainer.createComponent(template, {\n        injector: this.injector\n      });\n      assign(component.instance, this.properties);\n    }\n  }\n\n  private destroy() {\n    if (this._element) {\n      const _parent = this.renderer.parentNode(this._element);\n      this.renderer.removeChild(_parent, this._element);\n    }\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NgIf } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * @deprecated Use `c8y-loading` instead.\n */\n@Component({\n  selector: 'c8y-progress-bar',\n  templateUrl: './progress-bar.component.html',\n  standalone: true,\n  imports: [NgIf, C8yTranslatePipe]\n})\nexport class ProgressBarComponent {\n  @Input() message: string = gettext('Loading…');\n  @Input() progress: number = null;\n}\n","<div class=\"bg-inherit\">\n  <div\n    class=\"progress progress-striped active\"\n    *ngIf=\"progress !== null\"\n  >\n    <div\n      class=\"progress-bar\"\n      [style.width]=\"progress + '%'\"\n      [attr.aria-label]=\"'Progress' | translate\"\n      aria-valuemin=\"0\"\n      aria-valuemax=\"100\"\n      [attr.aria-valuenow]=\"progress\"\n      role=\"progressbar\"\n    ></div>\n  </div>\n  <div\n    class=\"spinner-snake\"\n    *ngIf=\"progress === null\"\n  ></div>\n  <p\n    class=\"text-center\"\n    *ngIf=\"message\"\n  >\n    {{ message | translate }}\n  </p>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'shortenUserName', standalone: true })\nexport class ShortenUserNamePipe implements PipeTransform {\n  transform(user: any): string {\n    if (!user) {\n      return '';\n    }\n    const { firstName = '', lastName = '', userName = '' } = user || {};\n    let parsedFirstName = firstName.trim().split(/\\s+/).shift().substr(0, 1);\n    const parsedLastName = lastName.trim().split(/\\s+/).pop();\n\n    if (!parsedLastName) {\n      parsedFirstName = firstName.split(/\\s+/).shift();\n    } else {\n      parsedFirstName = parsedFirstName ? `${parsedFirstName}. ` : '';\n    }\n\n    return parsedFirstName || parsedLastName ? parsedFirstName + parsedLastName : userName;\n  }\n}\n","export enum ManagedObjectType {\n  DEVICE = 'device',\n  GROUP = 'group'\n}\n","import { Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { find, get, isUndefined, some } from 'lodash-es';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DeviceService {\n  static FRAGMENTS_FOR_NO_DEVICE = [\n    'c8y_Dashboard',\n    'c8y_Report',\n    'c8y_Kpi',\n    'c8y_ExportConfiguration',\n    'c8y_IsBinary',\n    'c8y_NoDevice',\n    'c8y_IsDeviceGroup',\n    'c8y_IsDynamicGroup',\n    'c8y_Group',\n    'com_cumulocity_model_smartrest_SmartRestTemplate',\n    'com_cumulocity_model_devicesimulator_SensorTemplate',\n    '_attachments',\n    'c8y_IsDeviceType',\n    'c8y_objectmapping_ObjectMapping',\n    'c8y_IsAssetType'\n  ] as const;\n  static TYPES_FOR_NO_DEVICE = [\n    'c8y_ConfigurationDump',\n    'c8y_Firmware',\n    'c8y_SmartRule',\n    'c8y_Software',\n    'impact_object_mapping',\n    'c8y_UserPreference',\n    'c8y_TenantPolicy',\n    'c8y_PrivateSmartRule',\n    'c8y_SmartRest2Template',\n    'c8y_JsonSchema',\n    'c8y_DeviceShellTemplate',\n    'c8y_DemoStatus',\n    'c8y_DataBroker',\n    'c8y_Application_',\n    'brandingVariables',\n    'c8y_DeviceSimulator',\n    'c8y_CertificateMetadata',\n    'lwm2m_post_registration',\n    'c8y_microservice_manifest_'\n  ] as const;\n  static DEVICE_FRAGMENT_TYPE = 'c8y_IsDevice' as const;\n\n  static isAnyDevice(mo: IManagedObject): boolean {\n    const isDevice =\n      DeviceService.isRootDevice(mo) || !DeviceService.hasFragmentOrTypeFromBlacklist(mo);\n    return isDevice;\n  }\n\n  static hasFragmentOrTypeFromBlacklist(mo: IManagedObject): boolean {\n    return DeviceService.hasTypeFromBlacklist(mo) || DeviceService.hasFragmentFromBlacklist(mo);\n  }\n\n  static hasTypeFromBlacklist(mo: IManagedObject): boolean {\n    const moType = get(mo, 'type', '');\n    return some(DeviceService.TYPES_FOR_NO_DEVICE, (type: any) => moType.includes(type));\n  }\n\n  static hasFragmentFromBlacklist(mo: IManagedObject): boolean {\n    const result = find(\n      DeviceService.FRAGMENTS_FOR_NO_DEVICE,\n      (fragment: string | number) => !isUndefined(mo[fragment])\n    );\n    return !!result;\n  }\n\n  static isRootDevice(mo: IManagedObject): boolean {\n    return !!mo[DeviceService.DEVICE_FRAGMENT_TYPE];\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { ManagedObjectType } from './managed-object-type';\nimport { DeviceService } from './device.service';\nimport { GroupService } from './group.service';\n\n@Pipe({\n  name: 'shouldShowMo',\n  standalone: true\n})\nexport class ShouldShowMoPipe implements PipeTransform {\n  constructor(private groupService: GroupService) {}\n\n  transform(mo: IManagedObject, option: string): boolean {\n    if (option === ManagedObjectType.DEVICE) {\n      return DeviceService.isAnyDevice(mo);\n    }\n    if (option === ManagedObjectType.GROUP) {\n      return this.groupService.isGroup(mo) || this.groupService.isDynamicGroup(mo);\n    }\n    return false;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { entries, mapValues, omitBy } from 'lodash-es';\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { toObservable } from './extension-hooks';\n\n@Pipe({\n  name: 'showIfFilter',\n  standalone: true\n})\nexport class ShowIfFilterPipe implements PipeTransform {\n  transform<\n    T extends {\n      [key: string]: {\n        showIf?: boolean | (() => boolean | Promise<boolean> | Observable<boolean>);\n      };\n    }\n  >(value: T): Observable<Partial<T>> {\n    const observableShowIfMap = mapValues(value, val => {\n      if (typeof val.showIf === 'boolean') {\n        return of(val.showIf);\n      } else if (typeof val.showIf === 'function') {\n        return toObservable(val.showIf());\n      } else {\n        return of(true);\n      }\n    }) as Partial<T>;\n\n    return combineLatest(\n      entries(observableShowIfMap).map(([key, val]) =>\n        val.pipe(map(showIf => ({ key, showIf })))\n      ) as Array<Observable<{ key: string; showIf: boolean }>>\n    ).pipe(\n      map((allShowIfs: Array<{ key: string; showIf: boolean }>) => {\n        allShowIfs.forEach(showIf => (value[showIf.key].showIf = showIf.showIf));\n        return omitBy(value, (v: { showIf: boolean }) => !v.showIf);\n      })\n    );\n  }\n}\n","import { Directive, Input, HostListener } from '@angular/core';\n\n/**\n * Sets the focus on the give targetId on click.\n */\n@Directive({\n  selector: '[c8ySkipLink]',\n  standalone: true\n})\nexport class SkipLinkDirective {\n  @Input('c8ySkipLink') targetId: string;\n\n  @HostListener('click')\n  onClick() {\n    const element = document.getElementById(this.targetId);\n    if (element) {\n      element.focus();\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isDate as _isDate } from 'lodash-es';\nimport { DatePipe } from './date.pipe';\n\n@Pipe({\n  name: 'stringifyObject',\n  standalone: true\n})\nexport class StringifyObjectPipe implements PipeTransform {\n  private readonly isoDateTimeRegex =\n    /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)(([+-](\\d{2}):(\\d{2})|Z)?)$/;\n  constructor(private c8yDatePipe: DatePipe) {}\n  transform(value: any): string {\n    if (!value) {\n      return '';\n    }\n    if (typeof value === 'object' && !_isDate(value)) {\n      return JSON.stringify(value);\n    }\n    if (this.isDate(value)) {\n      return this.c8yDatePipe.transform(value);\n    }\n    return value;\n  }\n\n  private isDate(value): boolean {\n    if (!value) return false;\n    if (_isDate(value)) return !isNaN(value);\n    if (typeof value === 'string') return this.isoDateTimeRegex.test(value);\n\n    return false;\n  }\n}\n","import { AfterViewInit, Directive, ElementRef } from '@angular/core';\n\n/**\n * Adds necessary attributes to ngx-bootstrap's tabset markup to comply with a11y requirements.\n */\n@Directive({\n  selector: 'tabset',\n  standalone: true\n})\nexport class TabsetAriaDirective implements AfterViewInit {\n  constructor(private elementRef: ElementRef) {}\n\n  ngAfterViewInit(): void {\n    let owned = '';\n    this.elementRef.nativeElement.querySelectorAll('[role=\"tab\"]')?.forEach((tab, idx) => {\n      tab.setAttribute('id', `tab${idx}`);\n      owned = owned.concat(`tab${idx} `);\n    });\n    this.elementRef.nativeElement\n      .querySelectorAll('li')\n      ?.forEach(li => li.setAttribute('role', 'presentation'));\n    this.elementRef.nativeElement\n      .querySelector('[role=\"tablist\"]')\n      ?.setAttribute('aria-owns', owned);\n  }\n}\n","import { Directive, HostListener, ElementRef, OnInit } from '@angular/core';\n\n@Directive({\n  selector: '[c8y-textarea-autoresize]',\n  standalone: true\n})\nexport class TextareaAutoresizeDirective implements OnInit {\n  private focused = false;\n  private resizeObserver = new (window as any).ResizeObserver(() => !this.focused && this.resize());\n  constructor(private elementRef: ElementRef) {}\n\n  @HostListener(':input')\n  onInput() {\n    this.resize();\n  }\n\n  @HostListener(':focus')\n  onFocus() {\n    this.focused = true;\n  }\n\n  @HostListener(':blur')\n  onBlur() {\n    this.focused = false;\n  }\n\n  ngOnInit() {\n    this.resizeObserver.observe(this.elementRef?.nativeElement);\n    setTimeout(() => this.resize());\n  }\n\n  ngOnDestroy() {\n    this.resizeObserver.unobserve(this.elementRef?.nativeElement);\n  }\n\n  resize() {\n    this.elementRef.nativeElement.style.height = '32px';\n    this.elementRef.nativeElement.style.height = this.elementRef?.nativeElement.scrollHeight + 'px';\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * A pipe that transforms a user object into their initials.\n\n * ```html\n * {{ user | userNameInitials }}\n * ```\n */\n@Pipe({ name: 'userNameInitials', standalone: true })\nexport class UserNameInitialsPipe implements PipeTransform {\n  transform(user: any): string {\n    if (!user) {\n      return '';\n    }\n    const { firstName = '', lastName = '', userName = '' } = user || {};\n    let parsedFirstName = firstName.trim().split(/\\s+/).shift().substr(0, 1);\n    const parsedLastName = lastName.trim().split(/\\s+/).shift().substr(0, 1);\n    const parsedUserName = userName.trim().split(/\\s+/).shift().substr(0, 1);\n\n    if (parsedLastName) {\n      parsedFirstName = parsedFirstName ? `${parsedFirstName}` : '';\n    }\n\n    return parsedFirstName || parsedLastName ? parsedFirstName + parsedLastName : parsedUserName;\n  }\n}\n","export class UserPreferencesStorageLocal {\n  private LOCAL_STORAGE_KEY = 'userPreferences';\n  private store: any = {};\n  constructor() {\n    try {\n      const jsonStore = window.localStorage.getItem(this.LOCAL_STORAGE_KEY);\n      if (jsonStore) {\n        this.store = JSON.parse(jsonStore) || {};\n      }\n    } catch (e) {\n      // do nothing\n    }\n  }\n\n  async get(key) {\n    return this.store[key];\n  }\n\n  set(key, value) {\n    this.store[key] = value;\n    return this.saveJsonStore();\n  }\n\n  private saveJsonStore() {\n    return window.localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(this.store));\n  }\n}\n","import { InventoryService } from '@c8y/client';\n\nexport class UserPreferencesStorageInventory {\n  TYPE = 'c8y_UserPreference';\n\n  constructor(private inventory: InventoryService) {}\n\n  async get(key) {\n    const { data } = await this.inventory.list({ fragmentType: key });\n    return data.length ? data[0][key] : undefined;\n  }\n\n  async set(key, value) {\n    const { data } = await this.inventory.list({ fragmentType: key });\n    const updateMo: any = { [key]: value, type: this.TYPE };\n    let out;\n\n    if (data.length) {\n      updateMo.id = data[0].id;\n      out = this.inventory.update(updateMo);\n    } else {\n      out = this.inventory.create(updateMo);\n    }\n    return out;\n  }\n}\n","import { Alert } from './alert.model';\nimport { BehaviorSubject } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { StateService } from '../common/state-service.abstract';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { isEqual } from 'lodash-es';\n\nexport type AlertType = 'success' | 'warning' | 'danger' | 'info' | 'system';\n/**\n * A service which allows to display alerts.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class AlertService extends StateService {\n  /**\n   * Returns all alerts.\n   * @readonly\n   */\n  get state() {\n    return this.state$.value;\n  }\n  /**\n   * @ignore\n   */\n  state$ = new BehaviorSubject<Alert[]>([]);\n\n  private MAX_ALERTS = 3;\n  private ALERT_TIMEOUT = 3000;\n\n  /**\n   * Adds a new alert to the current state.\n   * @param alert The alert object to be added.\n   */\n  add(alert: Alert) {\n    this.addAlert(alert);\n  }\n\n  /**\n   * Adds a alert by text.\n   * @param type The type of the alert.\n   * @param txt The text to be displayed in the alert.\n   * @param detailedData Optional detailed data for the alert.\n   */\n  addByText(type: AlertType, txt: string, detailedData?: string): void {\n    this.addAlert({ text: txt, type, detailedData });\n  }\n\n  /**\n   * Returns all alerts.\n   * @deprecated Use alertService.alerts instead.\n   */\n  list(): Alert[] {\n    return this.state;\n  }\n\n  /**\n   * Remove an alert from the current state.\n   * @param alert The alert object to be removed.\n   */\n  remove(alert: Alert) {\n    this.changeAlerts(this.state.filter(item => !this.areSame(alert, item)));\n  }\n\n  /**\n   * Updates matching alert with provided values.\n   * @param alert The alert to be updated.\n   * @param fieldsToUpdate An object with the fields to update in the alert.\n   */\n  update(alert: Alert, fieldsToUpdate: Partial<Alert>) {\n    this.changeAlerts(\n      this.state.map(item => {\n        if (this.areSame(alert, item)) {\n          Object.assign(item, fieldsToUpdate);\n        }\n        return item;\n      })\n    );\n  }\n\n  /**\n   * Removes last danger alert.\n   * It can be used e.g. in the case of a failed request which triggered an alert, to hide it from user.\n   *\n   * ```js\n   *  try {\n   *    // something that might throw a danger server msg\n   *  } catch (ex) {\n   *   this.alertService.removeLastDanger();\n   *  }\n   * ```\n   */\n  removeLastDanger() {\n    const firstDangerAlert = this.state.reverse().find(({ type }) => type === 'danger');\n    this.changeAlerts(this.state.filter(alert => alert !== firstDangerAlert));\n  }\n\n  /**\n   * Shorthand for a save successful alert.\n   * @param savedObject The name of the object which was saved.\n   * @return A function that can be executed to show the msg.\n   */\n  saveSuccess(savedObject: string) {\n    return () => {\n      const text = `${savedObject} saved successfully`;\n      this.addByText('success', text);\n    };\n  }\n\n  /**\n   * Shorthand for a create successful alert.\n   * @param createdObject The name of the object which was created.\n   * @return A function that can be executed to show the msg.\n   */\n  createSuccess(createdObject: string) {\n    return () => {\n      const text = `${createdObject} created successfully`;\n      this.addByText('success', text);\n    };\n  }\n\n  /**\n   * Clears all alerts.\n   */\n  clearAll() {\n    this.changeAlerts([]);\n  }\n\n  /**\n   * A shorthand to display a simple success message.\n   * @param text The success text.\n   * @param detailedData The text with additional information.\n   */\n  success(text: string, detailedData?: string) {\n    this.addByText('success', text, detailedData);\n  }\n\n  /**\n   * A shorthand to display a simple danger message.\n   * @param text The danger text.\n   * @param detailedData The text with additional information.\n   */\n  danger(text: string, detailedData?: string) {\n    this.addByText('danger', text, detailedData);\n  }\n\n  /**\n   * A shorthand to display a simple info message.\n   * @param text The info text.\n   * @param detailedData The text with additional information.\n   */\n  info(text: string, detailedData?: string) {\n    this.addByText('info', text, detailedData);\n  }\n\n  /**\n   * A shorthand to display a simple warning message.\n   * @param text The warning text.\n   * @param detailedData The text with additional information.\n   */\n  warning(text: string, detailedData?: string) {\n    this.addByText('warning', text, detailedData);\n  }\n  /**\n   * A shorthand to display a simple system message.\n   * @param text The system message text.\n   * @param detailedData The text with additional information.\n   */\n  system(text: string, detailedData?: string) {\n    this.addByText('system', text, detailedData);\n  }\n\n  /**\n   * Creates alert from standard api errors.\n   * Should be used for errors generated by @c8y/client services.\n   * @param error The error from server.\n   * @param type The type of alert.\n   */\n  addServerFailure(error: any, type: AlertType = 'danger') {\n    const { data, res } = error;\n    let text = data?.message || null;\n    let detailedData;\n    if (data) {\n      if (typeof data === 'object') {\n        detailedData = data.exceptionMessage;\n      } else if (typeof data === 'string') {\n        detailedData = data;\n      }\n    }\n    const hasRelevantMessage = !!(text || detailedData);\n    if (!text) {\n      text = gettext('A server error occurred.');\n    }\n    if (res && !hasRelevantMessage) {\n      detailedData = {\n        status: res.status,\n        statusText: res.statusText,\n        url: res.url\n      };\n    }\n\n    this.addAlert({\n      type,\n      text,\n      detailedData\n    });\n  }\n\n  /**\n   * Compares two alert objects. Alerts are same if text, type, detailed data and callbacks are same.\n   * Callbacks are same if they refer to the same function.\n   * @param alert1 First alert to compare.\n   * @param alert2 Second alert to compare.\n   */\n  areSame(alert1: Alert, alert2: Alert): boolean {\n    return (\n      alert1.text === alert2.text &&\n      alert1.type === alert2.type &&\n      isEqual(alert1.detailedData, alert2.detailedData) &&\n      alert1.onClose === alert2.onClose &&\n      alert1.onDetail === alert2.onDetail\n    );\n  }\n\n  private changeAlerts(newAlerts: Alert[]) {\n    this.state$.next(newAlerts);\n  }\n\n  private addAlert(alert: Alert): void {\n    if (!alert.text && !alert.type) {\n      throw new Error('Cannot add empty alert');\n    }\n\n    const alertAlreadyAdded = this.state.find(item => this.areSame(alert, item));\n    if (alertAlreadyAdded) {\n      return;\n    }\n\n    this.changeAlerts([...this.state, alert]);\n    this.hideAutomaticallyIfNeeded(alert);\n    this.removeOldestIfMax();\n  }\n\n  private hideAutomaticallyIfNeeded(alert: Alert) {\n    const isSuccess = alert.type === 'success';\n    const noDetails = !alert.detailedData;\n    let alertTimeout = isSuccess && noDetails ? this.ALERT_TIMEOUT : 0;\n    if (typeof alert.timeout !== 'undefined') {\n      alertTimeout = alert.timeout;\n    }\n    if (alertTimeout) {\n      setTimeout(() => this.remove(alert), alertTimeout);\n    }\n  }\n\n  private removeOldestIfMax() {\n    if (this.state.length > this.MAX_ALERTS) {\n      const [, ...firstRemoved] = this.state;\n      this.changeAlerts(firstRemoved);\n    }\n  }\n}\n","import { UserService } from '@c8y/client';\nimport { AppStateService } from '../ui-state.service';\nimport { firstValueFrom } from 'rxjs';\n\nexport class UserPreferencesStorageCurrentUser {\n  constructor(\n    private user: UserService,\n    private appState: AppStateService\n  ) {}\n\n  async hasKey(key: string): Promise<boolean> {\n    const currentUser = await firstValueFrom(this.appState.currentUser);\n    return currentUser.customProperties?.hasOwnProperty(key);\n  }\n\n  async get(key: string) {\n    const currentUser = await firstValueFrom(this.appState.currentUser);\n    return currentUser.customProperties?.[key];\n  }\n\n  async set(key: string, value: unknown) {\n    const updatedCurrentUser = (\n      await this.user.updateCurrent({\n        customProperties: { [key]: value }\n      })\n    ).data;\n    this.appState.currentUser.next(updatedCurrentUser);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ICurrentUser, InventoryService, IUser, UserService } from '@c8y/client';\nimport { concat, firstValueFrom, from, Observable, Subject } from 'rxjs';\nimport { filter, first, map, switchMap } from 'rxjs/operators';\nimport { AppStateService } from '../ui-state.service';\nimport { UserPreferencesStorageLocal } from './user-preferences-storage-local';\nimport { UserPreferencesStorageInventory } from './user-preferences-store-inventory';\nimport { UserPreference } from './user-preference.model';\nimport { Permissions } from '../permissions.service';\nimport { AlertService } from '../../alert/alert.service';\nimport { UserPreferencesStorageCurrentUser } from './user-preferences-store-current-user';\n\n@Injectable({ providedIn: 'root' })\nexport class UserPreferencesService {\n  currentUser: Observable<IUser | ICurrentUser>;\n  preferenceChanges$: Subject<UserPreference> = new Subject();\n  private storage: {\n    local: UserPreferencesStorageLocal;\n    inventory: UserPreferencesStorageInventory;\n    currentUser: UserPreferencesStorageCurrentUser;\n  };\n\n  constructor(\n    private user: UserService,\n    private inventory: InventoryService,\n    private appState: AppStateService,\n    private alert: AlertService\n  ) {\n    this.storage = {\n      local: new UserPreferencesStorageLocal(),\n      inventory: new UserPreferencesStorageInventory(this.inventory),\n      currentUser: new UserPreferencesStorageCurrentUser(this.user, this.appState)\n    };\n    this.currentUser = this.appState.currentUser.pipe(filter(currentUser => currentUser !== null));\n  }\n\n  /**\n   * Returns an observable of a user preference with given key.\n   * Emits its initial value first and then updated values when set by user.\n   * @param key The storage key for searched value.\n   * @returns An Observable of a user preference.\n   */\n  observe<T>(key: string): Observable<T> {\n    return concat(\n      this.get(key),\n      this.preferenceChanges$.pipe(\n        filter(change => change.key === key),\n        map(change => change.value)\n      )\n    );\n  }\n\n  /**\n   * Get an Observable value for searched key for current user.\n   * @param key The storage key for searched value.\n   * @returns An Observable with the value of preference.\n   */\n  get(key: string): Observable<any> {\n    return this.currentUser.pipe(\n      first(),\n      switchMap(user => this.getForCurrentUser(key, user))\n    );\n  }\n\n  /**\n   * Sets a value in storage for current user.\n   * @param key The storage key for the value to be set.\n   * @param value The storage value to be set.\n   * @returns A promise with saved value.\n   */\n  set(key: string, value: any): Promise<any> {\n    this.preferenceChanges$.next({ key, value });\n    return this.setForCurrentUser(key, value);\n  }\n\n  /**\n   * Get an Observable value of searched key for a specific user.\n   * @param key The storage key for searched value.\n   * @param user The user for whom the search is done.\n   * @returns An Observable with the value of preference.\n   *\n   * @deprecated Uses deprecated inventory approach. Use get instead.\n   */\n  getForUser(key: string, user: IUser | ICurrentUser): Observable<any> {\n    const rawKey = this.getTransformedRawKey(key, user);\n    const storage = this.getStorage(user);\n    return from(storage.get(rawKey));\n  }\n\n  /**\n   * Sets a value in storage for a specific user.\n   * @param key The storage key for the value to be set.\n   * @param value The storage value to be set.\n   * @returns A promise with saved value.\n   *\n   * @deprecated Uses deprecated inventory approach. Use set instead.\n   */\n  setForUser(key: string, value: any, user: IUser | ICurrentUser): Promise<any> {\n    const rawKey = this.getTransformedRawKey(key, user);\n    const storage = this.getStorage(user);\n    return Promise.resolve(storage.set(rawKey, value));\n  }\n\n  /**\n   * Get value of searched key for current user.\n   * If preference is not found in user's customProperties, it will try to get it from inventory or local storage and\n   * update user's customProperties with the value and return that value.\n   * @param key The preference key for searched value.\n   * @param user The user for whom the search is done.\n   * @returns A Promise with the value of preference.\n   */\n  private async getForCurrentUser(key: string, user: IUser | ICurrentUser): Promise<any> {\n    const currentUserStorage = await this.getCurrentUserStorage();\n    const customPropertiesKey = this.getCustomPropertiesKey(key);\n    const currentUserHasKeyProperty =\n      currentUserStorage && (await currentUserStorage.hasKey(customPropertiesKey));\n    if (currentUserHasKeyProperty) {\n      return await currentUserStorage.get(customPropertiesKey);\n    } else {\n      const transformedRawKey = this.getTransformedRawKey(key, user);\n      const rawKey = this.getRawKey(key, user);\n      let valueFromStorage =\n        (await this.storage.local.get(transformedRawKey)) || (await this.storage.local.get(rawKey));\n      if (valueFromStorage === undefined) {\n        // only still here as a fallback for old preferences stored in inventory\n        // new settings are no longer stored in inventory\n        valueFromStorage =\n          (await this.storage.inventory.get(transformedRawKey)) ||\n          (await this.storage.inventory.get(rawKey));\n\n        // save request to the inventory next time by storing the retrieved value in local storage\n        if (valueFromStorage !== undefined && !currentUserStorage) {\n          this.storage.local.set(rawKey, valueFromStorage);\n        }\n      }\n\n      if (valueFromStorage === undefined) {\n        return undefined;\n      }\n      try {\n        await currentUserStorage?.set(customPropertiesKey, valueFromStorage);\n      } catch (e) {\n        // do nothing\n      }\n      return valueFromStorage;\n    }\n  }\n\n  /**\n   * Sets a value for current user.\n   * @param key The preference key for the value to be set.\n   * @param value The preference value to be set.\n   */\n  private async setForCurrentUser(key: string, value: any): Promise<void> {\n    const currentUserStorage = await this.getCurrentUserStorage();\n    const userPreferencesKey = this.getCustomPropertiesKey(key);\n    if (currentUserStorage) {\n      try {\n        await currentUserStorage.set(userPreferencesKey, value);\n      } catch (e) {\n        this.alert.addServerFailure(e);\n      }\n    } else {\n      const user = await firstValueFrom(this.currentUser);\n      const rawKey = this.getRawKey(key, user);\n      this.storage.local.set(rawKey, value);\n    }\n  }\n\n  /**\n   * Get a string of key concatenated with username.\n   * Used by deprecated invetory storage approach and for leftovers in local storage.\n   * It was used to store preferences for specific users and it as replacing \".\" with \"__\"\n   * because of MongoDB restrictions.\n   * @param key The storage key for searched value.\n   * @param user The user for whom the search is done.\n   * @returns A string of key concatenated with username.\n   */\n  private getTransformedRawKey(key: string, user: IUser | ICurrentUser): string {\n    const username = user.userName.replace(/\\./g, '__');\n    return `${key}${username}`;\n  }\n\n  /**\n   * Get a string of key concatenated with username.\n   * Used by local storage.\n   * @param key The storage key for searched value.\n   * @param user The user for whom the search is done.\n   * @returns A string of key concatenated with username.\n   */\n  private getRawKey(key: string, user: IUser | ICurrentUser): string {\n    return `${key}${user.userName}`;\n  }\n\n  /**\n   * Get a key for user preferences. Used current user customProperties.\n   * @param key The storage key for searched value.\n   * @returns A key for user preferences.\n   */\n  private getCustomPropertiesKey(key: string): string {\n    return `c8y_UserPreference-${key}`;\n  }\n\n  /**\n   * Gets a proper storage depending on the user roles.\n   * @param user The user for whom the role check is done.\n   * @returns A proper storage.\n   */\n  private getStorage(\n    user: IUser | ICurrentUser\n  ): UserPreferencesStorageInventory | UserPreferencesStorageLocal {\n    return this.user.hasAllRoles(user, [\n      Permissions.ROLE_INVENTORY_READ,\n      Permissions.ROLE_INVENTORY_ADMIN\n    ]) ||\n      this.user.hasAllRoles(user, [\n        Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n        Permissions.ROLE_MANAGED_OBJECT_READ\n      ])\n      ? this.storage.inventory\n      : this.storage.local;\n  }\n\n  private async getCurrentUserStorage(): Promise<UserPreferencesStorageCurrentUser> {\n    const currentUser = await firstValueFrom(this.currentUser);\n    const hasRoleToEditCurrentUser = this.user.hasRole(\n      currentUser,\n      Permissions.ROLE_USER_MANAGEMENT_OWN_ADMIN\n    );\n    const customProperties = (currentUser as IUser).customProperties;\n    const isExternalUser = customProperties?.userOrigin === 'OAUTH2';\n    if (!hasRoleToEditCurrentUser || isExternalUser) {\n      return null;\n    }\n    return this.storage.currentUser;\n  }\n}\n","import { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule as NgCommonModule } from '@angular/common';\nimport {\n  EnvironmentProviders,\n  ModuleWithProviders,\n  NgModule,\n  Provider,\n  inject,\n  provideAppInitializer\n} from '@angular/core';\nimport { provideClientLibServices } from '@c8y/ngx-components/api';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { setTheme } from 'ngx-bootstrap/utils';\nimport { I18nModule, provideI18n } from '../i18n/i18n.module';\nimport { TranslateService } from '../i18n/translate.service';\nimport { AssetLinkPipe } from './asset-link.pipe';\nimport { BytesPipe } from './bytes.pipe';\nimport { C8yComponentOutlet } from './component-outlet.directive';\nimport { DatePipe } from './date.pipe';\nimport { DropdownDirectionDirective } from './dropdown-direction.directive';\nimport { EmptyStateContextDirective } from './empty-state/empty-state-context.directive';\nimport { EmptyStateComponent } from './empty-state/empty-state.component';\nimport { ForOfDirective } from './forOf.directive';\nimport { GenericFileIconPipe } from './generic-file-icon.pipe';\nimport { GetGroupIconPipe } from './get-group-icon.pipe';\nimport { HumanizeAppNamePipe } from './humanize-app-name.pipe';\nimport { HumanizePipe } from './humanize.pipe';\nimport { IconDirective } from './icon.directive';\nimport { IfAllowedDirective } from './if-allowed.directive';\nimport { LoadMoreComponent } from './load-more.component';\nimport { LoadingComponent } from './loading.component';\nimport { MapFunctionPipe } from './map-function.pipe';\nimport { MarkdownToHtmlPipe } from './markdown-to-html.pipe';\nimport { MoNamePipe } from './mo-name.pipe';\nimport { NumberPipe } from './number.pipe';\nimport { OperationResultComponent } from './operation-result.component';\nimport { OutletDirective } from './outlet.directive';\nimport { ProgressBarComponent } from './progress-bar.component';\nimport { ShortenUserNamePipe } from './shorten-user-name.pipe';\nimport { ShouldShowMoPipe } from './should-show-mo.pipe';\nimport { ShowIfFilterPipe } from './show-if-filter.pipe';\nimport { SkipLinkDirective } from './skip-link.directive';\nimport { StringifyObjectPipe } from './stringify-object.pipe';\nimport { TabsetAriaDirective } from './tabset-aria.directive';\nimport { TextareaAutoresizeDirective } from './textarea-autoresize.directive';\nimport { AppStateService } from './ui-state.service';\nimport { UserNameInitialsPipe } from './user-name-initials.pipe';\nimport { UserPreferencesService } from './user-preferences/user-preferences.service';\nimport { VirtualScrollWindowDirective } from './virtual-scroll/virtual-scroll-window.directive';\nimport { VirtualScrollerWrapperComponent } from './virtual-scroll/virtual-scroller-wrapper.component';\nimport { firstValueFrom } from 'rxjs';\nimport { PluginsLoaderService } from '../plugins/plugins-loader.service';\n\n/**\n * Sets the application language during the app initialization.\n * @returns An app initializer that sets the language based on user preference or browser settings.\n */\nexport function provideLanguageSelectorAppInitializer() {\n  return provideAppInitializer(async () => {\n    const translateService = inject(TranslateService),\n      state = inject(AppStateService),\n      userPreferences = inject(UserPreferencesService);\n\n    const queryStringLanguage = translateService.queryStringLang();\n\n    /*\n      The ?lang parameter will prevent the user preference language from being activated\n    */\n    if (queryStringLanguage && translateService.getSupported(queryStringLanguage)) {\n      return translateService.switchToLanguage(queryStringLanguage);\n    }\n\n    const userLangPreference = state.currentUser.value\n      ? await firstValueFrom(userPreferences.get('language'))\n      : null;\n\n    const lang =\n      (userLangPreference && translateService.getSupported(userLangPreference)) ||\n      translateService.firstSupportedLanguage();\n\n    return translateService.switchToLanguage(lang);\n  });\n}\n\n/**\n * Loads all configured plugins on application startup.\n * @returns An app initializer that loads all plugin modules and sets the application state accordingly.\n */\nexport function providePluginsLoaderServiceAppInitializer() {\n  return provideAppInitializer(() => {\n    const pluginsLoaderService = inject(PluginsLoaderService);\n    pluginsLoaderService.loadAllModulesAndSetState();\n  });\n}\n\n/**\n * Loads the default application options during the app initialization.\n *\n * e.g. loads supportUrl, activateSupportUserAvailable, backend version\n * @returns An app initializer that loads the default application options.\n */\nexport function provideDefaultOptionsAppInitializer() {\n  return provideAppInitializer(async () => {\n    const appState = inject(AppStateService);\n    if (appState.currentUser.value) {\n      await appState.loadDefaultOptions();\n    }\n  });\n}\n\n/**\n * Provides commonly used pipes. To be injected via dependency injection.\n * @returns An array of commonly used pipes.\n */\nexport function provideCommonPipes() {\n  return [\n    HumanizePipe,\n    ShouldShowMoPipe,\n    GetGroupIconPipe,\n    HumanizeAppNamePipe,\n    ShortenUserNamePipe,\n    MapFunctionPipe,\n    DatePipe,\n    BytesPipe\n  ];\n}\n\n/**\n * Provides commonly used services and app initializers.\n * @returns An array of commonly used services and app initializers.\n */\nexport function provideCommonServices(): (Provider | EnvironmentProviders)[] {\n  return [\n    provideClientLibServices(),\n    provideLanguageSelectorAppInitializer(),\n    providePluginsLoaderServiceAppInitializer(),\n    provideDefaultOptionsAppInitializer(),\n    provideI18n(),\n    provideCommonPipes()\n  ];\n}\n\n/**\n * Commonly used directives, data access and translation. This module is the shared\n * module across all core components. It should be imported by default.\n *\n * @exports IconDirective A directive to set a c8y icon with [c8yIcon]=\"'rocket'\".\n * @exports OutletDirective A directive which allows to set DOM or Angular templates (used for upgrade).\n * @exports I18nModule Translation module.\n * @exports NgCommonModule Angular common module.\n * @exports DataModule The data layer to allow DI with @c8y/client.\n * @exports HumanizeAppNamePipe Humanize an application name for display in e.g. the app switcher (e.g. `devicemanagement` becomes `Device Management`).\n * @exports HumanizePipe Humanize a string, e.g. `c8y_water_temperature` becomes `Water Temperature`.\n * @exports ShouldShowMoPipe Checks if passed managed object is device or group type.\n * @exports GetGroupIconPipe Gets proper group icon.\n * @exports ShortenUserNamePipe Allows a short name. E.g. `Foo Bar` gets `F. Bar`.\n * @exports UserNameInitialsPipe Allows the initials from the name. E.g. `Foo Bar` gets `FB`.\n * @exports ForOfDirective A forOf directive like ngFor but with load-more function.\n * @exports LoadMoreComponent A component to load more data from a certain data-source.\n * @exports ProgressBarComponent Displays either defined or undefined progress.\n * @exports DropdownDirectionDirective Determines if a dropdown opens to the bottom or to the top.\n * @exports TextareaAutoresizeDirective resizes a textarea height as the user inputs.\n * @exports OperationResultComponent displays an animated svg for success and error operations.\n */\n@NgModule({\n  imports: [\n    NgCommonModule,\n    I18nModule,\n    TooltipModule,\n    ScrollingModule,\n    AssetLinkPipe,\n    C8yComponentOutlet,\n    HumanizeAppNamePipe,\n    IconDirective,\n    DatePipe,\n    LoadingComponent,\n    EmptyStateComponent,\n    EmptyStateContextDirective,\n    BytesPipe,\n    UserNameInitialsPipe,\n    ShortenUserNamePipe,\n    HumanizePipe,\n    IfAllowedDirective,\n    NumberPipe,\n    OperationResultComponent,\n    MarkdownToHtmlPipe,\n    MoNamePipe,\n    OutletDirective,\n    ShouldShowMoPipe,\n    GetGroupIconPipe,\n    ForOfDirective,\n    LoadMoreComponent,\n    MapFunctionPipe,\n    ProgressBarComponent,\n    DropdownDirectionDirective,\n    TextareaAutoresizeDirective,\n    TabsetAriaDirective,\n    VirtualScrollerWrapperComponent,\n    VirtualScrollWindowDirective,\n    ShowIfFilterPipe,\n    SkipLinkDirective,\n    GenericFileIconPipe,\n    StringifyObjectPipe\n  ],\n  exports: [\n    EmptyStateComponent,\n    EmptyStateContextDirective,\n    IconDirective,\n    OutletDirective,\n    I18nModule,\n    NgCommonModule,\n    HumanizeAppNamePipe,\n    HumanizePipe,\n    ShouldShowMoPipe,\n    GetGroupIconPipe,\n    IfAllowedDirective,\n    ShortenUserNamePipe,\n    UserNameInitialsPipe,\n    ForOfDirective,\n    LoadMoreComponent,\n    MapFunctionPipe,\n    ProgressBarComponent,\n    DatePipe,\n    NumberPipe,\n    LoadingComponent,\n    DropdownDirectionDirective,\n    TextareaAutoresizeDirective,\n    TabsetAriaDirective,\n    OperationResultComponent,\n    VirtualScrollerWrapperComponent,\n    VirtualScrollWindowDirective,\n    BytesPipe,\n    ShowIfFilterPipe,\n    SkipLinkDirective,\n    MarkdownToHtmlPipe,\n    MoNamePipe,\n    GenericFileIconPipe,\n    StringifyObjectPipe,\n    AssetLinkPipe,\n    C8yComponentOutlet\n  ],\n  providers: [AssetLinkPipe]\n})\nexport class CommonModule {\n  static providers(): (Provider | EnvironmentProviders)[] {\n    return provideCommonServices();\n  }\n\n  static forRoot(): ModuleWithProviders<CommonModule> {\n    return {\n      ngModule: CommonModule,\n      providers: CommonModule.providers()\n    };\n  }\n  constructor() {\n    setTheme('bs4');\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { InventoryService, IManagedObject } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\n\n/**\n * Service for retrieving ancestor paths in the Cumulocity asset hierarchy.\n *\n * This service traverses upward through parent relationships (assetParents, deviceParents,\n * additionParents) to find all possible paths from root ancestors down to a target asset.\n *\n * @example\n * Given this hierarchy:\n * ```\n * Root1 -> Building1 -> Floor1 -> Device\n * Root2 -> Building2 -> Floor1 -> Device\n * ```\n *\n * Calling `getAncestorPaths('Device')` returns:\n * ```\n * [\n *   [Root1, Building1, Floor1, Device],\n *   [Root2, Building2, Floor1, Device]\n * ]\n * ```\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class AssetHierarchyService {\n  private inventory = inject(InventoryService);\n  private alertService = inject(AlertService);\n\n  /**\n   * Retrieves all ancestor paths from root nodes down to the specified asset.\n   *\n   * This method fetches the target asset and all its ancestors, then constructs\n   * all possible paths from root ancestors (objects with no parents) down to the\n   * target asset. Multiple paths may exist if the asset has multiple parent chains.\n   *\n   * @param assetId - The ID of the target asset\n   * @returns A promise that resolves to an array of paths, where each path is an\n   *          array of managed objects ordered from root to target asset.\n   *          Returns an empty array if the asset is not found or an error occurs.\n   */\n  async getAncestorPaths(assetId: string): Promise<IManagedObject[][]> {\n    if (!assetId) {\n      return [];\n    }\n\n    try {\n      const { data: asset } = await this.inventory.detail(assetId, {\n        withParents: true\n      });\n      const parentIdsOfAsset = this.getParentIds(asset).filter(id => id !== assetId); // Remove self-references to avoid fetching the asset twice in case of circular relations\n\n      // If asset has no parents, it's a root node itself\n      if (!parentIdsOfAsset || parentIdsOfAsset.length === 0) {\n        return [[asset]];\n      }\n\n      const { data: parents } = await this.inventory.list({\n        pageSize: 2000,\n        ids: parentIdsOfAsset.join(','),\n        withParents: true,\n        withChildren: true\n      });\n\n      // Deduplicate managed objects by ID to handle self-referencing parents and circular relationships\n      const allManagedObjects = [asset, ...parents];\n      const uniqueManagedObjectsMap = new Map(allManagedObjects.map(mo => [mo.id, mo]));\n      const parentsAndAsset = Array.from(uniqueManagedObjectsMap.values());\n\n      const roots = parentsAndAsset.filter(parent => this.getParentIds(parent).length === 0);\n\n      // Find all paths from each root to the target asset\n      const breadcrumbPaths: IManagedObject[][] = [];\n      roots.forEach(root => {\n        const paths = this.findAllPathsToAsset(root, assetId, parentsAndAsset);\n        breadcrumbPaths.push(...paths);\n      });\n\n      return breadcrumbPaths;\n    } catch (e) {\n      this.alertService.addServerFailure(e);\n      return [];\n    }\n  }\n\n  /**\n   * Gets all parent IDs of a managed object.\n   */\n  private getParentIds(managedObject: IManagedObject): string[] {\n    const assetParents =\n      managedObject.assetParents?.references?.map(parent => parent.managedObject.id) ?? [];\n    const deviceParents =\n      managedObject.deviceParents?.references?.map(parent => parent.managedObject.id) ?? [];\n    const additionParents =\n      managedObject.additionParents?.references?.map(parent => parent.managedObject.id) ?? [];\n    return [...assetParents, ...deviceParents, ...additionParents];\n  }\n\n  /**\n   * Gets all child IDs of a managed object.\n   */\n  private getChildrenIds(managedObject: IManagedObject): string[] {\n    const childAssets =\n      managedObject.childAssets?.references?.map(child => child.managedObject.id) ?? [];\n    const childDevices =\n      managedObject.childDevices?.references?.map(child => child.managedObject.id) ?? [];\n    const childAdditions =\n      managedObject.childAdditions?.references?.map(child => child.managedObject.id) ?? [];\n    return [...childAssets, ...childDevices, ...childAdditions];\n  }\n\n  /**\n   * Recursively finds all paths from a root node to the target asset.\n   * Returns an array of paths, where each path is an array of managed objects.\n   */\n  private findAllPathsToAsset(\n    managedObject: IManagedObject,\n    targetAssetId: string,\n    allManagedObjects: IManagedObject[],\n    currentPath: IManagedObject[] = []\n  ): IManagedObject[][] {\n    // Check for cycles - if this node is already in the current path, stop traversal\n    if (currentPath.some(ancestor => ancestor.id === managedObject.id)) {\n      return [];\n    }\n\n    const newPath = [...currentPath, managedObject];\n\n    // If we found the target asset, return this path\n    if (managedObject.id === targetAssetId) {\n      return [newPath];\n    }\n\n    // Otherwise, continue searching in children\n    const childrenIds = this.getChildrenIds(managedObject);\n    const filteredChildren = allManagedObjects.filter(mo => childrenIds.includes(mo.id));\n\n    const allPaths: IManagedObject[][] = [];\n    filteredChildren.forEach(child => {\n      const paths = this.findAllPathsToAsset(child, targetAssetId, allManagedObjects, newPath);\n      allPaths.push(...paths);\n    });\n\n    return allPaths;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Directive, ElementRef, OnDestroy, inject } from '@angular/core';\nimport { ConfigurableFocusTrap, ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';\nimport { BsDropdownDirective } from 'ngx-bootstrap/dropdown';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Directive to manage focus trapping and keyboard navigation for ngx-bootstrap dropdowns with `container=\"body\"`.\n *\n * ## Problem\n * When a dropdown is appended to the body using `container=\"body\"`, the standard `cdkTrapFocus`\n * directive doesn't work because the dropdown content is outside the normal DOM hierarchy where\n * the directive is applied.\n *\n * ## Solution\n * This directive:\n * - Detects when a dropdown with `container=\"body\"` opens\n * - Programmatically creates a CDK focus trap on the body-appended dropdown menu element\n * - Traps Tab/Shift+Tab navigation within the dropdown menu\n * - Automatically closes dropdown and restores focus to toggle button when user selects an item with Enter/Space\n * - Prevents ESC key from propagating to parent elements (e.g., modals, drawers) and restores focus on close\n * - Cleans up all listeners when the dropdown closes\n *\n * ## Usage\n * Simply apply this directive to the same element that has the `dropdown` directive:\n *\n * @example\n * ```html\n * <div dropdown container=\"body\" c8yDropdownFocusTrap #myDropdown=\"bs-dropdown\">\n *   <button dropdownToggle>Select option</button>\n *   <div *dropdownMenu class=\"dropdown-menu\">\n *     <c8y-list-group role=\"list\">\n *       <c8y-li tabindex=\"0\" role=\"listitem\">Option 1</c8y-li>\n *       <c8y-li tabindex=\"0\" role=\"listitem\">Option 2</c8y-li>\n *     </c8y-list-group>\n *   </div>\n * </div>\n * ```\n *\n * ## Features\n * - **Focus trapping**: Tab key navigation cycles through dropdown items\n * - **Automatic focus management**: Enter/Space automatically closes dropdown and returns focus to toggle button\n * - **ESC key isolation**: Pressing ESC closes only the dropdown, not parent modals/drawers, and restores focus\n * - **Form-friendly**: Skips automatic close for inputs, textareas, and selects within the dropdown\n * - **Automatic cleanup**: All listeners and focus trap removed when dropdown closes\n * - **Zero configuration**: Just add the directive, no manual focus management needed\n *\n * @see {@link https://material.angular.io/cdk/a11y/overview#focustrap|CDK FocusTrap}\n */\n@Directive({\n  selector: '[c8yDropdownFocusTrap]'\n})\nexport class DropdownFocusTrapDirective implements OnDestroy {\n  private readonly dropdown = inject(BsDropdownDirective);\n  private readonly focusTrapFactory = inject(ConfigurableFocusTrapFactory);\n  private readonly document = inject(DOCUMENT);\n  private readonly elementRef = inject(ElementRef);\n\n  private dropdownMenuElement?: HTMLElement;\n  private focusTrap?: ConfigurableFocusTrap;\n  private toggleButton?: HTMLElement;\n  private shouldRestoreFocus = false;\n\n  constructor() {\n    this.dropdown.onShown.pipe(takeUntilDestroyed()).subscribe(() => this.setupFocusTrap());\n    this.dropdown.onHidden.pipe(takeUntilDestroyed()).subscribe(() => this.onDropdownHidden());\n  }\n\n  ngOnDestroy(): void {\n    this.cleanupFocusTrap();\n  }\n\n  /**\n   * Sets up the focus trap when the dropdown opens.\n   * @private\n   */\n  private setupFocusTrap(): void {\n    // Use setTimeout to ensure the dropdown menu is rendered in the DOM\n    setTimeout(() => {\n      const dropdownMenus = this.document.querySelectorAll('.dropdown-menu.show');\n      if (!dropdownMenus || dropdownMenus.length === 0) {\n        return;\n      }\n\n      this.dropdownMenuElement = dropdownMenus[dropdownMenus.length - 1] as HTMLElement;\n\n      // Simplified toggle button query\n      this.toggleButton = this.elementRef.nativeElement.querySelector(\n        '.dropdown-toggle'\n      ) as HTMLElement;\n\n      if (!this.dropdownMenuElement) {\n        return;\n      }\n\n      this.focusTrap = this.focusTrapFactory.create(this.dropdownMenuElement);\n      this.focusTrap.enabled = true;\n\n      this.document.addEventListener('keydown', this.handleSelection, true);\n      this.document.addEventListener('keydown', this.handleEscape, true);\n    }, 0);\n  }\n\n  private onDropdownHidden(): void {\n    const buttonToFocus = this.toggleButton;\n    const shouldRestore = this.shouldRestoreFocus;\n\n    this.cleanupFocusTrap();\n\n    if (shouldRestore && buttonToFocus) {\n      setTimeout(() => buttonToFocus.focus(), 0);\n    }\n  }\n\n  private handleSelection = (event: KeyboardEvent) => {\n    if (event.key !== 'Enter' && event.key !== ' ') {\n      return;\n    }\n\n    const target = event.target as HTMLElement;\n    if (!this.dropdownMenuElement?.contains(target) || target.matches('input, textarea, select')) {\n      return;\n    }\n\n    this.shouldRestoreFocus = true;\n    setTimeout(() => this.dropdown.hide(), 50);\n  };\n\n  private handleEscape = (event: KeyboardEvent) => {\n    if (event.key !== 'Escape') {\n      return;\n    }\n\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    this.shouldRestoreFocus = true;\n    this.dropdown.hide();\n  };\n\n  /**\n   * Cleans up the focus trap when the dropdown closes.\n   * @private\n   */\n  private cleanupFocusTrap(): void {\n    this.document.removeEventListener('keydown', this.handleSelection, true);\n    this.document.removeEventListener('keydown', this.handleEscape, true);\n    this.shouldRestoreFocus = false;\n\n    if (this.focusTrap) {\n      this.focusTrap.destroy();\n      this.focusTrap = undefined;\n    }\n\n    this.dropdownMenuElement = undefined;\n    this.toggleButton = undefined;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * Pipe that strips HTML tags from a string.\n *\n * Useful for creating plain text versions of HTML content,\n * such as for aria-labels or other accessibility attributes.\n *\n * @example\n * ```html\n * <div [attr.aria-label]=\"htmlContent | stripHtml\">\n *   <div [innerHTML]=\"htmlContent\"></div>\n * </div>\n * ```\n *\n * @example\n * ```typescript\n * const html = '<p>Hello <strong>world</strong></p>';\n * // Result: 'Hello world'\n * ```\n */\n@Pipe({\n  name: 'stripHtml',\n  standalone: true,\n  pure: true\n})\nexport class StripHtmlPipe implements PipeTransform {\n  /**\n   * Strips HTML tags from the input string.\n   *\n   * @param value - The HTML string to process\n   * @returns Plain text with HTML tags removed\n   */\n  transform(value: string): string {\n    if (!value) {\n      return '';\n    }\n\n    const tmp = document.createElement('div');\n    tmp.innerHTML = value;\n    return tmp.textContent || tmp.innerText || '';\n  }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { IconDirective } from '../icon.directive';\nimport { C8yTranslatePipe } from '../../i18n';\nimport { StripHtmlPipe } from '../strip-html.pipe';\n\n/**\n * Represents a single section in the icon panel\n */\nexport interface IconPanelSection {\n  /** Unique identifier for the section */\n  id: string;\n  /** Label text for the section */\n  label: string;\n  /** Icon name (e.g., 'c8y-device', 'c8y-connection') */\n  icon: string;\n  /** Whether the section should be displayed */\n  visible: boolean;\n  /** HTML content to display in the section */\n  content: string;\n  /** Custom CSS classes for the section container */\n  containerClass?: string;\n  /** Data-cy attribute for testing */\n  dataCy?: string;\n  /** Responsive grid classes (e.g., 'col-xs-12 col-md-6') */\n  colClass?: string;\n  /** Additional CSS classes for the icon */\n  iconClass?: string;\n}\n\n/**\n * Icon Panel Component\n *\n * Displays information in a grid of bordered panels, each with an icon, label, and content.\n * Useful for showing structured metadata, device information, connection status, etc.\n *\n * @example\n * ```typescript\n * sections: IconPanelSection[] = [\n *   {\n *     id: 'device-info',\n *     label: 'Device Information',\n *     icon: 'c8y-device',\n *     visible: true,\n *     content: '<p>Device ID: THM-001</p><p>Type: Sensor</p>',\n *     colClass: 'col-xs-12 col-md-6'\n *   },\n *   {\n *     id: 'status',\n *     label: 'Status',\n *     icon: 'c8y-connection',\n *     visible: true,\n *     content: 'Connected',\n *     colClass: 'col-xs-12 col-md-6'\n *   }\n * ];\n * ```\n *\n * ```html\n * <c8y-icon-panel [sections]=\"sections\"></c8y-icon-panel>\n * ```\n *\n * You can also project additional content:\n * ```html\n * <c8y-icon-panel [sections]=\"sections\">\n *   <div class=\"col-xs-12\">\n *     <p>Additional custom content here</p>\n *   </div>\n * </c8y-icon-panel>\n * ```\n */\n@Component({\n  selector: 'c8y-icon-panel',\n  templateUrl: './icon-panel.component.html',\n  standalone: true,\n  imports: [NgClass, C8yTranslatePipe, IconDirective, StripHtmlPipe]\n})\nexport class IconPanelComponent {\n  /**\n   * Array of sections to display in the panel\n   */\n  @Input() sections: IconPanelSection[] = [];\n\n  /**\n   * Accessible label for the icon panel region.\n   */\n  @Input() ariaLabel = 'Information sections';\n}\n","<div\n  class=\"d-flex row tight-grid flex-wrap a-i-stretch\"\n  [attr.aria-label]=\"ariaLabel | translate\"\n  role=\"region\"\n  data-cy=\"c8y-icon-panel\"\n>\n  @for (section of sections; track section.id) {\n    @if (section.visible) {\n      <div\n        class=\"d-flex m-b-8\"\n        [attr.aria-label]=\"\n          (section.label | translate) + ': ' + (section.content | translate | stripHtml)\n        \"\n        role=\"definition\"\n        [ngClass]=\"section.colClass || 'col-xs-12 col-md-6'\"\n        [attr.data-cy]=\"section.dataCy\"\n      >\n        <div [ngClass]=\"section.containerClass || 'border-all fit-w d-flex'\">\n          <div class=\"p-8\">\n            <i\n              [class]=\"'icon-24  m-t-4 c8y-icon ' + (section.iconClass || '')\"\n              [c8yIcon]=\"section.icon\"\n              aria-hidden=\"true\"\n            ></i>\n          </div>\n          <div class=\"p-t-8 p-b-8 p-r-8 flex-grow\">\n            <p class=\"text-label-small m-b-4\">{{ section.label | translate }}</p>\n            <div\n              class=\"small fit-w\"\n              [innerHTML]=\"section.content | translate\"\n            ></div>\n          </div>\n        </div>\n      </div>\n    }\n  }\n\n  <ng-content></ng-content>\n</div>\n","import { Injectable } from '@angular/core';\nimport { IEvent, IManagedObject } from '@c8y/client';\nimport { get, isNaN } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\nexport class GeoService {\n  private readonly C8Y_POSITION_FRAGMENT = 'c8y_Position';\n\n  getLatLong(mo: IEvent | IManagedObject): [number, number] {\n    const fragment = get(mo, this.C8Y_POSITION_FRAGMENT);\n    if (!fragment) {\n      return undefined;\n    }\n    const lat = Number(fragment.lat);\n    const lng = Number(fragment.lng);\n    if (!isNaN(lat) && !isNaN(lng) && Math.abs(fragment.lat) <= 90) {\n      return [lat, lng];\n    }\n    return undefined;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\n\nexport type ManagedObjectTypeForConfig =\n  | 'c8y_Software'\n  | 'c8y_Firmware'\n  | 'c8y_ConfigurationDump'\n  | 'c8y_ModbusDeviceType'\n  | 'c8y_CANopenDeviceType'\n  | 'c8y_LoraDeviceType'\n  | 'c8y_SigfoxDeviceType'\n  | 'c8y_DeviceShellTemplate'\n  | 'c8y_Profile';\n@Injectable({ providedIn: 'root' })\nexport class GlobalConfigService {\n  protected cache: Promise<IResultList<IManagedObject | undefined>>;\n\n  private fragmentTypeMapping: { [key in ManagedObjectTypeForConfig]: string } = {\n    c8y_Software: 'c8y_SoftwareAsGlobal',\n    c8y_Firmware: 'c8y_FirmwareAsGlobal',\n    c8y_ConfigurationDump: 'c8y_ConfigurationAsGlobal',\n    c8y_DeviceShellTemplate: 'c8y_ShellTemplateAsGlobal',\n    c8y_ModbusDeviceType: 'c8y_FieldbusAsGlobal',\n    c8y_CANopenDeviceType: 'c8y_CANOpenAsGlobal',\n    c8y_LoraDeviceType: 'c8y_LoraAsGlobal',\n    c8y_SigfoxDeviceType: 'c8y_SigfoxAsGlobal',\n    c8y_Profile: 'c8y_ProfileAsGlobal'\n  } as const;\n\n  constructor(private inventory: InventoryService) {\n    this.cache = undefined;\n  }\n\n  /**\n   * Retrieves the global configuration for a specific fragment type.\n   * @param fragmentType - The fragment type on which the managed object type corresponds.\n   * @returns A promise that resolves in the first global configuration managed object.\n   */\n  async getGlobalConfig(fragmentType: string): Promise<IManagedObject | undefined> {\n    const queryParams = {\n      pageSize: 1,\n      type: 'c8y_GlobalObjectConfiguration',\n      createdFrom: '1990-01-01',\n      fragmentType\n    };\n\n    if (!this.cache) {\n      this.cache = this.inventory.list(queryParams);\n    }\n\n    return (await this.cache)?.data[0];\n  }\n\n  /**\n   * Retrieves whether an object should include the c8y_Global fragment in its declaration.\n   * If the fragment is set to false it should return false;\n   * If the fragment is set to true  it should return true;\n   * If no fragment is available  it should return true;\n   * @param objectType - The type of managed object.\n   * @returns A promise that resolves into a boolean value indicating whether the global parameter should be set.\n   */\n  getGlobalParam(objectType: ManagedObjectTypeForConfig): Promise<boolean> {\n    const fragmentType = this.fragmentTypeMapping[objectType];\n\n    return this.getGlobalConfig(fragmentType).then(result =>\n      result && result[fragmentType] !== undefined ? !!result[fragmentType] : true\n    );\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport const NULL_VALUE_PLACEHOLDER = '--';\n\n@Pipe({\n  name: 'relativeTime',\n  standalone: true\n})\nexport class RelativeTimePipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n\n  /**\n   * Transforms the given input into a formatted time difference string.\n   *\n   * This method calculates the time difference between the current date and the input.\n   * If the input is a `Date` object, the difference in milliseconds is calculated from the current date.\n   * If the input is a number, it is treated as the difference in milliseconds.\n   *\n   * The method returns a string representing the time difference, optionally prefixed with\n   * \"in \" for future dates or suffixed with \" ago\" for past dates, based on the `noPrefixOrSuffix` flag.\n   *\n   * @param input - The date or the time difference in milliseconds to be transformed.\n   *                A positive number indicates a future time relative to now, and a negative number indicates a past time.\n   * @param noPrefixOrSuffix - If `true`, the output will not include \"in\" or \"ago\" prefixes/suffixes.\n   *                         If `false`, the output will include these based on whether the time is in the future or past.\n   * @returns The formatted and translated time difference string.\n   */\n  transform(input: Date | number, noPrefixOrSuffix = false): string {\n    if (input == null) {\n      return NULL_VALUE_PLACEHOLDER;\n    }\n\n    let differenceMs: number;\n\n    if (input instanceof Date) {\n      const now = new Date();\n      differenceMs = input.getTime() - now.getTime();\n    } else {\n      differenceMs = input;\n    }\n\n    return this.getHumanReadableTimeDiffString(differenceMs, noPrefixOrSuffix);\n  }\n\n  /**\n   * Calculates a human-readable representation of a time difference.\n   *\n   * Time ranges are same as moment.js timeFromNow function counterpart:\n   * https://momentjscom.readthedocs.io/en/latest/moment/04-displaying/02-fromnow/\n   *\n   * @param differenceMs - The time difference in milliseconds.\n   *                       A positive number indicates a future time relative to now, and a negative number indicates a past time.\n   * @param noPrefixOrSuffix - If `true`, the output will not include \"in\" or \"ago\" prefixes/suffixes.\n   *                         If `false`, the output will include these based on whether the time is in the future or past.\n   * @returns A string representing the time difference in a human-readable format.\n   *                    The format depends on the duration of the difference:\n   *                    - Less than 45 seconds: returns 'a few seconds'\n   *                    - 45 to 89 seconds: returns 'a minute'\n   *                    - 90 seconds to 44 minutes: returns the number of minutes\n   *                    - 45 to 89 minutes: returns 'an hour'\n   *                    - 90 minutes to 21 hours: returns the number of hours\n   *                    - 22 to 35 hours: returns 'a day'\n   *                    - 36 hours to 25 days: returns the number of days\n   *                    - 26 to 45 days: returns 'a month'\n   *                    - 45 to 319 days: returns the number of months\n   *                    - 320 days to 1.5 years: returns 'a year'\n   *                    - More than 1.5 years: returns the number of years\n   */\n  getHumanReadableTimeDiffString(differenceMs: number, noPrefixOrSuffix: boolean): string {\n    if (differenceMs == null) {\n      return NULL_VALUE_PLACEHOLDER;\n    }\n\n    const isInFuture = differenceMs > 0;\n\n    differenceMs = Math.abs(differenceMs);\n\n    const conditions = [\n      this.withinFewSeconds.bind(this),\n      this.withinMinute.bind(this),\n      this.withinMinutes.bind(this),\n      this.withinHour.bind(this),\n      this.withinHours.bind(this),\n      this.withinDay.bind(this),\n      this.withinDays.bind(this),\n      this.withinMonth.bind(this),\n      this.withinMonths.bind(this),\n      this.withinYear.bind(this),\n      this.withinYears.bind(this)\n    ];\n\n    for (const condition of conditions) {\n      const result = condition(differenceMs, noPrefixOrSuffix, isInFuture);\n      if (result !== null) {\n        return result;\n      }\n    }\n  }\n\n  private withinFewSeconds(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    if (differenceInSeconds < 45) {\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('a few seconds'));\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in a few seconds'))\n        : this.translateService.instant(gettext('a few seconds ago'));\n    }\n    return null;\n  }\n\n  private withinMinute(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    if (differenceInSeconds < 90) {\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('a minute'));\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in a minute'))\n        : this.translateService.instant(gettext('a minute ago'));\n    }\n    return null;\n  }\n\n  private withinMinutes(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n\n    if (differenceInMinutes < 45) {\n      const params = { count: Math.round(differenceInMinutes) };\n\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('{{ count }} minutes'), params);\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in {{ count }} minutes'), params)\n        : this.translateService.instant(gettext('{{ count }} minutes ago'), params);\n    }\n    return null;\n  }\n\n  private withinHour(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n\n    if (differenceInMinutes < 90) {\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('an hour'));\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in an hour'))\n        : this.translateService.instant(gettext('an hour ago'));\n    }\n    return null;\n  }\n\n  private withinHours(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n    const differenceInHours = differenceInMinutes / 60;\n\n    if (differenceInHours < 22) {\n      const params = { count: Math.round(differenceInHours) };\n\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('{{ count }} hours'), params);\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in {{ count }} hours'), params)\n        : this.translateService.instant(gettext('{{ count }} hours ago'), params);\n    }\n    return null;\n  }\n\n  private withinDay(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n    const differenceInHours = differenceInMinutes / 60;\n\n    if (differenceInHours < 36) {\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('a day'));\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in a day'))\n        : this.translateService.instant(gettext('a day ago'));\n    }\n    return null;\n  }\n\n  private withinDays(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n    const differenceInHours = differenceInMinutes / 60;\n    const differenceInDays = differenceInHours / 24;\n\n    if (differenceInDays < 26) {\n      const params = { count: Math.round(differenceInDays) };\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('{{ count }} days'), params);\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in {{ count }} days'), params)\n        : this.translateService.instant(gettext('{{ count }} days ago'), params);\n    }\n    return null;\n  }\n\n  private withinMonth(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n    const differenceInHours = differenceInMinutes / 60;\n    const differenceInDays = differenceInHours / 24;\n\n    if (differenceInDays < 45) {\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('a month'));\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in a month'))\n        : this.translateService.instant(gettext('a month ago'));\n    }\n    return null;\n  }\n\n  private withinMonths(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n    const differenceInHours = differenceInMinutes / 60;\n    const differenceInDays = differenceInHours / 24;\n\n    if (differenceInDays < 320) {\n      const params = { count: Math.round(differenceInDays / 30) };\n\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('{{ count }} months'), params);\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in {{ count }} months'), params)\n        : this.translateService.instant(gettext('{{ count }} months ago'), params);\n    }\n    return null;\n  }\n\n  private withinYear(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n    const differenceInHours = differenceInMinutes / 60;\n    const differenceInDays = differenceInHours / 24;\n    const differenceInYears = differenceInDays / 365;\n\n    if (differenceInYears < 1.5) {\n      if (noPrefixOrSuffix) {\n        return this.translateService.instant(gettext('a year'));\n      }\n      return isInFuture\n        ? this.translateService.instant(gettext('in a year'))\n        : this.translateService.instant(gettext('a year ago'));\n    }\n    return null;\n  }\n\n  private withinYears(\n    differenceMs: number,\n    noPrefixOrSuffix: boolean,\n    isInFuture: boolean\n  ): string | null {\n    const differenceInSeconds = differenceMs / 1000;\n    const differenceInMinutes = differenceInSeconds / 60;\n    const differenceInHours = differenceInMinutes / 60;\n    const differenceInDays = differenceInHours / 24;\n    const differenceInYears = differenceInDays / 365;\n\n    const params = { count: Math.round(differenceInYears) };\n\n    if (noPrefixOrSuffix) {\n      return this.translateService.instant(gettext('{{ count }} years'), params);\n    }\n    return isInFuture\n      ? this.translateService.instant(gettext('in {{ count }} years'), params)\n      : this.translateService.instant(gettext('{{ count }} years ago'), params);\n  }\n}\n","import { MonoTypeOperatorFunction } from 'rxjs';\nimport { retryWhen, scan, tap, delay } from 'rxjs/operators';\n\nexport function retryWithDelay<T>(delayTime: number, count = 1): MonoTypeOperatorFunction<T> {\n  return input =>\n    input.pipe(\n      retryWhen(errors =>\n        errors.pipe(\n          scan((acc, error) => ({ count: acc.count + 1, error }), {\n            count: 0,\n            error: undefined as any\n          }),\n          tap(current => {\n            if (current.count > count) {\n              throw current.error;\n            }\n          }),\n          delay(delayTime)\n        )\n      )\n    );\n}\n","import { Injectable, InjectionToken, Injector, Type } from '@angular/core';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { GenericHookOptions, hookGeneric } from './extension-hooks';\n\nconst SERVICE_HOOK_TOKENS: Map<\n  keyof CumulocityServiceRegistry.ExtensionKeys,\n  InjectionToken<any>\n> = new Map();\n\n/**\n * Registers a service using a specified extension key.\n * This function facilitates dynamic service registration, enabling services\n * to be retrieved and used throughout the application based on their extension key.\n *\n * @param extensionKey The unique identifier for the service, defined within the ExtensionKeys interface.\n * @param service The class type of the service to register.\n * @returns A provider configuration for Angular's dependency injection, allowing the service to be injected where needed.\n *\n *  * @example\n * ```typescript\n * hookService('layersServiceKey', TestService);\n * ```\n */\nexport function hookService<\n  T extends string = keyof CumulocityServiceRegistry.SpecificExtensionKeys\n>(\n  extensionKey: T,\n  service: Type<CumulocityServiceRegistry.ExtensionKeys[T]>,\n  options?: Partial<GenericHookOptions>\n) {\n  let token = SERVICE_HOOK_TOKENS.get(extensionKey);\n\n  if (!token) {\n    token = new InjectionToken<typeof service>(extensionKey as string);\n    SERVICE_HOOK_TOKENS.set(extensionKey, token);\n  }\n\n  return hookGeneric(service, token, options);\n}\n\n/**\n * Service for managing and retrieving dynamically registered services within the application.\n * It leverages a map of InjectionTokens to associate services with unique extension keys.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ServiceRegistry {\n  protected injectors: Injector[];\n\n  constructor(rootInjector: Injector, pluginService: PluginsResolveService) {\n    this.injectors = [rootInjector];\n    pluginService.injectors$.subscribe(injector => this.injectors.push(injector));\n  }\n\n  /**\n   * Retrieves instances of services registered under a specified extension key.\n   *\n   * @param key - The extension key associated with the desired service.\n   * @returns An array of service instances registered under the given key.\n   *\n   * @example\n   * ```typescript\n   * // Retrieving instances of Service example\n   * const layersServices = serviceRegistry.get('layersServiceKey');\n   * layersServices.forEach(service => service.get().then(layer => console.log(layer)));\n   * ```\n   */\n  get<\n    T extends string = keyof CumulocityServiceRegistry.SpecificExtensionKeys,\n    R = CumulocityServiceRegistry.ExtensionKeys[T]\n  >(key: T): R[] {\n    const token: InjectionToken<R[]> = SERVICE_HOOK_TOKENS.get(key);\n    if (!token) {\n      return [];\n    }\n    return this.injectors\n      .map(injector => injector.get(token, [], { self: true, optional: true }))\n      .flat();\n  }\n\n  /**\n   * Allows to retrieve all registered extension keys.\n   *\n   * @returns An array of extension keys that have been registered.\n   */\n  getRegisteredExtensionKeys(): Array<keyof CumulocityServiceRegistry.ExtensionKeys> {\n    return Array.from(SERVICE_HOOK_TOKENS.keys());\n  }\n}\n","import { OperationStatus } from '@c8y/client';\n\nexport enum Status {\n  SUCCESS = 'success',\n  WARNING = 'warning',\n  DANGER = 'danger',\n  INFO = 'info'\n}\n\nexport type StatusType = Status | 'success' | 'warning' | 'danger' | 'info';\n\nexport const statusIcons = {\n  [Status.SUCCESS]: 'check-circle',\n  [Status.WARNING]: 'exclamation-triangle',\n  [Status.DANGER]: 'exclamation-circle',\n  [Status.INFO]: 'info-circle'\n};\n\nexport const statusClasses = {\n  [Status.SUCCESS]: `text-${Status.SUCCESS}`,\n  [Status.WARNING]: `text-${Status.WARNING}`,\n  [Status.DANGER]: `text-${Status.DANGER}`,\n  [Status.INFO]: `text-${Status.INFO}`\n};\n\nexport const statusAlert = {\n  [Status.SUCCESS]: `alert-${Status.SUCCESS}`,\n  [Status.WARNING]: `alert-${Status.WARNING}`,\n  [Status.DANGER]: `alert-${Status.DANGER}`,\n  [Status.INFO]: `alert-${Status.INFO}`\n};\n\nexport const operationStatusIcons = {\n  [OperationStatus.PENDING]: 'clock-o',\n  [OperationStatus.EXECUTING]: 'refresh',\n  [OperationStatus.SUCCESSFUL]: 'check-circle',\n  [OperationStatus.FAILED]: 'exclamation-circle'\n};\n\nexport const operationStatusClasses = {\n  [OperationStatus.PENDING]: 'text-info',\n  [OperationStatus.EXECUTING]: 'text-info',\n  [OperationStatus.SUCCESSFUL]: 'text-success',\n  [OperationStatus.FAILED]: 'text-danger'\n};\n","import { Injectable } from '@angular/core';\nimport {\n  ApplicationType,\n  GrantType,\n  IApplication,\n  IApplicationReference,\n  ICurrentTenant,\n  ITenantLoginOption,\n  TenantLoginOptionsService,\n  TenantLoginOptionType,\n  UserManagementSource,\n  UserService\n} from '@c8y/client';\nimport { get, pick } from 'lodash-es';\nimport { AppStateService } from './ui-state.service';\nimport { take } from 'rxjs/operators';\nimport { Permissions } from '../common/permissions.service';\nimport { OptionsService } from './options.service';\n\nexport type PasswordStrengthSettings = Required<\n  Pick<ITenantLoginOption, 'enforceStrength' | 'greenMinLength' | 'strengthValidity'>\n>;\n\n/** The helper UI service for tenant related methods built upon client services. */\n@Injectable({ providedIn: 'root' })\nexport class TenantUiService {\n  readonly MANAGEMENT = 'management';\n  readonly ROLE_TENANT_MANAGEMENT_READ = Permissions.ROLE_TENANT_MANAGEMENT_READ;\n\n  constructor(\n    private userService: UserService,\n    private appStateService: AppStateService,\n    private tenantLoginOption: TenantLoginOptionsService,\n    private options: OptionsService\n  ) {}\n\n  /**\n   * Returns current tenant\n   */\n  get currentTenant(): ICurrentTenant {\n    return this.appStateService.currentTenant.value;\n  }\n\n  /**\n   * Checks whether current tenant is the management tenant.\n   * @returns True if current tenant is the management tenant.\n   */\n  async isManagementTenant(): Promise<boolean> {\n    const currentTenant = this.appStateService.currentTenant.value;\n    return this.isManagement(currentTenant);\n  }\n\n  /**\n   * Checks whether current tenant is an enterprise tenant.\n   * An enterprise tenant is a tenant which has subscribed:\n   * - `branding` microservice or `feature-branding` feature app,\n   * - `sslmanagement` microservice,\n   * - `feature-user-hierarchy` feature app,\n   * - `feature-broker` feature app.\n   *\n   * See https://cumulocity.com/guides/users-guide/enterprise-edition/ for details about such tenants.\n   *\n   * @returns True, if current tenant is an enterprise tenant.\n   */\n  async isEnterpriseTenant(): Promise<boolean> {\n    const availableAppsOfUser = await this.appStateService.currentAppsOfUser\n      .pipe(take(1))\n      .toPromise();\n\n    const brandingAvailable =\n      this.hasApp(availableAppsOfUser, 'branding') ||\n      this.hasApp(availableAppsOfUser, 'feature-branding');\n\n    const requiredAppsAndFeaturesAvailable =\n      brandingAvailable &&\n      this.hasApp(availableAppsOfUser, 'sslmanagement') &&\n      this.hasApp(availableAppsOfUser, 'feature-user-hierarchy') &&\n      this.hasApp(availableAppsOfUser, 'feature-broker');\n\n    return requiredAppsAndFeaturesAvailable;\n  }\n\n  /**\n   * Checks whether the current user has read access to tenants, i.e.:\n   * - the current tenant can create subtenants or it's the management tenant,\n   * - the current user has ROLE_TENANT_MANAGEMENT_READ role.\n   * @returns True, if the current user has read access to tenants.\n   */\n  canReadTenants(): boolean {\n    const currentTenant = this.appStateService.currentTenant.value;\n    const currentUser = this.appStateService.currentUser.value;\n    return (\n      (this.isManagement(currentTenant) || currentTenant.allowCreateTenants) &&\n      this.userService.hasRole(currentUser, this.ROLE_TENANT_MANAGEMENT_READ)\n    );\n  }\n\n  /**\n   * Returns current tenant preferred login mode.\n   */\n  getCurrentTenantPreferredLoginOption(): ITenantLoginOption {\n    return this.getPreferredLoginOption(this.appStateService.state.loginOptions);\n  }\n\n  /**\n   * Returns current user login mode.\n   */\n  getCurrentUserLoginMode(): TenantLoginOptionType {\n    const preferredLoginOption = this.getCurrentTenantPreferredLoginOption();\n    const currentUser = this.appStateService.currentUser.value;\n    if (currentUser.customProperties.userOrigin === 'OAUTH2') {\n      return TenantLoginOptionType.OAUTH2;\n    }\n    return this.isBasic(preferredLoginOption)\n      ? TenantLoginOptionType.BASIC\n      : TenantLoginOptionType.OAUTH2_INTERNAL;\n  }\n\n  /**\n   * Returns tenant login option which is preferred.\n   *\n   * @param loginOptions The list of all available tenant's login options.\n   *\n   * @returns Returns ITenantLoginOption.\n   *\n   * **Example**\n   * ```typescript\n   *\n   *    (() => {\n   *      const preferredLoginOption = tenantLoginOptionsService.getPreferredLoginOption(loginOptions);\n   *   })();\n   * ```\n   */\n  getPreferredLoginOption(loginOptions: ITenantLoginOption[]): ITenantLoginOption {\n    const defaultFallback: ITenantLoginOption = {\n      type: TenantLoginOptionType.BASIC,\n      userManagementSource: UserManagementSource.INTERNAL\n    };\n    if (!loginOptions) {\n      return defaultFallback;\n    } else {\n      let visibleLoginOptions = loginOptions.filter(this.isVisibleOnLoginPage);\n\n      // should ignore the OAUTH2 option if skipSSORedirect is set\n      if (this.options.get('skipSSORedirect', false)) {\n        visibleLoginOptions = visibleLoginOptions.filter(\n          lo => lo.type !== TenantLoginOptionType.OAUTH2\n        );\n\n        // in case there is no other visible option, we fallback to all options except OAUTH2\n        if (visibleLoginOptions.length === 0) {\n          visibleLoginOptions = loginOptions.filter(lo => lo.type !== TenantLoginOptionType.OAUTH2);\n        }\n      }\n\n      const preferredLoginOption =\n        visibleLoginOptions.find(this.isOauthInternal) ||\n        visibleLoginOptions.find(this.isBasic) ||\n        visibleLoginOptions.find(this.isOauth2) ||\n        defaultFallback;\n\n      // ensure the returned login option is marked as visible on login page\n      preferredLoginOption.visibleOnLoginPage = true;\n\n      return preferredLoginOption;\n    }\n  }\n\n  /**\n   * Returns Oauth2 login option if it can be used by UI.\n   *\n   * @param loginOptions The list of all available tenant's login options.\n   *\n   * @returns Returns ITenantLoginOption.\n   *\n   * **Example**\n   * ```typescript\n   *\n   *    (() => {\n   *      const oauth2 = tenantLoginOptionsService.getOauth2Option(loginOptions);\n   *   })();\n   * ```\n   */\n  getOauth2Option(loginOptions: ITenantLoginOption[]): ITenantLoginOption {\n    return loginOptions.find(\n      loginOption => this.isVisibleOnLoginPage(loginOption) && this.isOauth2(loginOption)\n    );\n  }\n\n  /**\n   * Callback which checks if login option is visible on login page.\n   *\n   * @param loginOption The tenant login option.\n   *\n   * **Example**\n   * ```typescript\n   *\n   *    (() => {\n   *      const loginOptionsVisibleOnLoginPage = loginOptions.filter(tenantLoginOptionsService.isVisibleOnLoginPage);\n   *   })();\n   * ```\n   */\n  isVisibleOnLoginPage(loginOption: ITenantLoginOption): boolean {\n    return loginOption.visibleOnLoginPage;\n  }\n\n  /**\n   * Callback which checks if login option type is 'OAUTH2_INTERNAL'.\n   *\n   * @param loginOption The tenant login option.\n   *\n   * **Example**\n   * ```typescript\n   *\n   *    (() => {\n   *      const oauth2InternalLoginOptions = loginOptions.filter(tenantLoginOptionsService.isOauthInternal);\n   *   })();\n   * ```\n   */\n  isOauthInternal(loginOption: ITenantLoginOption): boolean {\n    return loginOption.type === TenantLoginOptionType.OAUTH2_INTERNAL;\n  }\n\n  /**\n   * Callback which checks if login option type is 'BASIC'.\n   *\n   * @param loginOption The tenant login option.\n   *\n   * **Example**\n   * ```typescript\n   *\n   *    (() => {\n   *      const basicLoginOptions = loginOptions.filter(tenantLoginOptionsService.isBasic);\n   *   })();\n   * ```\n   */\n  isBasic(loginOption: ITenantLoginOption): boolean {\n    return loginOption.type === TenantLoginOptionType.BASIC;\n  }\n\n  /**\n   * Callback which checks if login option type is 'OAUTH2' and grantType is 'AUTHORIZATION_CODE'.\n   *\n   * @param loginOption The tenant login option.\n   *\n   * **Example**\n   * ```typescript\n   *\n   *    (() => {\n   *      const oauth2LoginOptions = loginOptions.filter(tenantLoginOptionsService.OAUTH2);\n   *   })();\n   * ```\n   */\n  isOauth2(loginOption: ITenantLoginOption): boolean {\n    return (\n      loginOption.type === TenantLoginOptionType.OAUTH2 &&\n      loginOption.grantType === GrantType.AUTHORIZATION_CODE\n    );\n  }\n\n  /**\n   * Checks if application of type MICROSERVICE is subscribed to the current tenant.\n   * It checks the application references of the currentTenant from the application state.\n   * No additional request.\n   * @param identifier application name or contextPath\n   */\n  isMicroserviceSubscribedInCurrentTenant(identifier: string): boolean {\n    if (identifier?.length > 0) {\n      const microservices = this.getSubscribedMicroservicesInCurrentTenant();\n      return microservices.some(({ name, contextPath }) =>\n        [name, contextPath].includes(identifier)\n      );\n    }\n    return false;\n  }\n\n  /**\n   * Gets all application of type MICROSERVICE subscribed to the current tenant.\n   * It checks the application references of the currentTenant from the application state.\n   * No additional request.\n   */\n  getSubscribedMicroservicesInCurrentTenant(): IApplication[] {\n    const references: IApplicationReference[] = get(\n      this.appStateService.currentTenant,\n      'value.applications.references',\n      []\n    );\n    return references\n      .map(appRef => appRef.application)\n      .filter(app => app.type === ApplicationType.MICROSERVICE);\n  }\n\n  /**\n   * Gets password constraints setting from loginOptions.\n   * @returns Returns Promise<PasswordStrengthSettings> with password properties.\n   */\n  async getPasswordStrengthSettings(): Promise<PasswordStrengthSettings> {\n    return this.tenantLoginOption.list({}).then(res => {\n      const loginOptionWithPasswordSettings = res.data.find(({ type }) =>\n        [TenantLoginOptionType.BASIC, TenantLoginOptionType.OAUTH2_INTERNAL].includes(type)\n      );\n\n      if (!loginOptionWithPasswordSettings) {\n        return {\n          enforceStrength: true,\n          greenMinLength: 8,\n          strengthValidity: true\n        };\n      }\n\n      return pick(loginOptionWithPasswordSettings, [\n        'enforceStrength',\n        'greenMinLength',\n        'strengthValidity'\n      ]);\n    });\n  }\n\n  private hasApp(apps: IApplication[], requiredAppName: string): boolean {\n    if (!apps?.length) {\n      return false;\n    }\n    return apps.some(app => app.name === requiredAppName);\n  }\n\n  private isManagement(currentTenant: ICurrentTenant) {\n    return currentTenant.name === this.MANAGEMENT;\n  }\n}\n","import { ScrollDispatcher } from '@angular/cdk/scrolling';\nimport {\n  AfterViewInit,\n  DestroyRef,\n  Directive,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  Output\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter } from 'rxjs/operators';\n\n/**\n * Directive to listen for scroll events on a virtual scroll container.\n * Emits `scrolled` and `scrolledToTop` events.\n *\n * The directive listens for scroll events on a virtual scroll container.\n * - When the container is scrolled by at least 50 pixels (or a custom threshold), the `scrolled` event is emitted.\n * - When the container is scrolled to the top, the `scrolledToTop` event is emitted.\n *\n */\n@Directive({\n  selector: '[c8yVirtualScrollListener]',\n  standalone: true\n})\nexport class VirtualScrollListenerDirective implements AfterViewInit {\n  private el = inject(ElementRef);\n  private scrollDispatcher = inject(ScrollDispatcher);\n  private destroyRef = inject(DestroyRef);\n\n  /**\n   * Pixel threshold for emitting the scrolled event.\n   */\n  @Input() scrollThreshold = 50;\n  /**\n   * Event emitted when the virtual scroll container is scrolled by at least 50 pixels.\n   */\n  @Output() scrolled = new EventEmitter<void>();\n  /**\n   * Event emitted when the virtual scroll container is scrolled to the top.\n   */\n  @Output() scrolledToTop = new EventEmitter<void>();\n\n  private lastScrollTop = 0;\n\n  ngAfterViewInit(): void {\n    const hostEl = this.el.nativeElement as HTMLElement;\n\n    this.scrollDispatcher\n      .scrolled()\n      .pipe(\n        filter(scrollable => {\n          if (!scrollable) return false;\n          const scrollableEl = scrollable.getElementRef().nativeElement;\n          return hostEl.contains(scrollableEl);\n        }),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(scrollable => {\n        if (scrollable) {\n          const scrollableEl = scrollable.getElementRef().nativeElement;\n          this.onScroll(scrollableEl);\n        }\n      });\n  }\n\n  private onScroll(target: HTMLElement): void {\n    const scrollTop = target.scrollTop;\n\n    if (scrollTop === 0) {\n      this.lastScrollTop = 0;\n      this.scrolledToTop.emit();\n      return;\n    }\n\n    if (Math.abs(scrollTop - this.lastScrollTop) > this.scrollThreshold) {\n      this.lastScrollTop = scrollTop;\n      this.scrolled.emit();\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, defer, throwError } from 'rxjs';\nimport { concatMap, map, switchMap } from 'rxjs/operators';\nimport { BlobReader, BlobWriter, ZipWriter, ZipReader, Entry } from '@zip.js/zip.js';\n\n@Injectable({ providedIn: 'root' })\nexport class ZipService {\n  getEntries(zipFile: File): Observable<ZipEntry[]> {\n    return defer(() => {\n      const reader = new BlobReader(zipFile);\n      const zipReader = new ZipReader(reader);\n      return zipReader.getEntries();\n    });\n  }\n\n  getData(entry: ZipEntry): Observable<Blob> {\n    return defer(() => {\n      const writer = new BlobWriter();\n      return entry.getData<Blob>(writer);\n    });\n  }\n\n  getJsonData(zipFile: File, fileEntryFilter: { filename: string }): Observable<string> {\n    return this.getEntries(zipFile).pipe(\n      map(entries => {\n        const entryFile = entries.find(entry => entry.filename === fileEntryFilter.filename);\n        if (!entryFile) {\n          throwError(() => new Error(`File not found ${JSON.stringify(fileEntryFilter)}`));\n        }\n        return entryFile;\n      }),\n      concatMap(entry => this.getData(entry)),\n      switchMap(async blob => await blob.text()),\n      map(text => JSON.parse(text))\n    );\n  }\n\n  async createZip(files: { fileName: string; blob: Blob }[]) {\n    const zipFileStream = new TransformStream();\n    const zipFileBlobPromise = new Response(zipFileStream.readable).blob();\n    const zipWriter = new ZipWriter(zipFileStream.writable, { zip64: false });\n    await Promise.all(\n      files.map(file => {\n        const readable = file.blob.stream() as any as ReadableStream<Uint8Array>;\n        return zipWriter.add(file.fileName, readable);\n      })\n    );\n\n    await zipWriter.close();\n    return await zipFileBlobPromise;\n  }\n}\n\nexport type ZipEntry = Entry;\n","import { inject, Injectable } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport { combineLatest, firstValueFrom, map, Observable } from 'rxjs';\nimport { AppStateService } from './ui-state.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AlertService } from '../alert/alert.service';\n\nexport const SupportedApps = {\n  devicemanagement: 'devicemanagement-application-key',\n  cockpit: 'cockpit-application-key',\n  administration: 'administration-application-key',\n  smartrules: 'smartrule-key'\n} as const;\nexport type SupportedAppKey = (typeof SupportedApps)[keyof typeof SupportedApps];\n\n/**\n * Service that provides methods to interact with other applications.\n * It allows retrieving a specific app by key, checking its availability, verifying if it is not the current application,\n * determining if a link to another app should be shown, and navigating to it.\n */\n@Injectable({ providedIn: 'root' })\nexport class InterAppService<T extends string = SupportedAppKey> {\n  private stateService = inject(AppStateService);\n  private alertService = inject(AlertService);\n  private translateService = inject(TranslateService);\n\n  /**\n   * Retrieve application by its key as observable.\n   * @param key {SupportedAppKey} - Application key.\n   * @returns Observable of Application\n   */\n  getApp$(key: T): Observable<IApplication | undefined> {\n    return this.stateService.currentAppsOfUser.pipe(map(apps => apps.find(app => app.key === key)));\n  }\n\n  /**\n   * Checks if current application is the same as the one that key is provided\n   * @param key {SupportedAppKey} - Application key.\n   * @returns Observable of boolean; true if current app matches provided key.\n   */\n  isCurrentApp$(key: T): Observable<boolean> {\n    return this.stateService.currentApplication.pipe(map(app => app?.key === key));\n  }\n\n  /**\n   * Checks if other (other than current) application link should be displayed. It consists of two conditions:\n   * - app that link leads to exists and is available for current user\n   * - app link leads to app that is not current app\n   * @param appKey {SupportedAppKey} - Application key that link leads to.\n   * @returns Observable of boolean; only true when app that link leads to is available and app link leads to app that is not current app\n   */\n  shouldShowAppLink$(appKey: T): Observable<boolean> {\n    return combineLatest([\n      this.getApp$(appKey).pipe(map(Boolean)),\n      this.isCurrentApp$(appKey).pipe(map(val => !val))\n    ]).pipe(\n      map(\n        ([linkedAppIsAvailable, linkLeadsToOtherAppThanCurrent]) =>\n          linkedAppIsAvailable && linkLeadsToOtherAppThanCurrent\n      )\n    );\n  }\n\n  /**\n   * Navigates to app by provided app key\n   * @param appKey {SupportedAppKey} - Application key that links leads to.\n   * @param path {string} - Additional path in target application.\n   */\n  async navigateToApp(appKey: T, path?: string) {\n    const contextPath = await firstValueFrom(\n      this.getApp$(appKey).pipe(map(app => app?.contextPath))\n    );\n    if (!contextPath) {\n      const msg = this.translateService.instant(\n        gettext('Application with key \"{{appKey}}\" not found.'),\n        { appKey }\n      );\n      this.alertService.danger(msg);\n      return;\n    }\n    const baseUrl = `/apps/${contextPath}`;\n    const url = path ? `${baseUrl}/${path}` : baseUrl;\n\n    window.open(url, '_blank', 'noopener,noreferrer');\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { OptionsService } from '../../common/options.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Cookie, CookieBannerSettings, CookiePreferences } from './cookie-banner.model';\n\n/**\n * This service is handling the cookie banner and cookie preferences related logic.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class CookieBannerService {\n  readonly STORAGE_KEY: string = 'acceptCookieNotice';\n  readonly COOKIE_BANNER = 'cookieBanner';\n  readonly PREVIEW_COOKIE_BANNER = 'previewCookieBanner';\n  readonly IS_PREVIEW = 'preview';\n  readonly COOKIE_PREFERENCES_CONFIG = 'cookiePreferences';\n  isCookieBannerShowed$: Subject<boolean> = new Subject();\n\n  cookieDescriptions = {\n    required: gettext(\n      \"These cookies are required to enable core site functionality. They perform a task or operation without which a site's functionality would not be possible.\"\n    ),\n    // Note: any changes must be synced with `cookiePreferences.functional` property in `packages/public-options/options.json`.\n    functional: gettext(\n      'These cookies are used to support you during your first steps with the product, to deliver content tailored to your needs, and to collect usage statistics.'\n    ),\n    marketing: gettext('These cookies are used to target advertising to a user.')\n  };\n\n  constructor(private options: OptionsService) {}\n\n  /**\n   * Returns Cookie preferences configuration.\n   * @returns {object} Return an object with cookie preferences configuration defined in application options.\n   */\n  getCookiePreferencesConfig(): CookiePreferences {\n    return this.options.get(this.COOKIE_PREFERENCES_CONFIG);\n  }\n\n  /**\n   * Returns Cookie banner configuration.\n   * @returns {object} Return an object with cookie banner configuration defined in application options.\n   */\n  getCookieBannerSettings(): Partial<CookieBannerSettings> {\n    let cookieSettings: Partial<CookieBannerSettings>;\n    if (this.isPreviewMode()) {\n      cookieSettings = this.options.get(this.PREVIEW_COOKIE_BANNER);\n      if (cookieSettings) {\n        return cookieSettings;\n      }\n    }\n    cookieSettings = this.options.get(this.COOKIE_BANNER) || {};\n    return cookieSettings;\n  }\n\n  /**\n   * Converts the cookie preferences to boolean. Sets the cookie preferences configuration in local storage.\n   * @param {object} cookiePreferences Object with cookie preferences configuration\n   */\n  setCookies(cookiePreferences: CookiePreferences, policyVersion?: string): void {\n    const cookiesToSet = { ...cookiePreferences };\n    Object.entries(cookiesToSet).forEach(([cookieName, cookieValue]) => {\n      cookiesToSet[cookieName] = typeof cookieValue === 'string' ? true : cookieValue;\n    });\n    if (policyVersion) {\n      cookiesToSet.policyVersion = policyVersion;\n    }\n    localStorage.setItem(this.STORAGE_KEY, JSON.stringify(cookiesToSet));\n  }\n\n  /**\n   * Verifies that cookie banner should be shown.\n   * @returns {boolean} Returns if the cookie banner should be shown.\n   */\n  shouldShowCookieBanner(): boolean {\n    const settings = this.getCookieBannerSettings();\n\n    // always show cookie banner in preview mode except when cookie banner is disabled\n    if (this.isPreviewMode()) {\n      return !(settings && settings.cookieBannerDisabled);\n    }\n\n    // no cookie banner text or cookie banner is disabled\n    if (settings.cookieBannerDisabled || !settings.cookieBannerText) {\n      return false;\n    }\n\n    const userCookiePreferences = this.getUserCookiePreferences();\n\n    // no cookies accepted\n    if (!userCookiePreferences) {\n      return true;\n    }\n\n    // policy version changed\n    if (settings.policyVersion && userCookiePreferences.policyVersion !== settings.policyVersion) {\n      return true;\n    }\n\n    // cookies have been accepted in the current policy version.\n    return false;\n  }\n\n  /**\n   * Gets the cookie preferences configuration from local storage.\n   * @returns {object} Object with cookie preferences configuration.\n   */\n  getUserCookiePreferences(): CookiePreferences {\n    return JSON.parse(localStorage.getItem(this.STORAGE_KEY));\n  }\n\n  /**\n   * Verifies that cookie preferences configuration is defined in the application options.\n   * @returns {boolean} Returns if the cookie preferences configuration is defined.\n   */\n  isConfigCookiePreferencesDefined(): boolean {\n    return !!this.getCookiePreferencesConfig();\n  }\n\n  /**\n   * Verifies that functional cookies are enabled.\n   * @returns {boolean} True when functional cookies are enabled.\n   */\n  isFunctionalCookieEnabled(): boolean {\n    const { functional }: CookiePreferences = this.getUserCookiePreferences() || {};\n    return functional === true;\n  }\n\n  /**\n   * Description of cookies.\n   * @param {'required' | 'functional' | 'marketing'} cookieType Takes one of the following options: 'required', 'functional', 'marketing'.\n   * @returns {string} The default cookie description, if not explicitly defined in application options.\n   */\n  getCookieDescription(cookieType: 'required' | 'functional' | 'marketing'): string {\n    const cookieBannerConfigSettings = this.getCookiePreferencesConfig();\n    const cookieBannerSettingValue = cookieBannerConfigSettings[cookieType];\n    return typeof cookieBannerSettingValue === 'string'\n      ? cookieBannerSettingValue\n      : this.cookieDescriptions[cookieType];\n  }\n\n  /**\n   * Transforms cookie preferences configuration object to an array of cookie preferences objects. Each object in returned array contains cookie 'name', 'value' and 'isReadonly' property.\n   * @param {object} cookiePreferences.\n   * @returns {Array} Array shows if the cookie is Readonly.\n   */\n  transformCookiePreferencesToList(cookiePreferences: CookiePreferences): Cookie[] {\n    return Object.entries(cookiePreferences).map(([name, value]) => {\n      const isReadonly = name === 'required';\n      return { name, value, isReadonly };\n    });\n  }\n\n  /**\n   * Transforms an array of cookie preferences objects to cookie preferences configuration object.\n   * @param {Array} cookiePreferencesList Array of cookie preferences.\n   * @returns {object} An object with cookie preferences configuration.\n   */\n  transformCookiePreferencesListToCookiePreferences(\n    cookiePreferencesList: Cookie[]\n  ): CookiePreferences {\n    return cookiePreferencesList.reduce((cookiePref: CookiePreferences, cookie: Cookie) => {\n      const key: string = cookie.name;\n      cookiePref[key] = cookie.value;\n      return cookiePref;\n    }, {});\n  }\n\n  private isPreviewMode(): boolean {\n    // params from url are automatically resolved during bootstrap as string options, see: packages/cli/src/app-bootstrap/options.ts\n    return this.options.get(this.IS_PREVIEW, false, true);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ICurrentTenant, ICustomProperties, IIdentified, IUser } from '@c8y/client';\nimport { TranslateService, TranslateStore } from '@ngx-translate/core';\nimport { camelCase, flatMap } from 'lodash-es';\nimport { BehaviorSubject, Subject, combineLatest, fromEvent } from 'rxjs';\nimport { delay, filter, map, take } from 'rxjs/operators';\nimport { CookieBannerService } from '../bootstrap/cookie-banner/cookie-banner.service';\nimport { OptionsService } from '../common/options.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { UserPreferencesService } from '../common/user-preferences/user-preferences.service';\nimport { PxEventData } from './product-experience.model';\n\ninterface UserRole {\n  id: string;\n  name: string;\n}\n\n/**\n * @property user The user which is given to Gainsight.\n * @property tenant The tenant which is given to Gainsight.\n * @property instanceId Extracted domain part of an URL.\n * @property versionUI The UI version used.\n * @property versionBE The BE version used.\n */\ninterface IdentifyData {\n  user: IUser;\n  currentTenant: ICurrentTenant;\n  instanceId: string;\n  versionUI?: string;\n  versionBE?: string;\n}\n\n/**\n * A service to manage the Gainsight integration. It allows to load the\n * tag and\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class GainsightService {\n  /**\n   * A subject that emits the tag function as soon as a new tag is set.\n   */\n  tagFunction$ = new BehaviorSubject(null);\n  trackingLoaded$: Subject<boolean> = new Subject();\n\n  /**\n   * Gainsight is activated only when the cookie banner is present. If functional cookies are enabled, both personally identifiable information (PII) and required data are sent.\n   * Otherwise, only the required data is transmitted during the identity step execution.\n   */\n  readonly USER_PREFERENCES_GAINSIGHT_KEY = 'gainsightEnabled';\n  /**\n   * The name of the key remained unchanged, but applies to all engagements.\n   */\n  readonly USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY = 'gainsightBotEnabled';\n  readonly HIDE_GAINSIGHT_BOT_STYLE_ID = 'hide-gs-bot';\n  private readonly GAINSIGHT_URL = 'web-sdk.aptrinsic.com/api/aptrinsic.js?a=';\n  private readonly GAINSIGHT_GLOBAL_SCOPE = 'aptrinsic';\n  private readonly SCRIPT_EXECUTION_WAIT_TIME = 500;\n  private readonly OPTIONS_KEY_CATEGORY = 'gainsight';\n  private readonly OPTIONS_KEY_NAME = 'api.key';\n  private isScriptLoaded = false;\n  private gainsightKey: string;\n  private cachedRevertedTranslations: { [key: string]: string };\n  private cachedLanguage: string;\n\n  constructor(\n    private appState: AppStateService,\n    private options: OptionsService,\n    private cookieBannerService: CookieBannerService,\n    private userPreferencesService: UserPreferencesService,\n    private translateService: TranslateService,\n    private translateStore: TranslateStore\n  ) {}\n\n  /**\n   * Checks if the specified Gainsight preference is disabled in user preferences.\n   * @param preferenceName - Name of the Gainsight preference.\n   * @returns A promise that resolves to `true` if the preference is disabled, otherwise `false`.\n   */\n  async isGainsightPreferenceDisabledInUserPreferences(preferenceName: string): Promise<boolean> {\n    const userGainsightPref = await this.userPreferencesService.get(preferenceName).toPromise();\n\n    return userGainsightPref === false;\n  }\n\n  /**\n   * Sets the state of the functional cookie.\n   * @param value - A boolean value to indicate whether the functional cookie should be enabled (`true`) or disabled (`false`).\n   */\n  setFunctionalCookie(value: boolean) {\n    const cookies = this.cookieBannerService.getUserCookiePreferences();\n    if (cookies) {\n      Object.keys(cookies).forEach(cookieName => {\n        if (cookieName === 'functional') {\n          cookies[cookieName] = value;\n          return;\n        }\n      });\n      localStorage.setItem('acceptCookieNotice', JSON.stringify(cookies));\n    }\n  }\n\n  async getGainsightKey() {\n    this.gainsightKey =\n      this.options.gainsightKey ||\n      (await this.options.getSystemOption(this.OPTIONS_KEY_CATEGORY, this.OPTIONS_KEY_NAME));\n    return this.gainsightKey;\n  }\n\n  /**\n   * Returns the tag global function which can be used to identify user\n   * or add special events.\n   */\n  get tagFunction() {\n    return (window as any)[this.GAINSIGHT_GLOBAL_SCOPE];\n  }\n\n  /**\n   * Load the script tag and calls the identify function to start the tracking.\n   * @param currentTenant The current tenant.\n   * @param sendPiiData Flag for sending personally identifiable information (PII) during identification in Gainsight.\n   */\n  async loadTag(currentTenant: ICurrentTenant, sendPiiData: boolean) {\n    const scriptTag = document.createElement('script');\n    const key = await this.getGainsightKey();\n\n    if (key && !this.isScriptLoaded) {\n      this.loadScriptTag(scriptTag, key);\n\n      const currentUserStream = this.appState.currentUser;\n      const scriptLoadStream = fromEvent(scriptTag, 'load');\n      const versionStream = this.appState.state$.pipe(\n        filter(({ versions }) => versions.backend),\n        map(({ versions }) => versions),\n        take(1)\n      );\n\n      const sourceStreams = sendPiiData\n        ? [currentUserStream, scriptLoadStream, versionStream]\n        : [currentUserStream, scriptLoadStream];\n\n      combineLatest(sourceStreams)\n        .pipe(\n          delay(this.SCRIPT_EXECUTION_WAIT_TIME),\n          filter(([user, scriptEvent]) => !!(scriptEvent && user))\n        )\n        .subscribe(args => {\n          const [user, , versions] = args;\n          this.setGlobalContext();\n\n          const instanceId = this.getInstanceIdFromUrl();\n          if (sendPiiData) {\n            const versionUI: string = versions.ui.ngx;\n            const versionBE: string = versions.backend;\n            const extendedIdentifyData: IdentifyData = {\n              user,\n              currentTenant,\n              instanceId,\n              versionUI,\n              versionBE\n            };\n            this.identify(sendPiiData, extendedIdentifyData);\n          } else {\n            const requiredIdentifyData: IdentifyData = { user, currentTenant, instanceId };\n            this.identify(sendPiiData, requiredIdentifyData);\n          }\n          this.isScriptLoaded = true;\n          this.tagFunction$.next(this.tagFunction);\n          this.trackingLoaded$.next(true);\n        });\n    }\n  }\n\n  /**\n   * Identifies the user/account at Gainsight.\n   * @param sendPiiData Flag for sending personally identifiable information.\n   * @param identifyData Object containing identification data.\n   */\n  identify(sendPiiData: boolean, identifyData: IdentifyData) {\n    const windowRef = window as any;\n    const { id: userId, email, userName, firstName, lastName, roles } = identifyData.user;\n    const { name: tenantID, customProperties, domainName } = identifyData.currentTenant;\n    const { instanceId, versionUI, versionBE } = identifyData;\n\n    /**\n     * Passing ID is a minimum required data to make an identify call to Gainsight.\n     * isUserCreatedAfterAnonymizationWasActivated parameter is passed to later distinguish between users created before and after data anonymization done by Gainsight.\n     * tenantID Used to distinguish between tenants when same email is used for different tenants.\n     *\n     * Due to GS limitations (GS does not allow clearing user attr/preferences via the GS tag!),\n     * we always need to initialize fields related to PII to prevent leaking this data to GS when the user has disabled functional cookies.\n     */\n    const baseIdentify = {\n      /**\n       * Email was not mandatory form field until 10.14\n       */\n      id: email ? email : `${userId}_${tenantID}_${instanceId}`,\n      isUserCreatedAfterAnonymizationWasActivated: true,\n      tenantID,\n      domainName,\n      versionUI,\n      versionBE,\n      userLanguage: this.translateService.currentLang,\n      browserLanguage: this.translateService.getBrowserLang(),\n      instanceId,\n      externalReference: customProperties?.externalReference,\n      userRoles: this.transformUserRolesToStr(roles?.references),\n      customBranding: this.isCustomBranding(),\n      fullTracking: sendPiiData\n    };\n\n    const identifyPayload = sendPiiData\n      ? { ...baseIdentify, email, userName, firstName, lastName }\n      : { ...baseIdentify, email: '--', userName: '--', firstName: '--', lastName: '--' };\n\n    windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', identifyPayload, {\n      id: `${tenantID}_${instanceId}`,\n      instanceId\n    });\n  }\n\n  /**\n   * Triggers an event to be recorded by Gainsight PX.\n   * This method calls the Gainsight PX's tracking mechanism to log a specific event\n   * along with its associated properties.\n   * @param eventName - Name of the event to be triggered.\n   * @param props - Optional properties associated with the event.\n   */\n  triggerEvent(eventName: string, props?: PxEventData) {\n    if (this.tagFunction && eventName) {\n      eventName = this.prepareEventName(eventName);\n      this.tagFunction('track', eventName, props);\n    }\n  }\n\n  translateToEnglish(textToTranslate: string): string {\n    const { currentLang } = this.translateService;\n\n    if (currentLang === 'en') {\n      return textToTranslate;\n    }\n\n    if (currentLang && currentLang !== this.cachedLanguage) {\n      this.cachedRevertedTranslations = undefined;\n    }\n\n    if (!this.cachedRevertedTranslations) {\n      this.cachedLanguage = currentLang;\n      this.cachedRevertedTranslations = this.getRevertedTranslations(currentLang);\n    }\n\n    return this.getEnTranslation(textToTranslate, this.cachedRevertedTranslations);\n  }\n\n  /**\n   * Determines whether personally identifiable information (PII) should be sent while loading a tag.\n   * The decision to activate Gainsight and send PII relies on whether the cookiePreferences option is defined in the application settings,\n   * if the functional cookie is enabled, and if the user grants permission.\n   */\n  async shouldSendPiiData(): Promise<boolean> {\n    return (\n      this.cookieBannerService.isConfigCookiePreferencesDefined() &&\n      this.cookieBannerService.isFunctionalCookieEnabled() &&\n      !(await this.isGainsightPreferenceDisabledInUserPreferences(\n        this.USER_PREFERENCES_GAINSIGHT_KEY\n      ))\n    );\n  }\n\n  /**\n   * Updates a specific user attribute in the Gainsight global scope.\n   * This method interfaces with the Gainsight global object to set a user's specific attribute with a provided value.\n   * @param name - Name of the user attribute to be updated.\n   * @param value - Value to set for the specified user attribute.\n   */\n  updateUserAttribute(name: string, value: string | Date | number | boolean): void {\n    window[this.GAINSIGHT_GLOBAL_SCOPE]?.('set', 'user', { [name]: value });\n  }\n\n  /**\n   * Determines if the current user has the capability to modify Gainsight PX settings.\n   *\n   * This method checks multiple conditions:\n   * 1. Whether tracking has been disabled globally via application options.\n   * 2. Whether Gainsight is disabled at the tenant level through custom properties.\n   * 3. Whether a Gainsight key is available, either currently loaded or fetched asynchronously.\n   * 4. Whether cookie preferences are defined and available for the user.\n   *\n   * @returns Promise that resolves to a boolean. True indicates the user can edit product experience settings, and false otherwise.\n   */\n  async canEditProductExperienceSettings(): Promise<boolean> {\n    const currentTenant = this.appState.currentTenant.value;\n    const { customProperties } = currentTenant;\n    if (\n      this.isTrackingDisabled() ||\n      this.isGainsightDisabledAtTenantCustomProperties(customProperties)\n    ) {\n      return false;\n    }\n    const gainsightKey = !!this.gainsightKey || !!(await this.getGainsightKey());\n    return (\n      gainsightKey &&\n      this.cookieBannerService.isConfigCookiePreferencesDefined() &&\n      !!this.cookieBannerService.getUserCookiePreferences()\n    );\n  }\n\n  async hashGroupName(groupName: string) {\n    if (!groupName) {\n      return;\n    }\n    // Convert the group name to an ArrayBuffer\n    const encoder = new TextEncoder();\n    const data = encoder.encode(groupName);\n\n    // Use the SHA-256 algorithm to hash the data\n    const hashBuffer = await crypto.subtle.digest('SHA-256', data);\n\n    // Convert the hash to a hexadecimal string\n    const hashArray = Array.from(new Uint8Array(hashBuffer));\n    const hashedName = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');\n\n    return hashedName;\n  }\n\n  /**\n   * Sets the global context for Gainsight with the current application name.\n   * The global context can be utilized by Gainsight for various purposes, such as segmenting users.\n   */\n  setGlobalContext(): void {\n    const currentAppState = this.appState.state$.value;\n    const currentAppName = currentAppState.app.name;\n\n    window[this.GAINSIGHT_GLOBAL_SCOPE]?.('set', 'globalContext', { projectName: currentAppName });\n  }\n\n  transformUserRolesToStr(userRoles?: IIdentified[]): string {\n    if (!userRoles) {\n      return '';\n    }\n\n    return flatMap(userRoles, (userRole: { role: UserRole }) => userRole.role.name).join();\n  }\n\n  /**\n   * Checks if Gainsight is disabled based on tenant custom properties.\n   *\n   * @param customProperties - The custom properties of the tenant.\n   * @returns {boolean} - True if Gainsight is disabled, false otherwise.\n   */\n  isGainsightDisabledAtTenantCustomProperties(customProperties: ICustomProperties) {\n    const gainsightEnabled = customProperties && customProperties.gainsightEnabled;\n    return gainsightEnabled === false;\n  }\n\n  /**\n   * Determines if custom branding is enabled based on the presence of a brand logo.\n   *\n   * @returns {boolean} - True if custom branding is applied, false otherwise.\n   */\n  isCustomBranding(): boolean {\n    const brandingCssVars = this.options.get('brandingCssVars') || {};\n    return !!brandingCssVars['brand-logo-img'];\n  }\n\n  /**\n   * Determines if tracking is disabled based on the application options.\n   * @returns `true` if tracking is disabled, otherwise `false`.\n   */\n  isTrackingDisabled() {\n    return this.options.disableTracking === true;\n  }\n\n  private prepareEventName(baseEventName: string): string {\n    return baseEventName\n      .split(':')\n      .map(eventNamePart => camelCase(removeTranslationContext(eventNamePart)))\n      .join(':');\n\n    function removeTranslationContext(eventNamePart: string): string {\n      return eventNamePart.replace(/`[\\w\\W]*`/g, '');\n    }\n  }\n\n  private loadScriptTag(scriptTag: HTMLScriptElement, key: string) {\n    try {\n      const windowRef = window as any;\n      const firstTag = document.getElementsByTagName('script')[0];\n      const protocol = location.protocol;\n      const gainsightGlobalScope = this.GAINSIGHT_GLOBAL_SCOPE;\n      scriptTag.src = `${protocol}//${this.GAINSIGHT_URL}${key}`;\n      (windowRef[this.GAINSIGHT_GLOBAL_SCOPE] =\n        windowRef[this.GAINSIGHT_GLOBAL_SCOPE] ||\n        // tslint:disable-next-line:only-arrow-functions\n        function (...args) {\n          (windowRef[gainsightGlobalScope].q = windowRef[gainsightGlobalScope].q || []).push(args);\n        }),\n        (windowRef[gainsightGlobalScope].p = key);\n      scriptTag.async = true;\n      firstTag.parentNode.insertBefore(scriptTag, firstTag);\n    } catch (ex) {\n      console.warn('Failed to load Gainsight PX', ex);\n    }\n  }\n\n  private getInstanceIdFromUrl() {\n    const hostName = location.hostname;\n    return hostName.substring(hostName.indexOf('.') + 1);\n  }\n\n  /**\n   * Reverses the translation object.\n   *\n   * **Example**\n   * { Add widget: \"Widget hinzufügen\" }\n   *\n   * will be changed to:\n   *\n   * { Widget hinzufügen: \"Add widget\" }\n   *\n   * @param currentLang Language whose translated values are to be placed in the object key.\n   * @returns Returns an inverted object where the keys have been swapped with the values.\n   */\n  private getRevertedTranslations(currentLang: string): { [key: string]: string } {\n    const translations = this.translateStore.getTranslations(currentLang);\n\n    if (!translations) {\n      return {};\n    }\n    const swappedKeysWithValues = {};\n    Object.keys(translations).forEach(key => {\n      const translationValue = translations[key];\n      if (typeof translationValue === 'string') {\n        swappedKeysWithValues[translationValue] = key;\n      }\n    });\n    return swappedKeysWithValues;\n  }\n\n  /**Translates string back into English.\n   * If the current application language is set to English, the string passed as an argument is returned.\n   * @param textToTranslate string to translate.\n   * @returns Returns the string translated into English.\n   */\n  private getEnTranslation(\n    textToTranslate: string,\n    translations: { [key: string]: string }\n  ): string {\n    let enTranslation = translations[textToTranslate];\n    if (!enTranslation) {\n      return textToTranslate;\n    }\n    /** remove translation context */\n    const regex = /\\`(.*?)\\`/;\n    enTranslation = enTranslation.replace(regex, '');\n\n    return enTranslation;\n  }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Marks a component that can emit product experience events.\n */\nexport interface ProductExperienceEventSource {\n  productExperienceEvent: ProductExperienceEvent;\n}\n\n/**\n * Defines the payload for a product experience event.\n */\nexport interface ProductExperienceEvent {\n  /**\n   * Name of the event.\n   */\n  eventName: string;\n  /**\n   * Any other data that will be sent as payload.\n   */\n  data?: PxEventData;\n}\n\n/**\n * Suggets some common product experience event properties.\n */\nexport interface PxEventData {\n  /**\n   * Description or an identifier of user interaction.\n   */\n  action?: string;\n  /**\n   * Component that triggered the event.\n   */\n  component?: string;\n  /**\n   * The URL that the action was triggered at.\n   */\n  url?: string;\n  /**\n   * The result from the user action, e.g. when 'Cancel'\n   * when a user has cancelled a confirmation prompt.\n   */\n  result?: string;\n\n  [key: string]: any;\n}\n\n/**\n * Use this token for components that can provide product experience events.\n */\nexport const PRODUCT_EXPERIENCE_EVENT_SOURCE = new InjectionToken('ProductExperienceEventSource');\n","import { Directive, HostListener, Inject, Input, Optional, Self, SkipSelf } from '@angular/core';\nimport { GainsightService } from './gainsight.service';\nimport {\n  ProductExperienceEventSource,\n  PRODUCT_EXPERIENCE_EVENT_SOURCE,\n  PxEventData\n} from './product-experience.model';\n\n@Directive({\n  selector: '[c8yProductExperience]',\n  standalone: true\n})\nexport class ProductExperienceDirective {\n  /**\n   * A value that will be used as a custom event name.\n   */\n  @Input() actionName: string;\n  /**\n   * Data that will be used as event properties.\n   */\n  @Input() actionData: object;\n  /**\n   * If set to <code>true</code>, <code>actionName</code> and <code>actionData</code> will be\n   * inherited from the parent component if it has the <code>c8yProductExperience</code> applied to it.\n   * With <code>inherit</code> set to <code>true</code> the local <code>actionName</code> value is\n   * ignored and overriden by the parent component's <code>actionName</code>. This allows for easy\n   * re-use of core components (e.g. <code>&lt;c8y-li-action&gt;</code>) that would use the inherited\n   * action name rather than their generic action name. Own <code>actionData</code> properties with\n   * the same name take precedence to those inheritted from the parent component.\n   */\n  @Input('inherit') set _inherit(inherit) {\n    // allows to use the <input c8yProductExperience inherit [actionData]=\"{...}\"> syntax\n    this.inherit = inherit === '' || (inherit ?? true);\n  }\n  /**\n   * If set to <code>true</code> own <code>actionData</code> properties would not override\n   * <code>actionData</code> properties of the parent component. Instead, values will be\n   * inherited from the parent component. It is only effective if <code>inherit</code>\n   * is set to <code>true</code>.\n   */\n  @Input('suppressDataOverriding') set _suppressDataOverriding(suppressDataOverriding) {\n    // allows to use the <input c8yProductExperience suppressDataOverriding [actionData]=\"{...}\"> syntax\n    this.suppressDataOverriding = suppressDataOverriding === '' || (suppressDataOverriding ?? true);\n  }\n  private inherit: boolean;\n  private suppressDataOverriding: boolean;\n\n  constructor(\n    @Self()\n    @Optional()\n    @Inject(PRODUCT_EXPERIENCE_EVENT_SOURCE)\n    private component: ProductExperienceEventSource,\n    @SkipSelf()\n    @Optional()\n    @Inject(PRODUCT_EXPERIENCE_EVENT_SOURCE)\n    private parentEventSource: ProductExperienceEventSource,\n    private gainsightService: GainsightService\n  ) {}\n\n  @HostListener('click')\n  onClick() {\n    if (!this.component) {\n      const { actionName, actionData } = this.getAction(this.suppressDataOverriding);\n\n      if (actionName) {\n        this.gainsightService.triggerEvent(actionName, actionData);\n      }\n    }\n  }\n\n  ngOnInit(): void {\n    if (this.component) {\n      const { actionName, actionData } = this.getAction();\n      this.component.productExperienceEvent = {\n        eventName: actionName,\n        data: this.mergeData(\n          actionData,\n          this.component?.productExperienceEvent?.data,\n          this.suppressDataOverriding\n        )\n      };\n    }\n  }\n\n  private getAction(reverse = false): { actionName: string; actionData: PxEventData } {\n    let { actionName, actionData } = this;\n\n    if (this.inherit && this.parentEventSource?.productExperienceEvent) {\n      const { productExperienceEvent } = this.parentEventSource;\n      actionName = productExperienceEvent.eventName;\n      actionData = this.mergeData(productExperienceEvent.data, this.actionData, reverse);\n    }\n\n    return { actionName, actionData };\n  }\n\n  private mergeData(dataA: PxEventData, dataB: PxEventData, reverse = false): PxEventData {\n    return reverse ? { ...dataB, ...dataA } : { ...dataA, ...dataB };\n  }\n}\n","import { Inject, Injectable, DOCUMENT as Document } from '@angular/core';\nimport { BehaviorSubject, Observable, combineLatest, from, of } from 'rxjs';\nimport { UserPreferencesService } from '../common/user-preferences/user-preferences.service';\nimport { GainsightService } from './gainsight.service';\nimport { switchMap, take, tap } from 'rxjs/operators';\n\n@Injectable({ providedIn: 'root' })\nexport class UserEngagementsService {\n  readonly USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY = 'gainsightBotEnabled';\n  readonly userEngagementsEnabled$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n  readonly HIDE_GAINSIGHT_BOT_STYLE_ID = 'hide-gs-bot';\n  private readonly ENGAGEMENTS = 'engagements';\n\n  constructor(\n    @Inject(Document) private document: Document,\n    private userPreferencesService: UserPreferencesService,\n    private gainsightService: GainsightService\n  ) {\n    this.handleUserEngagements();\n  }\n\n  /**\n   * Handles user engagement settings based on various conditions.\n   *\n   * - Waits for the Gainsight tracking to be loaded.\n   * - Retrieves the engagement settings.\n   * - Updates the engagement settings based on the combined observations.\n   * - Finally, toggles the Gainsight engagements based on the latest `userEngagementsEnabled$` value.\n   */\n  handleUserEngagements() {\n    this.gainsightService.trackingLoaded$\n      .pipe(\n        take(1),\n        switchMap(() => this.getEngagementSettingsObservable()),\n        tap((settings: [boolean, boolean, boolean]) =>\n          this.updateUserEngagementSettings(...settings)\n        ),\n        switchMap(() => this.userEngagementsEnabled$.pipe(take(1)))\n      )\n      .subscribe(isEnabled => this.toggleGainsightEngagements(isEnabled));\n  }\n\n  /**\n   * Updates the user's preference for Gainsight Engagements.\n   * @param {boolean} isEnabled - The new value for the user's engagement preference.\n   */\n  updateUserEngagementPreference(isEnabled: boolean) {\n    this.userEngagementsEnabled$.next(isEnabled);\n    this.userPreferencesService.set(\n      this.gainsightService.USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY,\n      this.userEngagementsEnabled$.value\n    );\n  }\n\n  /**\n   * Toggles the visibility of Gainsight Engagements based on the provided flag.\n   *\n   * @param isEnabled - A flag indicating whether Gainsight Engagements should be visible.\n   */\n  toggleGainsightEngagements(isEnabled: boolean): void {\n    isEnabled ? this.showGainsightEngagements() : this.hideGainsightEngagements();\n  }\n\n  /**\n   * Constructs an observable that emits an array of boolean values representing\n   * the current engagement settings. The observable combines the latest values from:\n   *\n   * 1. User's preferences for Gainsight engagements.\n   * 2. A flag indicating if PII data should be sent.\n   * 3. A flag indicating if the platform uses custom branding.\n   *\n   * @returns An observable emitting an array of boolean values.\n   */\n  private getEngagementSettingsObservable(): Observable<boolean[]> {\n    return combineLatest([\n      this.userPreferencesService.observe<boolean>(this.USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY),\n      from(this.gainsightService.shouldSendPiiData()),\n      of(this.gainsightService.isCustomBranding())\n    ]);\n  }\n\n  /**\n   * Updates user engagement settings based on provided preferences and settings.\n   *\n   * Based on the received values, the method decides to:\n   * 1. Disable user engagements if PII data should not be shared or certain branding/settings conditions are met.\n   * 2. Update the user engagement preference if the user engagement bot setting is undefined.\n   *\n   * @param userEngagementBotSetting - The user's setting for the engagement bot.\n   * @param shouldSendPiiData - Indicates whether PII data should be shared.\n   * @param hasCustomBranding - Indicates if custom branding is applied.\n   */\n  private updateUserEngagementSettings(\n    userEngagementBotSetting: boolean | undefined,\n    shouldSendPiiData: boolean,\n    hasCustomBranding: boolean\n  ): void {\n    if (this.shouldDisableUserEngagementsDueToPIIData(shouldSendPiiData)) {\n      this.userEngagementsEnabled$.next(false);\n    } else if (this.isUserEngagementBotSettingUndefined(userEngagementBotSetting)) {\n      /**\n       * Case where the user is new (freshly created) and has not changed the user engagement settings in the user edit modal (untouched state).\n       * When custom branding is not set, we will set the user engagements in the user preferences to true by default.\n       */\n      this.updateUserEngagementPreference(!hasCustomBranding);\n    } else {\n      this.userEngagementsEnabled$.next(userEngagementBotSetting);\n    }\n  }\n\n  /**\n   * Determines whether user engagements should be disabled due to PII data settings.\n   *\n   * If the `shouldSendPiiData` parameter is false, this indicates that the user engagements\n   * should be disabled to prevent sharing personally identifiable information.\n   *\n   * @param {boolean} shouldSendPiiData - Indicates whether PII data is allowed to be sent.\n   * @returns {boolean} Returns true if user engagements should be disabled, otherwise false.\n   */\n  private shouldDisableUserEngagementsDueToPIIData(shouldSendPiiData: boolean): boolean {\n    return !shouldSendPiiData;\n  }\n\n  /**\n   * Determines if the user engagement bot setting is undefined.\n   *\n   * @param {boolean | undefined} userEngagementBotSetting - The setting value to check.\n   * @returns {boolean} Returns `true` if the setting is undefined; otherwise, `false`.\n   *\n   * This scenario occurs when a user is new and hasn't modified the bot settings in the user details UI yet.\n   */\n  private isUserEngagementBotSettingUndefined(\n    userEngagementBotSetting: boolean | undefined\n  ): boolean {\n    return userEngagementBotSetting === undefined;\n  }\n  /**\n   * Enables the visibility of Gainsight engagements.\n   *\n   * This method removes the CSS styles that hide the Gainsight engagements\n   * and updates the relevant user attribute to mark the engagements as visible.\n   */\n  private showGainsightEngagements(): void {\n    this.removeHidingStyle(this.HIDE_GAINSIGHT_BOT_STYLE_ID);\n    this.gainsightService.updateUserAttribute(this.ENGAGEMENTS, true);\n  }\n\n  /**\n   * Hides the Gainsight engagements.\n   *\n   * This method applies CSS styles to hide the Gainsight engagements\n   * and updates the relevant user attribute to mark the engagements as hidden.\n   */\n  private hideGainsightEngagements(): void {\n    this.addHidingStyle(this.HIDE_GAINSIGHT_BOT_STYLE_ID, '#apt-widget { display:none }');\n    this.gainsightService.updateUserAttribute(this.ENGAGEMENTS, false);\n  }\n\n  /**\n   * Removes the specified CSS style from the document.\n   *\n   * @param {string} styleId - The ID of the CSS style element to remove.\n   */\n  private removeHidingStyle(styleId: string): void {\n    const style = this.document.getElementById(styleId);\n    style?.remove();\n  }\n\n  /**\n   * Adds a new CSS style to the document.\n   *\n   * If the style with the specified ID already exists, the method will do nothing.\n   * Otherwise, it creates a new `<style>` element with the given ID and content,\n   * then appends it to the document head.\n   *\n   * @param {string} styleId - The ID to assign to the new style element.\n   * @param {string} textContent - The CSS rules to be included in the style.\n   */\n  private addHidingStyle(styleId: string, textContent: string): void {\n    if (this.document.getElementById(styleId)) {\n      return;\n    }\n    const style = this.document.createElement('style');\n    style.id = styleId;\n    style.textContent = textContent;\n    this.document.head.appendChild(style);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { ICurrentTenant } from '@c8y/client';\nimport { combineLatest } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { CookieBannerService } from '../bootstrap/cookie-banner/cookie-banner.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { GainsightService } from './gainsight.service';\nimport { ProductExperienceDirective } from './product-experience.directive';\nimport { UserEngagementsService } from './user-engagements.service';\n/**\n * This module enables an tenant to activate the product experience\n * software [Gainsight](https://www.gainsight.com/product-experience/) to help\n * and track user actions.\n */\n@NgModule({\n  imports: [ProductExperienceDirective],\n  exports: [ProductExperienceDirective],\n  providers: [GainsightService, UserEngagementsService]\n})\nexport class ProductExperienceModule {\n  constructor(\n    private appState: AppStateService,\n    private gainsightService: GainsightService,\n    private cookieBannerService: CookieBannerService,\n    // Don't remove it, otherwise UserEngagementsService won't be initialized.\n    private userEngagementsService: UserEngagementsService\n  ) {\n    /**\n     * Check if the Gainsight tracking is disabled in the application apptions. If so, exit early without processing further.\n     */\n    if (this.gainsightService.isTrackingDisabled()) {\n      return;\n    }\n    this.toggleUserTrackingObservable();\n  }\n\n  /**\n   * Observes several factors to determine the state of user tracking and manages the visibility of Gainsight engagements.\n   * It watches for changes in the current tenant, the state of the cookie banner, and user's preferences for Gainsight engagements.\n   *\n   * 1. If the cookie banner is being displayed, it returns without making any changes.\n   * 2. If Gainsight is disabled at the tenant level via custom properties, it returns without making any changes.\n   * 3. If the conditions are met for loading the Gainsight tag, it loads the tag.\n   */\n  toggleUserTrackingObservable() {\n    combineLatest([\n      this.appState.currentTenant.pipe(filter<ICurrentTenant>(Boolean)),\n      this.cookieBannerService.isCookieBannerShowed$\n    ]).subscribe(async ([currentTenant, isCookieBannerShowed]) => {\n      if (isCookieBannerShowed) {\n        return;\n      }\n      const { customProperties } = currentTenant;\n\n      if (this.gainsightService.isGainsightDisabledAtTenantCustomProperties(customProperties)) {\n        return;\n      }\n\n      if (this.shouldLoadTag()) {\n        await this.gainsightService.loadTag(\n          currentTenant,\n          await this.gainsightService.shouldSendPiiData()\n        );\n      }\n    });\n  }\n\n  /**\n   * Determines if a tracking tag should be loaded based on cookie preferences.\n   * @returns `true` if user cookie preferences exist, otherwise `false`.\n   */\n  shouldLoadTag(): boolean {\n    return !!this.cookieBannerService.getUserCookiePreferences();\n  }\n}\n","import { EventEmitter, inject } from '@angular/core';\nimport { BehaviorSubject, filter, Subscription, tap } from 'rxjs';\nimport { CountdownIntervalComponent } from '../countdown-interval';\nimport { GainsightService } from '../product-experience';\n\nconst PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD = {\n  EVENTS: {\n    INTERVAL_BASED_RELOAD: 'intervalBasedReload'\n  },\n  COMPONENTS: {\n    ALARM_WIDGET_ALARM_RELOAD: 'alarm-widget-alarms-reload',\n    DATAPOINTS_RELOAD: 'datapoints-reload'\n  },\n  ACTIONS: {\n    MANUALLY_CHANGED_COUNTDOWN_STATE: 'manuallyChangedCountdownState'\n  },\n  RESULT: {\n    MANUALLY_PAUSED_COUNTDOWN: 'manuallyPausedCountdown',\n    MANUALLY_RESUMED_COUNTDOWN: 'manuallyResumedCountdown'\n  }\n} as const;\n\nexport const WIDGET_TYPE_VALUES = {\n  ALARMS: 'alarms',\n  DATA_POINTS_TABLE: 'dataPointsTable',\n  ASSET_TABLE: 'assetTable'\n} as const;\n\ntype WidgetType = (typeof WIDGET_TYPE_VALUES)[keyof typeof WIDGET_TYPE_VALUES];\n\n/**\n * Abstract class representing an interval reload functionality.\n * This class provides methods and properties for managing an interval-based reload mechanism.\n */\nexport abstract class IntervalBasedReload {\n  protected gainsightService = inject(GainsightService);\n\n  abstract countdownIntervalComponent: CountdownIntervalComponent;\n  /**\n   * Holds the subscription to a countdown observable.\n   */\n  protected countdownSubscription: Subscription;\n  /**\n   * Indicates whether auto-refresh is enabled for the datapoints reload component that is set in widget config.\n   */\n  isAutoRefreshEnabled: boolean;\n  /**\n   * Indicates whether refreshing should be enabled or disabled.\n   * It's 'true' when user is not allowed to view a measurement.\n   */\n  abstract isRefreshDisabled: boolean;\n  /**\n   * Current isLoading state. Based on it next countdown cycle is being started.\n   */\n  abstract isLoading: BehaviorSubject<boolean>;\n  /**\n   * Indicates whether the alarm list is being scrolled or not.\n   */\n  abstract isScrolling: boolean;\n  /**\n   * Current refresh interval set in a widget config.\n   */\n  abstract refreshInterval: number;\n  /**\n   * Indicates that a countdown cycle has ended.\n   */\n  abstract onCountdownEnded: EventEmitter<void>;\n  /**\n   * Indicates the current state of an interval refresh toggle button.\n   */\n  abstract isIntervalRefreshToggleOn: boolean;\n\n  abstract toggleCountdownButtonTooltipText: string;\n  /**\n   * Indicates whether the countdown has been manually disabled by the user.\n   */\n  protected abstract manuallyDisabledCountdown: boolean;\n  /**\n   * Controls the visibility of the countdown timer component in the current component's UI.\n   */\n  protected abstract hideCountdown: boolean;\n\n  /**\n   * Stops the countdown and triggers a refresh action.\n   * This function is responsible for halting the countdown interval component's operation.\n   * After stopping the countdown, it emits an `onCountdownEnded` event.\n   * This event is used to inform external components that the countdown has ended,\n   * typically prompting them to reload or refresh their data.\n   */\n  autoRefreshList(): void {\n    if (this.isIntervalRefreshToggleOn && this.isAutoRefreshEnabled) {\n      this.countdownIntervalComponent.stop();\n    }\n    this.onCountdownEnded.emit();\n  }\n\n  /**\n   * Manages the countdown timer's visibility and state in response to user scrolling.\n   *\n   * This method toggles the countdown timer based on the user's scrolling behavior. It uses\n   * the `disableCountdown` and `enableCountdown` methods for handling the countdown state.\n   *\n   * - If the user is scrolling down while the countdown is visible (`isScrolling` is true and\n   *   `hideCountdown` is false), `disableCountdown` is called to stop and hide the countdown,\n   *   and `isIntervalRefreshToggleOn` is set to false.\n   *\n   * - If the user has stopped scrolling, the countdown subscription is closed, and the countdown\n   *   is hidden (`!isScrolling`, `countdownSubscription?.closed`, `hideCountdown`), `enableCountdown`\n   *   is called to show and restart the countdown, and `isIntervalRefreshToggleOn` is set to true.\n   */\n  handleScrolling(): void {\n    // Checks if the user has scrolled down while the countdown is visible\n    const onUserScrollDownHide = this.isScrolling && !this.hideCountdown;\n\n    if (onUserScrollDownHide) {\n      this.disableCountdown();\n      this.isIntervalRefreshToggleOn = false;\n      return;\n    }\n\n    // Checks if the user has stopped scrolling and the countdown is currently hidden\n    const onUserScrollTopShow =\n      !this.isScrolling && this.countdownSubscription?.closed && this.hideCountdown;\n\n    if (onUserScrollTopShow) {\n      this.isIntervalRefreshToggleOn = true;\n      this.enableCountdown();\n    }\n  }\n\n  abstract reload(): void;\n  /**\n   * Wrapper method where it's name better describes a context where it was called.\n   */\n  abstract countdownEnded(): void;\n\n  /**\n   * Handles the toggle state of the countdown on button click.\n   *\n   * This method is triggered by a mouse event, typically a click on the countdown toggle button.\n   * It toggles `isIntervalRefreshToggleOn` to reflect the current state of the countdown timer.\n   *\n   * - If `isIntervalRefreshToggleOn` is set to false, indicating that the countdown should be stopped,\n   *   `disableCountdown` is called, and `manuallyDisabledCountdown` is set to true.\n   *\n   * - If `isIntervalRefreshToggleOn` is true and the countdown subscription is closed, indicating that\n   *   the countdown can be started, `enableCountdown` is called, and `manuallyDisabledCountdown`\n   *   is set to false.\n   *\n   * @param $event - The MouseEvent that triggered this method.\n   * @param widgetType - The type of the widget that triggered the event\n   */\n  onToggleCountdownButtonState($event: MouseEvent, widgetType: WidgetType): void {\n    $event.preventDefault();\n    this.isIntervalRefreshToggleOn = !this.isRefreshDisabled && !this.isIntervalRefreshToggleOn;\n    this.updateCountdownButtonTooltipText();\n\n    if (!this.isIntervalRefreshToggleOn) {\n      this.disableCountdown();\n      this.manuallyDisabledCountdown = true;\n\n      this.triggerGainsightEvent(\n        widgetType,\n        PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.ACTIONS.MANUALLY_CHANGED_COUNTDOWN_STATE,\n        PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.RESULT.MANUALLY_PAUSED_COUNTDOWN\n      );\n      return;\n    }\n\n    const onRefreshToggleOn = this.isIntervalRefreshToggleOn && this.countdownSubscription.closed;\n\n    if (onRefreshToggleOn) {\n      this.enableCountdown();\n      this.manuallyDisabledCountdown = false;\n\n      this.triggerGainsightEvent(\n        widgetType,\n        PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.ACTIONS.MANUALLY_CHANGED_COUNTDOWN_STATE,\n        PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.RESULT.MANUALLY_RESUMED_COUNTDOWN\n      );\n    }\n  }\n\n  /**\n   * This function listens for changes in the `isLoading` observable, filtering out any truthy values.\n   * Once a falsy value is detected (indicating that loading has finished), it attempts to start the countdown.\n   *\n   * IMPORTANT: If the widget's configuration (refreshInterval, check template) is not set prior to executing countdownIntervalComponent?.start,\n   * the countdown interval will not start!\n   *\n   * @param injector - The injector used to provide necessary dependencies\n   *                   within the `runInInjectionContext`.\n   */\n  startCountdown(): void {\n    this.countdownSubscription = this.isLoading\n      .pipe(\n        filter(isLoading => !Boolean(isLoading)),\n        tap(() => {\n          this.countdownIntervalComponent?.start();\n        })\n      )\n      .subscribe();\n  }\n\n  /**\n   * Enables and starts the countdown timer.\n   *\n   * This method makes the countdown visible (`hideCountdown` is set to false) and then\n   * starts the countdown process. It ensures the countdown timer is updated immediately\n   * by triggering change detection with `cdRef.detectChanges()` before starting the countdown.\n   * This method encapsulates the logic required to initiate the countdown timer.\n   */\n  abstract enableCountdown(): void;\n\n  /**\n   * Disables and hides the countdown timer.\n   *\n   * This method stops the ongoing countdown process by\n   * stopping the `countdownIntervalComponent` if it exists. It then hides the countdown timer\n   * by setting `hideCountdown` to true. This method encapsulates the logic required to halt and\n   * conceal the countdown timer.\n   */\n  disableCountdown(): void {\n    this.countdownSubscription.unsubscribe();\n    this.countdownIntervalComponent?.stop();\n    this.hideCountdown = true;\n  }\n\n  /**\n   * Updates the countdown button tooltip text based on the state of the interval refresh toggle state.\n   */\n  protected abstract updateCountdownButtonTooltipText(): void;\n\n  private triggerGainsightEvent(widgetType: WidgetType, action: string, result: string): void {\n    if (widgetType) {\n      this.gainsightService.triggerEvent(\n        PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.EVENTS.INTERVAL_BASED_RELOAD,\n        {\n          action,\n          result,\n          component: this.determineComponentName(widgetType),\n          widget: widgetType\n        }\n      );\n    }\n  }\n\n  private determineComponentName(widgetType: WidgetType): string {\n    switch (widgetType) {\n      case WIDGET_TYPE_VALUES.ALARMS:\n        return PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.COMPONENTS.ALARM_WIDGET_ALARM_RELOAD;\n      case WIDGET_TYPE_VALUES.DATA_POINTS_TABLE:\n        return PRODUCT_EXPERIENCE_INTERVAL_BASED_RELOAD.COMPONENTS.DATAPOINTS_RELOAD;\n      default:\n        return '';\n    }\n  }\n}\n","import { TemplateRef } from '@angular/core';\nimport { DynamicBulkRetrievalError } from './dynamic-bulk-retrieval-error.model';\nimport { Alert, AlertType } from '../alert';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n/**\n * An alert that is shown in the context of a dynamic component (e.g. a widget).\n */\nexport class DynamicComponentAlert<T = any> implements Alert {\n  text: string | TemplateRef<any>;\n  type: AlertType;\n  detailedData: any;\n  timeout: number;\n  allowHtml: boolean;\n  onDetail: () => void;\n  onClose: () => void;\n  /**\n   * Partial data that resolver couldn't provide, for example object with event id, but without it's' details.\n   */\n  unresolvedData: Partial<T>;\n  retrievalError?: DynamicBulkRetrievalError;\n  /**\n   * Optional dismiss strategy for this alert. When set, the aggregator will use this strategy\n   * for the alert's type group when adding this alert.\n   */\n  dismissStrategy?: DismissAlertStrategy;\n\n  constructor(alert: Alert & Partial<DynamicComponentAlert<T>>) {\n    Object.assign(this, alert);\n  }\n}\n\nexport enum DismissAlertStrategy {\n  /**\n   * Alerts are shown and user is not able to dismiss alerts.\n   */\n  NONE = 'none',\n  /**\n   * User is able to dismiss alerts. It's still possible to add new alerts which will be displayed.\n   */\n  TEMPORARY = 'temporary',\n  /**\n   * User is able to dismiss alerts. If alerts group dismissStrategy property is set to TEMPORARY_OR_PERMANENT,\n   * its 'userDismissalChoice' property can be set to REMIND_ALLOWED (to allow adding alerts to group later)\n   * or REMIND_DISALLOWED (to prevent adding alerts to group).\n   */\n  TEMPORARY_OR_PERMANENT = 'temporary_or_permanent'\n}\n\n/**\n * Alerts data for one specific alert type.\n */\nexport interface AlertGroupData {\n  alerts: DynamicComponentAlert[];\n  alertDismissal: AlertDismissalData;\n}\n\ntype AlertDismissalData =\n  | { dismissStrategy: DismissAlertStrategy.NONE; userDismissalChoice?: never }\n  | {\n      dismissStrategy: DismissAlertStrategy.TEMPORARY;\n      userDismissalChoice?: 'REMIND_ALLOWED';\n    }\n  | {\n      dismissStrategy: DismissAlertStrategy.TEMPORARY_OR_PERMANENT;\n      userDismissalChoice?: 'REMIND_ALLOWED' | 'REMIND_DISALLOWED';\n    };\n\nconst serverError = gettext('Internal server error`50X server error`');\n\nexport const ResolverServerError = {\n  403: gettext('Forbidden`403 server error`'),\n  404: gettext('Not found`404 server error`'),\n  500: serverError,\n  503: serverError\n};\n","import { inject, Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n  DismissAlertStrategy,\n  DynamicComponentAlert,\n  ResolverServerError\n} from '../dynamic-component/dynamic-component-alert.model';\nimport { DynamicBulkRetrievalError } from '../dynamic-component/dynamic-bulk-retrieval-error.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable({ providedIn: 'root' })\nexport class DatapointSyncService {\n  private readonly translateService = inject(TranslateService);\n\n  getManagedObjectIds(datapoints: any[]): string[] {\n    const templateIds = datapoints.filter(dp => !!dp.__template).map(dp => `${dp.__template}`);\n    const targetIds = datapoints.filter(dp => !!dp.__target?.id).map(dp => `${dp.__target?.id}`);\n    return [...templateIds, ...targetIds];\n  }\n\n  assignUpdatedValues(\n    oldDatapoints: any[],\n    currentManagedObjects: IManagedObject[],\n    errors: DynamicBulkRetrievalError[]\n  ): Array<any | DynamicComponentAlert> {\n    return oldDatapoints.map(dp =>\n      this.assignUpdatedValuesToSingleDatapoint(dp, currentManagedObjects, errors)\n    );\n  }\n\n  private assignUpdatedValuesToSingleDatapoint(\n    datapoint: any,\n    currentManagedObjects: IManagedObject[],\n    errors: DynamicBulkRetrievalError[]\n  ): any | DynamicComponentAlert {\n    if (datapoint.__template) {\n      const foundUpdatedDp = currentManagedObjects.find(\n        mo => mo.id === datapoint.__template || mo.id === `${datapoint.__template}`\n      );\n      if (!foundUpdatedDp) {\n        return datapoint;\n      }\n      const updatedDatapoint = Object.assign({}, foundUpdatedDp.c8y_Kpi, {\n        __template: foundUpdatedDp.id\n      });\n      /* Exclude fragment and series from being assigned as in some scenarios it was overwriting values in the datapoint with the ones from the template\n        which caused issues when the template had different fragment/series than the datapoint\n      */\n      const { fragment: _fragment, series: _series, ...rest } = updatedDatapoint;\n      Object.assign(datapoint, rest);\n    }\n\n    if (datapoint.__target?.id) {\n      const foundUpdatedTarget = currentManagedObjects.find(\n        mo => mo.id === datapoint.__target?.id || mo.id === `${datapoint.__target?.id}`\n      );\n      if (foundUpdatedTarget) {\n        Object.assign(datapoint.__target, foundUpdatedTarget);\n      } else {\n        const error = errors.find(({ id }) => id === datapoint.__target.id);\n        if (error) {\n          return this.buildRetrievalAlert(datapoint, error);\n        }\n      }\n    }\n    return datapoint;\n  }\n\n  private buildRetrievalAlert(\n    entity: any,\n    error: DynamicBulkRetrievalError\n  ): DynamicComponentAlert {\n    const errorTitle = ResolverServerError[error.status]\n      ? this.translateService.instant(ResolverServerError[error.status])\n      : error.statusText;\n    const errorDetailsTemplate = gettext(\n      `Unable to retrieve the following managed object for data point \"{{datapointLabel}}\": \"{{deviceName}}\" ({{deviceId}}).`\n    );\n    const errorDetails = this.translateService.instant(errorDetailsTemplate, {\n      datapointLabel: entity.label,\n      deviceName: entity.__target.name,\n      deviceId: entity.__target.id\n    });\n    const text = `\n          <strong>${error.status}: ${errorTitle}</strong>\n          <p>${errorDetails}</p>\n      `;\n    const alert = new DynamicComponentAlert({\n      text,\n      allowHtml: true,\n      type: 'danger',\n      unresolvedData: entity.__target,\n      dismissStrategy: DismissAlertStrategy.TEMPORARY\n    });\n    alert.retrievalError = error;\n    return alert;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { DynamicBulkRetrievalError } from '../dynamic-component/dynamic-bulk-retrieval-error.model';\nimport { pick } from 'lodash-es';\n\n@Injectable({ providedIn: 'root' })\nexport class MOChunkLoaderService {\n  constructor(protected inventory: InventoryService) {}\n\n  async processInChunks<T>(\n    ids: string[],\n    chunkSize: number,\n    loadChunkFn: (ids: string[]) => Promise<{ managedObjects: T[]; errors: any[] }>\n  ): Promise<{ results: T[]; errors: any[] }> {\n    if (!ids.length) {\n      return { results: [], errors: [] };\n    }\n\n    const promiseArray: Array<Promise<{ managedObjects: T[]; errors: any[] }>> = [];\n\n    const idsCopy = [...ids];\n    while (idsCopy.length) {\n      const batch = idsCopy.splice(0, chunkSize);\n      promiseArray.push(loadChunkFn(batch));\n    }\n\n    const chunkResults = await Promise.all(promiseArray);\n\n    const results = chunkResults.flatMap(r => r.managedObjects);\n    const errors = chunkResults.flatMap(r => r.errors);\n\n    return { results, errors };\n  }\n\n  async loadAChunkOfManagedObjectsBase(\n    uniqIds: string[],\n    inventory: InventoryService,\n    pageSize: number,\n    getStatusDetails: (id: string) => Promise<DynamicBulkRetrievalError>,\n    queryFilter?: object\n  ): Promise<{ managedObjects: IManagedObject[]; errors: DynamicBulkRetrievalError[] }> {\n    const { data: managedObjects } = await inventory.list(\n      Object.assign({}, queryFilter || {}, {\n        ids: uniqIds.join(),\n        pageSize\n      })\n    );\n\n    const notFoundMOs = uniqIds.filter(id => !managedObjects.find(tmp => tmp.id === id));\n    if (notFoundMOs.length) {\n      const promArray = notFoundMOs.map(id => getStatusDetails(id));\n      const res = await Promise.all(promArray);\n      return { managedObjects, errors: res };\n    }\n\n    return { managedObjects, errors: [] };\n  }\n\n  async getStatusDetails(moId: string) {\n    try {\n      const res = await this.inventory.detail(moId);\n      return { id: moId, ...pick(res.res, ['status', 'statusText']) };\n    } catch (e) {\n      return { id: moId, ...pick(e.res, ['status', 'statusText']) };\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IApplication, ICurrentTenant } from '@c8y/client';\nimport { get, orderBy } from 'lodash-es';\nimport { combineLatest, Observable } from 'rxjs';\nimport { map, shareReplay, take } from 'rxjs/operators';\nimport { AppStateService } from '../common';\n\n@Injectable({ providedIn: 'root' })\nexport class AppSwitcherService {\n  /**\n   * Apps of the currently logged in user.\n   */\n  appsOfCurrentUser$: Observable<Array<IApplication>>;\n  /**\n   * Available cloud apps of the currently logged in user to be displayed in app switcher.\n   */\n  oneCloudApps$: Observable<Array<IApplication>>;\n  /**\n   * Available none cloud apps of the currently logged in user to be displayed in app switcher.\n   */\n  apps$: Observable<Array<IApplication>>;\n  finishedLoading$: Observable<boolean>;\n\n  protected readonly visibleApplicationTypes = ['HOSTED', 'EXTERNAL'];\n\n  constructor(protected ui: AppStateService) {\n    const { currentTenant } = this.ui;\n    this.appsOfCurrentUser$ = this.ui.currentAppsOfUser.pipe(\n      map(apps => this.filterVisible(apps)),\n      shareReplay(1)\n    );\n    this.oneCloudApps$ = this.appsOfCurrentUser$.pipe(\n      map(apps => apps.filter(app => this.isCloudApp(app))),\n      map(cloudApps => this.orderApps(cloudApps)),\n      shareReplay(1)\n    );\n    const nonCloudApps$ = this.appsOfCurrentUser$.pipe(\n      map(apps => apps.filter(app => !this.isCloudApp(app)))\n    );\n    this.apps$ = combineLatest([nonCloudApps$, currentTenant]).pipe(\n      map(([apps, tenant]) => this.filterDuplicates(apps, tenant)),\n      map(apps => this.orderApps(apps)),\n      shareReplay(1)\n    );\n\n    this.finishedLoading$ = combineLatest([this.apps$, this.oneCloudApps$]).pipe(\n      map(() => true),\n      take(1),\n      shareReplay(1)\n    );\n  }\n\n  protected filterVisible(apps: IApplication[]): IApplication[] {\n    return apps.filter(\n      app =>\n        this.visibleApplicationTypes.includes(app.type) &&\n        !app.noAppSwitcher &&\n        !this.isPackage(app) &&\n        !get(app, 'manifest.noAppSwitcher')\n    );\n  }\n\n  protected isPackage(app: IApplication): boolean {\n    return !!app.manifest?.isPackage;\n  }\n\n  protected isCloudApp(app: IApplication): boolean {\n    return !!app.cloud;\n  }\n\n  protected filterDuplicates(apps: IApplication[], tenant: ICurrentTenant): IApplication[] {\n    // Filter out apps that have duplicate contextpaths and are not own owned by the current tenant;\n    const filterFn = app =>\n      !apps.some(\n        otherApp =>\n          app !== otherApp &&\n          app.contextPath &&\n          app.contextPath === otherApp.contextPath &&\n          app.owner.tenant.id !== tenant.name\n      );\n    return apps.filter(filterFn);\n  }\n\n  protected orderApps(apps: IApplication[]): IApplication[] {\n    return orderBy(apps, ({ name }) => name.toLowerCase());\n  }\n}\n","import { Component, Input, OnInit, OnChanges } from '@angular/core';\nimport { find, keys, get, isEmpty } from 'lodash-es';\nimport { OptionsService } from '../common/options.service';\nimport { IApplication } from '@c8y/client';\nimport { IconDirective } from '../common';\nimport { NgClass, NgIf, NgStyle } from '@angular/common';\n\n@Component({\n  selector: 'c8y-app-icon',\n  templateUrl: './app-icon.component.html',\n  host: { class: 'c8y-app-icon' },\n  standalone: true,\n  imports: [IconDirective, NgStyle, NgIf, NgClass]\n})\nexport class AppIconComponent implements OnInit, OnChanges {\n  /** Application context path. */\n  @Input() contextPath: string;\n  /** Application name. */\n  @Input() name = '';\n  /** Application managed object. */\n  @Input() app: IApplication;\n\n  model = this.emptyModel();\n\n  private c8yAppIconsList = {\n    analyticsbuilder: 'analytics-builder',\n    'analytics-builder': 'analytics-builder',\n    cockpit: 'cockpit',\n    devicemanagement: 'device-management',\n    administration: 'administration',\n    apamaepl: 'apama-epl'\n  } as const;\n\n  private white = false;\n\n  private defaultIconStyle = {\n    'background-repeat': 'no-repeat',\n    'background-size': 'contain',\n    'background-position': 'center',\n    'aspect-ratio': '1'\n  };\n\n  private faIconMatch = /fa-/;\n  private c8yMatch = /^c8y-/;\n  private dltC8yMatch = /^dlt-c8y-/;\n\n  constructor(private options: OptionsService) {}\n\n  ngOnInit() {\n    this.loadSetup();\n  }\n\n  ngOnChanges(): void {\n    this.loadSetup();\n  }\n\n  private emptyModel() {\n    return {\n      appIcon: '',\n      configIcon: '',\n      showIcon: true,\n      iconClass: ['c8y-icon'],\n      appNameAbbr: '',\n      iconStyle: {}\n    };\n  }\n\n  private isC8y(icon) {\n    return this.c8yMatch.test(icon);\n  }\n\n  private isFaIcon(icon) {\n    return this.faIconMatch.test(icon);\n  }\n\n  private isDltC8y(icon) {\n    return this.dltC8yMatch.test(icon);\n  }\n\n  private loadSetup() {\n    this.model = this.emptyModel();\n    this.model.configIcon = this.getPropertyFromAppOrOptions(['config', 'icon']);\n    if (!this.model.configIcon) {\n      this.model.appIcon = this.iconFromAppDefinition();\n      const iconUrl = this.iconUrlFromAppDefinition();\n      if (iconUrl) {\n        this.model.iconStyle = Object.assign(\n          { 'background-image': iconUrl },\n          this.defaultIconStyle\n        );\n      } else if (!this.model.appIcon) {\n        // only set static icon if no icon is set in the app definition\n        this.model.appIcon = this.findStaticIcon();\n      }\n    }\n    this.model.showIcon =\n      !!this.model.appIcon || !isEmpty(this.model.iconStyle) || !!this.model.configIcon;\n    this.model.iconClass = [\n      'c8y-icon',\n      this.mapFontAwesomeToDelightIcons(this.model.appIcon),\n      this.white ? 'c8y-icon-white' : 'c8y-icon-duocolor',\n      !isEmpty(this.model.iconStyle) ? 'app-img-icon' : ''\n    ].filter(c => !!c);\n    const name = this.name || this.app?.name || '';\n    this.model.appNameAbbr = name.substring(0, 2);\n  }\n\n  private iconFromAppDefinition() {\n    return (\n      this.getPropertyFromAppOrOptions(['icon', 'class']) ||\n      this.getPropertyFromAppOrOptions(['manifest', 'icon', 'class'])\n    );\n  }\n\n  private iconUrlFromAppDefinition() {\n    return this.getPropertyFromAppOrOptions(['icon', 'url']);\n  }\n\n  private getPropertyFromAppOrOptions(path: string[]) {\n    const app = this.app || this.options;\n    return get(app, ['manifest', ...path]) || get(app, path);\n  }\n\n  private findStaticIcon() {\n    const contextPath = this.contextPath || this.name || this.app?.contextPath || this.app?.name;\n    if (!contextPath) {\n      return undefined;\n    }\n    const appContextPathNormalized = find(keys(this.c8yAppIconsList), cp => {\n      return contextPath.indexOf(cp) > -1;\n    });\n    const appIcon: string = this.c8yAppIconsList[appContextPathNormalized];\n    return appIcon ? (`c8y-icon-${appIcon}` as const) : undefined;\n  }\n\n  private mapFontAwesomeToDelightIcons(iconClasses: string) {\n    if (!iconClasses) {\n      return;\n    }\n    if (this.isFaIcon(iconClasses)) {\n      const regex = /fa-/gi;\n      return iconClasses.replace(regex, 'dlt-c8y-icon-');\n    }\n    return this.isC8y(iconClasses) || this.isDltC8y(iconClasses)\n      ? iconClasses\n      : `dlt-c8y-icon-${iconClasses}`;\n  }\n}\n","<ng-container *ngIf=\"model.showIcon; else noIcon\">\n  <i\n    [ngStyle]=\"model.iconStyle\"\n    *ngIf=\"!model.configIcon\"\n    [ngClass]=\"model.iconClass\"\n  ></i>\n  <i\n    [c8yIcon]=\"model.configIcon\"\n    *ngIf=\"model.configIcon\"\n  ></i>\n</ng-container>\n\n<ng-template #noIcon>\n  <span class=\"app-noicon\">{{ model.appNameAbbr }}</span>\n</ng-template>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ApplicationService, IApplication } from '@c8y/client';\n\n@Pipe({\n  name: 'appHref',\n  standalone: true\n})\nexport class AppHrefPipe implements PipeTransform {\n  private readonly dynamicOptionsUrlKey = 'dynamicOptionsUrl';\n  constructor(private applications: ApplicationService) {}\n\n  transform(app: IApplication, addDynamicOptionsUrlIfSet = false): string {\n    let href = this.applications.getHref(app);\n    if (!addDynamicOptionsUrlIfSet) {\n      return href;\n    }\n    const searchParams = new URLSearchParams(window.location.search);\n    const dynamicOptionsUrlValue = searchParams.get(this.dynamicOptionsUrlKey);\n    if (!dynamicOptionsUrlValue) {\n      return href;\n    }\n    if (!href.endsWith('/')) {\n      href += '/';\n    }\n    href += `index.html?${searchParams.toString()}`;\n    return href;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport { AppStateService } from '../common/ui-state.service';\nimport { Observable } from 'rxjs';\nimport { map, distinctUntilChanged } from 'rxjs/operators';\nimport { get } from 'lodash-es';\n\n@Pipe({\n  name: 'isActiveApp',\n  standalone: true\n})\nexport class IsActiveAppPipe implements PipeTransform {\n  constructor(private ui: AppStateService) {}\n\n  transform(app: IApplication): Observable<boolean> {\n    const { contextPath } = app;\n    return this.ui.state$.pipe(\n      map(state => get(state, 'app.contextPath')),\n      distinctUntilChanged(),\n      map(currentContextPath => contextPath === currentContextPath)\n    );\n  }\n}\n","import { Component } from '@angular/core';\nimport { AppSwitcherService } from './app-switcher.service';\nimport { NgIf, NgFor, NgClass, AsyncPipe } from '@angular/common';\nimport { LoadingComponent } from '../common/loading.component';\nimport { ProductExperienceDirective } from '../product-experience/product-experience.directive';\nimport { AppIconComponent } from './app-icon.component';\nimport { HumanizeAppNamePipe } from '../common/humanize-app-name.pipe';\nimport { AppHrefPipe } from './app-href.pipe';\nimport { IsActiveAppPipe } from './is-active-app.pipe';\n@Component({\n  selector: 'c8y-app-switcher-inline',\n  templateUrl: './app-switcher-inline.component.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    LoadingComponent,\n    NgFor,\n    ProductExperienceDirective,\n    AppIconComponent,\n    NgClass,\n    AsyncPipe,\n    HumanizeAppNamePipe,\n    AppHrefPipe,\n    IsActiveAppPipe\n  ]\n})\nexport class AppSwitcherInlineComponent {\n  constructor(public switcherService: AppSwitcherService) {}\n}\n","<div\n  class=\"d-flex a-i-center j-c-center p-4\"\n  *ngIf=\"!(switcherService.finishedLoading$ | async)\"\n>\n  <c8y-loading></c8y-loading>\n</div>\n<ng-container *ngIf=\"switcherService.oneCloudApps$ | async as oneCloudApps\">\n  <div\n    class=\"app-switcher-sagcloud\"\n    *ngIf=\"oneCloudApps.length > 0\"\n  >\n    <a\n      class=\"appLink\"\n      title=\"{{ app.name | humanizeAppName | async }}\"\n      *ngFor=\"let app of oneCloudApps\"\n      [href]=\"app | appHref\"\n      c8yProductExperience\n      [actionName]=\"'appSwitched'\"\n      [actionData]=\"{ applicationName: app && app.name }\"\n    >\n      <c8y-app-icon\n        [app]=\"app\"\n        [name]=\"app.name\"\n        [contextPath]=\"app.contextPath\"\n      ></c8y-app-icon>\n      <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n    </a>\n  </div>\n</ng-container>\n<div\n  class=\"app-switcher\"\n  *ngIf=\"switcherService.apps$ | async as apps\"\n>\n  <a\n    class=\"appLink\"\n    title=\"{{ app.name | humanizeAppName | async }}\"\n    [ngClass]=\"(app | isActiveApp | async) ? 'active' : ''\"\n    *ngFor=\"let app of apps\"\n    [href]=\"app | appHref : true\"\n    [rel]=\"app.type === 'EXTERNAL' ? 'noopener noreferrer' : ''\"\n    c8yProductExperience\n    [actionName]=\"'appSwitched'\"\n    [actionData]=\"{ applicationName: app && app.name }\"\n  >\n    <c8y-app-icon\n      [app]=\"app\"\n      [name]=\"app.name\"\n      [contextPath]=\"app.contextPath\"\n    ></c8y-app-icon>\n    <span class=\"text-truncate-wrap\">{{ app | humanizeAppName | async }}</span>\n  </a>\n</div>\n","import { Component } from '@angular/core';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { IconDirective } from '../common/icon.directive';\nimport { AppSwitcherInlineComponent } from './app-switcher-inline.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n@Component({\n  selector: 'c8y-app-switcher',\n  templateUrl: './app-switcher.component.html',\n  standalone: true,\n  imports: [\n    BsDropdownModule,\n    CdkTrapFocus,\n    IconDirective,\n    AppSwitcherInlineComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class AppSwitcherComponent {}\n","<div\n  class=\"app-switcher-dropdown dropdown\"\n  dropdown\n  #appSwitcherDropdown=\"bs-dropdown\"\n  [cdkTrapFocus]=\"appSwitcherDropdown.isOpen\"\n>\n  <button\n    class=\"main-header-button c8y-dropdown dropdown-toggle\"\n    title=\"{{ 'Application switcher' | translate }}\"\n    id=\"appSwitcherDropdown\"\n    type=\"button\"\n    dropdownToggle\n  >\n    <i\n      class=\"icon-2x\"\n      c8yIcon=\"th\"\n    ></i>\n  </button>\n  <div\n    class=\"app-switcher-dropdown-menu dropdown-menu\"\n    aria-labelledby=\"appSwitcherDropdown\"\n    role=\"group\"\n    *dropdownMenu\n  >\n    <c8y-app-switcher-inline></c8y-app-switcher-inline>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { AppHrefPipe } from './app-href.pipe';\nimport { AppIconComponent } from './app-icon.component';\nimport { AppSwitcherComponent } from './app-switcher.component';\nimport { IsActiveAppPipe } from './is-active-app.pipe';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { ProductExperienceModule } from '../product-experience/product-experience.module';\nimport { AppSwitcherInlineComponent } from './app-switcher-inline.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    BsDropdownModule,\n    A11yModule,\n    ProductExperienceModule,\n    AppIconComponent,\n    AppSwitcherComponent,\n    AppSwitcherInlineComponent,\n    AppHrefPipe,\n    IsActiveAppPipe\n  ],\n  exports: [AppIconComponent, AppSwitcherComponent, AppSwitcherInlineComponent]\n})\nexport class ApplicationModule {}\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { shareReplay, map, distinctUntilChanged } from 'rxjs/operators';\nimport {\n  ExtensionFactory,\n  fromTrigger,\n  GenericHookType,\n  hookGeneric,\n  getInjectedHooks,\n  sortByPriority,\n  stateToFactory,\n  ExtensionPointForPlugins,\n  GenericHookOptions\n} from '../common/extension-hooks';\nimport { ActionBarItem } from './action-bar.model';\nimport { groupBy } from 'lodash-es';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type ActionBarExtension = ActionBarItem | ActionBarItem[] | ExtensionFactory<ActionBarItem>;\n\n/**\n * A hook to add ActionBarItems using the multi provider extension concept.\n * Consider using the `hookActionBar` function instead.\n *\n * ```typescript\n * providers: [\n *   {\n *     provide: HOOK_ACTION_BAR,\n *     useValue: [{ template: SomeComponent, priority: 10, placement: 'left' } as ActionBarItem],\n *     multi: true\n *   }\n * ]\n * ```\n * @deprecated Consider using the `hookActionBar` function instead.\n */\nexport const HOOK_ACTION_BAR = new InjectionToken<ActionBarExtension>('HOOK_ACTION_BAR');\n\n/**\n * A hook to add ActionBarItems using the multi provider extension concept.\n *\n * You can either provide a single `ActionBarItem` as parameter:\n * ```typescript\n *  hookActionBar(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookActionBar([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<ActionBarItem>`\n * ```typescript\n *  export class MyActionBarFactory implements ExtensionFactory<ActionBarItem> {...}\n *  ...\n *  hookActionBar(MyActionBarFactory)\n * ```\n * A typed alternative to `HOOK_ACTION_BAR`.\n * @param items The `ActionBarItem`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookActionBar(\n  items: GenericHookType<ActionBarItem>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric(items, HOOK_ACTION_BAR, options);\n}\n\n/**\n * A service which defines action-bar items via the multi provider concept.\n *\n * ```typescript\n * // preferred way, multi provider concept:\n * providers: [\n *   {\n *     provide: HOOK_ACTION_BAR,\n *     useValue: [{ template: SomeComponent, priority: 10, placement: 'left' } as ActionBarItem],\n *     multi: true\n *   }\n * ]\n *\n * // use services:\n * this.actionBarService.add({ template: SomeComponent, priority: 10, placement: 'left' });\n * ```\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ActionBarService extends ExtensionPointForPlugins<ActionBarItem> {\n  /**\n   * @ignore\n   */\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  /**\n   * Returns the current state.\n   * @readonly\n   * @returns The current set of actions.\n   */\n  get state(): Set<ActionBarItem> {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new item to the action bar in the header and emits a state change.\n   * @param item The item to add.\n   */\n  add(item: ActionBarItem) {\n    this.state.add(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes an action bar item from the header and emits a state change.\n   * @param item The item to remove.\n   */\n  remove(item: ActionBarItem) {\n    this.state.delete(item);\n    this.emitNewState();\n  }\n\n  protected setupItemsObservable(): Observable<ActionBarItem[]> {\n    return fromTrigger<ActionBarItem>(this.router, this.refresh$, [\n      getInjectedHooks<ActionBarItem>(HOOK_ACTION_BAR, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      map((items: ActionBarItem[]) => {\n        const grouped: Record<string, ActionBarItem[]> = groupBy(items, 'groupId');\n        // groupBy stores undefined as a string key -> all undefined a ungrouped\n        const ungroupedItems = grouped.undefined || [];\n        const groupedItems = Object.keys(grouped)\n          .filter(key => key !== 'undefined')\n          .map(key => this.pickItemFromGroup(grouped[key]));\n        return [...ungroupedItems, ...groupedItems];\n      }),\n      map(items => sortByPriority(items)),\n      shareReplay(1),\n      distinctUntilChanged()\n    );\n  }\n\n  protected pickItemFromGroup(groupedItems: ActionBarItem[]): ActionBarItem {\n    const groupIsPrioritized = groupedItems.some(item => item.hasOwnProperty('inGroupPriority'));\n    if (!groupIsPrioritized) {\n      return groupedItems[0];\n    }\n    const itemWithHighestPriority = groupedItems.reduce((prev, current) => {\n      return prev.inGroupPriority > current.inGroupPriority ? prev : current;\n    });\n    return itemWithHighestPriority;\n  }\n}\n","import {\n  Component,\n  EnvironmentInjector,\n  Input,\n  TemplateRef,\n  Type,\n  ViewChild,\n  Injector\n} from '@angular/core';\nimport { ActionBarItem, ActionBarItemWithComponent } from './action-bar.model';\nimport { ActionBarService } from './action-bar.service';\n\n/**\n * A <c8y-action-bar-item> can be added with content projection.\n * It allows to show items in three positions (left, right\n * or more).\n *\n * ```html\n * <c8y-action-bar-item [placement]=\"'right'\">\n *   <button class=\"btn btn-link\" (click)=\"addRandom()\"><i c8yIcon=\"plus-circle\"></i> Add random</button>\n * </c8y-action-bar-item>\n * ```\n */\n@Component({\n  selector: 'c8y-action-bar-item',\n  templateUrl: './action-bar-item.component.html',\n  standalone: true,\n  imports: []\n})\nexport class ActionBarItemComponent implements ActionBarItemWithComponent {\n  /**\n   * Where the item should be shown. Use \"more\" to place\n   * it in a dropdown on the right.\n   */\n  @Input() placement: 'left' | 'right' | 'more' = 'left';\n\n  /**\n   * Priority for sorting the list. Higher priority means\n   * an earlier position in the list.\n   */\n  @Input() priority = 0;\n\n  /**\n   * Adds additional classes to the item.\n   */\n  @Input() itemClass = '';\n\n  /**\n   * Allows to define a different injector.\n   */\n  @Input() injector: Injector;\n\n  /**\n   * If a group id is set, the action bar with the same group id is only rendered once.\n   */\n  @Input() groupId;\n  /**\n   * If action bar items has the same groupId, only one is displayed.\n   * Action bar item with the same groupId that has highest inGroupPriority is displayed.\n   */\n  @Input() inGroupPriority;\n\n  /**\n   * @ignore\n   */\n  @ViewChild('template', { static: false }) component: Type<any> | TemplateRef<any>;\n\n  private viewInitTimeout;\n\n  /**\n   * @ignore\n   */\n  constructor(\n    private actionBarService: ActionBarService,\n    _injector: EnvironmentInjector\n  ) {\n    this.injector = _injector;\n  }\n\n  /**\n   * @ignore\n   */\n  ngAfterViewInit() {\n    this.viewInitTimeout = setTimeout(() => this.actionBarService.add(this as ActionBarItem));\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnDestroy() {\n    clearTimeout(this.viewInitTimeout);\n    this.actionBarService.remove(this as ActionBarItem);\n  }\n}\n","<ng-template #template>\n  <li class=\"{{ itemClass }}\">\n    <ng-content></ng-content>\n  </li>\n</ng-template>\n","export const PRODUCT_EXPERIENCE_CORE_SHARED = {\n  ACTION_BAR: {\n    EVENTS: { ACTION_BAR_ITEM: 'actionBarItem' },\n    COMPONENTS: { ACTION_BAR_COMPONENT: 'action-bar' },\n    ACTIONS: {},\n    RESULTS: {}\n  },\n  QUICK_LINKS: {\n    EVENTS: { QUICK_LINK_RIGHT_DRAWER: 'quickLinkRightDrawer' },\n    COMPONENTS: { RIGHT_DRAWER_COMPONENT: 'right-drawer' },\n    ACTIONS: {\n      ACTIVATE_SUPPORT_ACCESS: 'activateSupportAccess',\n      DEACTIVATE_SUPPORT_ACCESS: 'deactivateSupportAccess',\n      OPEN_SUPPORT_LINK: 'openSupportLink'\n    },\n    RESULTS: {}\n  }\n} as const;\n","import { PRODUCT_EXPERIENCE_CORE_SHARED } from '../shared/core.model';\nimport { Component, HostBinding, HostListener, Input, OnDestroy, OnInit } from '@angular/core';\nimport { filter, sortBy } from 'lodash-es';\nimport { Observable, Subject, of } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { GainsightService } from '../product-experience/gainsight.service';\nimport { ActionBarItem } from './action-bar.model';\nimport { AsyncPipe } from '@angular/common';\nimport { OutletDirective } from '../common/outlet.directive';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { ActionBarItemComponent } from './action-bar-item.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * This component is used as the outlet to show the action bars.\n * In a c8ycli app it is by default placed on the bootstrap component.\n */\n@Component({\n  selector: 'c8y-action-bar',\n  templateUrl: './action-bar.component.html',\n  host: { class: 'c8y-ui-action-bar' },\n  standalone: true,\n  imports: [\n    OutletDirective,\n    BsDropdownModule,\n    ActionBarItemComponent,\n    C8yTranslateDirective,\n    IconDirective,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class ActionBarComponent implements OnInit, OnDestroy {\n  /**\n   * Identifies if the navigator is opened. If yes, the action-bar\n   * needs to move to the right.\n   */\n  @Input() @HostBinding('class.navigator-open') navigatorOpen = false;\n\n  /**\n   * Identifies if the current view has tabs. If yes, the action bar needs\n   * to move down.\n   */\n  @Input() @HostBinding('class.has-tabs') hasTabs = false;\n\n  /**\n   * Identifies if the current view has a header element.\n   */\n  @Input() @HostBinding('class.has-header') hasHeader = false;\n\n  /**\n   * Identifies if the tabs are aligned horizontally. If yes, the tabs don't\n   * need to move to the left.\n   */\n  @Input() @HostBinding('class.horizontal-tabs') isTabsHorizontal = false;\n\n  /**\n   * Identifies if in a mobile view the toolbar is expanded or not.\n   */\n  isPageToolbarExpanded = false;\n\n  /**\n   * Adds the default `c8y-ui-action-bar` class.\n   */\n  @HostBinding('class.c8y-ui-action-bar') uiActionBar = true;\n\n  /**\n   * The current items to display in the ActionBar.\n   */\n  @Input() items$: Observable<ActionBarItem[]> = of([]);\n\n  /**\n   * Provides observable for right action items.\n   */\n  right$: Observable<ActionBarItem[]> = of([]);\n\n  /**\n   * Provides observable for left action items.\n   */\n  left$: Observable<ActionBarItem[]> = of([]);\n\n  /**\n   * Provides observable for more action items.\n   */\n  more$: Observable<ActionBarItem[]> = of([]);\n\n  /**\n   * Returns true if no items are present and hides the action bar.\n   */\n  hidden$: Observable<boolean> = of(true);\n\n  /**\n   * Binds hidden property to this component's native element\n   */\n  @HostBinding()\n  hidden = true;\n\n  private destroy$: Subject<void> = new Subject();\n\n  constructor(private gainsightService: GainsightService) {}\n\n  @HostListener('mousedown', ['$event.target'])\n  mouseDown(event: HTMLElement) {\n    if (event.getAttribute('id') === 'page-toolbar') {\n      return;\n    }\n    const element =\n      event.closest('[px-event]') || event.closest('[title]') || event.closest('[uib-tooltip]');\n    if (!element || element.getAttribute('disabled')) {\n      return;\n    }\n\n    const itemName =\n      element.getAttribute('px-event') ||\n      element.getAttribute('title') ||\n      element.getAttribute('uib-tooltip');\n    const translatedItemName = this.gainsightService.translateToEnglish(itemName);\n\n    this.gainsightService.triggerEvent(\n      PRODUCT_EXPERIENCE_CORE_SHARED.ACTION_BAR.EVENTS.ACTION_BAR_ITEM,\n      {\n        component: PRODUCT_EXPERIENCE_CORE_SHARED.ACTION_BAR.COMPONENTS.ACTION_BAR_COMPONENT,\n        action: `${translatedItemName}`,\n        url: location.href\n      }\n    );\n  }\n\n  ngOnInit() {\n    this.right$ = this.items$.pipe(\n      map(items => filter(items, { placement: 'right' })),\n      map(items => sortBy(items, this.byPriority))\n    );\n\n    this.left$ = this.items$.pipe(\n      map(items => filter(items, { placement: 'left' })),\n      map(items => sortBy(items, this.byPriority))\n    );\n\n    this.more$ = this.items$.pipe(\n      map(items => filter(items, { placement: 'more' })),\n      map(items => sortBy(items, this.byPriority))\n    );\n\n    this.hidden$ = this.items$.pipe(\n      map(items => {\n        return !(items && items.length);\n      })\n    );\n\n    this.hidden$.pipe(takeUntil(this.destroy$)).subscribe(hidden => {\n      this.hidden = hidden;\n    });\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  private byPriority(item) {\n    return -item.priority;\n  }\n}\n","<div\n  class=\"navbar-header\"\n  role=\"presentation\"\n>\n  <p class=\"text-label-small p-l-16 p-t-8 p-b-8 visible-xs\">\n    <span class=\"text-primary\">{{ 'Action bar' | translate }}</span>\n  </p>\n</div>\n\n<div\n  class=\"navbar-collapse\"\n  id=\"page-toolbar\"\n  role=\"complementary\"\n>\n  <ul class=\"nav navbar-nav navbar-left gap-sm-8 p-l-sm-16 p-l-lg-0\">\n    @for (item of left$ | async; track item) {\n      <ng-container\n        *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n      ></ng-container>\n    }\n  </ul>\n  <ul class=\"nav navbar-nav navbar-right gap-sm-8\">\n    @for (item of right$ | async; track item) {\n      <ng-container\n        *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n      ></ng-container>\n    }\n    @if ((more$ | async).length === 1) {\n      <li>\n        @for (item of more$ | async; track item) {\n          <ng-container\n            *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n          ></ng-container>\n        }\n      </li>\n    } @else {\n      @if ((more$ | async).length > 1) {\n        <li class=\"no-remove more-wrapper\">\n          <div\n            class=\"dropdown\"\n            dropdown\n          >\n            <c8y-action-bar-item [placement]=\"'right'\">\n              <button\n                class=\"dropdown-toggle c8y-dropdown d-flex\"\n                title=\"{{ 'More…' | translate }}\"\n                aria-haspopup=\"true\"\n                type=\"button\"\n                dropdownToggle\n                data-cy=\"action-bar--button-more\"\n              >\n                <span\n                  class=\"text-truncate\"\n                  translate\n                >\n                  More…\n                </span>\n                <i [c8yIcon]=\"'caret-down'\"></i>\n              </button>\n              <ul class=\"dropdown-menu visible-xs\">\n                @for (item of more$ | async; track item) {\n                  <ng-container\n                    *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n                  ></ng-container>\n                }\n              </ul>\n              <ul\n                class=\"dropdown-menu dropdown-menu-right hidden-xs\"\n                *dropdownMenu\n              >\n                @for (item of more$ | async; track item) {\n                  <ng-container\n                    *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n                  ></ng-container>\n                }\n              </ul>\n            </c8y-action-bar-item>\n          </div>\n        </li>\n      }\n    }\n  </ul>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CommonModule } from '../common/common.module';\nimport { ActionBarItemComponent } from './action-bar-item.component';\nimport { ActionBarComponent } from './action-bar.component';\n\n/**\n * An action bar can be added with content projection or multi provider\n * extension. It allows to show them in three positions (left, right\n * or more). The actions placed here are always local actions to the\n * current route like \"add device\" or \"lock dashboard\".\n *\n * ```html\n * <c8y-action-bar-item [placement]=\"'right'\">\n *   <button class=\"btn btn-link\" (click)=\"addRandom()\"><i c8yIcon=\"plus-circle\"></i> Add random</button>\n * </c8y-action-bar-item>\n * ```\n * @exports ActionBarComponent The outlet component\n * @exports ActionBarItemComponent The items to add with cp.\n */\n@NgModule({\n  imports: [\n    BsDropdownModule,\n    CommonModule,\n    CollapseModule,\n    RouterModule.forChild([]),\n    ActionBarItemComponent,\n    ActionBarComponent\n  ],\n  exports: [ActionBarComponent, ActionBarItemComponent]\n})\nexport class ActionBarModule {}\n","import { Injector, Injectable, InjectionToken } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { Action } from './action.model';\nimport {\n  fromTrigger,\n  stateToFactory,\n  ExtensionFactory,\n  hookGeneric,\n  GenericHookType,\n  getInjectedHooks,\n  ExtensionPointForPlugins,\n  GenericHookOptions\n} from '../common/extension-hooks';\nimport { distinctUntilChanged, shareReplay } from 'rxjs/operators';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type ActionExtension = Action | Action[] | ExtensionFactory<Action>;\n\n/**\n * A hook to add an action using the multi-provider extension concept.\n * @deprecated Consider using the `hookAction` function instead.\n */\nexport const HOOK_ACTION = new InjectionToken('HOOK_ACTION');\n\n/**\n * A hook to add an action using the multi-provider extension concept.\n *\n * You can either provide a single `Action` as parameter:\n * ```typescript\n *  hookAction(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookAction([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<Action>`\n * ```typescript\n *  export class MyActionFactory implements ExtensionFactory<Action> {...}\n *  ...\n *  hookAction(MyActionFactory)\n * ```\n * A typed alternative to `HOOK_ACTION`.\n * @param actions The `Action`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookAction(\n  actions: GenericHookType<Action>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<Action>(actions, HOOK_ACTION, options);\n}\n\n/**\n * A service which defines global actions.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ActionService extends ExtensionPointForPlugins<Action> {\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  /**\n   * Returns the current state.\n   * @readonly\n   * @returns The current set of actions.\n   */\n  get state(): Set<Action> {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new item to the actions in the header and emits a state change.\n   * @param item The item to add.\n   */\n  add(item: Action) {\n    this.state.add(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes an action from the header and emits a state change.\n   * @param item The item to remove.\n   */\n  remove(item: Action) {\n    this.state.delete(item);\n    this.emitNewState();\n  }\n\n  protected setupItemsObservable(): Observable<Action[]> {\n    return fromTrigger<Action>(this.router, this.refresh$, [\n      getInjectedHooks<Action>(HOOK_ACTION, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(distinctUntilChanged(), shareReplay(1));\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { sortBy } from 'lodash-es';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Action } from './action.model';\nimport { NgIf, NgFor, AsyncPipe } from '@angular/common';\nimport { C8yComponentOutlet } from '../common/component-outlet.directive';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { IconDirective } from '../common/icon.directive';\nimport { OutletDirective } from '../common/outlet.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * This component is used as the outlet to show the action list.\n * In a c8ycli app it is by default placed on the header component near app-switcher.\n */\n@Component({\n  selector: 'c8y-action-outlet',\n  templateUrl: './action-outlet.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [\n    NgIf,\n    NgFor,\n    C8yComponentOutlet,\n    BsDropdownModule,\n    IconDirective,\n    OutletDirective,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class ActionOutletComponent {\n  /**\n   * Identifies if in a mobile view the toolbar is expanded or not.\n   */\n  isPageToolbarExpanded = false;\n\n  /**\n   * The current items to display in the action dropdown.\n   */\n  @Input()\n  set items(value) {\n    this.items$.next(value);\n  }\n  get items() {\n    return this.items$.value;\n  }\n\n  private items$: BehaviorSubject<Action[]> = new BehaviorSubject([]);\n\n  /**\n   * Returns the items that are displayed in the \"add\"-dropdown ordered by priority.\n   */\n  templatesAndLabels$: Observable<Action[]> = this.items$.pipe(\n    map(items =>\n      sortBy(\n        items.filter(action => !action.component),\n        this.byPriority\n      )\n    )\n  );\n\n  /**\n   * Returns the items that are displayed at the top navigation.\n   */\n  components$: Observable<Action[]> = this.items$.pipe(\n    map(items =>\n      sortBy(\n        items.filter(action => action.component),\n        this.byPriority\n      )\n    )\n  );\n\n  /**\n   * Invokes action after an action is clicked.\n   */\n  invoke(action) {\n    if (action.action) {\n      action.action.call();\n    }\n  }\n\n  private byPriority(item) {\n    return -item.priority;\n  }\n}\n","<ng-container *ngIf=\"(components$ | async)?.length > 0\">\n  <div class=\"main-header-item\" *ngFor=\"let item of components$ | async\">\n    <ng-container *c8yComponentOutlet=\"item.component; environmentInjector: item.injector\"></ng-container>\n  </div>\n</ng-container>\n<ng-container>\n  <div class=\"main-header-item\" *ngIf=\"(templatesAndLabels$ | async)?.length > 0\">\n    <div class=\"dropdown\" dropdown>\n      <button\n        type=\"button\"\n        class=\"main-header-button dropdown-toggle c8y-dropdown\"\n        dropdownToggle\n        aria-haspopup=\"true\"\n        title=\"{{ 'Actions' | translate }}\"\n      >\n        <i [c8yIcon]=\"'plus-circle'\" class=\"icon-2x\"></i>\n      </button>\n\n      <ul class=\"dropdown-menu cog-dropdown\" *dropdownMenu>\n        <ng-container *ngFor=\"let item of templatesAndLabels$ | async\">\n          <ng-container *c8yOutlet=\"item.template; injector: item.injector\"></ng-container>\n          <li *ngIf=\"item.label\">\n            <button\n              title=\"{{ item.label | translate }}\"\n              type=\"button\"\n              [attr.disabled]=\"item.disabled ? 'disabled' : null\"\n              (click)=\"invoke(item)\"\n            >\n              <i *ngIf=\"item.icon\" [c8yIcon]=\"item.icon\"></i>\n              {{ item.label | translate }}\n            </button>\n          </li>\n        </ng-container>\n      </ul>\n    </div>\n  </div>\n</ng-container>\n","import { Component, EnvironmentInjector, Injector, Input, ViewChild } from '@angular/core';\nimport { Action, ActionWithTemplate } from './action.model';\nimport { ActionService } from './action.service';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * A <c8y-action> can be added with content projection.\n *\n * ```html\n * <c8y-action>\n *   <button class=\"btn\" (click)=\"myAction()\">My action</button>\n * </c8y-action>\n * ```\n */\n@Component({\n  selector: 'c8y-action',\n  templateUrl: './action.component.html',\n  standalone: true\n})\nexport class ActionComponent implements ActionWithTemplate {\n  /**\n   * Is this action disabled.\n   */\n  @Input() disabled = false;\n  /**\n   * The priority of this action (the higher the number, the higher the action will be displayed; optional)\n   */\n  @Input() priority = 0;\n  /**\n   * The icon to show on this action\n   */\n  @Input() icon: SupportedIconsSuggestions;\n\n  @ViewChild('template', { static: false }) template: any;\n\n  @Input() injector: Injector;\n\n  private viewInitTimeout;\n\n  constructor(\n    private actionService: ActionService,\n    _injector: EnvironmentInjector\n  ) {\n    this.injector = _injector;\n  }\n\n  /**\n   * After page view is initialized, component adds itself to global action list.\n   */\n  ngAfterViewInit() {\n    this.viewInitTimeout = setTimeout(() => this.actionService.add(this as Action));\n  }\n\n  /**\n   * Action is removed from global action list, if component is not used anymore.\n   */\n  ngOnDestroy() {\n    clearTimeout(this.viewInitTimeout);\n    this.actionService.remove(this as Action);\n  }\n}\n","<ng-template #template>\n  <li>\n    <ng-content></ng-content>\n  </li>\n</ng-template>","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CommonModule } from '../common/common.module';\nimport { ActionOutletComponent } from './action-outlet.component';\nimport { ActionComponent } from './action.component';\n\n/**\n * The angular module definition for actions.\n * @exports ActionComponent\n * @exports ActionOutletComponent\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    BsDropdownModule,\n    RouterModule.forChild([]),\n    ActionOutletComponent,\n    ActionComponent\n  ],\n  exports: [ActionOutletComponent, ActionComponent]\n})\nexport class ActionModule {}\n","import { Component } from '@angular/core';\n\n/**\n * The content of `c8y-alert-details` component will be displayed as alert's details.\n * This component must be placed inside `c8y-alert` component.\n */\n@Component({\n  selector: 'c8y-alert-details',\n  template: `<ng-content></ng-content>`,\n  standalone: true\n})\nexport class AlertDetailsComponent {}\n","import { TemplateRef } from '@angular/core';\nimport { Alert } from './alert.model';\nimport { AlertService } from './alert.service';\n\nexport abstract class AlertOutletBase {\n  /**\n   * Currently displayed details of an alert. Only one alert’s details can be displayed at a time.\n   */\n  detailDisplayedAlert: any = {};\n\n  constructor(public alertService: AlertService) {}\n\n  /**\n   * Expands details part of particular alert, and collapses details for another alerts.\n   * @param alert The alert which details should be expanded.\n   */\n  showDetails(alert: Alert) {\n    if (alert.onDetail) {\n      return alert.onDetail();\n    }\n    this.detailDisplayedAlert = Object.assign({}, alert);\n    this.detailDisplayedAlert.mode = 'raw';\n    this.setDetailsContent(alert);\n  }\n  /**\n   * Returns true if alert has extra detailedData or defines custom onDetail method.\n   */\n  hasDetails(alert: Alert) {\n    return alert.detailedData || alert.onDetail;\n  }\n  /**\n   * Collapses alert's details.\n   */\n  closeDetails() {\n    this.detailDisplayedAlert = {};\n  }\n  /**\n   * Returns true if details part of alert is expanded.\n   */\n  isDetailsShow(alert: Alert) {\n    return this.alertService.areSame(alert, this.detailDisplayedAlert);\n  }\n  /**\n   * @ignore\n   */\n  isTemplateRef(value): value is TemplateRef<any> {\n    return value instanceof TemplateRef;\n  }\n  /**\n   * @ignore\n   */\n  template(content): any {\n    return this.isTemplateRef(content) ? content : undefined;\n  }\n\n  private setDetailsContent(alert: Alert) {\n    if (this.isTemplateRef(alert.detailedData) || typeof alert.detailedData === 'string') {\n      this.detailDisplayedAlert.contents = alert.detailedData;\n    } else {\n      this.detailDisplayedAlert.contents = JSON.stringify(alert.detailedData, null, 2);\n    }\n  }\n}\n","import { Component, Attribute, HostBinding } from '@angular/core';\nimport { Alert } from './alert.model';\nimport { AlertService } from './alert.service';\nimport { BehaviorSubject } from 'rxjs';\nimport { AlertOutletBase } from './alert-outlet-base';\nimport { NgFor, NgClass, NgIf, AsyncPipe } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/*\n * Alert outlet component shows all added alerts. It is used in the application's `c8y-bootstrap` component.\n *\n * For applications which don’t use `c8y-bootstrap` component but want to display alerts via AlertService, a c8y-alert-outlet component needs to be added explicitly in the template.\n *\n * ```html\n *  <div class=\"alerts\">\n *    <c8y-alert-outlet></c8y-alert-outlet>\n *  </div>\n * ```\n */\n@Component({\n  selector: 'c8y-alert-outlet',\n  templateUrl: './alert-outlet.component.html',\n  standalone: true,\n  imports: [NgFor, NgClass, IconDirective, NgIf, C8yTranslatePipe, AsyncPipe]\n})\nexport class AlertOutletComponent extends AlertOutletBase {\n  /**\n   * @ignore\n   */\n  @HostBinding('class.static') isStatic = false;\n  /**\n   * The array of current alerts.\n   */\n  get alerts(): BehaviorSubject<Alert[]> {\n    return this.alertService.state$;\n  }\n  /**\n   * @ignore\n   */\n  constructor(\n    @Attribute('position') private position: string,\n    public alertService: AlertService\n  ) {\n    super(alertService);\n    this.isStatic = this.position === 'static';\n  }\n  /**\n   * Returns a CSS class for an alert depending on its type to style the corresponding alert component.\n   */\n  getClass(alert: Alert) {\n    const classes = [];\n    if (alert.type !== 'danger') {\n      classes.push('interact');\n    }\n    classes.push(`alert-${alert.type}`);\n    return classes.join(' ');\n  }\n  /**\n   * Executes alert’s onClose method, if provided, and closes the alert.\n   * @param alert The alert which will be closed.\n   */\n  close(alert: Alert) {\n    if (alert.onClose) {\n      alert.onClose();\n    }\n    this.alertService.remove(alert);\n  }\n}\n","<div\n  class=\"alert animated fadeInRightBig m-t-16\"\n  data-cy=\"c8y-alert--message\"\n  *ngFor=\"let alert of alerts | async\"\n  [ngClass]=\"[getClass(alert), isDetailsShow(alert) ? 'expanded' : '']\"\n>\n  <button\n    class=\"close\"\n    title=\"{{ 'Close' | translate }}\"\n    type=\"button\"\n    (click)=\"close(alert)\"\n  >\n    <span\n      aria-hidden=\"true\"\n      data-cy=\"alert--close-alert-message\"\n    >\n      <i c8yIcon=\"times\"></i>\n    </span>\n    <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n  </button>\n\n  <div *ngIf=\"!isTemplateRef(alert.text); else template(alert.text)\">\n    <strong\n      class=\"message\"\n      *ngIf=\"!alert.allowHtml\"\n      [textContent]=\"alert.text | translate\"\n    ></strong>\n    <strong\n      class=\"message\"\n      *ngIf=\"alert.allowHtml\"\n      [innerHTML]=\"alert.text | translate\"\n    ></strong>\n  </div>\n  <p\n    class=\"text-muted m-t-8\"\n    *ngIf=\"hasDetails(alert) && !isDetailsShow(alert)\"\n  >\n    <button\n      class=\"btn btn-clean\"\n      title=\"{{ 'Show details' | translate }}\"\n      (click)=\"showDetails(alert)\"\n    >\n      <i c8yIcon=\"chevron-down\"></i>\n      {{ 'Show details' | translate }}\n    </button>\n  </p>\n  <p\n    class=\"text-muted m-t-8\"\n    *ngIf=\"hasDetails(alert) && isDetailsShow(alert)\"\n  >\n    <button\n      class=\"btn btn-clean\"\n      title=\"{{ 'Hide details' | translate }}\"\n      (click)=\"closeDetails()\"\n    >\n      <i c8yIcon=\"chevron-up\"></i>\n      {{ 'Hide details' | translate }}\n    </button>\n  </p>\n  <div *ngIf=\"isDetailsShow(alert)\">\n    <div *ngIf=\"!isTemplateRef(detailDisplayedAlert.contents); else template(alert.detailedData)\">\n      <pre><code [textContent]=\"detailDisplayedAlert.contents | translate\"></code></pre>\n    </div>\n  </div>\n</div>\n","import { Component } from '@angular/core';\n\n/**\n * The content of `c8y-alert-text` component will be displayed as alert's text.\n * This component must be placed inside `c8y-alert` component.\n */\n@Component({\n  selector: 'c8y-alert-text',\n  template: `<ng-content></ng-content>`,\n  standalone: true\n})\nexport class AlertTextComponent {}\n","import { Component, OnDestroy, Input, ViewChild, ContentChild } from '@angular/core';\nimport { Alert } from './alert.model';\nimport { AlertService } from './alert.service';\nimport { AlertDetailsComponent } from './alert-details.component';\n\n/**\n * Alert component allows creating alert with complex view.\n */\n\n@Component({\n  selector: 'c8y-alert',\n  templateUrl: './alert.component.html',\n  standalone: true\n})\nexport class AlertComponent implements OnDestroy, Alert {\n  /**\n   * The type of the alert.\n   */\n  @Input() type: 'success' | 'warning' | 'danger' | 'info' | 'system';\n  /**\n   * Function to call if user clicks on the detail button.\n   */\n  @Input() onDetail: () => void;\n  /**\n   * Function to call if user clicks on the close button.\n   */\n  @Input() onClose: () => void;\n  /**\n   * Detailed information to display.\n   */\n  @ViewChild('detailedData', { static: false }) detailedData;\n  /**\n   * The text templateRef to display message.\n   */\n  @ViewChild('text', { static: false }) text;\n  /**\n   * Content of AlertDetailsComponent is displayed as alertDetails.\n   */\n  @ContentChild(AlertDetailsComponent, { static: false })\n  containDetailsComponent: AlertDetailsComponent;\n  /**\n   * @ignore\n   */\n  private viewInitTimeout;\n\n  /**\n   * @ignore\n   */\n  constructor(public alertService: AlertService) {}\n\n  /**\n   * AlertComponent adds new alert to collection stored in alertService after view init.\n   */\n  ngAfterViewInit() {\n    if (!this.containDetailsComponent) {\n      this.detailedData = null;\n    }\n    this.viewInitTimeout = setTimeout(() => this.alertService.add(this));\n  }\n\n  /**\n   * AlertComponent removes alert from collection stored in alertService on destroy component.\n   */\n  ngOnDestroy() {\n    clearTimeout(this.viewInitTimeout);\n    this.alertService.remove(this);\n  }\n}\n","<ng-template #text>\r\n  <ng-content select=\"c8y-alert-text\"></ng-content>\r\n  <ng-content></ng-content>\r\n</ng-template>\r\n<ng-template #detailedData>\r\n  <ng-content select=\"c8y-alert-details\"></ng-content>\r\n</ng-template>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { AlertDetailsComponent } from './alert-details.component';\nimport { AlertOutletComponent } from './alert-outlet.component';\nimport { AlertTextComponent } from './alert-text.component';\nimport { AlertComponent } from './alert.component';\nimport { AlertService } from './alert.service';\n\n/**\n * Alert module is used for displaying status messages to the user e.g. danger, success, warning and info alerts.\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    AlertOutletComponent,\n    AlertComponent,\n    AlertDetailsComponent,\n    AlertTextComponent\n  ],\n  exports: [AlertOutletComponent, AlertComponent, AlertDetailsComponent, AlertTextComponent]\n})\nexport class AlertModule {\n  static alert: AlertService;\n\n  constructor(alert: AlertService) {\n    AlertModule.alert = alert;\n  }\n}\n","import { AlertModule } from './alert.module';\n\n/**\n * Checks for errors in responses of requests made with `@c8y/client` services\n * and displays them as alerts using `AlertService`.\n *\n * **Example**\n * ```typescript\n *    const devices = await alertOnError(inventoryService.list({...}));\n * ```\n *\n * @param result The result object from the `@c8y/client` service method\n * @returns The original response (success or failure) of the  `@c8y/client` service method invokation\n */\nexport function alertOnError<T>(result: Promise<T>): Promise<T> {\n  return result.catch(error => {\n    AlertModule.alert.addServerFailure(error, 'danger');\n    throw error;\n  });\n}\n","import { Injector, Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport {\n  allEntriesAreEqual,\n  ExtensionPointForPlugins,\n  fromTriggerOnce,\n  getInjectedHooks,\n  removeDuplicatesIds,\n  stateToFactory\n} from '../common';\nimport { DrawerItem } from './drawer.model';\nimport { InjectionToken } from '@angular/core';\nimport { GenericHookType, hookGeneric, GenericHookOptions } from '../common';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\n\n/**\n * A hook to use for Multi Provider extension.\n * Consider using the `hookDrawer` function instead.\n */\nconst HOOK_DRAWER = new InjectionToken<DrawerItem[]>('HOOK_DRAWER');\n\n/**\n * You can either provide a single `DrawerItem` as parameter:\n * ```typescript\n *  hookDrawer(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookDrawer([...])\n * ```\n *\n * Or you provide a Service that implements `ExtensionFactory<DrawerItem>`\n * ```typescript\n *  export class MyDrawerFactory implements ExtensionFactory<DrawerItem> {...}\n *  ...\n *  hookDrawer(MyDrawerFactory)\n * ```\n * A typed alternative to `HOOK_DRAWER`.\n * @param drawer The `DrawerItem`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookDrawer(\n  drawer: GenericHookType<DrawerItem>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<DrawerItem>(drawer, HOOK_DRAWER, options);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DrawerService extends ExtensionPointForPlugins<DrawerItem> {\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    pluginService: PluginsResolveService\n  ) {\n    super(rootInjector, pluginService);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  /**\n   * Returns the current state.\n   * @readonly\n   * @returns The current set of actions.\n   */\n  get state(): Set<DrawerItem> {\n    return this.state$.value;\n  }\n\n  getDrawersForPosition$(position: 'right' | 'left'): Observable<DrawerItem[]> {\n    return this.items$.pipe(map(items => items.filter(drawer => drawer.position === position)));\n  }\n\n  /**\n   * Adds a new node to the navigator.\n   * @param {DrawerItem} node Navigator node to add.\n   */\n  add(node: DrawerItem) {\n    this.state.add(node);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes a node from the navigator.\n   * @param {DrawerItem} node Navigator node to remove.\n   */\n  remove(node: DrawerItem) {\n    this.state.delete(node);\n    this.emitNewState();\n  }\n\n  protected setupItemsObservable(): Observable<DrawerItem[]> {\n    return fromTriggerOnce<DrawerItem>(this.router, this.refresh$, [\n      getInjectedHooks<DrawerItem>(HOOK_DRAWER, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      distinctUntilChanged(allEntriesAreEqual),\n      map((drawerItems: DrawerItem[]) => removeDuplicatesIds(drawerItems)),\n      shareReplay(1)\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { combineLatest, BehaviorSubject, Observable, merge } from 'rxjs';\nimport { map, debounceTime, distinctUntilChanged, delay, filter, startWith } from 'rxjs/operators';\nimport { OptionsService } from '../common/options.service';\nimport { StateService } from '../common/state-service.abstract';\nimport { Header } from './header.model';\nimport { HumanizeAppNamePipe } from '../common/humanize-app-name.pipe';\nimport { DrawerService } from '../drawer/drawer.service';\nimport { ServiceRegistry } from '../common';\nimport { NotificationService } from '../common/notification-display.service';\n\n/**\n * A service which defines header functions.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class HeaderService extends StateService {\n  headerOpen = false;\n  header$: Observable<Header>;\n  navigatorOpen$: Observable<boolean>;\n  rightDrawerOpen$: Observable<boolean>;\n  canToggleNavigator$: Observable<boolean>;\n  showNotification$: Observable<boolean>;\n  hideHeader = false;\n\n  state$: BehaviorSubject<Header> = new BehaviorSubject<Header>({\n    title: undefined,\n    nav: {\n      open: false\n    },\n    rightDrawer: {\n      open: false\n    }\n  });\n\n  title: { elementRef?: HTMLTitleElement; titleSuffix: string; titlePrefix: string } | undefined;\n  readonly DELAY_TO_AVOID_FLICKERING_ON_ASYNC_NODES = 1000;\n\n  constructor(\n    private options: OptionsService,\n    private humanizeAppName: HumanizeAppNamePipe,\n    private drawerService: DrawerService,\n    private serviceRegistry: ServiceRegistry\n  ) {\n    super();\n    this.header$ = this.map((header: Header) => header);\n    this.canToggleNavigator$ = this.drawerService.items$.pipe(\n      map(items => !!items.filter(tmp => tmp.position === 'left' && !tmp.noneRequired)?.length),\n      distinctUntilChanged(),\n      delay(this.DELAY_TO_AVOID_FLICKERING_ON_ASYNC_NODES)\n    );\n    this.navigatorOpen$ = combineLatest([\n      this.map(({ nav }) => nav.open),\n      this.canToggleNavigator$\n    ]).pipe(map(([open, hasItems]) => open && hasItems));\n    this.rightDrawerOpen$ = this.map(({ rightDrawer }) => rightDrawer.open).pipe();\n    const titleReference = document.querySelector('title');\n    const notificationServices = this.serviceRegistry.get(\n      'notificationService'\n    ) as NotificationService[];\n    const notificationObservables = notificationServices.map(\n      service => service.shouldShowNotification$\n    );\n\n    this.showNotification$ = merge(...notificationObservables).pipe(\n      filter(value => value === true),\n      startWith(false)\n    );\n\n    this.title = {\n      elementRef: titleReference,\n      titleSuffix: '',\n      titlePrefix: ''\n    };\n\n    combineLatest([\n      this.humanizeAppName.transform(options.name),\n      this.options.get$('globalTitle', '', false)\n    ]).subscribe(([nameTranslated, globalTitle]) => {\n      this.title.titleSuffix = this.isGlobalTitleValid(globalTitle)\n        ? `${globalTitle} - ${nameTranslated}`\n        : nameTranslated;\n\n      this.changePageTitle(this.title.titlePrefix);\n    });\n    this.hideHeader = this.options.get('hideHeader', false);\n  }\n\n  get state() {\n    return this.state$.value;\n  }\n\n  get navigatorHiddenOnStartup() {\n    return this.options.hideNavigator;\n  }\n\n  get largeWidth() {\n    return document.documentElement.clientWidth > 1200;\n  }\n\n  get shouldToggle() {\n    return this.largeWidth && !this.navigatorHiddenOnStartup && !this.state.nav.open;\n  }\n\n  /**\n   * Toggles the main header menu in mobile view.\n   */\n  toggle() {\n    this.headerOpen = !this.headerOpen;\n  }\n\n  /**\n   * Toggles the navigator open status.\n   */\n  toggleNavigator() {\n    this.state.nav.open = !this.state.nav.open;\n    this.emitNewState();\n  }\n\n  /**\n   * Force to close the navigator.\n   */\n  closeNavigator() {\n    this.state.nav.open = false;\n    this.emitNewState();\n  }\n\n  /**\n   * Toggles the right drawer open status.\n   */\n  toggleRightDrawer() {\n    this.state.rightDrawer.open = !this.state.rightDrawer.open;\n    this.emitNewState();\n  }\n\n  /**\n   * Force to close the right drawer.\n   */\n  closeRightDrawer() {\n    this.state.rightDrawer.open = false;\n    this.emitNewState();\n  }\n\n  /**\n   * Configures navigation options.\n   * @param config Object with the properties:\n   * - open: Boolean\n   */\n  configNavigator(config: Partial<Header['nav']> = {}) {\n    this.state.nav = Object.assign(this.state.nav, config);\n    this.emitNewState();\n  }\n\n  /**\n   * Change the application title.\n   * @param newTitle The new title of the application.\n   */\n  changeTitle(newTitle?: unknown, pageTitleUpdate = true) {\n    this.state.title = newTitle;\n    this.state.pageTitleUpdate = pageTitleUpdate;\n\n    this.emitNewState();\n  }\n\n  /**\n   * Change the page title.\n   * @param newTitle The new title of the page.\n   */\n  changePageTitle(newTitle?: string) {\n    this.title.titlePrefix = newTitle;\n    // only really needed for unit tests\n    if (!this.title.elementRef) {\n      return;\n    }\n    this.title.elementRef.innerText = newTitle\n      ? `${newTitle} / ${this.title.titleSuffix}`\n      : `${this.title.titleSuffix}`;\n  }\n\n  /**\n   * This methods checks if the navigator toggles on startup\n   * or if an item is added to the navigator node.\n   * Delay of 300ms is intended for animation purpose.\n   */\n  verifyIfNavOpen() {\n    this.canToggleNavigator$\n      .pipe(debounceTime(300))\n      .subscribe(hasItems => hasItems && this.shouldToggle && this.toggleNavigator());\n  }\n\n  shouldShowBreadcrumbs() {\n    return this.options.breadcrumbs;\n  }\n\n  private isGlobalTitleValid(globalTitle: string) {\n    return !!globalTitle && typeof globalTitle === 'string' && globalTitle.length > 0;\n  }\n}\n","import { Injector, TemplateRef, Type } from '@angular/core';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\nimport { matches, snakeCase } from 'lodash-es';\nimport { PopoverConfirmComponent } from '../modal/popover-confirm.component';\nimport { NavigatorNodeData } from './navigator-node-data';\n\n/**\n * Interface that determines the available click options.\n * @ignore\n */\nexport interface ClickOptions {\n  /**\n   * Indicates that the source of the event is a click on the node icon.\n   */\n  icon?: boolean;\n  /**\n   * Indicates that the source of the event is a click on the node expander.\n   */\n  expander?: boolean;\n  /**\n   * Indicates that the navigator node is expanded/collapsed.\n   */\n  open?: boolean;\n  /**\n   * Creates a new group node which will contain all unassigned devices.\n   */\n  showUnassignedDevices?: boolean;\n  /**\n   * DOM event.\n   */\n  $event?: any; // TODO: add proper type\n}\n/**\n * Base navigator node. Represents a single entry in the navigator menu.\n * Is considered to be the basic building block of the navigator.\n */\nexport class NavigatorNode {\n  static NAME = 'NavigatorNode';\n  /**\n   * Navigator node icon.\n   */\n  icon: SupportedIconsSuggestions;\n\n  /**\n   * Navigator node icon when expanded.\n   */\n  iconOpen: string;\n\n  /**\n   * Custom icon template.\n   */\n  iconTemplate?: TemplateRef<any>;\n\n  /**\n   * Custom icon component.\n   */\n  iconComponent?: Type<any>;\n\n  /**\n   * Navigator node children (subentries).\n   */\n  children: NavigatorNode[] = [];\n\n  /**\n   * Label to be displayed in the navigator node.\n   */\n  label: string;\n\n  /**\n   * Whether to pass `label` through `translate` pipe when being displayed.\n   */\n  translateLabel = true;\n\n  /**\n   * The path to which the UI will be redirected after clicking the navigator node.\n   */\n  path: string;\n\n  /**\n   * Navigator node parent nodes.\n   */\n  parents: NavigatorNode[] = [];\n\n  /**\n   * Loading state indicator.\n   */\n  loading?: boolean;\n\n  /**\n   * Used to load the providers for the components. If not provided, default injector us used.\n   */\n  injector?: Injector;\n\n  /**\n   * Custom component to use.\n   */\n  component?: Type<any>;\n\n  /**\n   * Indicates whether the navigator node should be active based on matching the node path and the URL path.\n   * To match the URL exactly, set this option to true.\n   *\n   * routerLinkExact set to true:\n   * When the URL path is set to /a/b/c and the node path to /a/b then the node will not be set active.\n   *\n   * routerLinkExact set to false:\n   * When the URL path is set to /a/b/c and the node path to /a/b then the node will be set active.\n   */\n  routerLinkExact = true;\n\n  /**\n   * Indicates that the navigator node is expanded/collapsed.\n   */\n  open = false;\n\n  /**\n   * Indicates that the navigator node is visible/hidden.\n   */\n  hidden = false;\n\n  /**\n   * Indicates that the navigator node is draggable.\n   */\n  draggable = false;\n\n  /**\n   * Indicates that the navigator node is droppable.\n   */\n  droppable = false;\n\n  /**\n   * Indicates that the navigator node is dragged.\n   */\n  dragged = false;\n\n  /**\n   * Indicates that currently something is dragged over the node.\n   */\n  draggedHover = false;\n\n  /**\n   * Confirmation popover displayed at the end of the process of moving the navigator menu item.\n   */\n  confirm: PopoverConfirmComponent = undefined;\n\n  /**\n   * The breadcrumb of the node, displaying the \"path\", but supports multiple levels.\n   * e.g. (Groups > Level 1 > Level 2)\n   */\n  breadcrumb?: string;\n\n  /**\n   * Id to identify specific feature node.\n   */\n  featureId?: string;\n\n  /**\n   * A callback function that will be called when the node needs to be refreshed.\n   */\n  refreshCallback?: () => void;\n\n  private _priority = 0;\n  private expandDragTimeout;\n\n  /**\n   * Returns information whether a navigator node has children.\n   * @readonly\n   */\n  get hasChildren() {\n    return this.children.length > 0;\n  }\n\n  /**\n   * Returns the ID of the navigator node.\n   * @readonly\n   */\n  get id() {\n    return 'navigator_node_' + snakeCase(this.label);\n  }\n\n  /**\n   * Returns the priority value of the navigator node.\n   * @readonly\n   */\n  get priority() {\n    if (this._priority) {\n      return this._priority;\n    } else {\n      const childrenPriorities = this.children.map(({ priority }) => priority || 0);\n      if (childrenPriorities.length) {\n        return childrenPriorities.length ? Math.max(...childrenPriorities) : 0;\n      }\n      return 0;\n    }\n  }\n\n  /**\n   * Sets the priority value of the navigator node.\n   *\n   * @param {number} priority Priority value.\n   */\n  set priority(priority) {\n    this._priority = priority;\n  }\n\n  constructor(data?: NavigatorNodeData) {\n    this.update(data);\n  }\n\n  /**\n   * Adds a child navigator node to the node.\n   *\n   * @param {NavigatorNode} node Child node.\n   */\n  add(node: NavigatorNode) {\n    if (node === this) {\n      throw new Error('Adding node to itself');\n    }\n    if (this.children.indexOf(node) === -1) {\n      this.children.push(node);\n    }\n    if (node.parents.indexOf(this) === -1) {\n      node.parents.push(this);\n    }\n    this.updateChildren();\n  }\n\n  /**\n   * Removes the child navigator node from the node.\n   *\n   * @param {NavigatorNode} node Child node.\n   */\n  remove(node: NavigatorNode) {\n    const ix = this.children.indexOf(node);\n    const pix = node.parents.indexOf(this);\n    if (ix > -1) {\n      this.children.splice(ix, 1);\n    }\n    if (pix > -1) {\n      node.parents.splice(pix, 1);\n    }\n    this.updateChildren();\n  }\n\n  /**\n   * Updates the navigator node.\n   *\n   * @param {NavigatorNodeData} data Data to be updated.\n   */\n  update(data?: NavigatorNodeData) {\n    if (data) {\n      Object.assign(this, data);\n      if (data.hidden !== undefined) {\n        this.parents.forEach(p => {\n          p.updateHidden();\n        });\n      }\n    }\n  }\n\n  /**\n   *\n   * Returns a child navigator node based on the predicate.\n   *\n   * ```ts\n   * // The function will compare the labels to the string and return a matching result.\n   * // The capitalization of the characters does not matter (case insensitive).\n   * const predicate = 'group1';\n   * const childNode = parentNode.find(predicate);\n   * // Check: [lodash matches](https://lodash.com/docs/4.17.15#matches)\n   * const predicate = { label: 'group2' };\n   * const childNode = parentNode.find(predicate);\n   * ```\n   *\n   * @param predicate Filter criteria.\n   * @param findBy NavigatorNode field name to compare.\n   *\n   */\n  find(predicate, findBy: keyof Pick<NavigatorNode, 'label' | 'featureId'> = 'label') {\n    if (typeof predicate === 'string') {\n      if (findBy === 'label') {\n        const compareLabel = predicate.toLocaleLowerCase();\n        predicate = ({ label }) => compareLabel === label?.toLowerCase();\n      } else {\n        const compareId = predicate;\n        predicate = ({ featureId }) => compareId === featureId;\n      }\n    }\n    if (typeof predicate === 'object') {\n      predicate = matches(predicate);\n    }\n    if (typeof predicate !== 'function') {\n      throw new Error('Invalid search predicate');\n    }\n    return this.children.reduce(\n      (found, child) => found || child.find(predicate),\n      this.children.find(predicate)\n    );\n  }\n\n  /**\n   * Removes children nodes.\n   */\n  empty() {\n    this.children.length = 0;\n  }\n\n  /**\n   * @ignore\n   */\n  click(_options: ClickOptions = {}) {\n    // do nothing\n  }\n\n  /**\n   * This event is fired when an element is dropped on a valid drop target.\n   * @param $event DOM event.\n   */\n  drop($event) {\n    $event.stopPropagation();\n    clearTimeout(this.expandDragTimeout);\n  }\n\n  /**\n   * This event is fired when the user starts dragging an element.\n   * @param $event DOM event.\n   */\n  dragStart($event) {\n    $event.stopPropagation();\n    // we can't pass a object to setData, so we do it via service\n    // set data is still needed, to make the drag&drop work\n    $event.dataTransfer?.setData('node', 'node');\n    this.dragged = true;\n  }\n\n  /**\n   * This event is fired when a drag operation has ended.\n   * @param $event DOM event.\n   */\n  dragEnd($event) {\n    $event.stopPropagation();\n    this.dragged = false;\n  }\n\n  /**\n   * Returns information whether the navigator node is droppable.\n   * @readonly\n   */\n  get canDrop() {\n    return this.droppable;\n  }\n\n  /**\n   * Returns information whether navigation is possible.\n   * @readonly\n   */\n  get canNavigate() {\n    return typeof this.path !== 'undefined';\n  }\n\n  /**\n   * This event is fired when a dragged element enters a valid drop target.\n   * @param $event DOM event.\n   */\n  dragEnter($event) {\n    $event.preventDefault();\n    $event.stopPropagation();\n    this.draggedHover = true;\n    if (!this.open) {\n      this.expandDragTimeout = setTimeout(() => this.expand(), 1000);\n    }\n  }\n\n  /**\n   * This event is fired when a dragged element leaves a valid drop target.\n   * @param $event DOM event.\n   */\n  dragLeave($event) {\n    $event.preventDefault();\n    $event.stopPropagation();\n    if ($event.currentTarget.contains($event.relatedTarget)) {\n      return;\n    }\n    this.draggedHover = false;\n    clearTimeout(this.expandDragTimeout);\n  }\n\n  /**\n   * Expands the navigator node if it is collapsed.\n   */\n  expand() {\n    if (!this.open) {\n      this.open = true;\n      this.click({ open: true, expander: true });\n    }\n  }\n\n  /**\n   * Performs a callback function recursively on each of the navigator node's children down the hierarchy.\n   *\n   * ```ts\n   * const expandChild = (childNode) => childNode.expand();\n   * parentNode.traverse(expandChild);\n   * ```\n   *\n   * @param callback Function to be called.\n   */\n  traverse(callback) {\n    if (this.children) {\n      this.children.forEach(child => {\n        callback(child);\n        child.traverse(callback);\n      });\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  destroy() {\n    // nothing todo here\n  }\n\n  /**\n   * Counts the amount of children nodes.\n   */\n  protected countChildren() {\n    return this.children.length;\n  }\n\n  /**\n   * Identifies itself.\n   */\n  protected toString() {\n    return NavigatorNode.NAME;\n  }\n\n  protected hasChildDevices() {\n    return false;\n  }\n\n  /**\n   * Updates the navigator node by sorting its children and also checking their visibility.\n   */\n  protected updateChildren() {\n    this.sort();\n    this.updateHidden();\n  }\n\n  /**\n   * Sorts the children of the navigator node, by priority and name (ASC).\n   * The higher the priority, the higher the position in the hierarchy.\n   * For the same priority values, the alphabetical order will take precedence.\n   */\n  protected sort() {\n    this.children.sort((a, b) => {\n      if (a.priority > b.priority) {\n        return -1;\n      } else if (a.priority < b.priority) {\n        return 1;\n      } else if ((a.label || '').toLowerCase() < (b.label || '').toLowerCase()) {\n        return -1;\n      } else if ((a.label || '').toLowerCase() > (b.label || '').toLowerCase()) {\n        return 1;\n      } else {\n        return 0;\n      }\n    });\n  }\n\n  /**\n   * Checks if the navigator node should be hidden based on the visibility of its child nodes.\n   */\n  protected updateHidden() {\n    if (typeof this.path === 'undefined') {\n      this.hidden = !this.children.some(({ hidden }) => !hidden);\n    }\n  }\n}\n","import { NavigatorNode } from './navigator-node';\nimport { NavigatorNodeData } from './navigator-node-data';\n\n/**\n * Root navigator node. Top node in the hierarchy.\n * The root node is used as an anchor point for the rest of the nodes.\n */\nexport class NavigatorNodeRoot extends NavigatorNode {\n  /**\n   * Adds top nodes to the navigator tree structure. These nodes are the direct children of the root node.\n   * In the case of the cockpit application, such a node is, for example, the \"Home\" menu entry.\n   *\n   * ```ts\n   * const nodeData: NavigatorNodeData = { label: 'Home' } ;\n   * const root: NavigatorNodeRoot = new NavigatorNodeRoot();\n   *\n   * // Based on the node data, a new node will be created and assigned to root.\n   * root.addRoot(nodeData);\n   *\n   * const parentNode: NavigatorNode =  new NavigatorNode({ label: 'Configuration'...});\n   * const nodeData: NavigatorNodeData = { label: 'Exports', parent: parentNode } ;\n   * const root: NavigatorNodeRoot = new NavigatorNodeRoot();\n   *\n   * // Based on the node data, parent node will be directly assigned to the root node, and newly created child node\n   * // will be added to the parent node.\n   * root.add(nodeData);\n   * ```\n   *\n   * @param {Partial<NavigatorNodeData>} nodeData Data on the basis of which a new node is created.\n   */\n  addRoot(nodeData: Partial<NavigatorNodeData>) {\n    let duplicate;\n\n    if (nodeData.preventDuplicates) {\n      duplicate = this.find(({ path, parents, label }) => {\n        return (\n          path === nodeData.path &&\n          label === nodeData.label &&\n          parents.some(p => p.label === nodeData.parent)\n        );\n      });\n      if (duplicate && !duplicate.hidden) {\n        duplicate.routerLinkExact = false;\n        return duplicate;\n      }\n    }\n\n    const { parent } = nodeData;\n    const node = this.createNode(nodeData);\n    let localParent;\n\n    if (parent) {\n      if (typeof parent === 'object') {\n        localParent = this.find(parent.label);\n        if (localParent) {\n          localParent.update(parent);\n        }\n      } else if (typeof parent === 'string' || typeof parent === 'function') {\n        localParent = this.find(parent);\n      }\n\n      if (!localParent) {\n        localParent = this.createNode(parent);\n        if (!this.find(n => localParent === n)) {\n          this.add(localParent);\n        }\n      }\n    }\n\n    (localParent || this).add(node);\n    return node;\n  }\n\n  /**\n   * Creates a new navigator node.\n   * @param nodeData The data that serves as the basis for creating a new node.\n   */\n  createNode(nodeData: string | object | NavigatorNodeData | NavigatorNode) {\n    if (nodeData instanceof NavigatorNode) {\n      return nodeData;\n    }\n    if (typeof nodeData === 'string') {\n      return new NavigatorNode({ label: nodeData });\n    }\n    if (typeof nodeData === 'object') {\n      return new NavigatorNode({ ...nodeData, parent: undefined });\n    }\n    throw new Error('Wrong type of node data');\n  }\n}\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, first, map, shareReplay, switchMap } from 'rxjs/operators';\nimport {\n  ExtensionFactory,\n  ExtensionPointForPlugins,\n  fromTriggerOnce,\n  GenericHookOptions,\n  GenericHookType,\n  getInjectedHooks,\n  hookGeneric,\n  sortByPriority,\n  stateToFactory\n} from '../common/extension-hooks';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { NavigatorNode } from './navigator-node';\nimport { NavigatorNodeData } from './navigator-node-data';\nimport { NavigatorNodeRoot } from './navigator-node-root';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\ntype NavigatorExtension = NavigatorNode | NavigatorNode[] | ExtensionFactory<NavigatorNode>;\n\n/**\n * A hook to use for Multi Provider extension.\n * @deprecated Consider using the `hookNavigator` function instead.\n */\nexport const HOOK_NAVIGATOR_NODES = new InjectionToken<NavigatorExtension[]>(\n  'HOOK_NAVIGATOR_NODES'\n);\n\n/**\n * You can either provide a single `NavigatorNode` or `NavigatorNodeData` as parameter:\n * ```typescript\n *  hookNavigator(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookNavigator([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<NavigatorNode | NavigatorNodeData>`\n * ```typescript\n *  export class MyNavigatorFactory implements ExtensionFactory<NavigatorNode | NavigatorNodeData> {...}\n *  ...\n *  hookNavigator(MyNavigatorFactory)\n * ```\n * A typed alternative to `HOOK_NAVIGATOR_NODES`.\n * @param nodes The `NavigatorNode`'s, `NavigatorNodeData`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookNavigator(\n  nodes: GenericHookType<NavigatorNode | NavigatorNodeData>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<NavigatorNode | NavigatorNodeData>(nodes, HOOK_NAVIGATOR_NODES, options);\n}\n\n/**\n * A service which defines the navigator.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class NavigatorService extends ExtensionPointForPlugins<NavigatorNode> {\n  /**\n   * Indicates whether the menu entry associated with the given URL should be expanded.\n   */\n  firstUrl = true;\n  hasItemsInNavigator$: Observable<boolean>;\n\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n    this.hasItemsInNavigator$ = this.items$.pipe(\n      map(({ length }) => !!length),\n      distinctUntilChanged()\n    );\n\n    this.redirectToFirstNode();\n  }\n\n  /**\n   * Returns the current state.\n   * @readonly\n   * @returns The current set of actions.\n   */\n  get state(): Set<NavigatorNode> {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new node to the navigator.\n   * @param {NavigatorNode} node Navigator node to add.\n   */\n  add(node: NavigatorNode) {\n    this.state.add(node);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes a node from the navigator.\n   * @param {NavigatorNode} node Navigator node to remove.\n   */\n  remove(node: NavigatorNode) {\n    this.state.delete(node);\n    this.emitNewState();\n  }\n\n  protected setupItemsObservable(): Observable<NavigatorNode[]> {\n    const rootNode = new NavigatorNodeRoot();\n    return fromTriggerOnce<NavigatorExtension>(this.router, this.refresh$, [\n      getInjectedHooks<NavigatorNode>(HOOK_NAVIGATOR_NODES, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      distinctUntilChanged(),\n      map((nodes: Partial<NavigatorNodeData[]>) => {\n        const noParent = nodes.filter(node => !node.parent);\n        const withParent = nodes.filter(node => node.parent);\n\n        // Based on the sortedNodes array, the nodes are sequentially created.\n        // Nodes sorting is done in two steps to have the top-level nodes first.\n        // This way, by the time we are adding a child node, the parent node is already present.\n        const sortedNodes = sortByPriority(noParent).concat(sortByPriority(withParent));\n        rootNode.empty();\n        sortedNodes.forEach(node => rootNode.addRoot(node));\n        return rootNode.children;\n      }),\n      shareReplay(1)\n    );\n  }\n\n  /**\n   * This will redirect on the inital navigation to '#/' to\n   * the first node with a path and the highest priority.\n   */\n  private redirectToFirstNode() {\n    const hasBaseRoute = this.router.config.find(route => route.path === '');\n    if (hasBaseRoute) {\n      return hasBaseRoute;\n    }\n\n    this.router.events\n      .pipe(\n        filter(event => event instanceof NavigationStart && event.url === '/'),\n        switchMap(() =>\n          this.items$.pipe(\n            map(nodes => this.getFirstNodeWithPath(sortByPriority(nodes))),\n            filter(firstNodeWithPath => firstNodeWithPath && firstNodeWithPath.path !== '/'),\n            first()\n          )\n        )\n      )\n      .subscribe((node: NavigatorNode) => {\n        this.router.navigate([node.path]);\n      });\n  }\n\n  private getFirstNodeWithPath(nodes: NavigatorNode[]): NavigatorNode | null {\n    for (const node of nodes) {\n      if (node.path) {\n        return node;\n      }\n      if (node.children.length > 0) {\n        const childNode = this.getFirstNodeWithPath(node.children);\n        if (childNode) {\n          return childNode;\n        }\n      }\n    }\n    return null;\n  }\n}\n","import { StepState } from '@angular/cdk/stepper';\nimport { Injector, Type } from '@angular/core';\nexport interface StepperButtonsVisibility {\n  cancel?: boolean;\n  back?: boolean;\n  next?: boolean;\n  custom?: boolean;\n}\n\n/**\n * Steps of a stepper component.\n *\n * ```ts\n * providers: [{\n *   provide: HOOK_STEPPER,\n *   useValue: {\n *      id: Steppers.SETUP,\n *      label: 'Register devices',\n *      component: YourRegisterDeviceForm,\n *      priority: -1000\n *   },\n *   multi: true\n * }]\n */\nexport interface Step {\n  /**\n   * The id of the stepper outlet where the step should be attached to.\n   */\n  stepperId: string;\n  /**\n   * The label to display.\n   */\n  label?: string;\n  /**\n   * The component to render. You can inject the C8yStepper to manage steps or use the\n   * existing NgForm to validate the content of the form before the user can go on.\n   *\n   * ```js\n   * viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n   * ```\n   */\n  component: Type<any>;\n  /**\n   * The injector to use. If not set, default injector will be used.\n   */\n  injector?: Injector;\n  /**\n   * High priority will show the step sooner, low priority will show the step later. All\n   * hooked step are ordered first by priority then by name.\n   */\n  priority?: number;\n  /**\n   * Marks the step as required to complete the stepper.\n   */\n  required?: boolean;\n  [key: string]: any;\n}\n\n/**\n * Can be used to mark a step as completed and adds the current index to the step.\n */\nexport type IndexedStep = Step & { index: number; completed: boolean; state?: StepState };\n\n/**\n * Default steppers used in the platform. Use this too hook into\n * certain steps.\n *\n * ```ts\n * providers: [{\n *   provide: HOOK_STEPPER,\n *   useValue: {\n *      id: Steppers.SETUP,\n *      label: 'Register devices',\n *      component: YourRegisterDeviceForm,\n *      priority: -1000\n *   },\n *   multi: true\n * }]\n * ```\n */\nexport enum Steppers {\n  /**\n   * Use this stepperId to hook a component into the application\n   * setup step.\n   */\n  SETUP = 'setup'\n}\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, map, shareReplay, take } from 'rxjs/operators';\nimport {\n  ExtensionFactory,\n  fromTrigger,\n  GenericHookType,\n  hookGeneric,\n  getInjectedHooks,\n  stateToFactory,\n  ExtensionPointForPlugins,\n  GenericHookOptions\n} from '../common/extension-hooks';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { Step } from './stepper.model';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type StepperExtension = Step | Step[] | ExtensionFactory<Step>;\n\n/**\n * A hook to use for Multi Provider extension.\n * @deprecated Consider using the `hookStepper` function instead.\n */\nexport const HOOK_STEPPER = new InjectionToken<StepperExtension[]>('HOOK_STEPPER');\n\n/**\n * You can either provide a single `Step` as parameter:\n * ```typescript\n *  hookStepper(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookStepper([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<Step>`\n * ```typescript\n *  export class MyStepFactory implements ExtensionFactory<Step> {...}\n *  ...\n *  hookStepper(MyStepFactory)\n * ```\n * A typed alternative to `HOOK_STEPPER`.\n * @param step The `Step`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookStepper(step: GenericHookType<Step>, options?: Partial<GenericHookOptions>) {\n  return hookGeneric<Step>(step, HOOK_STEPPER, options);\n}\n\n/**\n * A service which defines the steps in a stepper component.\n * A stepper hook needs an certain outlet which has an matching id\n * to display the steps.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class StepperService extends ExtensionPointForPlugins<Step> {\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    private translateService: TranslateService,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  sortSteps(steps: Step[]) {\n    return steps.sort((a, b) => {\n      const priorityOrder = (b.priority || 0) - (a.priority || 0);\n\n      const aTranslatedLabel = this.translateService.instant(a.label);\n      const bTranslatedLabel = this.translateService.instant(b.label);\n      const translatedLabelOrder = aTranslatedLabel.localeCompare(bTranslatedLabel);\n\n      return priorityOrder || translatedLabelOrder;\n    });\n  }\n\n  /**\n   * Returns the current state.\n   * @readonly\n   * @returns The current set of actions.\n   */\n  get state(): Set<Step> {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new item to tabs and emits state change\n   * @param item The item to add.\n   */\n  add(item: Step) {\n    this.state.add(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes a step and emits a state change.\n   * @param item The item to remove.\n   */\n  remove(item: Step) {\n    this.state.delete(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Returns the component by it's asssigned stepper id as an observable.\n   * @param id The id of the stepper to hook into.\n   */\n  getById$(id) {\n    return this.items$.pipe(\n      filter(steps => steps.length > 0),\n      map(steps => steps.filter(cmp => cmp.stepperId === id)),\n      take(1)\n    );\n  }\n\n  protected setupItemsObservable(): Observable<Step[]> {\n    return fromTrigger<Step>(this.router, this.refresh$, [\n      getInjectedHooks<Step>(HOOK_STEPPER, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(distinctUntilChanged(), shareReplay(1));\n  }\n}\n","import { IndexedStep } from '../stepper/stepper.model';\n\nexport interface SetupStep extends IndexedStep {\n  setupId: string;\n}\n\n/**\n * The state determines the current status of the wizard:\n * START: First view, showing application properties\n * WIZARD: Custom wizard to change configurations.\n * FINALIZING: Status between saving and finishing the setup.\n * RELOADING: Status between finishing and reloading the app.\n */\nexport enum SetupState {\n  START = 0,\n  WIZARD = 1,\n  FINALIZING = 2,\n  RELOADING = 3\n}\n\nexport const NEEDED_ROLE_FOR_SETUP = 'ROLE_APPLICATION_MANAGEMENT_ADMIN';\n\nexport const SETUP_FINISHED_STEP_ID = 'c8ySetupFinished';\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { OptionsService } from '../common/options.service';\nimport { Permissions } from '../common/permissions.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { Steppers } from '../stepper/stepper.model';\nimport { StepperService } from '../stepper/stepper.service';\nimport { NEEDED_ROLE_FOR_SETUP, SetupStep, SETUP_FINISHED_STEP_ID } from './setup.model';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SetupService {\n  /**\n   * Indicates if the applications needs to show a setup wizard.\n   */\n  isSetupNeeded$: Observable<boolean>;\n\n  private skipSetup$ = new BehaviorSubject(false);\n\n  /**\n   * @ignore only DI and initialization\n   */\n  constructor(\n    private stepperService: StepperService,\n    private permissions: Permissions,\n    private options: OptionsService,\n    public ui: AppStateService,\n    private pluginsResolve: PluginsResolveService\n  ) {\n    // in case of noLogin the currentUser is potentially not set and we therefore also do not need to go into setup mode\n    if (!this.ui.currentUser.value) {\n      this.isSetupNeeded$ = of(false);\n    } else {\n      this.isSetupNeeded$ = this.pluginsResolve.allPluginsLoaded$.pipe(\n        filter(loaded => loaded),\n        switchMap(() => this.ui.currentUser.pipe(filter(user => !!user))),\n        switchMap(() => this.ui.isOwnerOfApplication$()),\n        switchMap(isOwner => {\n          if (!isOwner) {\n            return of([]);\n          }\n          return this.stepperService.getById$(Steppers.SETUP);\n        }),\n        map((steps: SetupStep[]) => this.getNotCompletedSetupSteps(steps)),\n        map(\n          notCompletedSetupSteps =>\n            this.options.forceSetup ||\n            (this.options.isSetup && this.needsSetup(notCompletedSetupSteps))\n        ),\n        switchMap(required => this.setupRequired(required))\n      );\n    }\n  }\n\n  skipSetup() {\n    this.skipSetup$.next(true);\n  }\n\n  private setupRequired(required: boolean): Observable<boolean> {\n    if (!required) {\n      return of(required);\n    }\n    return this.skipSetup$.pipe(map(skipped => !skipped));\n  }\n\n  private needsSetup(notCompletedSetupSteps: SetupStep[]): boolean {\n    notCompletedSetupSteps = this.excludeSetupFinishStep(notCompletedSetupSteps);\n    if (this.hasPermission()) {\n      return notCompletedSetupSteps.length > 0;\n    }\n    // Show setup screen as there are required steps but the user\n    // has no permission. The Setup screen will show an error to\n    // the user.\n    return this.hasRequiredSteps(notCompletedSetupSteps);\n  }\n\n  private excludeSetupFinishStep(notCompletedSetupSteps: SetupStep[]) {\n    return notCompletedSetupSteps.filter(({ setupId }) => setupId !== SETUP_FINISHED_STEP_ID);\n  }\n\n  private hasRequiredSteps(notCompletedSetupSteps: SetupStep[]): boolean {\n    return notCompletedSetupSteps.some(step => step.required);\n  }\n\n  private hasPermission(): boolean {\n    return this.permissions.hasRole(NEEDED_ROLE_FOR_SETUP);\n  }\n\n  private getNotCompletedSetupSteps(steps: SetupStep[]): SetupStep[] {\n    if (!this.ui.currentApplication.value) {\n      return steps;\n    }\n    return steps.filter(\n      step =>\n        step.setupId &&\n        !(this.ui.currentApplication.value.config?.setup || []).includes(step.setupId)\n    );\n  }\n}\n","import { Injectable, InjectionToken, Injector, TemplateRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, first, map, shareReplay } from 'rxjs/operators';\nimport {\n  ExtensionFactory,\n  fromTrigger,\n  GenericHookType,\n  hookGeneric,\n  getInjectedHooks,\n  stateToFactory,\n  ExtensionPointForPlugins,\n  GenericHookOptions\n} from '../common/extension-hooks';\nimport { OptionsService } from '../common/options.service';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { Tab } from './tab.model';\nimport { isEqual } from 'lodash-es';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type TabExtension = Tab | Tab[] | ExtensionFactory<Tab>;\n\n/**\n * A hook to use for Multi Provider extension.\n * @deprecated Consider using the `hookTab` function instead.\n */\nexport const HOOK_TABS = new InjectionToken<TabExtension[]>('HOOK_TABS');\n\n/**\n * You can either provide a single `Tab` as parameter:\n * ```typescript\n *  hookTab(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookTab([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<Tab>`\n * ```typescript\n *  export class MyTabFactory implements ExtensionFactory<Tab> {...}\n *  ...\n *  hookTab(MyTabFactory)\n * ```\n * A typed alternative to `HOOK_TABS`.\n * @param tabs The `Tab`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookTab(tabs: GenericHookType<Tab>, options?: Partial<GenericHookOptions>) {\n  return hookGeneric<Tab>(tabs, HOOK_TABS, options);\n}\n\n/**\n * A service which defines the used tabs.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class TabsService extends ExtensionPointForPlugins<Tab> {\n  items$: Observable<Tab[]>;\n  orientation$: Observable<'vertical' | 'horizontal'>;\n\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    private translateService: TranslateService,\n    private options: OptionsService,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n\n    this.orientation$ = this.items$.pipe(\n      map((tabs: Tab[]) => {\n        const firstTabWithDefinedOrientation = tabs.find(tab => tab.orientation);\n        if (firstTabWithDefinedOrientation) {\n          return firstTabWithDefinedOrientation.orientation;\n        }\n        return this.options.tabsHorizontal ? 'horizontal' : 'vertical';\n      }),\n      distinctUntilChanged()\n    );\n  }\n\n  prepareTabs(tabs) {\n    return this.sortTabs(\n      tabs\n        .map(tab => {\n          tab.template = tab.template instanceof TemplateRef ? tab.template : undefined;\n          return tab;\n        })\n        .filter(\n          (tab, index, self) =>\n            tab.component || !tab.path || index === self.findIndex(t => isEqual(t.path, tab.path))\n        )\n    );\n  }\n\n  sortTabs(tabs) {\n    // primary outlet tabs should be at the beginning of list so that firstTab$ is primary one\n    const tabsForPrimaryOutlet = this.sort(tabs.filter(t => !t.tabsOutlet));\n    const tabsForNamedOutlet = this.sort(tabs.filter(t => t.tabsOutlet));\n\n    return [...tabsForPrimaryOutlet, ...tabsForNamedOutlet];\n  }\n\n  /**\n   * Returns the current state.\n   * @readonly\n   * @returns The current set of actions.\n   */\n  get state(): Set<Tab> {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new item to tabs and emits state change\n   * @param item The item to add.\n   */\n  add(item: Tab) {\n    this.state.add(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes a tab and emits a state change.\n   * @param item The item to remove.\n   */\n  remove(item: Tab) {\n    this.state.delete(item);\n    this.emitNewState();\n  }\n\n  get firstTab$() {\n    return this.items$.pipe(\n      map(tabs => tabs[0]),\n      filter(Boolean),\n      first()\n    );\n  }\n\n  /**\n   * Checks if at least one of the tabs is available.\n   * @param tabLabels The array of tab labels to check.\n   * @returns Returns true if at least one of the tabs is available.\n   */\n  areAvailable(tabLabels: string[]): boolean {\n    const currentTabsSetArray = Array.from(this.state);\n    return tabLabels.some(tabLabel => currentTabsSetArray.some(tab => tab.label === tabLabel));\n  }\n\n  protected setupItemsObservable(): Observable<Tab[]> {\n    return fromTrigger<Tab>(this.router, this.refresh$, [\n      getInjectedHooks<Tab>(HOOK_TABS, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      distinctUntilChanged(),\n      map(tabs => this.prepareTabs(tabs)),\n      shareReplay(1)\n    );\n  }\n\n  private sort(tabs) {\n    return tabs.sort((a, b) => {\n      const priorityOrder = (b.priority || 0) - (a.priority || 0);\n\n      if (!!priorityOrder) {\n        return priorityOrder;\n      }\n\n      if (!a.label) {\n        return 1;\n      }\n\n      if (!b.label) {\n        return -1;\n      }\n\n      const aTranslatedLabel = this.translateService.instant(a.label);\n      const bTranslatedLabel = this.translateService.instant(b.label);\n      const translatedLabelOrder = aTranslatedLabel.localeCompare(bTranslatedLabel);\n\n      return translatedLabelOrder;\n    });\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { OptionsService } from '../../common/options.service';\nimport { MessageBannerSettings } from './message-banner.model';\nimport { Observable, Subject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class MessageBannerService {\n  readonly MESSAGE_BANNER = 'messageBanner';\n  private readonly DISMISSED_BANNERS_KEY = 'c8y.dismissedMessageBanners';\n  private options = inject(OptionsService);\n  showBanner$ = new Subject<boolean>();\n  private isPreview = false;\n\n  settings$(): Observable<Partial<MessageBannerSettings>> {\n    return this.options.get$(this.MESSAGE_BANNER);\n  }\n\n  showBanner(isPreview = false): void {\n    this.isPreview = isPreview;\n    this.showBanner$.next(true);\n  }\n\n  dismiss(bannerId?: string, acknowledge?: boolean): void {\n    this.showBanner$.next(false);\n\n    if (!this.isPreview && bannerId && acknowledge) {\n      this.markBannerAsDismissed(bannerId);\n    }\n    this.isPreview = false;\n  }\n\n  currentValue() {\n    return this.options.get(this.MESSAGE_BANNER);\n  }\n\n  /**\n   * Checks if a banner with the given ID has been dismissed before.\n   */\n  isBannerDismissed(bannerId: string): boolean {\n    if (!bannerId) {\n      return false;\n    }\n\n    const dismissed = localStorage.getItem(this.DISMISSED_BANNERS_KEY);\n    if (!dismissed) {\n      return false;\n    }\n    const dismissedIds = JSON.parse(dismissed) as string[];\n    return dismissedIds.includes(bannerId);\n  }\n\n  /**\n   * Marks a banner as dismissed in localStorage.\n   */\n  private markBannerAsDismissed(bannerId: string): void {\n    const dismissed = localStorage.getItem(this.DISMISSED_BANNERS_KEY);\n    const dismissedIds: string[] = dismissed ? JSON.parse(dismissed) : [];\n\n    if (!dismissedIds.includes(bannerId)) {\n      dismissedIds.push(bannerId);\n      localStorage.setItem(this.DISMISSED_BANNERS_KEY, JSON.stringify(dismissedIds));\n    }\n  }\n}\n","import { Component, inject, OnInit } from '@angular/core';\nimport { MessageBannerSettings } from './message-banner.model';\nimport { MessageBannerService } from './message-banner.service';\nimport { Observable } from 'rxjs';\nimport { filter, shareReplay, startWith, switchMap, take } from 'rxjs/operators';\nimport { AsyncPipe } from '@angular/common';\nimport { IconDirective } from '../../common/icon.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { MarkdownToHtmlPipe } from '../../common/markdown-to-html.pipe';\n\n@Component({\n  selector: 'c8y-message-banner',\n  templateUrl: './message-banner.component.html',\n  standalone: true,\n  imports: [IconDirective, C8yTranslatePipe, AsyncPipe, MarkdownToHtmlPipe]\n})\nexport class MessageBannerComponent implements OnInit {\n  settings$: Observable<Partial<MessageBannerSettings>>;\n  showBanner$: Observable<boolean>;\n  private messageBannerService = inject(MessageBannerService);\n\n  ngOnInit() {\n    this.settings$ = this.messageBannerService.settings$().pipe(shareReplay(1));\n\n    this.showBanner$ = this.settings$.pipe(\n      filter(Boolean),\n      take(1),\n      switchMap(settings => {\n        const wasDismissed = settings?.messageBannerId\n          ? this.messageBannerService.isBannerDismissed(settings.messageBannerId)\n          : false;\n\n        const shouldShow = settings?.messageBannerEnabled && !wasDismissed;\n\n        return this.messageBannerService.showBanner$.pipe(startWith(shouldShow));\n      })\n    );\n  }\n\n  dismiss(settings: Partial<MessageBannerSettings>, acknowledge: boolean): void {\n    this.messageBannerService.dismiss(settings?.messageBannerId, acknowledge);\n  }\n}\n","@if (settings$ | async; as settings) {\n  @if (showBanner$ | async) {\n    <div>\n      <div\n        class=\"alert\"\n        [class]=\"'alert-' + settings.messageBannerType\"\n      >\n        <div\n          class=\"flex-grow\"\n          [innerHTML]=\"settings.messageBannerContent | translate | markdownToHtml | async\"\n        ></div>\n        <div class=\"d-flex\">\n          <button\n            class=\"btn btn-default m-l-auto\"\n            [title]=\"'Acknowledge and close' | translate\"\n            type=\"button\"\n            (click)=\"dismiss(settings, true)\"\n          >\n            {{ 'Acknowledge and close' | translate }}\n          </button>\n          <button\n            class=\"btn btn-default m-l-8\"\n            [title]=\"'Close' | translate\"\n            type=\"button\"\n            (click)=\"dismiss(settings, false)\"\n          >\n            {{ 'Close' | translate }}\n          </button>\n        </div>\n      </div>\n    </div>\n  }\n}\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport {\n  ExtensionFactory,\n  fromTrigger,\n  GenericHookType,\n  hookGeneric,\n  getInjectedHooks,\n  stateToFactory,\n  ExtensionPointForPlugins,\n  GenericHookOptions\n} from '../common/extension-hooks';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { Breadcrumb, BreadcrumbItem } from './breadcrumb.model';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type BreadcrumbExtension = Breadcrumb | Breadcrumb[] | ExtensionFactory<Breadcrumb>;\n\n/**\n * @deprecated Consider using the `hookBreadcrumb` function instead.\n */\nexport const HOOK_BREADCRUMB = new InjectionToken('HOOK_BREADCRUMB');\n\n/**\n * You can either provide a single `Breadcrumb` as parameter:\n * ```typescript\n *  hookBreadcrumb(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookBreadcrumb([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<Breadcrumb>`\n * ```typescript\n *  export class MyBreadcrumbFactory implements ExtensionFactory<Breadcrumb> {...}\n *  ...\n *  hookBreadcrumb(MyBreadcrumbFactory)\n * ```\n * A typed alternative to `HOOK_BREADCRUMB`.\n * @param breadcrumb The `Breadcrumb`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookBreadcrumb(\n  breadcrumb: GenericHookType<Breadcrumb>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<Breadcrumb>(breadcrumb, HOOK_BREADCRUMB, options);\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class BreadcrumbService extends ExtensionPointForPlugins<Breadcrumb> {\n  private preferredPath: string;\n\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  get state(): Set<Breadcrumb> {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new item to the action bar in the header.\n   * @param item The item to add.\n   */\n  add(item: Breadcrumb) {\n    this.state.add(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes an action bar item from the header.\n   * @param item The item to remove.\n   */\n  remove(item: Breadcrumb) {\n    this.state.delete(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Sets the crumb that contains that path to the top.\n   * @param path The path to prefer.\n   */\n  selectPreferredByPath(path: string) {\n    this.preferredPath = path;\n    this.refresh();\n  }\n\n  sortByPreferredPath(breadcrumbs: Breadcrumb[]): Breadcrumb[] {\n    if (this.preferredPath) {\n      return breadcrumbs.sort(bc =>\n        bc.items.find((item: BreadcrumbItem) => !!item.path?.match(this.preferredPath)) ? -1 : 1\n      );\n    }\n    return breadcrumbs;\n  }\n\n  protected setupItemsObservable(): Observable<Breadcrumb[]> {\n    return fromTrigger<Breadcrumb>(this.router, this.refresh$, [\n      getInjectedHooks<Breadcrumb>(HOOK_BREADCRUMB, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      distinctUntilChanged(),\n      map(breadcrumbs => this.sortByPreferredPath(breadcrumbs)),\n      shareReplay(1)\n    );\n  }\n}\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { DocLinkWithLabel } from './docs.models';\n\nexport const legalNoticesItem: DocLinkWithLabel = {\n  icon: 'gavel',\n  label: gettext('Legal notices'),\n  url: 'https://cumulocity.com/docs/legal-notices/',\n  type: 'doc'\n};\n\nexport const documentationItems: DocLinkWithLabel[] = [\n  {\n    icon: 'c8y-c8y-data', // double c8y- is correct!\n    label: gettext('Concepts`KEEP_ORIGINAL`'),\n    url: '/docs/concepts/introduction',\n    type: 'doc'\n  },\n  {\n    icon: 'c8y-user',\n    label: gettext('Getting started`KEEP_ORIGINAL`'),\n    url: '/docs/sector/getting_started',\n    type: 'doc'\n  },\n  {\n    icon: 'c8y-administration',\n    label: gettext('Platform administration`KEEP_ORIGINAL`'),\n    url: '/docs/sector/platform_administration',\n    type: 'doc'\n  },\n\n  {\n    icon: 'c8y-device-management',\n    label: gettext('Device Management'),\n    url: '/docs/sector/device_management',\n    type: 'doc'\n  },\n  {\n    icon: 'c8y-cockpit',\n    label: gettext('Application enablement`KEEP_ORIGINAL`'),\n    url: '/docs/sector/app_enablement',\n    type: 'doc'\n  },\n  {\n    icon: 'c8y-book',\n    label: gettext('Cumulocity IoT Edge`KEEP_ORIGINAL`'),\n    url: '/docs/edge/edge-introduction',\n    type: 'doc'\n  },\n  {\n    icon: 'c8y-data-explorer',\n    label: gettext('Streaming analytics`KEEP_ORIGINAL`'),\n    url: '/docs/streaming-analytics/overview-analytics',\n    type: 'doc'\n  },\n  {\n    icon: 'rest-api',\n    label: gettext('OpenAPI specification'),\n    url: '/api',\n    type: 'doc'\n  },\n  legalNoticesItem\n];\n","import { InjectionToken, Injector, Type } from '@angular/core';\nimport { ExtensionFactory, GenericHookType, hookGeneric } from '../common/extension-hooks';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type DocLinkExtension = DocLink | DocLink[] | ExtensionFactory<DocLink>;\n\nexport const HOOK_DOCS = new InjectionToken<DocLinkExtension[]>('HOOK_DOCS');\n\n/**\n * You can either provide a single `DocLink` as parameter:\n * ```typescript\n *  hookOptions(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookOptions([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<DocLink>`\n * ```typescript\n *  @Injectable({ providedIn: 'root' })\n *  export class MyDocLinkFactory implements ExtensionFactory<DocLink> {...}\n *  ...\n *  hookOptions(MyDocLinkFactory)\n * ```\n * A typed alternative to `HOOK_DOCS`.\n * @param doc The `DocLink`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookDocs(doc: GenericHookType<DocLink>) {\n  return hookGeneric<DocLink>(doc, HOOK_DOCS);\n}\n\n/**\n * A link on the right drawer.\n */\nexport type DocLink = DocLinkWithComponent | DocLinkWithLabel;\n\ninterface DocLinkBasic {\n  /**\n   * Doc is shown under Help & Support. Quicklink is displayed bigger and shown at the top.\n   */\n  type: 'doc' | 'quicklink';\n\n  /**\n   * Used for ordering the links.\n   */\n  priority?: number;\n  /**\n   * Specifies the target of the link.\n   * - If null, the link opens in the same tab.\n   * - If '_blank', the link opens in a new tab.\n   */\n  target?: string;\n}\n\nexport interface DocLinkWithComponent extends DocLinkBasic {\n  /**\n   * A component to render.\n   */\n  component: Type<any>;\n  /**\n   * A injector to use. If none is set the default root one is used.\n   */\n  injector?: Injector;\n  icon?: never;\n  iconSrc?: never;\n  label?: never;\n  url?: never;\n  /**\n   @deprecated pass a `url` instead\n   */\n  click?: never;\n}\n\nexport interface DocLinkWithLabel extends DocLinkBasic {\n  /**\n   * The (css) icon to display.\n   */\n  icon: SupportedIconsSuggestions;\n  /**\n   * An alternative image-path as icon.\n   */\n  iconSrc?: string;\n  /**\n   * A label to display.\n   */\n  label: string;\n  /**\n   * A url where the link naviagates to.\n   */\n  url: string;\n\n  /**\n   * A handler which is called if the DocLink is clicked.\n   * @deprecated pass a `url` instead\n   */\n  click?: any;\n  component?: never;\n  injector?: never;\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { OptionsService } from '../common/options.service';\nimport { documentationItems } from './defaults.items';\nimport { AppStateService } from '../common/ui-state.service';\nimport { DocLink, HOOK_DOCS, DocLinkWithLabel } from './docs.models';\nimport {\n  ExtensionPointWithoutStateForPlugins,\n  fromTriggerOnce,\n  getInjectedHooks\n} from '../common/extension-hooks';\nimport { Observable } from 'rxjs';\nimport { Router } from '@angular/router';\nimport { shareReplay, first, filter, distinctUntilChanged } from 'rxjs/operators';\nimport { isUndefined, get } from 'lodash-es';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DocsService extends ExtensionPointWithoutStateForPlugins<DocLink> {\n  /**\n   * Default documentation URL.\n   */\n  readonly DEFAULT_DOCS_BASE_URL = 'https://cumulocity.com';\n  constructor(\n    private options: OptionsService,\n    private app: AppStateService,\n    rootInjector: Injector,\n    private router: Router,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  getBaseUrl(uiVersion?: string | { ngx: string }): string {\n    const docsBaseUrl = this.options.get<string>('docsBaseUrl', this.DEFAULT_DOCS_BASE_URL);\n    return this.getUrlWithDocsVersion(docsBaseUrl, uiVersion);\n  }\n\n  /**\n   * Takes a URL and replaces all `{{ version }}` placeholders with the relevant docs version\n   * (the version is derived from the app state or from the provided parameter).\n   * @param url Any URL that contains `{{ version }}` placeholders.\n   * @param uiVersion A version string or object, defaults to the app state version.\n   * @returns The URL with replaced `{{ version }}` placeholders.\n   */\n  getUrlWithDocsVersion(\n    url: string,\n    uiVersion: string | { ngx: string } = this.app.uiVersion\n  ): string {\n    const version: string = typeof uiVersion === 'string' ? uiVersion : get(uiVersion, 'ngx');\n    let docsVersion = '';\n    if (!(isUndefined(version) || version === '')) {\n      docsVersion = this.getDocsVersionForUiVersion(version);\n    }\n    return url.replace(/{{\\s*version\\s*}}/g, docsVersion).replace(/\\/+$/g, '');\n  }\n\n  get templateStr(): string {\n    return this.options.get('guideHrefTemplate', '${docsBaseUrl}${partialUrl}');\n  }\n\n  getUserGuideLink(link) {\n    if (/^https?:/.test(link)) {\n      return link;\n    }\n    if (this.getBaseUrl === null) {\n      return null;\n    }\n    return this.getLink(this.templateStr, link);\n  }\n\n  list() {\n    return this.items$\n      .pipe(\n        filter(i => !!i.length),\n        first()\n      )\n      .toPromise();\n  }\n\n  get() {\n    // use the function as a factory\n    const { links, noDefault, excludeDefault = [] } = this.options.get('docs', {});\n    let staticLinks: DocLink[] = noDefault\n      ? []\n      : documentationItems\n          .map((item: DocLinkWithLabel) => ({ ...item, url: this.getUserGuideLink(item.url) }))\n          .filter(({ url }) => !excludeDefault.some(e => new RegExp(e).test(url)));\n\n    if (links) {\n      // backwards compatibility\n      links.map((lnk: DocLink) => {\n        if (isUndefined(lnk.type)) {\n          lnk.type = 'doc';\n          return lnk;\n        }\n      });\n      staticLinks = staticLinks.concat(links);\n    }\n    return staticLinks;\n  }\n\n  getItemsFromHookDocs(): DocLink[] {\n    return [...getInjectedHooks<DocLink>(HOOK_DOCS, this.injectors)()];\n  }\n\n  protected setupItemsObservable(): Observable<DocLink[]> {\n    const supportUrlRefreshTrigger = this.app.map(({ supportUrl }) => supportUrl);\n    return fromTriggerOnce<DocLink>(\n      this.router,\n      [supportUrlRefreshTrigger, this.refresh$],\n      [getInjectedHooks<DocLink>(HOOK_DOCS, this.injectors), () => this.factories, this]\n    ).pipe(shareReplay(1), distinctUntilChanged());\n  }\n\n  private getLink(templateStr, partialLink) {\n    if (!templateStr) {\n      return undefined;\n    }\n    return templateStr\n      .replace(/\\${docsBaseUrl}/, this.getBaseUrl())\n      .replace(/\\${partialUrl}/, this.prefixWithSlash(partialLink));\n  }\n\n  private prefixWithSlash(partialLink = '') {\n    const shouldPrefix = !(partialLink && /^\\//.test(partialLink));\n    const prefix = shouldPrefix ? '/' : '';\n    return `${prefix}${partialLink}`;\n  }\n\n  /**\n   * Returns the most relevant version of documentation for the given version of UI.\n   * For maintenance versions, it's the first version in the line, e.g. 1017.0.123 -> 10.17.0.\n   * For develop versions, it's the next minor one, e.g. 1017.123.0-SNAPSHOT -> 10.18.0.\n   *\n   * @param uiVersion The version of UI.\n   * @private\n   */\n  private getDocsVersionForUiVersion(uiVersion: string) {\n    const [majorMinorStr, patchStr] = uiVersion.split('.');\n    const patchNumber = parseInt(patchStr, 10);\n    const takeNextMinor = patchNumber > 0;\n    const majorNumber = Math.floor(parseInt(majorMinorStr, 10) / 100);\n    const minorNumber = parseInt(majorMinorStr, 10) - majorNumber * 100 + (takeNextMinor ? 1 : 0);\n    return `${majorNumber}.${minorNumber}.0`;\n  }\n}\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, shareReplay } from 'rxjs/operators';\nimport {\n  fromTrigger,\n  GenericHookType,\n  hookGeneric,\n  getInjectedHooks,\n  stateToFactory,\n  ExtensionPointForPlugins,\n  GenericHookOptions\n} from '../common/extension-hooks';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { Search } from './search.model';\n\n/**\n * A hook to use for Multi Provider extension.\n * Consider using the `hookSearch` function instead.\n * @deprecated Please don't use the search factory. It will be refactored soon.\n */\nexport const HOOK_SEARCH = new InjectionToken('HOOK_SEARCH');\n\n/**\n * You can either provide a single `Search` as parameter:\n * ```typescript\n *  hookSearch(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookSearch([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<Search>`\n * ```typescript\n *  export class MySearchFactory implements ExtensionFactory<Search> {...}\n *  ...\n *  hookSearch(MySearchFactory)\n * ```\n * A typed alternative to `HOOK_SEARCH`.\n * @param search The `Search`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n * @deprecated Please don't use the search factory. It will be refactored soon.\n */\nexport function hookSearch(search: GenericHookType<Search>, options?: Partial<GenericHookOptions>) {\n  return hookGeneric<Search>(search, HOOK_SEARCH, options);\n}\n\nexport enum SearchFilters {\n  ONLY_DEVICES = 'onlyDevices',\n  ONLY_GROUPS_AND_ASSETS = 'onlyGroupsAndAssets',\n  ALL_FILTERS = 'allFilters',\n  CURRENT_HIERARCHY = 'currentHierarchy'\n}\n\n/**\n * A service which defines the search function.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class SearchService extends ExtensionPointForPlugins<Search> {\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  /**\n   * Returns the current state.\n   * @readonly\n   * @returns The current set of actions.\n   */\n  get state() {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new item to the search in the header.\n   * @param item The item to add.\n   */\n  add(item: Search) {\n    this.state.add(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes an search from the header.\n   * @param item The item to remove.\n   */\n  remove(item: Search) {\n    this.state.delete(item);\n    this.emitNewState();\n  }\n\n  protected setupItemsObservable(): Observable<Search[]> {\n    return fromTrigger<Search>(this.router, this.refresh$, [\n      getInjectedHooks<Search>(HOOK_SEARCH, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(shareReplay(1), distinctUntilChanged());\n  }\n}\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport { UserMenuItem } from './user.model';\nimport {\n  ExtensionPointForPlugins,\n  fromTriggerOnce,\n  GenericHookOptions,\n  GenericHookType,\n  getInjectedHooks,\n  hookGeneric,\n  sortByPriority,\n  stateToFactory\n} from '../common';\nimport { Router } from '@angular/router';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\n\n/**\n * A hook to use for Multi Provider extension.\n * Consider using the `hookUserMenu` function instead.\n */\nconst HOOK_USER_MENU = new InjectionToken<UserMenuItem[]>('HOOK_USER_MENU');\n\n/**\n * You can either provide a single `UserMenuItem` as parameter:\n * ```typescript\n * hookUserMenu(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * hookUserMenu([...])\n * ```\n *\n * Or you provide a Service that implements `ExtensionFactory<UserMenuItem>`\n * ```typescript\n * export class MyUserMenuFactory implements ExtensionFactory<UserMenuItem> {...}\n * ...\n * hookUserMenu(MyUserMenuFactory)\n * ```\n * @param userMenu The `UserMenuItem`'s or `ExtensionFactory` to be provided.\n * @param options The options to use for the hook.\n * @returns A `Provider` to be provided in your module.\n */\nexport function hookUserMenu(\n  userMenu: GenericHookType<UserMenuItem>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<UserMenuItem>(userMenu, HOOK_USER_MENU, options);\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class UserMenuService extends ExtensionPointForPlugins<UserMenuItem> {\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    pluginService: PluginsResolveService\n  ) {\n    super(rootInjector, pluginService);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  /**\n   * Returns the current state.\n   * @readonly\n   * @returns The current set of actions.\n   */\n  get state() {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new item to the search in the header.\n   * @param item The item to add.\n   */\n  add(item: UserMenuItem) {\n    this.state.add(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes an search from the header.\n   * @param item The item to remove.\n   */\n  remove(item: UserMenuItem) {\n    this.state.delete(item);\n    this.emitNewState();\n  }\n\n  /**\n   * Sets the items observable.\n   * @returns The items observable.\n   */\n  protected setupItemsObservable(): Observable<UserMenuItem[]> {\n    return fromTriggerOnce<UserMenuItem>(this.router, this.refresh$, [\n      getInjectedHooks<UserMenuItem>(HOOK_USER_MENU, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      map(items => Array.from(items.values())),\n      map(items => sortByPriority(items)),\n      distinctUntilChanged(),\n      shareReplay(1)\n    );\n  }\n}\n","import { Component, ElementRef, NgZone } from '@angular/core';\nimport { HeaderService } from '../header.service';\nimport { debounceTime, map, filter } from 'rxjs/operators';\nimport { OutletDirective } from '../../common/outlet.directive';\n\n@Component({\n  selector: 'c8y-title-outlet',\n  templateUrl: './title-outlet.component.html',\n  standalone: true,\n  imports: [OutletDirective]\n})\nexport class TitleOutletComponent {\n  title = undefined;\n  pageTitleUpdate = true;\n\n  constructor(\n    private headerService: HeaderService,\n    private element: ElementRef,\n    private zone: NgZone\n  ) {\n    const title$ = this.headerService.map(state => state.title);\n    title$.subscribe(title => {\n      this.title = title;\n    });\n\n    const pageTitleUpdate$ = this.headerService.map(state => state.pageTitleUpdate);\n    pageTitleUpdate$.subscribe(pageTitleUpdate => (this.pageTitleUpdate = pageTitleUpdate));\n\n    this.zone.runOutsideAngular(() => {\n      this.headerService.state$\n        .pipe(\n          debounceTime(100),\n          filter(state => state.pageTitleUpdate),\n          debounceTime(100),\n          map(() => this.element.nativeElement.querySelector('h1')),\n          filter(el => el !== null),\n          map(el => el.innerText),\n          filter(Boolean)\n        )\n        .subscribe((title: string) => headerService.changePageTitle(title));\n    });\n  }\n}\n","<div class=\"c8y-ui-title\" data-cy=\"c8y-title--title-outlet\">\n  <div class=\"title\" *c8yOutlet=\"title\"></div>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { Breadcrumb } from './breadcrumb.model';\nimport { IconDirective } from '../common/icon.directive';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { OutletDirective } from '../common/outlet.directive';\nimport { RouterLink } from '@angular/router';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\n\n@Component({\n  selector: 'c8y-breadcrumb-outlet',\n  templateUrl: './breadcrumb-outlet.component.html',\n  standalone: true,\n  imports: [\n    IconDirective,\n    TooltipModule,\n    OutletDirective,\n    RouterLink,\n    C8yTranslatePipe,\n    BsDropdownModule\n  ]\n})\nexport class BreadcrumbOutletComponent {\n  showAll = false;\n  @Input() breadcrumbs: Breadcrumb[] = [];\n  @Input() dropdownOpen = false;\n  readonly GROUP_ICON = 'c8y-group';\n\n  /**\n   * For upgrade only. Old angularjs routes start with hash, new ones not.\n   */\n  normalizePath(path) {\n    return path?.replace(/^#\\/?/, '');\n  }\n\n  ngOnChanges() {\n    this.dropdownOpen =\n      this.breadcrumbs?.length > 1 && this.breadcrumbs.some(b => b.forceDropdownOpen);\n  }\n}\n","@if (breadcrumbs && breadcrumbs.length > 0) {\n  <div class=\"breadcrumbs-container d-flex\">\n    @if (breadcrumbs.length > 1) {\n      <div\n        class=\"l-h-1\"\n        container=\"body\"\n        dropdown\n        #breadcrumbDropdown=\"bs-dropdown\"\n        [isOpen]=\"dropdownOpen\"\n      >\n        <button\n          class=\"btn-clean btn-xs btn p-l-4 p-r-4 p-t-0 p-b-0\"\n          title=\"{{ 'Show all paths' | translate }}\"\n          type=\"button\"\n          dropdownToggle\n        >\n          <i [c8yIcon]=\"breadcrumbDropdown.isOpen ? 'caret-down' : 'caret-right'\"></i>\n        </button>\n        <div\n          class=\"dropdown-menu\"\n          *dropdownMenu\n        >\n          @for (breadcrumb of breadcrumbs; track breadcrumb; let i = $index; let first = $first) {\n            <!-- in dropdown menu, show all breadcrumbs except the first one -->\n            @if (!first) {\n              <div class=\"p-t-8 p-r-16 p-b-8 p-l-16 separator-bottom\">\n                <ul class=\"breadcrumbs text-muted m-l-4\">\n                  @for (\n                    item of breadcrumb.items;\n                    track item;\n                    let isLast = $last;\n                    let isFirst = $first\n                  ) {\n                    <li class=\"text-muted\">\n                      @if (!isFirst) {\n                        <span><i [c8yIcon]=\"'forward'\"></i></span>\n                      }\n                      @if (!isLast) {\n                        <a\n                          class=\"word-break\"\n                          [routerLink]=\"item.path\"\n                        >\n                          @if (item.icon) {\n                            <i\n                              class=\"m-r-4\"\n                              [c8yIcon]=\"item.icon\"\n                            ></i>\n                          }\n                          <span>{{ item.label | translate }}</span>\n                        </a>\n                      } @else {\n                        @if (item.icon) {\n                          <i\n                            class=\"m-r-4\"\n                            [c8yIcon]=\"item.icon\"\n                          ></i>\n                        }\n                        <span>{{ item.label | translate }}</span>\n                      }\n                    </li>\n                  }\n                </ul>\n              </div>\n            }\n          }\n        </div>\n      </div>\n    }\n    <ul\n      class=\"breadcrumbs text-muted\"\n      [attr.role]=\"'navigation'\"\n    >\n      <!-- show only first breadcrumb- applicable both for single and multiple breadcrumb cases (for multiple breadcrumbs, rest are in dropdown) -->\n      @for (item of breadcrumbs[0].items; track item; let firstItem = $first) {\n        <li class=\"text-muted\">\n          @if (!firstItem) {\n            <span class=\"l-h-1 a-s-stretch d-flex a-i-center\"><i c8yIcon=\"forward\"></i></span>\n          }\n          <ng-container\n            *c8yOutlet=\"item.component || item.template; injector: breadcrumbs[0].injector\"\n          ></ng-container>\n          @if (item.label && item.path) {\n            <a\n              class=\"word-break\"\n              title=\"{{ item.label | translate }}\"\n              [attr.aria-label]=\"'breadcrumb'\"\n              [routerLink]=\"normalizePath(item.path)\"\n            >\n              <i\n                class=\"m-r-4\"\n                [c8yIcon]=\"item.icon\"\n              ></i>\n              <span>{{ item.label | translate }}</span>\n            </a>\n          }\n          @if (item.label && !item.path) {\n            <i\n              class=\"m-r-4\"\n              [c8yIcon]=\"item.icon\"\n            ></i>\n            <span title=\"{{ item.label | translate }}\">{{ item.label | translate }}</span>\n          }\n        </li>\n      }\n    </ul>\n  </div>\n}\n","import { Component, Input } from '@angular/core';\nimport { Search } from './search.model';\nimport { sortBy } from 'lodash';\nimport { AlertService } from '../alert/alert.service';\nimport { NgFor } from '@angular/common';\nimport { OutletDirective } from '../common/outlet.directive';\n\n@Component({\n  selector: 'c8y-search-outlet',\n  templateUrl: './search-outlet.component.html',\n  standalone: true,\n  imports: [NgFor, OutletDirective]\n})\nexport class SearchOutletComponent {\n  @Input() search: Search[] = [];\n\n  constructor(private alertService: AlertService) {}\n\n  getByPriority(): Search[] {\n    return sortBy(this.search, this.byPriority);\n  }\n\n  private byPriority(item) {\n    return -item.priority;\n  }\n}\n","<ng-container *ngFor=\"let item of getByPriority()\">\n  <ng-container *c8yOutlet=\"item.template; injector: item.injector\"></ng-container>\n</ng-container>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';\nimport { DrawerItem, DrawerPositions } from '../drawer.model';\nimport { DrawerService } from '../drawer.service';\nimport { NgIf, NgClass, NgTemplateOutlet, NgFor, AsyncPipe } from '@angular/common';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { C8yComponentOutlet } from '../../common/component-outlet.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-drawer-outlet',\n  templateUrl: './drawer-outlet.component.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    NgClass,\n    NgTemplateOutlet,\n    CdkTrapFocus,\n    NgFor,\n    C8yComponentOutlet,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class DrawerOutletComponent implements OnChanges {\n  @Input() position: DrawerPositions;\n  @Input() open: boolean;\n  drawerItems$: Observable<DrawerItem[]>;\n\n  isLeft$: Observable<boolean>;\n\n  private drawerPosition$ = new BehaviorSubject<DrawerPositions>(null);\n\n  constructor(private drawerService: DrawerService) {\n    const cleanedPosition$ = this.drawerPosition$.pipe(\n      filter(p => !!p),\n      distinctUntilChanged()\n    );\n    this.isLeft$ = cleanedPosition$.pipe(map(position => position === 'left'));\n    this.drawerItems$ = cleanedPosition$.pipe(\n      filter(p => !!p),\n      distinctUntilChanged(),\n      switchMap(position => this.drawerService.getDrawersForPosition$(position))\n    );\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.position) {\n      this.drawerPosition$.next(this.position);\n    }\n  }\n}\n","<nav\n  id=\"navigator\"\n  class=\"navigator\"\n  [attr.aria-label]=\"'Navigator' | translate\"\n  [ngClass]=\"{ open: open }\"\n  *ngIf=\"isLeft$ | async; else right\"\n>\n  <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n</nav>\n\n<ng-template #right>\n  <aside class=\"c8y-right-drawer\" [cdkTrapFocus]=\"open\" [attr.aria-label]=\"'User menu' | translate\">\n    <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n  </aside>\n</ng-template>\n\n<ng-template #content>\n  <ng-container *ngFor=\"let drawerItem of drawerItems$ | async\">\n    <ng-container *c8yComponentOutlet=\"drawerItem.component; environmentInjector: drawerItem.injector\"></ng-container>\n  </ng-container>\n</ng-template>\n","import { AfterViewInit, Component, Input } from '@angular/core';\nimport { IApplication } from '@c8y/client';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { ActionService } from '../../action/action.service';\nimport { BreadcrumbService } from '../../breadcrumb/breadcrumb.service';\nimport { AppStateService } from '../../common/ui-state.service';\nimport { DocsService } from '../../docs/docs.service';\nimport { SearchService } from '../../search/search.service';\nimport { UserMenuService } from '../../user/user-menu.service';\nimport { HeaderService } from '../header.service';\nimport { NgClass, AsyncPipe } from '@angular/common';\nimport { IconDirective } from '../../common/icon.directive';\nimport { AppIconComponent } from '../../application/app-icon.component';\nimport { TitleOutletComponent } from '../title/title-outlet.component';\nimport { BreadcrumbOutletComponent } from '../../breadcrumb/breadcrumb-outlet.component';\nimport { SearchOutletComponent } from '../../search/search-outlet.component';\nimport { ActionOutletComponent } from '../../action/action-outlet.component';\nimport { AppSwitcherComponent } from '../../application/app-switcher.component';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { DrawerOutletComponent } from '../../drawer/drawer-outlet/drawer-outlet.component';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { ShortenUserNamePipe } from '../../common/shorten-user-name.pipe';\nimport { UserNameInitialsPipe } from '../../common/user-name-initials.pipe';\n\n@Component({\n  selector: 'c8y-header-bar',\n  templateUrl: './header-bar.component.html',\n  standalone: true,\n  imports: [\n    NgClass,\n    IconDirective,\n    AppIconComponent,\n    TitleOutletComponent,\n    BreadcrumbOutletComponent,\n    SearchOutletComponent,\n    ActionOutletComponent,\n    AppSwitcherComponent,\n    TooltipModule,\n    DrawerOutletComponent,\n    C8yTranslatePipe,\n    AsyncPipe,\n    ShortenUserNamePipe,\n    UserNameInitialsPipe\n  ]\n})\nexport class HeaderBarComponent implements AfterViewInit {\n  canToggle$: Observable<boolean> = this.headerService.canToggleNavigator$;\n  appState$ = this.appState.state$.asObservable();\n  app$: Observable<IApplication>;\n  headerOpen = false;\n  loadingClass$ = new Observable<{ active: boolean }>();\n  showNotification$ = this.headerService.showNotification$;\n  /**\n   * Can be set to show an header bar with only\n   * title, app-switcher and user-menu\n   */\n  @Input()\n  simple = false;\n\n  constructor(\n    public headerService: HeaderService,\n    public actionService: ActionService,\n    public breadcrumbService: BreadcrumbService,\n    public searchService: SearchService,\n    public appState: AppStateService,\n    public userMenuService: UserMenuService,\n    public docs: DocsService,\n    public apiService: ApiService\n  ) {\n    this.app$ = this.appState.currentApplication.pipe(filter(app => !!app));\n    this.loadingClass$ = this.apiService.isLoading$.pipe(map(loading => ({ active: loading })));\n  }\n\n  ngAfterViewInit() {\n    this.headerService.verifyIfNavOpen();\n  }\n\n  toggleDrawer() {\n    this.headerService.toggleRightDrawer();\n  }\n\n  closeDrawer() {\n    this.headerService.closeRightDrawer();\n  }\n}\n","<div\n  class=\"app-main-header\"\n  [ngClass]=\"{\n    open: (headerService.navigatorOpen$ | async) && !simple,\n    drawerOpen: headerService.rightDrawerOpen$ | async\n  }\"\n>\n  <div\n    class=\"header-bar\"\n    role=\"banner\"\n  >\n    @if ((headerService.canToggleNavigator$ | async) && !simple) {\n      <button\n        class=\"navigator-toggle main-header-button\"\n        title=\"{{ 'Toggle navigation bar' | translate }}\"\n        [attr.aria-expanded]=\"headerService.navigatorOpen$ | async\"\n        [attr.aria-controls]=\"'navigator'\"\n        type=\"button\"\n        data-cy=\"header-bar--main-header-button\"\n        (click)=\"headerService.toggleNavigator()\"\n      >\n        @if (!(headerService.navigatorOpen$ | async)) {\n          <i [c8yIcon]=\"'outdent'\"></i>\n        }\n        @if (headerService.navigatorOpen$ | async) {\n          <i [c8yIcon]=\"'dedent-right'\"></i>\n        }\n      </button>\n    }\n    <div class=\"app-view\">\n      <c8y-app-icon\n        [name]=\"(appState$ | async).app?.name\"\n        [contextPath]=\"(appState$ | async).app?.contextPath\"\n        [app]=\"(app$ | async) || (appState$ | async).app\"\n      ></c8y-app-icon>\n\n      <span class=\"page-header\">\n        <c8y-title-outlet></c8y-title-outlet>\n        @if (!simple) {\n          <c8y-breadcrumb-outlet\n            class=\"app-breadcrumbs\"\n            [breadcrumbs]=\"breadcrumbService.items$ | async\"\n          ></c8y-breadcrumb-outlet>\n        }\n      </span>\n    </div>\n    @if (!simple) {\n      <c8y-search-outlet\n        class=\"main-header-item\"\n        [search]=\"searchService.items$ | async\"\n      ></c8y-search-outlet>\n    }\n    @if (!simple) {\n      <c8y-action-outlet [items]=\"actionService.items$ | async\"></c8y-action-outlet>\n    }\n    @if (appState.currentUser.value) {\n      <c8y-app-switcher\n        class=\"main-header-item\"\n        title=\"{{ 'Application switcher' | translate }}\"\n      ></c8y-app-switcher>\n    }\n    @if (showNotification$ | async) {\n      <button\n        class=\"main-header-button drawer-toggle\"\n        [attr.aria-label]=\"appState.currentUser | async | shortenUserName\"\n        tooltip=\"{{ appState.currentUser | async | shortenUserName }}\n{{ 'New features available' | translate }}\"\n        placement=\"left\"\n        [attr.aria-expanded]=\"headerService.rightDrawerOpen$ | async\"\n        [attr.aria-controls]=\"'right-drawer'\"\n        type=\"button\"\n        [delay]=\"500\"\n        (click)=\"toggleDrawer()\"\n        [attr.data-cy]=\"'right-drawer-toggle-button'\"\n      >\n        @if (appState.currentUser | async) {\n          <span\n            class=\"user-dot user-dot-notification\"\n            data-cy=\"header-bar--user-dot\"\n          >\n            {{ appState.currentUser | async | userNameInitials }}\n          </span>\n        }\n        <span class=\"close-dot\">&times;</span>\n      </button>\n      @if (!(headerService.rightDrawerOpen$ | async)) {\n        <div\n          class=\"p-relative a-s-stretch no-pointer\"\n          style=\"order: 4\"\n        >\n          @if (showNotification$ | async) {\n            <span class=\"c8y-pulse c8y-pulse--md active\"></span>\n          }\n        </div>\n      }\n    } @else {\n      <button\n        class=\"main-header-button drawer-toggle\"\n        [attr.aria-label]=\"appState.currentUser | async | shortenUserName\"\n        tooltip=\"{{ appState.currentUser | async | shortenUserName }}\"\n        placement=\"left\"\n        [attr.aria-expanded]=\"headerService.rightDrawerOpen$ | async\"\n        [attr.aria-controls]=\"'right-drawer'\"\n        type=\"button\"\n        [delay]=\"500\"\n        (click)=\"toggleDrawer()\"\n        [attr.data-cy]=\"'right-drawer-toggle-button'\"\n      >\n        @if (appState.currentUser | async) {\n          <span\n            class=\"user-dot user-dot-notification\"\n            data-cy=\"header-bar--user-dot\"\n          >\n            {{ appState.currentUser | async | userNameInitials }}\n          </span>\n        }\n        <span class=\"close-dot\">&times;</span>\n      </button>\n    }\n  </div>\n  <div class=\"head-toggler\">\n    <button\n      title=\"{{ 'Toggle' | translate }}\"\n      type=\"button\"\n      data-cy=\"header-bar--toggle\"\n      (click)=\"headerService.toggle()\"\n    >\n      <i [c8yIcon]=\"'angle-right'\"></i>\n    </button>\n  </div>\n  <c8y-drawer-outlet\n    id=\"right-drawer\"\n    [tabindex]=\"(headerService.rightDrawerOpen$ | async) ? '0' : '-1'\"\n    [attr.aria-hidden]=\"!(headerService.rightDrawerOpen$ | async)\"\n    position=\"right\"\n    [open]=\"headerService.rightDrawerOpen$ | async\"\n  ></c8y-drawer-outlet>\n  <div\n    class=\"loading-bar\"\n    [ngClass]=\"loadingClass$ | async\"\n  ></div>\n</div>\n","import {\n  Component,\n  Input,\n  HostBinding,\n  Renderer2,\n  ElementRef,\n  ViewChild,\n  OnDestroy,\n  AfterContentInit,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { debounceTime, map, take, takeUntil } from 'rxjs/operators';\nimport { fromEventPattern, fromEvent, merge, BehaviorSubject, Subject } from 'rxjs';\nimport {\n  ActivatedRoute,\n  NavigationExtras,\n  Router,\n  RouterLinkActive,\n  RouterLink\n} from '@angular/router';\nimport { Tab } from './tab.model';\nimport { HeaderService } from '../header/header.service';\nimport { TabsService } from './tabs.service';\nimport { NgClass, NgTemplateOutlet, NgComponentOutlet } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { C8yComponentOutlet } from '../common/component-outlet.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-tabs-outlet,c8y-ui-tabs',\n  templateUrl: './tabs-outlet.component.html',\n  standalone: true,\n  imports: [\n    NgClass,\n    IconDirective,\n    RouterLinkActive,\n    RouterLink,\n    TooltipModule,\n    NgTemplateOutlet,\n    NgComponentOutlet,\n    C8yComponentOutlet,\n    C8yTranslatePipe\n  ]\n})\nexport class TabsOutletComponent implements OnDestroy, AfterContentInit, OnChanges {\n  @Input() tabs: Tab[] = [];\n  @Input() orientation: 'vertical' | 'horizontal' = 'vertical';\n  @Input() navigatorOpen = false;\n  @Input() outletName: string | undefined;\n  @Input() context: any;\n  @Input() openFirstTab = true;\n  /**\n   * Identifies if the current view has a header element.\n   */\n  @Input() @HostBinding('class.has-header') hasHeader = false;\n\n  showLeft = false;\n  showRight = false;\n  extras: NavigationExtras = {\n    queryParamsHandling: 'preserve',\n    relativeTo: this.activatedRoute\n  };\n  @HostBinding('class.navigator-open') get isNavigatorOpen() {\n    return this.navigatorOpen;\n  }\n  @HostBinding('class.page-tabs') get hasTabs() {\n    let visibleTabs = [];\n    if (this.tabs) {\n      visibleTabs = this.tabs.filter(tab => tab.hide !== true);\n    }\n    return visibleTabs.length > 1 || visibleTabs.find(tab => tab.showAlways);\n  }\n  @HostBinding('class.page-tabs-horizontal') get isHorizontal() {\n    return this.orientation === 'horizontal';\n  }\n  @HostBinding('class.page-tabs-vertical') get isVertical() {\n    return this.orientation !== 'horizontal';\n  }\n  @ViewChild('container', { read: ElementRef, static: true }) private container: ElementRef;\n  @ViewChild('tabsContainer', { read: ElementRef, static: false })\n  private tabsContainer: ElementRef;\n  private destroy$ = new Subject<void>();\n  private tabsChanges$ = new BehaviorSubject<Tab[]>([]);\n\n  constructor(\n    private router: Router,\n    private renderer: Renderer2,\n    private header: HeaderService,\n    private tabsService: TabsService,\n    private activatedRoute: ActivatedRoute\n  ) {}\n\n  ngOnInit(): void {\n    if (this.outletName && this.tabs.length === 0) {\n      const tabsSubscription$ = this.tabsService.items$.pipe(\n        map(tabs => tabs.filter(tab => tab.tabsOutlet === this.outletName)),\n        takeUntil(this.destroy$)\n      );\n\n      tabsSubscription$.subscribe(tabs => {\n        this.tabs = tabs;\n      });\n\n      tabsSubscription$.pipe(take(1)).subscribe(tabs => {\n        if (this.openFirstTab && tabs.length) {\n          this.navigateTo(tabs[0].path);\n        }\n      });\n    } else if (this.openFirstTab && this.tabs.length) {\n      const matchingTab = this.tabs.find(tab => this.isActive(tab));\n      // only navigate to first tab if no tab is active\n      if (!matchingTab) {\n        this.navigateTo(this.tabs[0].path);\n      }\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.tabs) {\n      this.tabs = this.tabs.filter(tab => tab.tabsOutlet === this.outletName);\n      this.tabsChanges$.next(this.tabs);\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  ngAfterContentInit() {\n    if (this.orientation === 'horizontal') {\n      this.scrollSubscribe();\n    }\n  }\n\n  trackByPath(index, tab: Tab) {\n    return tab.path ? tab.path : index;\n  }\n\n  isActive(tab: Tab) {\n    if (tab && tab.path) {\n      const tree = this.router.createUrlTree(typeof tab.path === 'string' ? [tab.path] : tab.path);\n      return this.router.isActive(tree, {\n        paths: 'subset',\n        queryParams: 'subset',\n        fragment: 'ignored',\n        matrixParams: 'ignored'\n      });\n    } else {\n      return false;\n    }\n  }\n\n  navigateTo(path: string | any[]) {\n    if (this.header.largeWidth) {\n      this.header.toggle();\n    }\n    if (typeof path === 'string') {\n      this.router.navigate([path], this.extras);\n      return;\n    }\n    this.router.navigate(path, this.extras);\n  }\n\n  scroll(direction: 'right' | 'left' = 'right') {\n    const { widthScroll, width, scrollLeft } = this.getDimensions();\n    const multiplier = direction === 'left' ? -1 : 1;\n\n    let targetScroll = scrollLeft + width * multiplier;\n    if (targetScroll < 0) {\n      targetScroll = 0;\n    }\n    if (targetScroll > widthScroll - width) {\n      targetScroll = widthScroll - width;\n    }\n    this.container.nativeElement.scrollLeft = targetScroll;\n  }\n\n  private scrollSubscribe() {\n    let unlisten;\n    merge(\n      this.tabsChanges$,\n      fromEvent(this.container.nativeElement, 'scroll'),\n      fromEventPattern(\n        (handler: any) => {\n          unlisten = this.renderer.listen('window', 'resize', handler);\n        },\n        () => unlisten()\n      )\n    )\n      .pipe(debounceTime(250), takeUntil(this.destroy$))\n      .subscribe(() => this.updateScroll());\n  }\n\n  private updateScroll() {\n    const { widthScroll, width, scrollLeft } = this.getDimensions();\n    this.showLeft = !!scrollLeft;\n    this.showRight = widthScroll > width + scrollLeft;\n  }\n\n  private getDimensions() {\n    const elTabs = this.tabsContainer.nativeElement;\n    const el = this.container.nativeElement;\n    const widthScroll = elTabs.scrollWidth;\n    const width = el.clientWidth;\n    const scrollLeft = el.scrollLeft;\n    return { widthScroll, width, scrollLeft };\n  }\n}\n","<div\n  class=\"tabContainer\"\n  [ngClass]=\"{ 'hidden-xs': !outletName }\"\n  #container\n>\n  @if (showLeft || showRight) {\n    <button\n      class=\"tabs-slider tabs-slider-left\"\n      title=\"{{ 'Scroll to the left' | translate }}\"\n      type=\"button\"\n      #left\n      [disabled]=\"!showLeft\"\n      (click)=\"scroll('left')\"\n    >\n      <i [c8yIcon]=\"'chevron-left'\"></i>\n    </button>\n  }\n  @if (showRight || showLeft) {\n    <button\n      class=\"tabs-slider tabs-slider-right\"\n      title=\"{{ 'Scroll to the right' | translate }}\"\n      type=\"button\"\n      #right\n      [disabled]=\"!showRight\"\n      (click)=\"scroll('right')\"\n    >\n      <i [c8yIcon]=\"'chevron-right'\"></i>\n    </button>\n  }\n  @if (!outletName) {\n    <div\n      class=\"nav nav-tabs nav-tabsc8y\"\n      role=\"list\"\n      #tabsContainer\n    >\n      @for (tab of tabs; track tab) {\n        @if (!tab.component && !tab.hide) {\n          <div\n            role=\"listitem\"\n            [attr.data-cy]=\"'c8y-tab--tab-item-' + tab.label\"\n            [ngClass]=\"{ active: rla?.isActive }\"\n          >\n            <a\n              [routerLink]=\"tab.path\"\n              routerLinkActive\n              [queryParamsHandling]=\"'preserve'\"\n              #rla=\"routerLinkActive\"\n              [ngClass]=\"{ 'p-r-24': !tab.template && tab?.badge }\"\n              (click)=\"tab.onSelect?.emit()\"\n            >\n              @if (!tab.template && tab?.icon) {\n                <i [c8yIcon]=\"tab?.icon\"></i>\n              }\n              @if (!tab.template && !tab.component) {\n                <span\n                  title=\"{{ tab?.skipLabelTranslation ? tab?.label : (tab?.label | translate) }}\"\n                >\n                  {{ tab?.skipLabelTranslation ? tab?.label : (tab?.label | translate) }}\n                </span>\n              }\n              @if (!tab.template && tab?.badge) {\n                <span\n                  class=\"dashboard-template-marker\"\n                  tooltip=\"{{ tab?.tooltipText | translate }}\"\n                  placement=\"bottom\"\n                  container=\"body\"\n                  [adaptivePosition]=\"false\"\n                  [delay]=\"300\"\n                ></span>\n              }\n            </a>\n            <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n          </div>\n        }\n        <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n      }\n    </div>\n  }\n\n  @if (outletName) {\n    <div\n      class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n      #tabsContainer\n    >\n      @for (tab of tabs; track trackByPath($index, tab)) {\n        <div\n          [ngClass]=\"{ active: tab.isActive }\"\n          [routerLink]=\"tab.path\"\n          [routerLinkActive]=\"tab.path ? 'active' : ''\"\n          [queryParamsHandling]=\"'preserve'\"\n        >\n          @let tabLabel = tab?.skipLabelTranslation ? tab?.label : (tab?.label | translate);\n          @let tabTitle = tab?.title ? tab?.title : (tab?.title | translate);\n          <a\n            class=\"pointer\"\n            title=\"{{ tabLabel ?? tabTitle }}\"\n            (click)=\"tab.onSelect?.emit()\"\n          >\n            @if (tab?.icon && tab?.label) {\n              <i [c8yIcon]=\"tab?.icon\"></i>\n            }\n            @if (tab?.label) {\n              <span>{{ tabLabel }}</span>\n            }\n            <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n          </a>\n        </div>\n      }\n    </div>\n  }\n</div>\n\n@if (!outletName) {\n  <div class=\"visible-xs mobile-tabs\">\n    <ul class=\"list-unstyled d-flex m-b-0\">\n      <li class=\"c8y-select-wrapper flex-grow\">\n        <select\n          (change)=\"navigateTo($event.target.value)\"\n          #select\n        >\n          @for (tab of tabs; track tab) {\n            @if (!tab.component) {\n              <option\n                [value]=\"tab.path\"\n                [selected]=\"isActive(tab)\"\n              >\n                {{ tab?.skipLabelTranslation ? tab?.label : (tab?.label | translate) }}\n              </option>\n            }\n          }\n        </select>\n      </li>\n      @for (tab of tabs; track tab) {\n        @if (tab.component) {\n          <ng-container\n            *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n          ></ng-container>\n        }\n      }\n    </ul>\n  </div>\n}\n","import { AfterViewInit, Component, OnDestroy, ViewChild, Input } from '@angular/core';\nimport { HeaderService } from '../header.service';\n\n@Component({\n  selector: 'c8y-title',\n  templateUrl: './title.component.html',\n  standalone: true,\n  imports: []\n})\nexport class TitleComponent implements AfterViewInit, OnDestroy {\n  /** Whether to update the browser's page title with the content of the title. */\n  @Input() pageTitleUpdate = true;\n  /** The title template to be displayed in the header. */\n  @ViewChild('template', { static: true }) template;\n  private viewInitTimeout;\n\n  constructor(private headerService: HeaderService) {}\n\n  ngAfterViewInit() {\n    this.viewInitTimeout = setTimeout(() =>\n      this.headerService.changeTitle(this.template, this.pageTitleUpdate)\n    );\n  }\n\n  ngOnDestroy() {\n    if (this.headerService.state.title === this.template) {\n      clearTimeout(this.viewInitTimeout);\n      this.headerService.changeTitle();\n    }\n  }\n}\n","<ng-template #template>\n  <h1 class=\"text-truncate\">\n    <ng-content></ng-content>\n  </h1>\n</ng-template>\n","import { Directive, Input, TemplateRef } from '@angular/core';\nimport { StepState } from '@angular/cdk/stepper';\n\n/**\n * Template to be used to override the icons inside the step header.\n */\n@Directive({\n  selector: 'ng-template[c8yStepperIcon]',\n  standalone: true\n})\nexport class C8yStepperIcon {\n  /** Name of the icon to be overridden. */\n  @Input('c8yStepperIcon') name: StepState;\n\n  constructor(public templateRef: TemplateRef<any>) {}\n}\n","import { Component, Input, Output, TemplateRef, EventEmitter } from '@angular/core';\nimport { StepState } from '@angular/cdk/stepper';\nimport {\n  NgClass,\n  NgSwitch,\n  NgSwitchCase,\n  NgTemplateOutlet,\n  NgSwitchDefault\n} from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\n\n@Component({\n  selector: 'c8y-stepper-progress',\n  templateUrl: './stepper-progress.component.html',\n  standalone: true,\n  imports: [NgClass, NgSwitch, NgSwitchCase, NgTemplateOutlet, NgSwitchDefault, IconDirective]\n})\nexport class C8yStepperProgress {\n  /** List of overriden icons as TemplateRef. Also default icons could be overriden.\n   *  The given overriden icons will replace an icon with matching state: StepState\n   *\n   * <ng-container\n   * *ngSwitchCase=\"true\"\n   * [ngTemplateOutlet]=\"iconOverrides[state]\"\n   * ></ng-container>\n   *\n   */\n  @Input() iconOverrides: { [key: string]: TemplateRef<any> };\n  /** The index of the current step */\n  @Input() index: number;\n  /** Whether the step is currently selected or not  */\n  @Input() selected: boolean;\n  /** The current state of the step */\n  @Input() state: StepState;\n  /** Disable navigation buttons */\n  @Input() disabled: boolean;\n  /** Emits the index: number of the step which was clicked */\n  @Output() onStepClicked = new EventEmitter<number>();\n\n  /** Called on click and emits the step index */\n  stepSelected() {\n    this.onStepClicked.emit(this.index);\n  }\n}\n","<button\n  type=\"button\"\n  class=\"c8y-step\"\n  [ngClass]=\"{\n    active: selected,\n    'step-done': state === 'done' || state === '_done',\n    'step-error': state === 'error',\n    'step-warning': state === 'warning'\n  }\"\n  [disabled]=\"disabled\"\n  [ngSwitch]=\"!!(iconOverrides && iconOverrides[state])\"\n  (click)=\"stepSelected()\"\n>\n  <ng-container *ngSwitchCase=\"true\" [ngTemplateOutlet]=\"iconOverrides[state]\"></ng-container>\n  <ng-container *ngSwitchDefault [ngSwitch]=\"state\">\n    <span *ngSwitchCase=\"'edit'\">\n      <span [c8yIcon]=\"'edit'\"></span>\n    </span>\n    <span *ngSwitchCase=\"'done'\">\n      <span class=\"m-t-4\" [c8yIcon]=\"'check'\"></span>\n    </span>\n    <span *ngSwitchCase=\"'error'\">\n      <span class=\"m-t-4\" [c8yIcon]=\"'exclamation'\"></span>\n    </span>\n    <span *ngSwitchDefault>{{ index + 1 }}</span>\n  </ng-container>\n</button>\n","import { Directionality } from '@angular/cdk/bidi';\nimport { CdkStepper, StepState, STEP_STATE } from '@angular/cdk/stepper';\nimport {\n  AfterContentInit,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnDestroy,\n  Output,\n  QueryList,\n  TemplateRef\n} from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport {\n  ProductExperienceEvent,\n  ProductExperienceEventSource,\n  PRODUCT_EXPERIENCE_EVENT_SOURCE\n} from '../product-experience/product-experience.model';\nimport { C8yStepperIcon } from './stepper-icon.directive';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { C8yStepperProgress } from './stepper-progress.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * `C8yStepper` extends the `CdkStepper`. You can use cdk based functionality and inputs.\n * Additional to that you are able to modify the behavior and also the look and feel when\n * using the `C8yStepper`.\n *\n * The `C8yStepper` is used to present any step-based process to the user.\n * A stepper, `C8yStepper` and/or `CdkStepper` is the parent of cdk-steps.\n * Each cdk-step represents one step in the whole process that you want to provide to the user.\n *\n * The `C8yStepper` will create, based on the given `cdk-steps`, a kind of stepper-progress which looks like this:\n * `(1)---(2)---(3)---(n)`\n * The stepper will handle the state of each step and provides styles for active steps, done-steps or in edit-mode.\n * You are able to override icons for each step in the stepper-progress with a template. You are also able to activate\n * default-icons for states like 'edit' and 'done'.\n *\n * To force users through every provided step, set the stepper to 'linear'.\n * This will disable the possibility to move for example from step one to step three.\n *\n * Whenever it comes to validation try to use formGroups. It is possible to\n * assign a `formGroup` to a `cdk-step` input called `[stepControl]`, which automatically respects the\n * validation-rules that you created for this `formGroup`. If fields are required but not filled or\n * any other validation, like a pattern, is not matched the `formGroup` will be invalid. In this case\n * stepping in a linear stepper to the next step gets impossible.\n *\n * If there is the need to execute asynchronous code you have at least two possibilities.\n * First: As you learned, a cdk-step works with `formGroups` and `Validators`, so you are able to use\n * asyncValidators as well.\n * Second: The `C8yStepper` provides an event-emitter `onStepChange` which is called whenever a step-button `(1)--(2)--(n)`\n * in the stepper-progress is clicked. The event of this emitter holds the index of the step as number. You can\n * use this `EventEmitter` to call for example a custom navigate-method which performs first any async-call and then moves\n * on to the given step.\n *\n * ```typescript\n * <c8y-stepper\n * (onStepChange)=\"navigate($event)\"\n * [disableDefaultIcons]=\"{ edit: true, done: false }\"\n * [customClasses]=\"['m-l-40', 'm-r-40', 'm-t-32']\"\n * linear\n * >\n * <!-- override icons -->\n * <ng-template c8yStepperIcon=\"final\">\n *   <span [c8yIcon]=\"'hand-peace-o'\"></span>\n * </ng-template>\n *\n * <cdk-step [stepControl]=\"formGroupStepOne\" label=\"Name of the hero\">\n *   <div class=\"m-l-40 m-r-40 m-t-32\">\n *     <h4 class=\"p-b-8\" translate>What is the name of your hero?</h4>\n *     <c8y-form-group>\n *      <div [formGroup]=\"formGroupStepOne\">\n *       <input\n *         class=\"form-control\"\n *         type=\"text\"\n *         formControlName=\"name\"\n *         placeholder=\"Mister X\"\n *         #nameRef\n *         required\n *       />\n *       <c8y-messages>\n *         <c8y-message *ngIf=\"!formGroupStepOne.untouched && !nameRef.value\" translate\n *           >Enter the name of the Superhero</c8y-message\n *         >\n *       </c8y-messages>\n *      </div>\n *     </c8y-form-group>\n *   </div>\n *   <c8y-stepper-buttons></c8y-stepper-buttons>\n * </cdk-step>\n * <cdk-step>\n *  ...\n * </cdk-step state=\"final\">\n * </c8y-stepper>\n * ```\n */\n@Component({\n  selector: 'c8y-stepper',\n  templateUrl: './stepper.component.html',\n  providers: [\n    { provide: CdkStepper, useExisting: C8yStepper },\n    { provide: PRODUCT_EXPERIENCE_EVENT_SOURCE, useExisting: forwardRef(() => C8yStepper) }\n  ],\n  standalone: true,\n  imports: [NgClass, C8yStepperProgress, NgTemplateOutlet, C8yTranslatePipe]\n})\nexport class C8yStepper\n  extends CdkStepper\n  implements AfterContentInit, OnDestroy, ProductExperienceEventSource\n{\n  /**\n   * Optional\n   * Indicator if icons for edit and done state should be shown in step-header buttons\n   */\n  @Input() disableDefaultIcons?: { edit: boolean; done: boolean } = { edit: true, done: true };\n  /**\n   * Optional\n   * Disable/enable navigation by stepper progress buttons\n   * default: false\n   */\n  @Input() disableProgressButtons?: boolean = false;\n  /**\n   * Optional\n   * Possibility to add any kind of custom css classes to the step-header\n   */\n  @Input() customClasses?: string[];\n  /**\n   * Optional\n   * Possibility to hide the stepper progress completely.\n   */\n  @Input() hideStepProgress?: boolean = false;\n  /**\n   * Optional\n   * If `true`, the label defined on a cdk-step won't get rendered below each step-header button.\n   * Instead, it will be used as a title only.\n   */\n  @Input() useStepLabelsAsTitlesOnly?: boolean = false;\n  /**\n   * Will emit the step index number whenever a step-header button was clicked\n   * It listens to the stepIndex Subject.\n   * @deprecated: Use the default `selectionChange` event emitter.\n   */\n  @Output() onStepChange = new EventEmitter<number>();\n\n  /**\n   * Holding a QueryList of C8yStepperIcons\n   * These are templateRefs which overrides any step-header button icon with matching state of cdk-step\n   *\n   * ```typescript\n   * <!-- override icons -->\n   *  <ng-template c8yStepperIcon=\"final\">\n   *   <span [c8yIcon]=\"'hand-peace-o'\"></span>\n   *  </ng-template>\n   *\n   * <cdk-step state=\"final\" label=\"Job done!\">\n   *  <div class=\"m-l-40 m-r-40 m-t-32\">\n   *    <h4 class=\"p-b-32\" style=\"text-align: center;\" translate>\n   *     Your Superhero is now ready to save the world!\n   *   </h4>\n   *  </div>\n   *  <c8y-stepper-buttons\n   *    [hidden]=\"!isModal\"\n   *    (onBack)=\"close()\"\n   *    [labels]=\"{ back: 'Got it!' }\"\n   *  ></c8y-stepper-buttons>\n   *  <c8y-stepper-buttons [hidden]=\"isModal\"></c8y-stepper-buttons>\n   * </cdk-step>\n   * ```\n   */\n  @ContentChildren(C8yStepperIcon, { descendants: true }) _icons: QueryList<C8yStepperIcon>;\n\n  /** Consumer-specified template-refs to be used to override the header icons. */\n  _iconOverrides: { [key: string]: TemplateRef<any> } = {};\n\n  productExperienceEvent: ProductExperienceEvent;\n\n  private _stepIndex: Subject<number> = new Subject();\n  private _stepIndexSubscription: Subscription;\n\n  /**\n   * @ignore\n   */\n  constructor(\n    private dir: Directionality,\n    private changeDetectorRef: ChangeDetectorRef,\n    private elementRef?: ElementRef<HTMLElement>\n  ) {\n    super(dir, changeDetectorRef, elementRef);\n  }\n\n  /**\n   * @ignore\n   */\n  ngAfterContentInit() {\n    super.ngAfterContentInit();\n    this._icons.forEach(({ name, templateRef }) => (this._iconOverrides[name] = templateRef));\n    this._stepIndexSubscription = this.selectionChange.subscribe(event =>\n      this.onStepChange.emit(event.selectedIndex)\n    );\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnDestroy() {\n    if (this._stepIndexSubscription && !this._stepIndexSubscription.closed) {\n      this._stepIndexSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Manipulates the state based on the disabledDefaultIcons Input()\n   * Changing edit or done to false will change the icons within step-header buttons\n   * @param index step index\n   * @param state step state, like 'done', 'edit', 'error'\n   */\n  getIndicatorType(index: number, state: StepState) {\n    const step = this.steps.toArray()[index];\n    const stepState = step.indicatorType();\n    let _state = state;\n    switch (stepState) {\n      case STEP_STATE.EDIT:\n        if (!this.disableDefaultIcons.edit) {\n          _state = STEP_STATE.EDIT;\n        }\n        break;\n\n      case STEP_STATE.DONE:\n        if (!this.disableDefaultIcons.done) {\n          _state = STEP_STATE.DONE;\n        } else {\n          _state = '_done';\n        }\n        break;\n\n      case STEP_STATE.ERROR:\n        _state = STEP_STATE.ERROR;\n        break;\n    }\n    return _state;\n  }\n\n  /**\n   * Pushes the step index to the subject\n   * @param index step index\n   */\n  setIndex(index: number) {\n    const steps = this.steps.toArray();\n    if (!steps[this.selectedIndex]?.stepControl?.invalid || index < this.selectedIndex) {\n      this.selectedIndex = index;\n    }\n  }\n}\n","@if (!hideStepProgress) {\n  <ul class=\"c8y-stepper\" [ngClass]=\"customClasses\">\n    @for (step of steps; track step; let i = $index) {\n      <li>\n        <c8y-stepper-progress\n          [iconOverrides]=\"_iconOverrides\"\n          [state]=\"getIndicatorType(i, step.state)\"\n          [index]=\"i\"\n          [selected]=\"selectedIndex === i\"\n          [disabled]=\"disableProgressButtons\"\n          (onStepClicked)=\"setIndex($event)\"\n          title=\"{{ step.label | translate }}\"\n          [ngClass]=\"{'active': selectedIndex === i}\"\n        >\n        </c8y-stepper-progress>\n        @if (!useStepLabelsAsTitlesOnly) {\n          <div class=\"c8y-step__label\" title=\"{{ step.label | translate }}\">\n            {{ step.label | translate }}\n          </div>\n        }\n      </li>\n    }\n  </ul>\n}\n<ng-container [ngTemplateOutlet]=\"selected.content\"></ng-container>\n","/* Actions */\nexport const ACTIONS_STEPPER = {\n  CLICK_STEPPER_CANCEL_BTN: 'clickStepperCancelBtn',\n  CLICK_STEPPER_NEXT_BTN: 'clickStepperNextBtn',\n  CLICK_STEPPER_BACK_BTN: 'clickStepperBackBtn',\n  CLICK_STEPPER_CUSTOM_BTN: 'clickStepperCustomBtn'\n};\n","import { CdkStep } from '@angular/cdk/stepper';\nimport { AfterContentInit, Component, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { GainsightService } from '../product-experience/gainsight.service';\nimport { ACTIONS_STEPPER } from './stepper-px.constants';\nimport { C8yStepper } from './stepper.component';\nimport { StepperButtonsVisibility } from './stepper.model';\nimport { NgIf, NgClass } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * `C8yStepperButtons` provides a convenient way to have, according to\n * the `C8yStepper` and each `cdk-step`, buttons to navigate between steps or to cancel the whole\n * step-process. Buttons rendered with the help of this component will use the branding css.\n *\n * By default all steps with this component in use will render a next button, expect the last step.\n * The other way around, every step using this component will render a back button, expect the first step.\n * To get a cancel button rendered you need to handle the onCancel event.\n * For next and back button you don't need to handle the available events `onNext` and `onBack` because default behavior\n * is implemented. The default will just call, according to the button, the `stepper.next()` or `stepper.previous()`\n * methods and moves the stepper forth or back. Using the `EventEmitter` `onNext` and `onBack` will emit for you the following\n * object: `{stepper: C8yStepper, step: CdkStep}`. This is useful if you need to implement custom logic before moving\n * to the next step or sending data to a backend. In this case you need to tell the stepper to move forward or back\n * on your own.\n *\n * With the component input `[labels]` you can change the label of each button in each step. It takes an object like this:\n * `{next?: string, back?: string, cancel?: string}`\n *\n * The `[pending]` input is of type boolean and will enable css animation for the next button when true.\n *\n * If the `cdk-step` provides a `stepControl` the component will set the next button disabled when the formGroup\n * behind it is invalid. As long as the `[pending]` input is true the back and next button is also disabled.\n * This will prevent multiple clicks while running a request or stepping back while a request is ongoing.\n *\n * ```html\n * <c8y-stepper>\n *  <cdk-step>\n *    <!--\n *      your html code\n *          ...\n *          ...    -->\n *    <c8y-stepper-buttons\n *     (onNext)=\"save()\"\n *     [labels]=\"{ next: 'Save' }\"\n *     [pending]=\"pendingStatus\"\n *     ></c8y-stepper-buttons>\n *  </cdk-step>\n * </c8y-stepper>\n * ```\n *\n * ```js\n * // in your component:\n * async save() {\n *   this.pendingStatus = true;\n *   // your async request goes here ...\n *   // await something();\n *   this.pendingStatus = false;\n *   this.stepper.next();\n * }\n * ```\n */\n@Component({\n  selector: 'c8y-stepper-buttons',\n  templateUrl: './stepper-buttons.component.html',\n  standalone: true,\n  imports: [NgIf, NgClass, C8yTranslatePipe]\n})\nexport class C8yStepperButtons implements AfterContentInit, OnDestroy {\n  /**\n   * Optional\n   * Specify custom labels for each button (cancel, back or next)\n   */\n  @Input() labels?: { cancel?: string; back?: string; next?: string; custom?: string };\n  /**\n   * Optional\n   * Indicates if a request is pending and sets the next button\n   * to disabled when true\n   */\n  @Input() pending?: boolean = false;\n\n  /**\n   * Disabled state of a button\n   */\n  @Input() disabled?: boolean = false;\n\n  /**\n   * EventEmitter which emits when cancel button is clicked\n   */\n  @Output() onCancel = new EventEmitter();\n  /**\n   * EventEmitter which emits {stepper: C8yStepper; step: CdkStep} when next button is clicked.\n   */\n  @Output() onNext = new EventEmitter<{ stepper: C8yStepper; step: CdkStep }>();\n\n  /**\n   * EventEmitter which emits {stepper: C8yStepper; step: CdkStep} when back button is clicked.\n   */\n  @Output() onBack = new EventEmitter<{ stepper: C8yStepper; step: CdkStep }>();\n\n  /**\n   * EventEmitter which emits when the optional custom button is clicked\n   */\n  @Output() onCustom = new EventEmitter();\n\n  /**\n   * Indicator which button should be shown.\n   * Based on the cdk-steps within the c8y-stepper\n   * next and back buttons are rendered.\n   */\n  showBtns: StepperButtonsVisibility = {\n    cancel: false,\n    back: false,\n    next: false,\n    custom: false\n  };\n  /**\n   * Flag that indicates that the default settings defined in the showBtns have been overwritten.\n   */\n  forceShowBtns = false;\n\n  private statusChangeSubscription: Subscription;\n  constructor(\n    private stepper: C8yStepper,\n    private step: CdkStep,\n    private gainsightService: GainsightService\n  ) {}\n\n  /**\n   * This option forces the display of the buttons passed by the input.\n   * It will override the default settings and take precedence over the standard settings.\n   *\n   * ```html\n   * <c8y-stepper-buttons\n   *   [labels]=\"{ custom: 'Custom btn', cancel: 'Cancel btn' }\"\n   *   [showButtons]=\"{ custom: true, cancel: true }\"\n   * ></c8y-stepper-buttons>\n   * ```\n   *\n   * @param btns An object that contains options for displaying buttons.\n   */\n  @Input() set showButtons(btns: StepperButtonsVisibility) {\n    if (btns) {\n      this.showBtns = btns;\n      this.forceShowBtns = true;\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  ngAfterContentInit() {\n    if (!this.forceShowBtns) {\n      this.showBtns.cancel = this.onCancel.observers.length > 0;\n      this.showBtns.custom = this.onCustom.observers.length > 0;\n    }\n\n    if (this.stepper && this.stepper._steps && this.step && !this.forceShowBtns) {\n      this.showBtns.back = this.stepper._steps.first !== this.step;\n      this.showBtns.next = this.stepper._steps.last !== this.step;\n    }\n\n    if (this.step && this.step.stepControl) {\n      this.disabled = this.step.stepControl.invalid;\n\n      this.statusChangeSubscription = this.step.stepControl.statusChanges.subscribe(() => {\n        this.disabled = this.step.stepControl.invalid;\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.statusChangeSubscription && !this.statusChangeSubscription.closed) {\n      this.statusChangeSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * Gets called when cancel button is clicked.\n   * It will emit immediate.\n   */\n  cancel() {\n    this.onCancel.emit();\n    this.triggerEvent(ACTIONS_STEPPER.CLICK_STEPPER_CANCEL_BTN);\n  }\n\n  /**\n   * Gets called when next button is clicked. When onNext EventEmitter has an observer registered\n   * it will emit the following object {stepper: C8yStepper; step: CdkStep}.\n   * Otherwise it will call stepper.next() as default.\n   */\n  next() {\n    this.stepper.selected.completed = true;\n    if (this.onNext.observers.length > 0) {\n      this.onNext.emit({ stepper: this.stepper, step: this.step });\n    } else {\n      this.stepper.next();\n    }\n    this.triggerEvent(ACTIONS_STEPPER.CLICK_STEPPER_NEXT_BTN);\n  }\n\n  /**\n   * Gets called when back button is clicked. When onBack EventEmitter has an observer registered\n   * it will emit the following object {stepper: C8yStepper; step: CdkStep}.\n   * Otherwise it will call stepper.previous() as default.\n   */\n  back() {\n    this.stepper.selected.completed = false;\n    if (this.onBack.observers.length > 0) {\n      this.onBack.emit({ stepper: this.stepper, step: this.step });\n    } else {\n      this.stepper.previous();\n    }\n    this.triggerEvent(ACTIONS_STEPPER.CLICK_STEPPER_BACK_BTN);\n  }\n\n  /**\n   * Gets called when the custom button is clicked.\n   * It will emit immediately.\n   */\n  custom() {\n    this.onCustom.emit();\n    this.triggerEvent(ACTIONS_STEPPER.CLICK_STEPPER_CUSTOM_BTN);\n  }\n\n  private triggerEvent(action: string): void {\n    const eventData = {\n      ...this.stepper.productExperienceEvent?.data,\n      action,\n      step: this.gainsightService.translateToEnglish(this.step.label)\n    };\n    const eventName = this.stepper.productExperienceEvent?.eventName || 'c8yStepper';\n    this.gainsightService.triggerEvent(eventName, eventData);\n  }\n}\n","<div class=\"text-center\">\n  <button\n    class=\"btn btn-default\"\n    title=\"{{ labels?.cancel || 'Cancel' | translate }}\"\n    data-cy=\"cancel\"\n    type=\"button\"\n    *ngIf=\"showBtns.cancel\"\n    (click)=\"cancel()\"\n  >\n    <span\n      title=\"{{ labels?.cancel | translate }}\"\n      *ngIf=\"labels?.cancel; else cancelLabel\"\n    >\n      {{ labels?.cancel | translate }}\n    </span>\n    <ng-template #cancelLabel>\n      <span title=\"{{ 'Cancel' | translate }}\">{{ 'Cancel' | translate }}</span>\n    </ng-template>\n  </button>\n  <button\n    class=\"btn btn-default\"\n    title=\"{{ labels?.back || 'Back' | translate }}\"\n    type=\"button\"\n    *ngIf=\"showBtns.back\"\n    (click)=\"back()\"\n    [disabled]=\"pending\"\n    data-cy=\"back\"\n  >\n    <span\n      title=\"{{ labels?.back | translate }}\"\n      *ngIf=\"labels?.back; else backLabel\"\n    >\n      {{ labels?.back | translate }}\n    </span>\n    <ng-template #backLabel>\n      <span title=\"{{ 'Back' | translate }}\">{{ 'Back' | translate }}</span>\n    </ng-template>\n  </button>\n  <button\n    class=\"btn\"\n    title=\"{{ labels?.custom || 'Complete' | translate }}\"\n    type=\"button\"\n    *ngIf=\"showBtns.custom\"\n    (click)=\"custom()\"\n    [ngClass]=\"{\n      'btn-default': showBtns.next,\n      'btn-primary': !showBtns.next,\n      'btn-pending': pending\n    }\"\n    [disabled]=\"disabled\"\n    data-cy=\"custom\"\n  >\n    <span\n      title=\"{{ labels?.custom | translate }}\"\n      *ngIf=\"labels?.custom; else customLabel\"\n    >\n      {{ labels?.custom | translate }}\n    </span>\n    <ng-template #customLabel>\n      <span title=\"{{ 'Complete' | translate }}\">{{ 'Complete' | translate }}</span>\n    </ng-template>\n  </button>\n  <button\n    class=\"btn btn-primary\"\n    title=\"{{ labels?.next || 'Next' | translate }}\"\n    type=\"button\"\n    (click)=\"next()\"\n    *ngIf=\"showBtns.next\"\n    [ngClass]=\"{ 'btn-pending': pending }\"\n    [disabled]=\"disabled\"\n    data-cy=\"next\"\n  >\n    <span\n      title=\"{{ labels?.next | translate }}\"\n      *ngIf=\"labels?.next; else nextLabel\"\n    >\n      {{ labels?.next | translate }}\n    </span>\n    <ng-template #nextLabel>\n      <span title=\"{{ 'Next' | translate }}\">{{ 'Next' | translate }}</span>\n    </ng-template>\n  </button>\n  <ng-content select=\"button\"></ng-content>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { IndexedStep } from './stepper.model';\nimport { C8yStepper } from './stepper.component';\nimport { NgFor, NgIf } from '@angular/common';\nimport { CdkStep } from '@angular/cdk/stepper';\nimport { C8yComponentOutlet } from '../common/component-outlet.directive';\nimport { C8yStepperButtons } from './stepper-buttons.component';\nimport { C8yStepperIcon } from './stepper-icon.directive';\nimport { IconDirective } from '../common/icon.directive';\n\n@Component({\n  selector: 'c8y-stepper-outlet',\n  templateUrl: './stepper-outlet.component.html',\n  standalone: true,\n  imports: [\n    C8yStepper,\n    NgFor,\n    CdkStep,\n    C8yComponentOutlet,\n    NgIf,\n    C8yStepperButtons,\n    C8yStepperIcon,\n    IconDirective\n  ]\n})\nexport class StepperOutletComponent {\n  @Input()\n  steps: IndexedStep[];\n  @Input()\n  showDefaultButtons = true;\n}\n","<c8y-stepper\n  [customClasses]=\"['p-t-32', 'p-b-32', 'm-l-48', 'm-r-48']\"\n  class=\"d-flex d-col fit-h\"\n  [disableDefaultIcons]=\"{ edit: true, done: false }\"\n>\n  <cdk-step\n    *ngFor=\"let step of steps\"\n    [label]=\"step.label\"\n    [state]=\"step.state\"\n    [completed]=\"step.completed\"\n    [optional]=\"!step.required\"\n  >\n    <ng-container *c8yComponentOutlet=\"step.component; environmentInjector: step.injector\"></ng-container>\n    <c8y-stepper-buttons *ngIf=\"showDefaultButtons\"></c8y-stepper-buttons>\n    <ng-template c8yStepperIcon=\"error\">\n      <span c8yIcon=\"error\"></span>\n    </ng-template>\n    <ng-template c8yStepperIcon=\"warning\">\n      <span c8yIcon=\"warning\"></span>\n    </ng-template>\n    <ng-template c8yStepperIcon=\"done\">\n      <span c8yIcon=\"check\"></span>\n    </ng-template>\n  </cdk-step>\n</c8y-stepper>\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { sortBy, get } from 'lodash-es';\nimport { PropertiesListItem } from './properties-list.model';\nimport { NgIf, NgFor, NgClass, NgSwitch, NgSwitchCase } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * Renders a list of properties of an object.\n *\n * ```html\n * <c8y-properties-list\n *   icon=\"info\"\n *   [properties]=\"properties\"\n *   [data]=\"options\"\n *   [emptyLabel]=\"'-'\"\n *   [title]=\"'Application properties' | translate\"\n * ></c8y-properties-list>\n * ```\n */\n@Component({\n  selector: 'c8y-properties-list',\n  templateUrl: './properties-list.component.html',\n  standalone: true,\n  imports: [NgIf, IconDirective, NgFor, NgClass, NgSwitch, NgSwitchCase, C8yTranslatePipe]\n})\nexport class PropertiesListComponent implements OnChanges {\n  /**\n   * The properties that this list should display.\n   */\n  @Input() properties: PropertiesListItem[] = [];\n\n  /**\n   * A title for the list.\n   */\n  @Input()\n  title: string;\n\n  /**\n   * An icon which is displayed next to the title.\n   */\n  @Input()\n  icon: SupportedIconsSuggestions;\n\n  /**\n   * An object where the properties keys are resolved from.\n   */\n  @Input() data: object;\n\n  /**\n   * A string array of groups that are shown. If noParse is set to false,\n   * each complex key will form a group.\n   */\n  @Input()\n  groups: string[] = [];\n\n  /**\n   * The component tries to parse the properties and resolve keys and types. You can\n   * avoid this by setting this property to true.\n   */\n  @Input()\n  noParse = false;\n\n  /**\n   * Set this label to display all properties but the empty ones\n   * get the `emptyLabel` assigned. If the empty label is not set,\n   * defaults to 'c8ydontshow' and it not rendered\n   */\n  @Input()\n  emptyLabel: string = null;\n\n  private originalProperties: PropertiesListItem[];\n\n  /**\n   * Checks if a certain property has an group associated.\n   * @param item The property to verify.\n   */\n  hasGroup(item: PropertiesListItem) {\n    if (!item.key) {\n      return false;\n    }\n    const keyPath = item.key.split('.');\n    return keyPath.length > 1 && this.groups.includes(keyPath[0]);\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnInit(): void {\n    this.originalProperties = [...this.properties];\n    this.parseProperties();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.properties || changes.noParse) {\n      this.originalProperties = [...this.properties];\n      this.parseProperties();\n    }\n  }\n\n  /**\n   * Used in trackBy to avoid recalculation all the time.\n   * @ignore\n   */\n  identity(index, item) {\n    return item.value;\n  }\n\n  private parseProperties() {\n    if (this.noParse) {\n      this.properties = [...this.originalProperties];\n      return;\n    }\n\n    this.properties = this.properties.map(item => this.parsePropertyItem(item));\n    const propsWithGroups: PropertiesListItem[] = [];\n\n    propsWithGroups.push(...this.properties);\n    propsWithGroups.push(\n      ...this.groups.map(group => ({\n        key: group,\n        label: group,\n        value: group,\n        type: 'group' as const\n      }))\n    );\n\n    const filteredProps = propsWithGroups.filter(item => item.value != null);\n\n    this.properties = sortBy(filteredProps, ['key']);\n  }\n\n  private parsePropertyItem(item: PropertiesListItem): PropertiesListItem {\n    item.value = this.resolveValueFromKey(item);\n    item.value = item.transform && item.value ? item.transform(item.value) : item.value;\n    item.type = this.resolveType(item);\n    item.value = this.attachEmptyLabel(item);\n    return item;\n  }\n\n  private resolveValueFromKey(item: PropertiesListItem) {\n    if (item.key && this.data) {\n      const keyPath = item.key.split('.');\n      const rootGroup = keyPath[0];\n      if (keyPath.length > 1 && !this.groups.includes(rootGroup)) {\n        this.groups.push(rootGroup);\n      }\n      return get(this.data, item.key);\n    }\n    return item.value;\n  }\n\n  private resolveType(item: PropertiesListItem) {\n    return Array.isArray(item.value) ? 'array' : item.action && item.value ? 'link' : 'string';\n  }\n\n  private attachEmptyLabel(item: PropertiesListItem) {\n    if (item.value === undefined || item.value === null) {\n      return this.emptyLabel;\n    }\n    return item.value;\n  }\n}\n","<p class=\"m-b-8\" *ngIf=\"title\">\n  <i *ngIf=\"icon\" [c8yIcon]=\"icon\" class=\"text-info m-r-8\"></i>\n  <span class=\"text-label-small\">{{ title | translate }}</span>\n</p>\n<ul class=\"list-unstyled small\">\n  <li\n    class=\"p-t-4 p-b-4 d-flex\"\n    *ngFor=\"let prop of properties; let i = index; trackBy: identity\"\n    [ngClass]=\"{'separator-top-bottom': i === 0,\n                'separator-bottom': i > 0}\"\n    >\n    <div\n      [ngClass]=\"{\n        'm-l-16': hasGroup(prop),\n        legend: prop.type === 'group',\n        'form-block': prop.type === 'group',\n        'm-b-0': prop.type === 'group',\n        'm-t-4': prop.type === 'group'\n      }\"\n      class=\"small text-medium text-nowrap m-r-4\"\n    >\n      {{ prop.label | translate }}\n    </div>\n    <span [ngSwitch]=\"prop.type\" class=\"m-l-auto\">\n      <span *ngSwitchCase=\"'string'\" class=\"m-l-auto\">{{ prop.value }}</span>\n      <a\n        *ngSwitchCase=\"'link'\"\n        (click)=\"prop.action($event, prop.value)\"\n        class=\"m-l-auto pointer text-truncate m-l-4\"\n      >{{ prop.value }}</a>\n      <span *ngSwitchCase=\"'array'\">\n        <span\n          class=\"label label-info m-l-4\"\n          *ngFor=\"let propTag of prop.value\"\n          (click)=\"prop.action && prop.action($event, propTag)\"\n          [ngClass]=\"{\n            pointer: prop.action\n          }\"\n        >{{ propTag }}</span>\n      </span>\n    </span>\n  </li>\n</ul>\n","import { Component } from '@angular/core';\n\n/**\n * SVG illustration component for the setup page.\n * The SVG can be easily replaced by updating the template file.\n */\n@Component({\n  selector: 'c8y-setup-illustration',\n  templateUrl: './setup-illustration.component.html',\n  standalone: true\n})\nexport class SetupIllustrationComponent {}\n","<svg\n  style=\"max-width: 450px; margin: auto\"\n  viewBox=\"0 0 885 700\"\n  fill=\"none\"\n  xmlns=\"http://www.w3.org/2000/svg\"\n>\n  <g\n    opacity=\"0.05\"\n    filter=\"url(#filter0_f_2683_76044)\"\n  >\n    <path\n      d=\"M604.228 289.255L332.586 444.23L604.228 597.464L875.87 444.23L604.228 289.255Z\"\n      fill=\"#212121\"\n    />\n  </g>\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M681.232 312.806C681.232 300.301 672.79 287.797 655.905 278.257C622.136 259.176 567.386 259.176 533.616 278.257C517.407 287.416 508.978 299.306 508.33 311.305V329.193C508.978 317.194 517.407 348.836 533.616 339.677C567.386 320.596 622.136 320.596 655.905 339.677C672.79 349.217 681.232 318.189 681.232 330.694V312.806Z\"\n    fill=\"#D4D9DE\"\n    fill-opacity=\"0.6\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M671.588 309.165C672.212 320.72 664.72 332.389 649.111 341.209V359.097C664.72 350.277 672.212 338.608 671.588 327.053V309.165Z\"\n    fill=\"var(--c8y-brand-30)\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M649.113 341.214C619.096 358.175 570.429 358.175 540.412 341.214V359.102C570.429 376.062 619.096 376.062 649.113 359.102V341.214Z\"\n    fill=\"var(--c8y-brand-30)\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M517.9 310.502C517.9 299.387 525.405 288.272 540.413 279.792C570.43 262.831 619.097 262.831 649.114 279.792C663.523 287.933 671.015 298.502 671.591 309.168V327.056C671.015 316.39 663.523 349.353 649.114 341.212C619.097 324.251 570.43 324.251 540.413 341.212C525.405 349.692 517.9 317.275 517.9 328.39V310.502Z\"\n    fill=\"var(--c8y-brand-30)\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M540.413 341.213C525.405 332.733 517.9 321.618 517.9 310.503V328.391C517.9 339.506 525.405 350.62 540.413 359.101V341.213Z\"\n    fill=\"var(--c8y-brand-40)\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M866.516 312.797L594.763 159.247L323.01 312.797V330.685L594.763 177.135L866.516 330.685V312.797Z\"\n    fill=\"#D4D9DE\"\n    fill-opacity=\"0.6\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M323.01 312.798L594.763 466.348L866.516 312.798V330.686L594.763 484.236L323.01 330.686V312.798Z\"\n    fill=\"#8B96A0\"\n    fill-opacity=\"0.4\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    opacity=\"0.6\"\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M592.875 466.348L864.628 312.798V330.686L592.875 484.236V466.348Z\"\n    fill=\"#212121\"\n    fill-opacity=\"0.4\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M508.332 311.299C507.629 324.298 516.058 337.426 533.618 347.348C567.387 366.429 622.138 366.429 655.907 347.348C672.791 337.808 681.234 325.303 681.234 312.799V330.687C681.234 343.191 672.791 355.695 655.907 365.236C622.138 384.317 567.387 384.317 533.618 365.236C516.058 355.314 507.629 342.186 508.332 329.187V311.299Z\"\n    fill=\"#D4D9DE\"\n    fill-opacity=\"0.8\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M866.516 312.8L594.763 159.25L323.01 312.8L594.763 466.351L866.516 312.8ZM655.907 278.252C622.138 259.171 567.388 259.171 533.618 278.252C499.849 297.332 499.849 328.268 533.618 347.349C567.388 366.43 622.138 366.43 655.907 347.349C689.677 328.268 689.677 297.332 655.907 278.252Z\"\n    fill=\"#E3E5E8\"\n    fill-opacity=\"0.4\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M594.766 267.503C614.382 267.503 633.975 271.732 648.902 280.167C663.834 288.604 671.193 299.598 671.193 310.498C671.193 321.398 663.834 332.392 648.902 340.829C633.975 349.264 614.382 353.493 594.766 353.493C575.149 353.493 555.556 349.264 540.629 340.829C525.698 332.392 518.338 321.398 518.338 310.498C518.338 299.598 525.698 288.604 540.629 280.167C555.556 271.732 575.149 267.503 594.766 267.503Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M563.811 330.479C581.636 340.551 610.639 340.552 628.464 330.48C646.29 320.407 646.29 304.02 628.465 293.947C610.64 283.876 581.636 283.875 563.81 293.948C545.985 304.02 545.986 320.408 563.811 330.479ZM569.198 327.436C554.342 319.042 554.342 305.385 569.197 296.992C584.053 288.598 608.222 288.598 623.077 296.992C637.933 305.385 637.933 319.042 623.077 327.436C608.222 335.829 584.053 335.829 569.198 327.436Z\"\n    fill=\"var(--c8y-brand-40)\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M566.251 318.363L575.779 316.228C576.281 317.15 576.959 318.042 577.806 318.889L568.278 321.024C567.488 320.17 566.807 319.276 566.251 318.363ZM606.525 295.233C608.143 295.532 609.73 295.903 611.261 296.339L607.634 301.756C606.127 301.291 604.539 300.92 602.894 300.652L606.525 295.233ZM594.212 294.314C595.885 294.262 597.582 294.283 599.262 294.375L599.473 300.246C597.793 300.122 596.098 300.102 594.422 300.187L594.212 294.314ZM564.459 311.125L574.854 311.244C574.703 312.191 574.732 313.149 574.955 314.1L564.565 313.98C564.401 313.032 564.369 312.073 564.459 311.125ZM567.609 304.229L577.316 306.565C576.533 307.393 575.922 308.272 575.496 309.185L565.794 306.851C566.278 305.949 566.888 305.07 567.609 304.229ZM581.887 296.129C583.368 295.716 584.923 295.367 586.518 295.092L590.693 300.567C589.075 300.81 587.52 301.159 586.061 301.603L581.887 296.129ZM573.603 299.481C574.174 299.159 574.786 298.841 575.422 298.534L582.921 302.771C582.276 303.06 581.652 303.372 581.07 303.701C580.489 304.029 579.938 304.381 579.422 304.748L571.923 300.511C572.467 300.151 573.031 299.804 573.603 299.481Z\"\n    fill=\"var(--c8y-brand-40)\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M598.109 320.401C601.604 322.376 607.274 322.375 610.772 320.398C614.269 318.422 614.273 315.218 610.776 313.242C608.39 311.894 604.993 311.465 601.963 311.959L584.561 305.588L595.84 315.422C594.969 317.133 595.723 319.053 598.109 320.401Z\"\n    fill=\"var(--c8y-brand-40)\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M510.718 286.442L412.697 343.034V346.517L510.718 289.925V286.442Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M412.697 343.035L350.869 307.339V310.821L412.697 346.518V343.035Z\"\n    fill=\"var(--c8y-brand-40)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <rect\n    height=\"71.393\"\n    width=\"113.184\"\n    transform=\"matrix(0.866025 -0.5 0.866025 0.5 350.869 307.339)\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <rect\n    height=\"62.6866\"\n    width=\"104.478\"\n    transform=\"matrix(0.866025 -0.5 0.866025 0.5 358.994 306.903)\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M468.181 285.203C467.814 285.415 467.803 285.753 468.154 285.956L468.447 286.124C468.8 286.328 469.385 286.322 469.753 286.11L471.157 285.3C471.525 285.087 471.535 284.749 471.182 284.545L470.89 284.376C470.539 284.174 469.953 284.18 469.585 284.392L468.181 285.203Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M468.156 287.132L465.588 285.649C465.237 285.446 464.651 285.452 464.283 285.664L462.48 286.705C462.112 286.918 462.102 287.256 462.453 287.459L463.334 287.967C463.685 288.17 464.142 288.238 464.436 288.069L464.51 288.026C464.828 287.842 465.044 288.05 465.395 288.253L465.805 288.489C466.16 288.695 466.739 288.687 467.109 288.474L468.127 287.886C468.495 287.674 468.51 287.338 468.154 287.133L468.156 287.132Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M465.356 279.422L466.63 280.588C466.862 280.794 466.795 281.074 466.483 281.253L462.308 283.664C461.94 283.876 461.928 284.216 462.279 284.418L462.764 284.698C463.115 284.901 463.7 284.892 464.068 284.68L464.204 284.602C464.574 284.388 465.159 284.382 465.513 284.586L465.83 284.769C466.181 284.972 466.766 284.966 467.134 284.754L472.302 281.77C472.616 281.589 472.678 281.312 472.449 281.104L468.801 277.75C468.658 277.615 468.409 277.531 468.136 277.517C467.855 277.503 467.577 277.562 467.374 277.679L465.506 278.758C465.192 278.939 465.132 279.217 465.358 279.423L465.356 279.422Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M465.134 274.069L462.236 275.742C461.916 275.927 461.86 276.21 462.096 276.419L463.778 277.875C463.93 278.005 464.174 278.086 464.448 278.098C464.719 278.109 464.993 278.05 465.191 277.936L468.089 276.262C468.412 276.076 468.47 275.794 468.231 275.586L466.547 274.129C466.395 274 466.151 273.919 465.882 273.907C465.604 273.895 465.333 273.954 465.134 274.069Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M479.577 285.887C479.385 285.88 479.19 285.922 479.048 286.004L478.843 286.123C478.576 286.276 478.579 286.526 478.847 286.68C479.114 286.834 479.112 287.084 478.848 287.236L476.867 288.38C476.603 288.533 476.169 288.532 475.904 288.379L476.087 288.485C475.904 288.379 475.639 288.344 475.393 288.389C475.149 288.433 474.968 288.553 474.928 288.702L474.065 291.928C474.03 292.053 474.105 292.177 474.261 292.267L477.681 294.242C477.946 294.395 478.378 294.397 478.644 294.243L483.833 291.247C484.002 291.15 484.25 291.108 484.483 291.144L485.718 291.328C485.947 291.363 486.195 291.324 486.365 291.226L488.33 290.092C488.457 290.019 488.526 289.921 488.533 289.82L488.573 288.082C488.579 287.976 488.502 287.874 488.371 287.798L485.635 286.218C485.517 286.151 485.358 286.109 485.198 286.102L479.579 285.886L479.577 285.887Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M460.086 299.946L459.759 300.134C459.253 300.426 459.133 300.873 459.466 301.24L460.637 302.531C460.88 302.796 461.328 302.984 461.841 303.03C462.357 303.075 462.879 302.978 463.247 302.766L463.576 302.575C464.082 302.284 464.198 301.837 463.869 301.473L462.694 300.179C462.453 299.913 462.007 299.728 461.489 299.679C460.976 299.633 460.456 299.732 460.086 299.946Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M418.765 305.004L412.771 308.465C412.268 308.755 411.567 308.906 410.853 308.871L408.101 308.752C407.142 308.712 406.314 308.351 405.975 307.83C405.641 307.309 405.859 306.726 406.536 306.335L407.418 305.825C407.919 305.536 408.178 305.135 408.127 304.726L407.25 297.647C407.192 297.176 406.727 296.749 406.017 296.513L394.429 292.682C393.465 292.365 392.256 292.456 391.475 292.907L368.966 305.903C368.007 306.456 368.009 307.352 368.972 307.908L376.369 312.178C377.33 312.733 378.883 312.736 379.842 312.182L383.252 310.213C384.105 309.721 385.45 309.661 386.43 310.073L393.93 313.225C394.435 313.436 395.057 313.532 395.672 313.486L408.952 312.561C409.779 312.504 410.598 312.69 411.133 313.059L426.682 323.725C427.129 324.027 427.771 324.211 428.461 324.231C429.144 324.247 429.817 324.099 430.302 323.819L432.776 322.391C433.354 322.058 433.603 321.581 433.446 321.118L429.534 309.564C429.439 309.288 429.203 309.031 428.856 308.831L422.233 305.008C421.273 304.453 419.72 304.45 418.761 305.004L418.765 305.004Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M416.572 290.622L419.445 288.963C419.625 288.859 419.627 288.691 419.443 288.585L414.078 285.487C413.897 285.382 413.603 285.385 413.424 285.488L410.552 287.146C410.371 287.251 410.372 287.418 410.553 287.522L415.918 290.62C416.102 290.726 416.391 290.726 416.572 290.622Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M413.854 292.191L414.815 291.636C414.996 291.532 414.998 291.364 414.814 291.258L413.061 290.246C412.88 290.141 412.586 290.143 412.408 290.246L411.446 290.801C411.264 290.907 411.264 291.074 411.445 291.179L413.198 292.191C413.382 292.297 413.671 292.297 413.854 292.191Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M448.131 260.198L427.745 271.968C427.296 272.227 427.152 272.613 427.368 272.957L429.718 276.669C429.936 277.014 429.788 277.4 429.339 277.659L428.075 278.389C427.666 278.625 427.072 278.717 426.511 278.635L421.838 277.931C421.277 277.847 420.68 277.94 420.272 278.176L417.956 279.513C417.521 279.764 417.368 280.135 417.559 280.474L420.962 286.432C421.231 286.899 422.082 287.174 422.915 287.056L425.008 286.758C425.849 286.639 426.379 286.16 426.219 285.669L425.854 284.544C425.765 284.274 425.89 284.002 426.165 283.794C426.801 283.738 427.464 283.902 427.815 284.238L428.781 285.155C429.169 285.525 429.073 286.004 428.54 286.312L420.448 290.984C420.24 291.104 420.091 291.252 420.022 291.418L418.302 295.296C418.163 295.619 418.324 295.963 418.734 296.199L421.55 297.825C422.188 298.194 423.224 298.195 423.862 297.826L425.314 296.988C425.95 296.621 426.628 296.415 427.047 296.657C427.801 297.093 428.671 297.03 429.305 296.69C429.894 296.326 430.024 295.838 429.245 295.388C428.769 295.113 429.182 294.755 429.82 294.386L430.863 293.784C431.502 293.415 432.537 293.417 433.176 293.785L433.482 293.962C434.12 294.331 434.122 294.928 433.484 295.297L426.478 299.342C425.84 299.71 425.842 300.308 426.483 300.678L434.695 305.42C435.339 305.791 436.376 305.794 437.015 305.425L440.597 303.357C441.233 302.99 442.268 302.991 442.907 303.359L451.632 308.397C452.275 308.768 453.308 308.768 453.947 308.399L459.501 305.192C460 304.904 460.118 304.462 459.798 304.098L450.546 293.643C450.323 293.389 449.918 293.21 449.443 293.147L443.081 292.322C442.271 292.219 441.725 291.781 441.809 291.306C441.872 291.124 442.025 290.954 442.253 290.823L445.151 289.15C445.584 288.899 446.221 288.811 446.81 288.919L453.822 290.224C454.363 290.322 454.957 290.254 455.386 290.04C455.82 289.826 456.024 289.494 455.931 289.171L454.482 284.163C454.395 283.862 454.563 283.556 454.934 283.342L457.712 281.738C458.104 281.511 458.275 281.185 458.15 280.87L456.691 277.039C456.534 276.63 456.31 275.954 456.252 275.535C456.185 275.025 456.717 274.597 457.059 274.794C457.698 275.163 458.733 275.164 459.372 274.795L459.415 274.771C459.957 274.458 460.048 273.966 459.633 273.594L456.93 271.171C456.661 270.926 456.594 270.627 456.756 270.353L459.291 266.076C459.495 265.735 459.34 265.357 458.899 265.102L450.428 260.211C449.787 259.841 448.751 259.84 448.115 260.207L448.131 260.198Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M429.369 296.658C429.351 296.669 429.328 296.677 429.31 296.687C429.29 296.699 429.276 296.712 429.258 296.722L429.369 296.658Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M423.746 262.689C424.757 263.252 425.968 263.126 427.383 262.309C428.799 261.492 430.01 260.219 431.021 258.489C432.031 256.719 432.539 255.005 432.539 253.342C432.539 251.68 432.036 250.549 431.021 249.948L428.005 248.207C429.02 248.807 429.523 249.939 429.523 251.601C429.523 253.263 429.015 254.978 428.005 256.748C426.994 258.478 425.783 259.75 424.367 260.568C422.952 261.385 421.741 261.511 420.73 260.948L423.746 262.689Z\"\n    fill=\"url(#paint0_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M427.392 239.873C429.375 238.729 431.227 238.095 432.943 237.975C434.556 237.882 435.965 238.174 437.181 238.844L434.165 237.103C432.949 236.432 431.54 236.141 429.927 236.233C428.209 236.354 426.354 236.99 424.367 238.137C422.378 239.286 420.532 240.788 418.816 242.649C417.063 244.572 415.496 246.744 414.217 248.984C412.938 251.224 411.927 253.568 411.185 256.014C410.443 258.5 410.072 260.95 410.072 263.243C410.072 265.536 410.424 267.763 411.132 269.928C411.874 272.034 412.884 274.196 414.163 276.427C415.477 278.598 417.01 280.9 418.762 283.327C420.637 285.96 422.507 288.6 424.371 291.244L427.387 292.985C425.523 290.342 423.653 287.701 421.778 285.069C420.026 282.641 418.493 280.339 417.179 278.168C415.9 275.937 414.89 273.775 414.148 271.67C413.44 269.505 413.088 267.277 413.088 264.984C413.088 262.691 413.459 260.241 414.201 257.755C414.943 255.309 415.954 252.966 417.233 250.725C418.512 248.485 420.079 246.313 421.832 244.39C423.55 242.527 425.4 241.023 427.392 239.873Z\"\n    fill=\"url(#paint1_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M427.382 262.309C428.798 261.492 430.009 260.22 431.019 258.49C432.03 256.72 432.538 255.005 432.538 253.343C432.538 251.68 432.035 250.549 431.019 249.949C430.004 249.348 428.798 249.448 427.382 250.266C425.966 251.083 424.756 252.373 423.745 254.148C422.735 255.924 422.227 257.633 422.227 259.296C422.227 260.958 422.735 262.086 423.745 262.69C424.756 263.253 425.966 263.127 427.382 262.309ZM427.382 239.879C429.369 238.732 431.224 238.096 432.943 237.976C434.695 237.875 436.209 238.228 437.493 239.029C438.806 239.772 439.836 240.938 440.573 242.53C441.349 244.139 441.735 246.112 441.735 248.445C441.735 250.778 441.364 253.389 440.622 256.385C439.88 259.347 438.855 262.685 437.542 266.412C436.262 270.08 434.764 274.127 433.045 278.564C431.141 283.366 429.252 288.177 427.387 292.986C425.522 290.342 423.652 287.701 421.778 285.069C420.025 282.642 418.492 280.34 417.179 278.169C415.9 275.938 414.889 273.775 414.147 271.67C413.439 269.505 413.088 267.278 413.088 264.985C413.088 262.692 413.459 260.242 414.201 257.756C414.943 255.31 415.954 252.966 417.233 250.726C418.512 248.486 420.079 246.314 421.831 244.391C423.55 242.527 425.4 241.023 427.392 239.873L427.382 239.879Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M157.382 449.452C157.192 453.023 159.456 456.628 164.173 459.352C173.245 464.589 187.968 464.588 197.043 459.348C201.399 456.833 203.665 453.567 203.841 450.271V453.006C203.665 456.301 201.399 459.568 197.043 462.083C187.968 467.322 173.245 467.324 164.173 462.086C159.456 459.363 157.192 455.757 157.382 452.186V449.452Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M245.949 425.138C246.136 428.708 243.871 432.314 239.152 435.039C230.076 440.278 215.354 440.28 206.282 435.042C201.927 432.528 199.663 429.263 199.49 425.967V428.701C199.663 431.997 201.927 435.263 206.282 437.777C215.354 443.014 230.076 443.013 239.152 437.773C243.871 435.049 246.136 431.443 245.949 427.872V425.138Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M240.952 401.205C240.763 404.776 243.026 408.381 247.744 411.105C256.816 416.342 271.538 416.341 280.613 411.101C284.969 408.586 287.235 405.32 287.411 402.024V404.759C287.235 408.055 284.969 411.321 280.613 413.836C271.538 419.075 256.816 419.077 247.744 413.839C243.026 411.116 240.763 407.51 240.952 403.939V401.205Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M330.174 376.266C330.474 379.833 328.321 383.462 323.687 386.236C314.774 391.572 300.06 391.728 290.822 386.584C286.388 384.116 284.021 380.875 283.744 377.582V380.316C284.021 383.609 286.388 386.85 290.822 389.319C300.06 394.462 314.774 394.306 323.687 388.971C328.321 386.196 330.474 382.567 330.174 379V376.266Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M359.446 364.949L348.502 371.268V374.002L359.446 367.684V364.949Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M348.502 371.268L316.75 352.937V355.671L348.502 374.002V371.268Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M380.175 352.979L369.23 359.297V362.031L380.175 355.713V352.979Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M369.23 359.296L337.479 340.965V343.699L369.23 362.03V359.296Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M129.123 461.567L160.875 479.899V482.633L129.123 464.302V461.567Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M160.873 479.898L171.817 473.58V476.314L160.873 482.633V479.898Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M142.56 485.135C142.747 488.705 140.481 492.311 135.762 495.036C126.687 500.276 111.964 500.277 102.892 495.04C98.5377 492.526 96.2791 489.263 96.1113 485.97V488.704C96.2791 491.997 98.5377 495.26 102.892 497.774C111.964 503.011 126.687 503.01 135.762 497.77C140.481 495.046 142.747 491.44 142.56 487.869V485.135Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <g\n    opacity=\"0.05\"\n    filter=\"url(#filter1_f_2683_76044)\"\n  >\n    <path\n      d=\"M149.828 527.612L260.324 591.231L221.689 613.476L111.193 549.857L149.828 527.612Z\"\n      fill=\"#212121\"\n    />\n    <path\n      d=\"M70.8334 573.094L181.33 636.713L140.97 659.951L30.4736 596.332L70.8334 573.094Z\"\n      fill=\"#212121\"\n    />\n    <path\n      d=\"M221.689 613.476L111.193 549.857L70.8334 573.094L181.33 636.713L221.689 613.476Z\"\n      fill=\"#212121\"\n    />\n  </g>\n  <path\n    d=\"M141.198 407.463L248.541 469.437L211.009 491.107L103.666 429.132L141.198 407.463Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M103.666 429.132L211.009 491.106V507.575L103.666 445.601V429.132Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M211.008 491.107L248.54 469.438V485.906L211.008 507.576V491.107Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M101.99 430.1L209.333 492.074L171.801 513.743L64.458 451.769L101.99 430.1Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M64.458 451.769L171.801 513.743V530.212L64.458 468.237V451.769Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M171.801 513.744L209.333 492.074V508.543L171.801 530.212V513.744Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M62.7825 452.736L170.125 514.711L132.593 536.38L25.25 474.406L62.7825 452.736Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M25.25 474.405L132.593 536.38V552.848L25.25 490.874V474.405Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M132.592 536.38L170.124 514.711V531.18L132.592 552.849V536.38Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <g\n    opacity=\"0.05\"\n    filter=\"url(#filter2_f_2683_76044)\"\n  >\n    <path\n      d=\"M254.654 547.877C254.854 544.3 252.591 540.685 247.864 537.956C238.792 532.718 224.069 532.719 214.994 537.959C209.309 541.241 207.184 545.802 208.619 550.04C208.375 549.319 208.234 548.589 208.195 547.857V550.592C208.368 553.888 210.632 557.153 214.987 559.667C224.058 564.905 238.781 564.903 247.856 559.663C252.576 556.939 254.841 553.333 254.654 549.762V547.877Z\"\n      fill=\"#212121\"\n    />\n    <path\n      d=\"M296.116 523.936V526.649C295.94 529.945 293.674 533.211 289.318 535.726C280.243 540.965 265.521 540.967 256.449 535.729C251.731 533.006 249.468 529.4 249.658 525.83V523.924C249.677 524.284 249.721 524.643 249.79 525.001C249.72 524.64 249.676 524.276 249.658 523.913V523.924C249.643 523.648 249.643 523.372 249.658 523.095V523.114C249.827 519.813 252.093 516.54 256.456 514.021C265.531 508.782 280.254 508.78 289.326 514.018C294.051 516.746 296.314 520.359 296.116 523.936Z\"\n      fill=\"#212121\"\n    />\n    <path\n      d=\"M338.877 498.161C338.601 494.867 336.234 491.626 331.799 489.157C322.561 484.014 307.847 484.169 298.935 489.505C294.3 492.28 292.147 495.909 292.447 499.476V502.207C292.724 505.5 295.091 508.741 299.525 511.209C308.764 516.353 323.478 516.197 332.39 510.861C337.024 508.087 339.177 504.458 338.877 500.891V499.468C338.885 499.384 338.89 499.3 338.895 499.216C338.906 498.988 338.908 498.76 338.9 498.533C338.895 498.407 338.888 498.282 338.877 498.156V498.161Z\"\n      fill=\"#212121\"\n    />\n    <path\n      d=\"M336.398 468.507L325.454 474.826L357.206 493.158L368.15 486.839L336.398 468.507Z\"\n      fill=\"#212121\"\n    />\n    <path\n      d=\"M388.88 474.875V477.603L377.937 483.921V483.921L377.936 483.921L346.185 465.59V462.856L346.189 462.858L357.131 456.541L388.878 474.87L388.88 474.869V474.871L388.883 474.873L388.88 474.875Z\"\n      fill=\"#212121\"\n    />\n    <path\n      d=\"M325.454 474.827L357.206 493.159V495.893L325.454 477.562V474.827Z\"\n      fill=\"#212121\"\n    />\n    <path\n      d=\"M368.151 486.84L357.207 493.159V495.893L368.151 489.575V486.84Z\"\n      fill=\"#212121\"\n    />\n  </g>\n  <path\n    d=\"M102.92 476.083C111.995 470.843 126.695 470.828 135.767 476.066C144.839 481.304 144.837 489.804 135.761 495.044C126.686 500.283 111.963 500.284 102.891 495.047C93.82 489.809 93.8452 481.323 102.92 476.083ZM290.229 367.616C299.142 362.28 313.855 362.124 323.094 367.268C332.332 372.411 332.597 380.906 323.685 386.242C314.772 391.577 300.057 391.733 290.819 386.59C281.581 381.446 281.317 372.951 290.229 367.616ZM164.181 440.384C173.257 435.144 187.979 435.143 197.051 440.38C206.122 445.618 206.12 454.118 197.045 459.357C187.969 464.597 173.246 464.599 164.175 459.361C155.103 454.124 155.106 445.623 164.181 440.384ZM247.749 392.132C256.825 386.892 271.547 386.89 280.619 392.128C289.691 397.366 289.689 405.866 280.614 411.106C271.538 416.346 256.815 416.347 247.743 411.109C238.671 405.872 238.674 397.371 247.749 392.132ZM206.288 416.069C215.364 410.83 230.087 410.828 239.158 416.065C248.23 421.303 248.227 429.803 239.152 435.043C230.076 440.283 215.354 440.285 206.282 435.047C197.21 429.809 197.213 421.309 206.288 416.069ZM171.818 473.586L160.874 479.905L129.122 461.573L140.066 455.254L171.818 473.586ZM380.177 352.983L369.233 359.302L337.482 340.97L348.426 334.652L380.177 352.983ZM359.444 364.95L348.5 371.268L316.749 352.937L327.693 346.618L359.444 364.95Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    d=\"M102.92 476.083L102.543 475.865L102.543 475.865L102.92 476.083ZM135.767 476.066L136.144 475.848L136.144 475.848L135.767 476.066ZM135.761 495.044L136.138 495.262L136.138 495.262L135.761 495.044ZM102.891 495.047L102.514 495.265L102.514 495.265L102.891 495.047ZM290.229 367.616L289.846 367.402L289.846 367.402L290.229 367.616ZM323.094 367.268L323.464 367.046L323.464 367.046L323.094 367.268ZM323.685 386.242L324.069 386.455V386.455L323.685 386.242ZM290.819 386.59L290.449 386.811L290.449 386.811L290.819 386.59ZM164.181 440.384L163.804 440.166L163.804 440.166L164.181 440.384ZM197.051 440.38L197.428 440.163V440.163L197.051 440.38ZM197.045 459.357L197.422 459.575L197.422 459.575L197.045 459.357ZM164.175 459.361L163.798 459.579V459.579L164.175 459.361ZM247.749 392.132L247.372 391.914V391.914L247.749 392.132ZM280.619 392.128L280.996 391.91L280.996 391.91L280.619 392.128ZM280.614 411.106L280.991 411.324V411.324L280.614 411.106ZM247.743 411.109L247.366 411.327L247.366 411.327L247.743 411.109ZM206.288 416.069L205.911 415.852V415.852L206.288 416.069ZM239.158 416.065L239.535 415.848L239.535 415.848L239.158 416.065ZM239.152 435.043L239.529 435.261V435.261L239.152 435.043ZM206.282 435.047L205.905 435.265L205.905 435.265L206.282 435.047ZM171.818 473.586L172.195 473.804C172.403 473.683 172.403 473.488 172.195 473.368L171.818 473.586ZM160.874 479.905L160.497 480.122C160.705 480.243 161.042 480.243 161.251 480.122L160.874 479.905ZM129.122 461.573L128.745 461.355C128.536 461.475 128.536 461.67 128.745 461.79L129.122 461.573ZM140.066 455.254L140.443 455.036C140.235 454.916 139.897 454.916 139.689 455.036L140.066 455.254ZM380.177 352.983L380.554 353.201C380.762 353.081 380.762 352.886 380.554 352.766L380.177 352.983ZM369.233 359.302L368.856 359.519C369.064 359.64 369.402 359.64 369.61 359.519L369.233 359.302ZM337.482 340.97L337.105 340.753C336.897 340.873 336.897 341.068 337.105 341.188L337.482 340.97ZM348.426 334.652L348.803 334.434C348.594 334.314 348.257 334.314 348.049 334.434L348.426 334.652ZM359.444 364.95L359.821 365.167C360.029 365.047 360.029 364.852 359.821 364.732L359.444 364.95ZM348.5 371.268L348.123 371.486C348.331 371.606 348.669 371.606 348.877 371.486L348.5 371.268ZM316.749 352.937L316.372 352.719C316.164 352.839 316.164 353.034 316.372 353.154L316.749 352.937ZM327.693 346.618L328.07 346.4C327.861 346.28 327.524 346.28 327.316 346.401L327.693 346.618ZM102.92 476.083L103.297 476.301C112.165 471.181 126.527 471.167 135.39 476.284L135.767 476.066L136.144 475.848C126.863 470.49 111.826 470.506 102.543 475.865L102.92 476.083ZM135.767 476.066L135.39 476.284C144.254 481.401 144.252 489.707 135.384 494.826L135.761 495.044L136.138 495.262C145.422 489.902 145.425 481.206 136.144 475.848L135.767 476.066ZM135.761 495.044L135.384 494.826C126.517 499.946 112.132 499.947 103.268 494.829L102.891 495.047L102.514 495.265C111.795 500.622 126.855 500.621 136.138 495.262L135.761 495.044ZM102.891 495.047L103.268 494.829C94.406 489.712 94.4296 481.421 103.297 476.301L102.92 476.083L102.543 475.865C93.2608 481.225 93.2339 489.906 102.514 495.265L102.891 495.047ZM290.229 367.616L290.613 367.829C299.321 362.616 313.697 362.464 322.723 367.489L323.094 367.268L323.464 367.046C314.013 361.785 298.962 361.944 289.846 367.402L290.229 367.616ZM323.094 367.268L322.723 367.489C331.75 372.514 332.009 380.815 323.301 386.028L323.685 386.242L324.069 386.455C333.185 380.997 332.914 372.307 323.464 367.046L323.094 367.268ZM323.685 386.242L323.301 386.028C314.593 391.241 300.215 391.394 291.189 386.368L290.819 386.59L290.449 386.811C299.899 392.073 314.952 391.913 324.069 386.455L323.685 386.242ZM290.819 386.59L291.189 386.368C282.163 381.343 281.905 373.043 290.613 367.829L290.229 367.616L289.846 367.402C280.729 372.86 280.999 381.55 290.449 386.811L290.819 386.59ZM164.181 440.384L164.558 440.601C173.426 435.482 187.81 435.481 196.674 440.598L197.051 440.38L197.428 440.163C188.147 434.805 173.088 434.807 163.804 440.166L164.181 440.384ZM197.051 440.38L196.674 440.598C205.537 445.715 205.535 454.02 196.668 459.14L197.045 459.357L197.422 459.575C206.705 454.215 206.708 445.521 197.428 440.163L197.051 440.38ZM197.045 459.357L196.668 459.14C187.8 464.259 173.415 464.261 164.552 459.144L164.175 459.361L163.798 459.579C173.078 464.937 188.138 464.935 197.422 459.575L197.045 459.357ZM164.175 459.361L164.552 459.144C155.688 454.026 155.691 445.721 164.558 440.601L164.181 440.384L163.804 440.166C154.521 445.526 154.517 454.221 163.798 459.579L164.175 459.361ZM247.749 392.132L248.126 392.349C256.994 387.23 271.379 387.228 280.242 392.346L280.619 392.128L280.996 391.91C271.716 386.553 256.656 386.554 247.372 391.914L247.749 392.132ZM280.619 392.128L280.242 392.346C289.106 397.463 289.104 405.769 280.237 410.888L280.614 411.106L280.991 411.324C290.274 405.964 290.277 397.268 280.996 391.91L280.619 392.128ZM280.614 411.106L280.237 410.888C271.369 416.008 256.983 416.009 248.12 410.892L247.743 411.109L247.366 411.327C256.646 416.685 271.707 416.683 280.991 411.324L280.614 411.106ZM247.743 411.109L248.12 410.892C239.256 405.774 239.259 397.469 248.126 392.349L247.749 392.132L247.372 391.914C238.089 397.274 238.086 405.969 247.366 411.327L247.743 411.109ZM206.288 416.069L206.665 416.287C215.533 411.167 229.918 411.166 238.781 416.283L239.158 416.065L239.535 415.848C230.255 410.49 215.195 410.492 205.911 415.852L206.288 416.069ZM239.158 416.065L238.781 416.283C247.645 421.4 247.642 429.706 238.775 434.825L239.152 435.043L239.529 435.261C248.812 429.901 248.816 421.206 239.535 415.848L239.158 416.065ZM239.152 435.043L238.775 434.825C229.907 439.945 215.522 439.947 206.659 434.829L206.282 435.047L205.905 435.265C215.185 440.623 230.245 440.62 239.529 435.261L239.152 435.043ZM206.282 435.047L206.659 434.829C197.795 429.712 197.798 421.407 206.665 416.287L206.288 416.069L205.911 415.852C196.628 421.211 196.624 429.907 205.905 435.265L206.282 435.047ZM171.818 473.586L171.441 473.368L160.497 479.687L160.874 479.905L161.251 480.122L172.195 473.804L171.818 473.586ZM160.874 479.905L161.251 479.687L129.499 461.355L129.122 461.573L128.745 461.79L160.497 480.122L160.874 479.905ZM129.122 461.573L129.499 461.79L140.443 455.472L140.066 455.254L139.689 455.036L128.745 461.355L129.122 461.573ZM140.066 455.254L139.689 455.472L171.441 473.804L171.818 473.586L172.195 473.368L140.443 455.036L140.066 455.254ZM380.177 352.983L379.8 352.766L368.856 359.084L369.233 359.302L369.61 359.519L380.554 353.201L380.177 352.983ZM369.233 359.302L369.61 359.084L337.859 340.753L337.482 340.97L337.105 341.188L368.856 359.519L369.233 359.302ZM337.482 340.97L337.859 341.188L348.803 334.87L348.426 334.652L348.049 334.434L337.105 340.753L337.482 340.97ZM348.426 334.652L348.049 334.87L379.8 353.201L380.177 352.983L380.554 352.766L348.803 334.434L348.426 334.652ZM359.444 364.95L359.067 364.732L348.123 371.05L348.5 371.268L348.877 371.486L359.821 365.167L359.444 364.95ZM348.5 371.268L348.877 371.05L317.126 352.719L316.749 352.937L316.372 353.154L348.123 371.486L348.5 371.268ZM316.749 352.937L317.126 353.154L328.07 346.836L327.693 346.618L327.316 346.401L316.372 352.719L316.749 352.937ZM327.693 346.618L327.316 346.836L359.067 365.167L359.444 364.95L359.821 364.732L328.07 346.4L327.693 346.618Z\"\n    fill=\"#212121\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M67.8641 479.723L61.0889 462.424L121.409 427.598L128.184 444.897L67.8641 479.723Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M63.9969 480.1L67.8638 479.724L61.0886 462.424L57.2217 462.8L63.9969 480.1Z\"\n    fill=\"var(--c8y-brand-40)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M102.054 451.305C102.465 454.645 100.138 457.967 96.8588 458.725C93.5792 459.482 90.588 457.387 90.1778 454.047C89.7676 450.706 92.0937 447.384 95.3733 446.626C98.653 445.869 101.644 447.964 102.054 451.305Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M60.9697 462.417L15.8145 347.119L76.1346 312.293L121.29 427.592L60.9697 462.417Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M60.9705 462.418L15.8152 347.119L11.9482 347.496L57.1035 462.795L60.9705 462.418Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M15.8661 347.063L13.6065 341.294L73.9266 306.468L76.1863 312.238L15.8661 347.063Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M13.4441 341.404L9.57716 341.781L69.8973 306.955L73.7643 306.578L13.4441 341.404Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M11.9482 347.497L15.8151 347.12L13.5554 341.351L9.68849 341.727L11.9482 347.497Z\"\n    fill=\"var(--c8y-brand-40)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M172.633 508.567V494.636L236.723 457.634V471.564L172.633 508.567Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M172.633 494.636L112.312 459.811V473.741L172.633 508.567V494.636Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M118.174 465.47L124.206 468.952V475.917L118.174 472.435V465.47Z\"\n    fill=\"#212121\"\n  />\n  <path\n    d=\"M127.222 470.694L133.254 474.176V481.141L127.222 477.659V470.694Z\"\n    fill=\"#212121\"\n  />\n  <path\n    d=\"M142.302 479.4L136.27 475.917V482.883L142.302 486.365V479.4Z\"\n    fill=\"#212121\"\n  />\n  <path\n    d=\"M145.318 481.141L151.35 484.624V491.589L145.318 488.107V481.141Z\"\n    fill=\"#212121\"\n  />\n  <path\n    d=\"M160.398 489.848L154.366 486.365V493.33L160.398 496.813V489.848Z\"\n    fill=\"#212121\"\n  />\n  <path\n    d=\"M163.414 491.589L169.446 495.072V502.037L163.414 498.554V491.589Z\"\n    fill=\"#212121\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M122.698 476.788L116.666 473.305L118.174 472.435L122.698 475.047V476.788Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M116.666 473.306V466.341L118.174 467.211V472.435L116.666 473.306Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M131.747 482.012L125.715 478.53L127.223 477.659L131.747 480.271V482.012Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M125.715 478.53V471.564L127.223 472.435V477.659L125.715 478.53Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M134.762 476.788V483.753L136.27 482.883V477.659L134.762 476.788Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M134.762 483.753L140.794 487.236V485.495L136.27 482.883L134.762 483.753Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M149.843 492.46L143.811 488.977L145.319 488.106L149.843 490.718V492.46Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M143.811 488.977V482.012L145.319 482.882V488.106L143.811 488.977Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M152.857 487.236V494.202L154.365 493.331V488.107L152.857 487.236Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M152.857 494.201L158.889 497.683V495.942L154.365 493.33L152.857 494.201Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M167.938 502.908L161.906 499.425L163.414 498.555L167.938 501.167V502.908Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M161.906 499.425V492.46L163.414 493.331V498.554L161.906 499.425Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M116.666 466.34L122.698 469.823L124.206 468.952L118.174 465.47L116.666 466.34Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M122.697 469.823V476.788L124.205 475.917V468.952L122.697 469.823Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M125.715 471.564L131.747 475.047L133.255 474.176L127.223 470.693L125.715 471.564Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M131.746 475.046V482.012L133.254 481.141V474.176L131.746 475.046Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M140.794 480.271L134.762 476.789L136.27 475.918L142.302 479.401L140.794 480.271Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M140.795 487.236V480.271L142.303 479.4V486.366L140.795 487.236Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M143.811 482.012L149.843 485.495L151.351 484.624L145.319 481.142L143.811 482.012Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M149.842 485.495V492.46L151.35 491.589V484.624L149.842 485.495Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M158.889 490.718L152.857 487.236L154.365 486.365L160.397 489.848L158.889 490.718Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M158.891 497.683V490.718L160.399 489.848V496.813L158.891 497.683Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M161.906 492.46L167.938 495.942L169.446 495.071L163.414 491.589L161.906 492.46Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M167.938 495.942V502.907L169.446 502.036V495.071L167.938 495.942Z\"\n    fill=\"#D4D9DE\"\n  />\n  <path\n    d=\"M116.666 466.341L122.698 469.823V476.789L116.666 473.306V466.341Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M125.714 471.565L131.746 475.047V482.012L125.714 478.53V471.565Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M140.794 480.271L134.762 476.789V483.754L140.794 487.236V480.271Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M143.81 482.012L149.842 485.495V492.46L143.81 488.978V482.012Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M158.89 490.719L152.858 487.236V494.202L158.89 497.684V490.719Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M161.906 492.46L167.938 495.943V502.908L161.906 499.425V492.46Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M169.616 458.069L165.092 455.457L229.182 418.454L233.706 421.066L169.616 458.069Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M159.665 452.322L155.141 449.71L219.231 412.708L223.755 415.32L159.665 452.322Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M149.712 446.576L145.188 443.964L209.278 406.962L213.802 409.574L149.712 446.576Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M139.758 440.83L135.234 438.218L199.325 401.216L203.849 403.828L139.758 440.83Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M145.188 443.964V436.999L209.278 399.996V406.961L145.188 443.964Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M129.805 435.084L125.281 432.472L189.371 395.47L193.895 398.082L129.805 435.084Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M135.234 438.219V431.253L199.325 394.251V401.216L135.234 438.219Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M119.852 429.337L115.328 426.725L179.418 389.723L183.942 392.335L119.852 429.337Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M125.281 432.472V425.506L189.371 388.504V395.469L125.281 432.472Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M115.328 426.725V419.76L179.418 382.758V389.723L115.328 426.725Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M115.329 419.76L112.312 418.019L176.403 381.017L179.419 382.758L115.329 419.76Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M172.633 494.636V473.741V452.845L236.723 415.843V436.738V457.634L172.633 494.636Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M154.988 449.623V442.658L219.078 405.655V412.62L154.988 449.623Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M145.187 436.999L142.472 435.432L139.758 433.865L203.848 396.862L206.562 398.429L209.277 399.997L145.187 436.999Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M165.093 448.491L159.664 445.357L223.754 408.354L229.183 411.489L165.093 448.491Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M165.092 455.457V448.492L229.182 411.489V418.454L165.092 455.457Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M135.234 431.253L129.805 428.119L193.895 391.116L199.324 394.251L135.234 431.253Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M125.282 425.507L119.854 422.373L183.944 385.37L189.373 388.504L125.282 425.507Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M172.633 452.845L169.617 451.104L233.707 414.102L236.723 415.843L172.633 452.845Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M155.14 442.745L149.711 439.611L213.801 402.608L219.23 405.743L155.14 442.745Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M169.617 451.104V458.069L165.093 455.457V448.492L159.664 445.358V452.323L155.14 449.711V442.746L149.711 439.612V446.577L145.187 443.965V437L139.758 433.865V440.83L135.234 438.219V431.253L129.805 428.119V435.084L125.281 432.472V425.507L119.853 422.373V429.338L115.329 426.726V419.761L112.312 418.02V459.811L172.633 494.636V452.845L169.617 451.104Z\"\n    fill=\"var(--c8y-brand-40)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <mask\n    style=\"mask-type: alpha\"\n    id=\"mask0_2683_76044\"\n    height=\"20\"\n    maskUnits=\"userSpaceOnUse\"\n    x=\"198\"\n    y=\"448\"\n    width=\"17\"\n  >\n    <path\n      d=\"M210.607 451.455V449.174L208.88 450.171V448.323L204.319 450.957V452.805L202.501 453.854V456.135L198.973 458.172V467.125L214.053 458.419V449.466L210.607 451.455Z\"\n      fill=\"#212121\"\n    />\n  </mask>\n  <g mask=\"url(#mask0_2683_76044)\">\n    <path\n      d=\"M210.607 451.879V449.598L208.88 450.595V448.747L204.319 451.38V453.229L202.501 454.278V456.559L198.973 458.596V467.549L214.053 458.843V449.889L210.607 451.879Z\"\n      fill=\"#212121\"\n    />\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M210.606 451.455V449.174L208.984 448.279V450.56L210.606 451.455Z\"\n      fill=\"var(--c8y-brand-40)\"\n      stroke=\"#212121\"\n      stroke-width=\"0.870647\"\n      stroke-linejoin=\"round\"\n    />\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M208.881 450.172V448.323L207.244 447.406V449.255L208.881 450.172Z\"\n      fill=\"var(--c8y-brand-40)\"\n      stroke=\"#212121\"\n      stroke-width=\"0.870647\"\n      stroke-linejoin=\"round\"\n    />\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M214.054 458.419V449.465L212.033 448.137V457.09L214.054 458.419Z\"\n      fill=\"var(--c8y-brand-40)\"\n      stroke=\"#212121\"\n      stroke-width=\"0.870647\"\n      stroke-linejoin=\"round\"\n    />\n    <path\n      fill-rule=\"evenodd\"\n      clip-rule=\"evenodd\"\n      d=\"M198.974 467.125L214.054 458.419L211.877 457.09L196.797 465.796L198.974 467.125Z\"\n      fill=\"var(--c8y-brand-60)\"\n      stroke=\"#212121\"\n      stroke-width=\"0.870647\"\n      stroke-linejoin=\"round\"\n    />\n  </g>\n  <path\n    d=\"M210.607 451.878V449.597L208.88 450.594V448.746L204.319 451.379V453.228L202.501 454.277V456.558L198.973 458.595V467.548L214.053 458.842V449.888L210.607 451.878Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M182.556 365.62C182.04 365.285 181.308 365.312 180.496 365.781C178.934 366.682 177.668 368.875 177.668 370.678C177.668 371.576 177.982 372.208 178.49 372.505L175.474 370.764C174.966 370.467 174.652 369.835 174.652 368.937C174.652 367.134 175.918 364.941 177.48 364.039C178.292 363.571 179.024 363.543 179.54 363.879L182.556 365.62Z\"\n    fill=\"url(#paint2_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M179.026 372.799V392.749L176.01 391.008V371.058L179.026 372.799Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M182.041 370.888C182.813 369.859 183.323 368.558 183.323 367.413C183.323 365.61 182.057 364.879 180.495 365.781C178.934 366.682 177.668 368.875 177.668 370.678C177.668 371.859 178.211 372.581 179.025 372.684V392.749L182.041 391.008V370.888Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M185.64 356.412C184.825 355.942 183.883 355.746 182.827 355.842C181.734 355.942 180.573 356.334 179.381 357.022C178.19 357.71 176.976 358.689 175.86 359.891C174.79 361.049 173.824 362.372 173.01 363.817L169.994 362.076C170.808 360.631 171.774 359.307 172.844 358.149C173.96 356.948 175.174 355.968 176.365 355.281C177.557 354.593 178.718 354.201 179.811 354.101C180.867 354.005 181.809 354.201 182.624 354.671L185.64 356.412Z\"\n    fill=\"url(#paint3_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M189.9 348.902C188.535 348.123 186.936 347.818 185.164 347.979C183.332 348.149 181.379 348.824 179.374 349.982C177.353 351.148 175.393 352.733 173.545 354.705C171.766 356.603 170.16 358.775 168.787 361.152L165.771 359.411C167.144 357.034 168.75 354.862 170.529 352.964C172.377 350.992 174.337 349.407 176.358 348.241C178.363 347.083 180.316 346.408 182.148 346.238C183.92 346.077 185.519 346.382 186.884 347.161L189.9 348.902Z\"\n    fill=\"url(#paint4_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M185.639 356.412C184.825 355.942 183.882 355.746 182.827 355.842C181.733 355.942 180.572 356.334 179.381 357.022C178.189 357.71 176.976 358.689 175.86 359.891C174.789 361.048 173.824 362.372 173.01 363.817L175.709 365.28C176.681 363.56 177.978 362.176 179.373 361.371C180.768 360.565 182.012 360.456 182.977 361.014L185.639 356.404V356.412Z\"\n    fill=\"var(--c8y-brand-30)\"\n  />\n  <path\n    d=\"M179.373 349.983C177.353 351.149 175.392 352.734 173.545 354.706C171.765 356.604 170.159 358.776 168.787 361.153L171.449 362.69C172.482 360.901 173.681 359.277 175.008 357.858C176.387 356.391 177.858 355.194 179.366 354.323C182.337 352.608 185.141 352.32 187.253 353.513L189.899 348.903C188.534 348.124 186.936 347.819 185.164 347.98C183.332 348.15 181.379 348.825 179.373 349.983Z\"\n    fill=\"var(--c8y-brand-30)\"\n  />\n  <path\n    d=\"M185.639 356.412C184.825 355.942 183.882 355.746 182.827 355.842C181.733 355.942 180.572 356.334 179.381 357.022C178.189 357.71 176.976 358.689 175.86 359.891C174.789 361.048 173.824 362.372 173.01 363.817L175.709 365.28C176.681 363.56 177.978 362.176 179.373 361.371C180.768 360.565 182.012 360.456 182.977 361.014L185.639 356.404V356.412Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M179.373 349.983C177.353 351.149 175.392 352.734 173.545 354.706C171.765 356.604 170.159 358.776 168.787 361.153L171.449 362.69C172.482 360.901 173.681 359.277 175.008 357.858C176.387 356.391 177.858 355.194 179.366 354.323C182.337 352.608 185.141 352.32 187.253 353.513L189.899 348.903C188.534 348.124 186.936 347.819 185.164 347.98C183.332 348.15 181.379 348.825 179.373 349.983Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M613.379 132.774L594.529 121.891L597.545 120.149L616.395 131.032L613.379 132.774Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M594.529 121.891V130.597L597.545 128.856V120.149L594.529 121.891Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M594.529 130.597L613.379 141.48L616.395 139.739L597.545 128.855L594.529 130.597Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M613.379 141.48V132.774L616.395 131.032V139.739L613.379 141.48Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M651.079 164.987L594.529 132.338L597.545 130.597L654.095 163.246L651.079 164.987Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M594.529 132.338V175.87L597.545 174.129V130.597L594.529 132.338Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M594.529 175.87L651.079 208.519L654.095 206.778L597.545 174.129L594.529 175.87Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M651.08 208.521V164.988L654.096 163.247V206.779L651.08 208.521Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M613.379 132.774L594.529 121.891V130.597L613.379 141.48V132.774ZM651.079 164.988L594.529 132.338V175.871L651.079 208.52V164.988Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M605.979 136.692L587.129 125.809L590.145 124.067L608.995 134.95L605.979 136.692Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M587.129 125.809V134.515L590.145 132.774V124.067L587.129 125.809Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M587.129 134.515L605.979 145.398L608.995 143.657L590.145 132.773L587.129 134.515Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M605.979 145.398V136.691L608.995 134.95V143.657L605.979 145.398Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M643.679 168.906L587.129 136.257L590.145 134.516L646.695 167.165L643.679 168.906Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M587.129 136.257V179.789L590.145 178.048V134.516L587.129 136.257Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M587.129 179.788L643.679 212.437L646.695 210.696L590.145 178.047L587.129 179.788Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M643.68 212.438V168.905L646.696 167.164V210.696L643.68 212.438Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M605.979 136.692L587.129 125.809V134.515L605.979 145.398V136.692ZM643.679 168.906L587.129 136.256V179.789L643.679 212.438V168.906Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M597.831 143.362L578.98 132.479L581.996 130.737L600.847 141.62L597.831 143.362Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M578.98 132.479V141.185L581.996 139.444V130.737L578.98 132.479Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M578.98 141.185L597.831 152.068L600.847 150.326L581.996 139.443L578.98 141.185Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M597.83 152.067V143.36L600.846 141.619V150.326L597.83 152.067Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M635.531 175.575L578.98 142.926L581.996 141.185L638.547 173.834L635.531 175.575Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M578.98 142.926V186.458L581.996 184.717V141.185L578.98 142.926Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M578.98 186.458L611.553 205.264L614.569 203.522L581.996 184.717L578.98 186.458Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M611.554 205.264C605.461 194.279 605.462 182.417 611.887 178.688L614.903 176.946C608.478 180.675 608.477 192.537 614.57 203.522L611.554 205.264Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M611.887 178.687C618.37 174.923 628.865 180.981 635.356 192.245L638.372 190.503C631.881 179.239 621.386 173.182 614.903 176.946L611.887 178.687Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M635.355 192.244L635.531 192.479L638.547 190.737L638.371 190.503L635.355 192.244Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M635.529 192.478V175.574L638.545 173.833V190.737L635.529 192.478Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M615.125 184.356C617.278 182.957 620.335 183.071 623.725 185.029C630.245 188.793 635.53 197.947 635.53 205.475C635.53 209.24 634.209 211.885 632.073 213.118L635.089 211.377C637.225 210.144 638.546 207.498 638.546 203.734C638.546 196.206 633.261 187.051 626.741 183.287C623.351 181.33 620.294 181.215 618.141 182.615L615.125 184.356Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M625.871 202.375L630.981 205.325L633.997 203.584L628.887 200.634L625.871 202.375Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M621.924 189.639V195.539L624.94 193.798V187.897L621.924 189.639Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M616.812 192.589V197.146L619.829 195.405V190.848L616.812 192.589Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M616.812 197.147L621.922 200.097L624.938 198.355L619.829 195.405L616.812 197.147Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M621.924 200.096V205.996L624.94 204.255V198.354L621.924 200.096Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M621.924 205.997L625.871 208.276L628.887 206.535L624.94 204.256L621.924 205.997Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M611.918 191.843C611.918 184.315 617.204 181.263 623.724 185.027C630.243 188.792 635.528 197.947 635.528 205.475C635.528 213.003 630.243 216.055 623.724 212.291C617.203 208.527 611.918 199.372 611.918 191.843ZM621.921 195.539L616.812 192.589V197.146L621.921 200.096V205.997L625.868 208.275V202.375L630.978 205.325V200.768L625.868 197.818V191.917L621.921 189.639V195.539Z\"\n    fill=\"var(--c8y-brand-40)\"\n  />\n  <path\n    d=\"M611.918 191.843L611.483 191.843V191.843H611.918ZM623.724 185.027L623.941 184.65L623.941 184.65L623.724 185.027ZM635.528 205.475L635.964 205.475V205.475H635.528ZM623.724 212.291L623.506 212.668L623.506 212.668L623.724 212.291ZM621.921 195.539L621.703 195.916L622.356 195.539H621.921ZM616.812 192.589L617.029 192.212L616.376 192.589H616.812ZM616.812 197.146H616.376L616.594 197.524L616.812 197.146ZM621.921 200.096H622.356L622.139 199.719L621.921 200.096ZM621.921 205.997H621.486L621.703 206.374L621.921 205.997ZM625.868 208.275L625.651 208.652L626.303 208.275H625.868ZM625.868 202.375L626.086 201.998L625.433 202.375H625.868ZM630.978 205.325L630.76 205.702L631.413 205.325H630.978ZM630.978 200.768H631.413L631.195 200.391L630.978 200.768ZM625.868 197.818H625.433L625.651 198.195L625.868 197.818ZM625.868 191.917H626.303L626.086 191.54L625.868 191.917ZM621.921 189.639L622.139 189.262L621.486 189.639H621.921ZM611.918 191.843L612.353 191.843C612.353 188.17 613.639 185.706 615.593 184.577C617.548 183.449 620.325 183.568 623.506 185.404L623.724 185.027L623.941 184.65C620.602 182.722 617.477 182.485 615.158 183.823C612.84 185.162 611.483 187.987 611.483 191.843L611.918 191.843ZM623.724 185.027L623.506 185.404C626.684 187.239 629.586 190.406 631.694 194.057C633.802 197.709 635.093 201.805 635.093 205.475H635.528H635.964C635.964 201.616 634.612 197.371 632.448 193.622C630.284 189.873 627.283 186.58 623.941 184.65L623.724 185.027ZM635.528 205.475L635.093 205.475C635.093 209.147 633.807 211.612 631.853 212.741C629.899 213.869 627.122 213.75 623.941 211.914L623.724 212.291L623.506 212.668C626.845 214.596 629.97 214.833 632.288 213.494C634.607 212.156 635.964 209.33 635.964 205.475L635.528 205.475ZM623.724 212.291L623.941 211.914C620.763 210.079 617.861 206.913 615.753 203.261C613.644 199.609 612.353 195.513 612.353 191.843H611.918H611.483C611.483 195.702 612.834 199.947 614.999 203.696C617.163 207.445 620.164 210.739 623.506 212.668L623.724 212.291ZM621.921 195.539L622.139 195.162L617.029 192.212L616.812 192.589L616.594 192.966L621.703 195.916L621.921 195.539ZM616.812 192.589H616.376V197.146H616.812H617.247V192.589H616.812ZM616.812 197.146L616.594 197.524L621.703 200.473L621.921 200.096L622.139 199.719L617.029 196.769L616.812 197.146ZM621.921 200.096H621.486V205.997H621.921H622.356V200.096H621.921ZM621.921 205.997L621.703 206.374L625.651 208.652L625.868 208.275L626.086 207.898L622.139 205.62L621.921 205.997ZM625.868 208.275H626.303V202.375H625.868H625.433V208.275H625.868ZM625.868 202.375L625.65 202.752L630.76 205.702L630.978 205.325L631.195 204.948L626.086 201.998L625.868 202.375ZM630.978 205.325H631.413V200.768H630.978H630.542V205.325H630.978ZM630.978 200.768L631.195 200.391L626.086 197.441L625.868 197.818L625.651 198.195L630.76 201.145L630.978 200.768ZM625.868 197.818H626.303V191.917H625.868H625.433V197.818H625.868ZM625.868 191.917L626.086 191.54L622.139 189.262L621.921 189.639L621.703 190.016L625.651 192.294L625.868 191.917ZM621.921 189.639H621.486V195.539H621.921H622.356V189.639H621.921Z\"\n    fill=\"#212121\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M597.831 143.361L578.98 132.478V141.184L597.831 152.067V143.361ZM635.531 175.575L578.98 142.925V186.458L611.553 205.263C605.46 194.278 605.461 182.416 611.886 178.687C618.369 174.923 628.864 180.98 635.355 192.244L635.531 192.479V175.575Z\"\n    fill=\"var(--c8y-brand-40)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M505.936 243.781L490.856 252.487L472.76 242.039L487.84 233.333L505.936 243.781Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M490.856 252.487L490.856 255.969L472.76 245.522L472.76 242.039L490.856 252.487Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M505.936 243.781L490.855 252.487L490.855 255.97L505.936 247.263V243.781Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M575.588 205.472L560.508 214.179L542.412 203.731L557.492 195.024L575.588 205.472Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M560.508 214.178L560.508 217.661L542.412 207.213L542.412 203.73L560.508 214.178Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M575.588 205.472L560.508 214.179L560.508 217.661L575.588 208.955V205.472Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M479.956 176.74L479.955 246.392L476.939 244.651L476.939 174.999L479.956 176.74Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M495.035 168.034L479.955 176.741L476.939 174.999L492.019 166.293L495.035 168.034Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M479.955 176.741L479.955 246.393L495.035 237.687L495.035 168.035L479.955 176.741Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M548.737 137.562L548.737 207.213L545.721 205.472L545.721 135.82L548.737 137.562Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M563.817 128.856L548.737 137.562L545.721 135.821L560.801 127.114L563.817 128.856Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M548.736 137.562L548.736 207.214L563.816 198.508L563.816 128.856L548.736 137.562Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    opacity=\"0.2\"\n    d=\"M472.945 176.506V85.3057L567.846 32.1963L569.369 121.873L472.945 176.506Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M578.947 31.3278L573.632 34.3964L566.092 30.0432L571.407 26.9746L578.947 31.3278Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M573.632 34.3962V125.737L566.092 121.384V30.043L573.632 34.3962Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M573.632 125.737L468.202 186.607L460.662 182.254L566.092 121.384L573.632 125.737Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M468.202 186.607V95.2663L460.662 90.9131V182.254L468.202 186.607Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M468.202 95.2663L462.888 98.3348L455.348 93.9816L460.662 90.9131L468.202 95.2663Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M462.888 98.3343V80.0661L455.348 75.7129V93.9811L462.888 98.3343Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M462.888 80.0664L578.947 13.0593L571.407 8.70605L455.348 75.7132L462.888 80.0664Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M563.127 40.4616L478.708 89.2007L471.168 84.8475L555.587 36.1084L563.127 40.4616Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M478.708 89.2009V168.41L471.168 164.057V84.8477L478.708 89.2009Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M578.947 31.3277L573.632 34.3963V125.737L468.201 186.607V95.2664L462.887 98.3349V80.0667L578.947 13.0596V31.3277ZM563.126 40.4617L478.707 89.2008V168.41L563.126 119.671V40.4617Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M505.308 70.542C507.778 69.1157 509.782 65.6451 509.782 62.7935C509.782 59.9419 507.778 58.7856 505.308 60.212C502.837 61.6383 500.833 65.1089 500.833 67.9605C500.833 70.8121 502.837 71.9683 505.308 70.542Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M521.244 56.1758C521.244 59.0274 519.24 62.498 516.77 63.9243C514.299 65.3507 512.295 64.1944 512.295 61.3428C512.295 58.4912 514.299 55.0206 516.77 53.5943C519.24 52.1679 521.244 53.3242 521.244 56.1758Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M528.057 57.4078C530.527 55.9815 532.531 52.5109 532.531 49.6593C532.531 46.8077 530.527 45.6515 528.057 47.0778C525.586 48.5042 523.582 51.9747 523.582 54.8263C523.582 57.6779 525.586 58.8342 528.057 57.4078Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M544.174 42.8447C544.219 45.6709 542.252 49.1605 539.781 50.6388C537.31 52.1172 535.271 51.0246 535.226 48.1984C535.181 45.3722 537.148 41.8827 539.619 40.4043C542.09 38.9259 544.129 40.0186 544.174 42.8447Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M546.688 36.4954L549.667 34.7754V44.756L546.688 46.476V36.4954Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M552.331 33.2374L555.311 31.5174V41.498L552.331 43.218V33.2374Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M498.52 64.3895L495.541 66.1095V76.0901L498.52 74.3701V64.3895Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M493.028 72.5507C493.028 75.4022 491.023 78.8728 488.553 80.2992C486.082 81.7255 484.078 80.5692 484.078 77.7176C484.078 74.8661 486.082 71.4025 488.553 69.9761C491.023 68.5498 493.028 69.6991 493.028 72.5507Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M505.308 70.542C507.778 69.1157 509.782 65.6451 509.782 62.7935C509.782 59.9419 507.778 58.7856 505.308 60.212C502.837 61.6383 500.833 65.1089 500.833 67.9605C500.833 70.8121 502.837 71.9683 505.308 70.542Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M521.244 56.1758C521.244 59.0274 519.24 62.498 516.77 63.9243C514.299 65.3507 512.295 64.1944 512.295 61.3428C512.295 58.4912 514.299 55.0206 516.77 53.5943C519.24 52.1679 521.244 53.3242 521.244 56.1758Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M528.057 57.4078C530.527 55.9815 532.531 52.5109 532.531 49.6593C532.531 46.8077 530.527 45.6515 528.057 47.0778C525.586 48.5042 523.582 51.9747 523.582 54.8263C523.582 57.6779 525.586 58.8342 528.057 57.4078Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M544.174 42.8447C544.219 45.6709 542.252 49.1605 539.781 50.6388C537.31 52.1172 535.271 51.0246 535.226 48.1984C535.181 45.3722 537.148 41.8827 539.619 40.4043C542.09 38.9259 544.129 40.0186 544.174 42.8447Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M546.688 36.4954L549.667 34.7754V44.756L546.688 46.476V36.4954Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M552.331 33.2374L555.311 31.5174V41.498L552.331 43.218V33.2374Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M498.52 64.3895L495.541 66.1095V76.0901L498.52 74.3701V64.3895Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M493.028 72.5507C493.028 75.4022 491.023 78.8728 488.553 80.2992C486.082 81.7255 484.078 80.5692 484.078 77.7176C484.078 74.8661 486.082 71.4025 488.553 69.9761C491.023 68.5498 493.028 69.6991 493.028 72.5507Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M505.036 116.674V92.5547C500.586 95.8848 496.837 100.428 493.788 106.184C490.739 111.846 489.215 117.34 489.215 122.669C489.215 128.568 491.028 132.564 494.653 134.657C498.279 136.75 502.646 136.322 507.755 133.373C512.369 130.709 516.365 126.641 519.744 121.17C523.205 115.652 525.265 110.133 525.924 104.615L505.036 116.674Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M552.496 107.541V101.404L531.484 113.535V119.672L552.496 107.541Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M552.496 95.2666V89.2724L531.484 101.404V107.398L552.496 95.2666Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M552.496 83.1354V76.9984L531.484 89.1296V95.2665L552.496 83.1354Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M552.496 71.0042V64.8672L531.484 76.9983V83.1354L552.496 71.0042Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M552.496 107.541V101.404L531.484 113.535V119.672L552.496 107.541Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M552.496 95.2666V89.2724L531.484 101.404V107.398L552.496 95.2666Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M552.496 83.1354V76.9984L531.484 89.1296V95.2665L552.496 83.1354Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M552.496 71.0042V64.8672L531.484 76.9983V83.1354L552.496 71.0042Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    d=\"M520.732 89.4861C517.848 87.821 514.387 87.8211 510.35 89.4861V107.469L525.923 98.4774C525.346 94.1483 523.616 91.1512 520.732 89.4861Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"bevel\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M783.336 210.388C773.984 204.31 760.708 204.808 745.986 213.308C717.673 229.655 694.714 269.413 694.714 302.114C694.714 317.811 700.002 329.026 708.633 334.638L702.601 331.155C693.97 325.544 688.682 314.328 688.682 298.631C688.682 265.93 711.641 226.172 739.954 209.826C754.676 201.325 767.952 200.827 777.304 206.906L783.336 210.388Z\"\n    fill=\"url(#paint5_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    opacity=\"0.4\"\n    d=\"M745.985 331.716C774.305 315.365 797.257 275.612 797.257 242.91C797.257 210.209 774.298 196.962 745.985 213.308C717.672 229.655 694.713 269.413 694.713 302.114C694.713 334.816 717.665 348.067 745.985 331.716Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M797.257 242.91C797.257 275.611 774.305 315.365 745.985 331.716C717.665 348.067 694.713 334.815 694.713 302.114C694.713 269.412 717.672 229.654 745.985 213.308C774.298 196.962 797.257 210.208 797.257 242.91ZM794.592 245.087C794.592 275.864 772.99 313.28 746.336 328.669C719.682 344.057 698.08 331.585 698.08 300.808C698.08 270.031 719.682 232.615 746.336 217.226C772.99 201.837 794.592 214.309 794.592 245.087Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M781.491 214.477C772.691 208.756 760.196 209.224 746.336 217.226C719.682 232.615 698.08 270.031 698.08 300.808C698.08 315.582 703.057 326.137 711.181 331.418L709.673 330.548C701.549 325.266 696.572 314.711 696.572 299.938C696.572 269.16 718.174 231.744 744.828 216.356C758.688 208.354 771.183 207.885 779.983 213.606L781.491 214.477Z\"\n    fill=\"url(#paint6_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M781.491 214.478C772.691 208.757 760.196 209.225 746.336 217.227C719.682 232.616 698.08 270.032 698.08 300.809C698.08 315.583 703.057 326.138 711.181 331.419L709.673 330.549C701.549 325.267 696.572 314.712 696.572 299.939C696.572 269.161 718.174 231.745 744.828 216.357C758.688 208.355 771.183 207.886 779.983 213.607L781.491 214.478Z\"\n    fill=\"url(#paint7_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M708.582 295.612C709.415 295.114 710.078 293.937 710.062 292.984C710.047 292.032 709.36 291.663 708.527 292.161C707.695 292.66 707.032 293.836 707.047 294.789C707.062 295.741 707.749 296.11 708.582 295.612Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M711.84 279.04C712.083 277.98 711.634 277.266 710.838 277.445C710.041 277.625 709.198 278.63 708.956 279.69C708.713 280.75 709.161 281.464 709.958 281.285C710.755 281.105 711.597 280.1 711.84 279.04Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M716.988 264.426C717.465 263.362 717.299 262.372 716.616 262.215C715.934 262.059 714.994 262.794 714.516 263.857C714.039 264.921 714.206 265.91 714.888 266.067C715.571 266.224 716.511 265.489 716.988 264.426Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M725.007 250.558C725.672 249.595 725.804 248.427 725.302 247.949C724.8 247.471 723.855 247.864 723.19 248.827C722.525 249.791 722.393 250.959 722.895 251.437C723.396 251.915 724.342 251.521 725.007 250.558Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M735.099 238.803C735.886 238.034 736.304 236.802 736.032 236.05C735.761 235.297 734.902 235.31 734.115 236.079C733.328 236.847 732.91 238.08 733.181 238.832C733.453 239.584 734.312 239.571 735.099 238.803Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M746.285 230.312C747.118 229.814 747.781 228.637 747.766 227.685C747.75 226.732 747.063 226.363 746.23 226.862C745.398 227.36 744.735 228.536 744.75 229.489C744.765 230.442 745.452 230.81 746.285 230.312Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M759.352 223.666C759.595 222.606 759.146 221.892 758.35 222.071C757.553 222.251 756.71 223.256 756.467 224.316C756.224 225.376 756.673 226.09 757.47 225.911C758.266 225.731 759.109 224.726 759.352 223.666Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M769.65 224.388C770.128 223.324 769.961 222.334 769.279 222.177C768.596 222.02 767.656 222.755 767.179 223.819C766.701 224.883 766.868 225.872 767.55 226.029C768.233 226.186 769.173 225.451 769.65 224.388Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M777.665 229.784C778.33 228.821 778.462 227.653 777.96 227.175C777.459 226.697 776.513 227.09 775.848 228.053C775.183 229.016 775.051 230.184 775.553 230.662C776.055 231.14 777 230.747 777.665 229.784Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M782.597 239.329C783.384 238.561 783.802 237.328 783.53 236.576C783.259 235.824 782.4 235.837 781.613 236.605C780.826 237.373 780.408 238.606 780.679 239.358C780.951 240.11 781.81 240.097 782.597 239.329Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M783.977 252.078C784.809 251.579 785.472 250.403 785.457 249.45C785.442 248.497 784.755 248.129 783.922 248.627C783.089 249.125 782.426 250.302 782.441 251.255C782.457 252.207 783.144 252.576 783.977 252.078Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M771.886 276.788L769.375 278.237V286.656L771.886 285.207V276.788Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    d=\"M763.547 290.164C765.629 288.918 767.286 285.977 767.248 283.595C767.21 281.213 765.492 280.292 763.41 281.538C761.328 282.783 759.671 285.724 759.709 288.106C759.747 290.488 761.465 291.409 763.547 290.164Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    d=\"M753.67 295.864C755.751 294.662 757.44 291.737 757.44 289.334C757.44 286.931 755.751 285.956 753.67 287.157C751.589 288.359 749.9 291.284 749.9 293.687C749.9 296.09 751.589 297.065 753.67 295.864Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    d=\"M744.155 301.357C746.236 300.156 747.925 297.23 747.925 294.827C747.925 292.424 746.236 291.449 744.155 292.651C742.074 293.852 740.385 296.777 740.385 299.18C740.385 301.583 742.074 302.558 744.155 301.357Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    d=\"M734.489 306.938C736.57 305.737 738.259 302.811 738.259 300.408C738.259 298.005 736.57 297.03 734.489 298.232C732.408 299.433 730.719 302.358 730.719 304.761C730.719 307.164 732.408 308.14 734.489 306.938Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    d=\"M776.644 274.041L774.133 275.49V283.909L776.644 282.46V274.041Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    d=\"M728.765 301.753L726.254 303.203V311.622L728.765 310.173V301.753Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    d=\"M720.366 315.17C722.447 313.969 724.136 311.044 724.136 308.641C724.136 306.238 722.447 305.263 720.366 306.464C718.285 307.666 716.596 310.591 716.596 312.994C716.596 315.397 718.285 316.372 720.366 315.17Z\"\n    fill=\"var(--c8y-brand-60)\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M765.534 236.587L752.813 258.621L751.305 257.751L764.026 235.717L765.534 236.587Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M765.536 236.589L752.814 258.623L755.438 260.137L768.159 238.103L765.536 236.589Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M753.482 262.42C751.831 261.347 749.489 261.435 746.89 262.935C741.893 265.82 737.842 272.837 737.842 278.607C737.842 281.376 738.776 283.355 740.299 284.346L737.283 282.604C735.76 281.614 734.826 279.635 734.826 276.865C734.826 271.095 738.877 264.079 743.874 261.194C746.473 259.694 748.815 259.606 750.466 260.679L753.482 262.42Z\"\n    fill=\"url(#paint8_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M746.89 283.831C751.887 280.946 755.938 273.929 755.938 268.159C755.938 262.389 751.887 260.05 746.89 262.935C741.893 265.82 737.842 272.837 737.842 278.607C737.842 284.377 741.893 286.716 746.89 283.831Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M765.173 337.811V362.189L753.109 355.224V330.846L765.173 337.811Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M781.761 314.303V352.612L769.697 345.646V307.338L781.761 314.303Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M798.349 309.951V343.035L786.285 336.07V302.985L798.349 309.951Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M814.937 274.253V333.457L802.873 326.492V267.288L814.937 274.253Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M831.525 240.298V323.88L819.461 316.915V233.333L831.525 240.298Z\"\n    fill=\"#D4D9DE\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M777.237 330.846L765.173 337.811L753.109 330.846L765.173 323.881L777.237 330.846Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M810.413 304.726L798.349 311.691L786.285 304.726L798.349 297.761L810.413 304.726Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M827.001 267.288L814.937 274.254L802.873 267.288L814.937 260.323L827.001 267.288Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M793.825 307.338L781.761 314.303L769.697 307.338L781.761 300.373L793.825 307.338Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M843.589 233.333L831.525 240.299L819.461 233.333L831.525 226.368L843.589 233.333Z\"\n    fill=\"#E3E5E8\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M765.174 337.811V362.189L777.238 355.224V330.845L765.174 337.811Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M781.762 314.303V352.612L793.826 345.646V307.338L781.762 314.303Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M798.35 311.691V343.035L810.414 336.069V304.726L798.35 311.691Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M814.938 274.253V333.457L827.002 326.492V267.288L814.938 274.253Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M831.526 240.298V323.88L843.59 316.915V233.333L831.526 240.298Z\"\n    fill=\"#8B96A0\"\n  />\n  <path\n    d=\"M765.174 337.811V362.189L777.238 355.224V330.845L765.174 337.811Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M781.762 314.303V352.612L793.826 345.646V307.338L781.762 314.303Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M798.35 311.691V343.035L810.414 336.069V304.726L798.35 311.691Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M814.938 274.253V333.457L827.002 326.492V267.288L814.938 274.253Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M831.526 240.298V323.88L843.59 316.915V233.333L831.526 240.298Z\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M781.715 314.304V352.612L793.779 345.647V307.339L781.715 314.304Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    d=\"M814.801 274.254V333.458L826.865 326.493V267.289L814.801 274.254Z\"\n    fill=\"#8B96A0\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-miterlimit=\"10\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M826.068 247.101L786.819 307.162L779.279 302.809L818.528 242.748L826.068 247.101Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M786.82 307.162L747.058 330.119L739.518 325.765L779.28 302.809L786.82 307.162Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M747.056 330.119L718.753 388.857L711.213 384.504L739.516 325.766L747.056 330.119Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M718.754 388.857L680.335 381.609L672.795 377.256L711.214 384.503L718.754 388.857Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M680.334 381.609L648.772 423.694L641.232 419.34L672.794 377.256L680.334 381.609Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M648.772 423.694L623.144 423.694L615.604 419.341L641.232 419.341L648.772 423.694Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M623.145 423.694L601.253 453.186L593.713 448.833L615.605 419.341L623.145 423.694Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M601.252 453.185L599.579 451.254L592.039 446.9L593.712 448.832L601.252 453.185Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M599.579 451.254L622.927 419.8L615.387 415.447L592.039 446.901L599.579 451.254Z\"\n    fill=\"url(#paint9_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M622.927 419.801L648.57 419.8L641.03 415.447L615.387 415.447L622.927 419.801Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M648.571 419.801L680.346 377.432L672.806 373.079L641.031 415.447L648.571 419.801Z\"\n    fill=\"url(#paint10_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M680.345 377.432L718.08 384.551L710.539 380.197L672.805 373.079L680.345 377.432Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M718.081 384.551L745.574 327.493L738.034 323.14L710.541 380.198L718.081 384.551Z\"\n    fill=\"url(#paint11_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M745.573 327.493L785.735 304.305L778.195 299.952L738.033 323.14L745.573 327.493Z\"\n    fill=\"var(--c8y-brand-60)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M785.735 304.305L824.148 245.523L816.608 241.17L778.195 299.952L785.735 304.305Z\"\n    fill=\"url(#paint12_linear_2683_76044)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <path\n    fill-rule=\"evenodd\"\n    clip-rule=\"evenodd\"\n    d=\"M826.067 247.101L786.818 307.162L747.056 330.119L718.753 388.857L680.333 381.61L648.772 423.694L623.143 423.694L601.251 453.186L599.578 451.254L622.926 419.801L648.57 419.801L680.345 377.432L718.079 384.551L745.573 327.493L785.734 304.305L824.147 245.523L826.067 247.101Z\"\n    fill=\"var(--c8y-brand-30)\"\n    stroke=\"#212121\"\n    stroke-width=\"0.870647\"\n    stroke-linejoin=\"round\"\n  />\n  <defs>\n    <filter\n      id=\"filter0_f_2683_76044\"\n      height=\"322.139\"\n      x=\"325.621\"\n      y=\"282.29\"\n      width=\"557.214\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood\n        flood-opacity=\"0\"\n        result=\"BackgroundImageFix\"\n      />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"3.48259\"\n        result=\"effect1_foregroundBlur_2683_76044\"\n      />\n    </filter>\n    <filter\n      id=\"filter1_f_2683_76044\"\n      height=\"146.268\"\n      x=\"23.5085\"\n      y=\"520.647\"\n      width=\"243.781\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood\n        flood-opacity=\"0\"\n        result=\"BackgroundImageFix\"\n      />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"3.48259\"\n        result=\"effect1_foregroundBlur_2683_76044\"\n      />\n    </filter>\n    <filter\n      id=\"filter2_f_2683_76044\"\n      height=\"120.983\"\n      x=\"201.22\"\n      y=\"449.576\"\n      width=\"194.628\"\n      filterUnits=\"userSpaceOnUse\"\n      color-interpolation-filters=\"sRGB\"\n    >\n      <feFlood\n        flood-opacity=\"0\"\n        result=\"BackgroundImageFix\"\n      />\n      <feBlend\n        mode=\"normal\"\n        in=\"SourceGraphic\"\n        in2=\"BackgroundImageFix\"\n        result=\"shape\"\n      />\n      <feGaussianBlur\n        stdDeviation=\"3.48259\"\n        result=\"effect1_foregroundBlur_2683_76044\"\n      />\n    </filter>\n    <linearGradient\n      id=\"paint0_linear_2683_76044\"\n      x1=\"429.792\"\n      y1=\"245.567\"\n      x2=\"426.729\"\n      y2=\"262.062\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint1_linear_2683_76044\"\n      x1=\"430.875\"\n      y1=\"226.109\"\n      x2=\"412.41\"\n      y2=\"285.724\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint2_linear_2683_76044\"\n      x1=\"180.577\"\n      y1=\"365.668\"\n      x2=\"182.522\"\n      y2=\"369.813\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"#E3E5E8\" />\n      <stop\n        offset=\"0.765\"\n        stop-color=\"#8B96A0\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint3_linear_2683_76044\"\n      x1=\"182\"\n      y1=\"352.343\"\n      x2=\"180.977\"\n      y2=\"363.458\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint4_linear_2683_76044\"\n      x1=\"184.287\"\n      y1=\"343.533\"\n      x2=\"182.722\"\n      y2=\"360.602\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint5_linear_2683_76044\"\n      x1=\"761.318\"\n      y1=\"179.353\"\n      x2=\"731.343\"\n      y2=\"324.882\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint6_linear_2683_76044\"\n      x1=\"696.456\"\n      y1=\"331.716\"\n      x2=\"749.565\"\n      y2=\"215.92\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop\n        offset=\"0.015\"\n        stop-color=\"#8B96A0\"\n      />\n      <stop\n        offset=\"1\"\n        stop-color=\"#D4D9DE\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint7_linear_2683_76044\"\n      x1=\"696.456\"\n      y1=\"331.717\"\n      x2=\"749.565\"\n      y2=\"215.921\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop\n        offset=\"0.015\"\n        stop-color=\"#8B96A0\"\n      />\n      <stop\n        offset=\"1\"\n        stop-color=\"#D4D9DE\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint8_linear_2683_76044\"\n      x1=\"744.346\"\n      y1=\"265.48\"\n      x2=\"752.501\"\n      y2=\"275.711\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"#E3E5E8\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"#8B96A0\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint9_linear_2683_76044\"\n      x1=\"615.742\"\n      y1=\"409.072\"\n      x2=\"608.878\"\n      y2=\"449.104\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint10_linear_2683_76044\"\n      x1=\"671.201\"\n      y1=\"364.76\"\n      x2=\"662.033\"\n      y2=\"416.92\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint11_linear_2683_76044\"\n      x1=\"737.425\"\n      y1=\"312.205\"\n      x2=\"720.255\"\n      y2=\"378.431\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n    <linearGradient\n      id=\"paint12_linear_2683_76044\"\n      x1=\"813.459\"\n      y1=\"229.928\"\n      x2=\"799.279\"\n      y2=\"299.708\"\n      gradientUnits=\"userSpaceOnUse\"\n    >\n      <stop stop-color=\"var(--c8y-brand-60)\" />\n      <stop\n        offset=\"1\"\n        stop-color=\"var(--c8y-brand-30)\"\n      />\n    </linearGradient>\n  </defs>\n</svg>\n","import { Component, OnInit } from '@angular/core';\nimport { uniq } from 'lodash-es';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { startWith, take } from 'rxjs/operators';\nimport { AlertService } from '../alert/alert.service';\nimport { OptionsService } from '../common/options.service';\nimport { Permissions } from '../common/permissions.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { IndexedStep, Steppers } from '../stepper/stepper.model';\nimport { StepperService } from '../stepper/stepper.service';\nimport { NEEDED_ROLE_FOR_SETUP, SetupState, SetupStep } from './setup.model';\nimport { SetupService } from './setup.service';\nimport { TitleComponent } from '../header/title/title.component';\nimport { AsyncPipe } from '@angular/common';\nimport { StepperOutletComponent } from '../stepper/stepper-outlet.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { PropertiesListComponent } from '../properties-list/properties-list.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { HumanizeAppNamePipe } from '../common/humanize-app-name.pipe';\nimport { SetupIllustrationComponent } from './setup-illustration.component';\n\n/**\n * This component is the parent of each setup and can be injected\n * into setup steps to control them.\n */\n@Component({\n  selector: 'c8y-setup',\n  templateUrl: './setup.component.html',\n  standalone: true,\n  imports: [\n    TitleComponent,\n    StepperOutletComponent,\n    C8yTranslateDirective,\n    PropertiesListComponent,\n    C8yTranslatePipe,\n    AsyncPipe,\n    HumanizeAppNamePipe,\n    SetupIllustrationComponent\n  ]\n})\nexport class SetupComponent implements OnInit {\n  /**\n   * A subject which can be used to exchange data between\n   * steps.\n   */\n  data$ = new BehaviorSubject<Record<string, unknown>>({});\n  /**\n   * All current shown setup steps.\n   */\n  steps: SetupStep[];\n  /**\n   * The current state. SetupState.START shows an application overview\n   * while SetupState.WIZARD shows the steps.\n   */\n  currentSetupState = SetupState.START;\n  /**\n   * Emits when the setup is done. You can add certain operations before completing the setup that needed to be awaited. Return\n   * true if everything is fine, otherwise false.\n   *\n   * ```typescript\n   * const asyncOperation = delay(2000);\n   * this.setup.completed$ = this.setup.completed$.pipe(asyncOperation, map(() => true));\n   * ```\n   *\n   * Note: Remember that a step can be viewed multiple times. The step needs to ensure, to only add a completed operation ones.\n   */\n  completed$ = new Observable<boolean>().pipe(startWith(true));\n  /**\n   * @ignore\n   */\n  readonly stepperId = Steppers.SETUP;\n  /**\n   * @ignore\n   */\n  setupState = SetupState;\n  /**\n   * @ignore\n   */\n  properties = [];\n  /**\n   * @ignore\n   */\n  canSkip = false;\n  /**\n   * @ignore\n   */\n  hasRole = false;\n  /**\n   * @ignore\n   */\n  isOwner = true;\n\n  private readonly RELOAD_APP_TIMEOUT = 2000;\n\n  constructor(\n    public options: OptionsService,\n    private stepperService: StepperService,\n    private appState: AppStateService,\n    private alert: AlertService,\n    private permissions: Permissions,\n    private setupService: SetupService\n  ) {}\n\n  /**\n   * Mark a step as completed. If the step is required, this is needed to fulfill\n   * the setup.\n   * @param stepIndex The index of the step you want to mark as completed\n   * @param isCompleted Defaults to true to mark it as completed but can be set to false to invalidate the step.\n   */\n  stepCompleted(stepIndex, isCompleted = true) {\n    const step = this.getByIndex(stepIndex);\n    step.completed = isCompleted;\n  }\n\n  /**\n   * Returns a step by it index position in the wizard.\n   * @param stepIndex The step index that you want to receive.\n   * @returns An indexed step definition.\n   */\n  getByIndex(stepIndex) {\n    return this.steps.find(({ index }) => index === stepIndex);\n  }\n\n  /**\n   * @ignore\n   */\n  async ngOnInit() {\n    this.steps = (await this.stepperService.getById$(this.stepperId).toPromise()).map(\n      (step: SetupStep, index) => ({\n        ...step,\n        index,\n        completed: false\n      })\n    );\n\n    if (!this.options.forceSetup) {\n      const doneSetup = this.options.setup || [];\n      this.steps = this.steps.filter(step => doneSetup.indexOf(step.setupId) === -1);\n    }\n\n    this.isOwner = this.appState.isOwnerOfApplication();\n    this.canSkip = !this.hasRequiredSteps(this.steps);\n    this.hasRole = this.permissions.hasRole(NEEDED_ROLE_FOR_SETUP);\n    this.properties = [\n      {\n        label: gettext('Description'),\n        key: 'description'\n      },\n      {\n        label: gettext('Keywords'),\n        key: 'keywords'\n      },\n      {\n        label: gettext('Source'),\n        key: 'repository'\n      },\n      {\n        label: gettext('Version'),\n        key: 'version'\n      },\n      {\n        label: gettext('Author'),\n        key: 'author'\n      },\n      {\n        label: gettext('Required platform version'),\n        key: 'requiredPlatformVersion'\n      }\n    ];\n  }\n\n  /**\n   * Skips the current setup wizard\n   */\n  skip() {\n    this.setupService.skipSetup();\n  }\n\n  /**\n   * Starts the wizards (or finish the setup if no steps are found)\n   */\n  start() {\n    this.currentSetupState = SetupState.WIZARD;\n  }\n\n  /**\n   * Cancels the wizards and goes back to the start view.\n   */\n  cancel() {\n    this.currentSetupState = SetupState.START;\n  }\n\n  /**\n   * Finish the wizard and will start the application.\n   */\n  finish() {\n    this.currentSetupState = SetupState.FINALIZING;\n    this.completed$.subscribe(async status => {\n      if (status) {\n        this.finalize();\n      } else {\n        this.currentSetupState = SetupState.WIZARD;\n      }\n    });\n  }\n\n  async finalize() {\n    try {\n      const doneSetup = this.steps.filter(value => value.setupId).map(value => value.setupId);\n      const currentConfig = await this.appState.currentApplicationConfig.pipe(take(1)).toPromise();\n      await this.appState.updateCurrentApplicationConfig({\n        setup: uniq([...(currentConfig.setupDone || []), ...doneSetup])\n      });\n    } catch (ex) {\n      this.alert.addServerFailure(ex);\n      this.currentSetupState = SetupState.WIZARD;\n    } finally {\n      this.currentSetupState = SetupState.RELOADING;\n      // To ensure proper setup, we reload the app when setup is ready.\n      setTimeout(() => this.reloadApp(), this.RELOAD_APP_TIMEOUT);\n    }\n  }\n\n  /**\n   * Verifies every step and checks if all required are completed.\n   * Updates the icons to reflect the state of the steps (error, warning, done).\n   * @returns Returns true if no error was found.\n   */\n  verify() {\n    this.steps.forEach((step, index) => {\n      if (this.steps.length - 1 !== index) {\n        step.state = this.getState(step);\n      }\n    });\n    return !!this.steps.find(step => step.state !== 'error');\n  }\n\n  private reloadApp() {\n    const removeUrlParams = location.href.split('?')[0];\n    const removedHash = removeUrlParams.split('#')[0];\n    location.href = removedHash;\n  }\n\n  private hasRequiredSteps(notCompletedSetupSteps: SetupStep[]): boolean {\n    return notCompletedSetupSteps.some(step => step.required);\n  }\n\n  private getState(step: IndexedStep) {\n    if (!step.completed && step.required) {\n      return 'error';\n    }\n    if (!step.completed && !step.required) {\n      return 'warning';\n    }\n    return 'done';\n  }\n}\n","<c8y-title>\n  {{ options.name | humanizeAppName | async }}\n</c8y-title>\n\n@if (currentSetupState !== setupState.START) {\n  <div class=\"card content-fullpage fadeInRightBig animated\">\n    <c8y-stepper-outlet\n      class=\"d-contents\"\n      [showDefaultButtons]=\"false\"\n      [steps]=\"steps\"\n    ></c8y-stepper-outlet>\n  </div>\n}\n\n@if (currentSetupState === setupState.START) {\n  <div class=\"card content-fullpage d-flex d-col zoomIn animated\">\n    <div class=\"inner-scroll flex-grow\">\n      <div class=\"card-block\">\n        <div class=\"row\">\n          <div class=\"col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 p-t-24\">\n            <c8y-setup-illustration></c8y-setup-illustration>\n            <h1\n              class=\"p-t-16 p-b-16 text-center text-medium\"\n              ngNonBindable\n              translate\n              [translateParams]=\"{ appName: options.name | humanizeAppName | async }\"\n              data-cy=\"c8y-setup--setup-header-title\"\n            >\n              Welcome to {{ appName }}\n            </h1>\n            @if (hasRole) {\n              <p\n                class=\"lead text-normal\"\n                translate\n              >\n                This application (or any plugin that you added recently) has pre-requirements that\n                needs to be configured first. This wizard will guide you through the steps that are\n                necessary to get your customized application up and running.\n              </p>\n            }\n            @if (properties.length > 0) {\n              <div class=\"flex-grow\">\n                <c8y-properties-list\n                  icon=\"info\"\n                  [title]=\"'Application properties' | translate\"\n                  [properties]=\"properties\"\n                  [data]=\"options\"\n                ></c8y-properties-list>\n              </div>\n            }\n            @if (!hasRole) {\n              <div class=\"alert alert-danger m-32\">\n                <strong translate>No permission</strong>\n                <div translate>\n                  You don't have sufficient rights to setup this application. Contact an application\n                  administrator to setup the required steps.\n                </div>\n              </div>\n            }\n            @if (!isOwner) {\n              <div class=\"alert alert-danger m-32\">\n                <strong translate>Not the owner</strong>\n                <div translate>\n                  The current application is not owned by this tenant. Clone the application before\n                  running the setup.\n                </div>\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"card-footer separator gap-8 d-flex j-c-center\">\n      @if (canSkip) {\n        <button\n          class=\"btn btn-default\"\n          [title]=\"\n            'You can skip the setup now. It will be shown again as soon as you restart the application.'\n              | translate\n          \"\n          (click)=\"skip()\"\n          translate\n          data-cy=\"c8y-setup--skip-setup-button\"\n        >\n          Skip\n        </button>\n      }\n\n      <button\n        class=\"btn btn-primary\"\n        [title]=\"'Start the setup wizard.' | translate\"\n        (click)=\"start()\"\n        translate\n        [disabled]=\"!hasRole || !isOwner\"\n        data-cy=\"c8y-setup--start-setup-button\"\n      >\n        Start\n      </button>\n    </div>\n  </div>\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { isEmpty, mapValues } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { Status, statusAlert, statusIcons, StatusType } from '../common/status.model';\nimport { ModalLabels } from '../select-modal/select-modal.model';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { NgClass, AsyncPipe, KeyValuePipe } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { ShowIfFilterPipe } from '../common/show-if-filter.pipe';\nimport { FormsModule } from '@angular/forms';\n\n/**\n * Defines options to be displayed in the confirm dialog.\n */\nexport interface ConfirmOptions {\n  [key: string]: ConfirmOption;\n}\n\nexport interface ConfirmOption {\n  text: string;\n  checked?: boolean;\n  showIf?: boolean | (() => boolean | Promise<boolean> | Observable<boolean>);\n  /**\n   * Will disable the current option when an option with the given key is selected.\n   */\n  disabledByKey?: string;\n}\n\n@Component({\n  selector: 'c8y-confirm-modal',\n  templateUrl: './modal-confirm.component.html',\n  standalone: true,\n  imports: [NgClass, C8yTranslatePipe, AsyncPipe, KeyValuePipe, ShowIfFilterPipe, FormsModule]\n})\nexport class ConfirmModalComponent implements OnInit, OnDestroy {\n  result: Promise<boolean | { confirmed: boolean; confirmOptions: { [key: string]: boolean } }>;\n  dismiss: () => void;\n  close: () => void;\n  @Input() title: string;\n  @Input() body: string | SafeHtml;\n  @Input() confirmOptions: ConfirmOptions;\n  @Input() status: StatusType = Status.INFO;\n  @Input() requireCodeVerification?: boolean = false;\n  @Input() set labels(labels: ModalLabels) {\n    const { ok = 'OK', cancel = 'Cancel' } = labels || {};\n    this._labels = { ok, cancel };\n  }\n\n  get labels(): ModalLabels {\n    return this._labels;\n  }\n\n  code: string;\n  confirmString = '';\n\n  private _labels: ModalLabels;\n  constructor(private modal: BsModalRef) {\n    this._labels = {\n      ok: 'OK',\n      cancel: 'Cancel'\n    };\n    this.result = new Promise((resolve, reject) => {\n      this.dismiss = () => {\n        reject();\n        this.modal.hide();\n      };\n      this.close = () => {\n        if (this.requireCodeVerification && !this.canConfirmWithCode()) {\n          return;\n        }\n        resolve(\n          isEmpty(this.confirmOptions)\n            ? true\n            : {\n                confirmed: true,\n                confirmOptions: mapValues(this.confirmOptions, option => option.checked)\n              }\n        );\n        this.modal.hide();\n      };\n    });\n  }\n\n  ngOnInit() {\n    if (this.requireCodeVerification) {\n      this.code = this.generateRandomCode();\n    }\n  }\n\n  get classIcon() {\n    return `dlt-c8y-icon-${statusIcons[this.status]}`;\n  }\n\n  get classAlert() {\n    return statusAlert[this.status];\n  }\n\n  ngOnDestroy() {\n    this.dismiss();\n  }\n\n  isHtml(str: string | SafeHtml): boolean {\n    const doc = new DOMParser().parseFromString(str as string, 'text/html');\n    return Array.from(doc.body.childNodes).some(node => node.nodeType === Node.ELEMENT_NODE);\n  }\n\n  canConfirmWithCode(): boolean {\n    return this.confirmString === this.code;\n  }\n\n  get isOkButtonDisabled(): boolean {\n    if (this.requireCodeVerification) {\n      return !this.canConfirmWithCode();\n    }\n    return false;\n  }\n\n  private generateRandomCode(): string {\n    // no l, I, 0, O chars to prevent confusion:\n    const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefhijkmnoprstuvwxyz123456789';\n    return Array.from({ length: 5 }, () =>\n      chars.charAt(Math.floor(Math.random() * chars.length))\n    ).join('');\n  }\n}\n","<div\n  class=\"c8y-prompt alert\"\n  [ngClass]=\"[classAlert]\"\n  data-cy=\"prompt-alert\"\n>\n  @if (title) {\n    <h3 class=\"m-b-16 d-flex a-i-center\">\n      <i\n        class=\"dlt-c8y-icon\"\n        [ngClass]=\"[classIcon]\"\n      ></i>\n      <span id=\"modal-title\">{{ title | translate }}</span>\n    </h3>\n  }\n  <div id=\"modal-body\">\n    @if (!isHtml(body)) {\n      <p class=\"text-break-word m-b-16\">\n        {{ body | translate }}\n      </p>\n    }\n    @if (isHtml(body)) {\n      <div\n        class=\"text-break-word m-b-16\"\n        [innerHTML]=\"body | translate\"\n      ></div>\n    }\n    @for (co of confirmOptions | showIfFilter | async | keyvalue; track co) {\n      <div class=\"c8y-checkbox plain m-b-8\">\n        <label\n          class=\"c8y-checkbox\"\n          [title]=\"co.value.text | translate\"\n        >\n          <input\n            type=\"checkbox\"\n            [checked]=\"co.value.checked\"\n            (change)=\"co.value.checked = !co.value.checked\"\n            [disabled]=\"confirmOptions[co.value.disabledByKey]?.checked\"\n          />\n          <span></span>\n          <span>{{ co.value.text | translate }}</span>\n        </label>\n      </div>\n    }\n    @if (requireCodeVerification) {\n      <p class=\"text-break-word m-b-16\">\n        <code>{{ code }}</code>\n      </p>\n      <form (submit)=\"$event.preventDefault()\">\n        <div class=\"form-group\">\n          <label for=\"confirmString\">\n            {{ 'Confirm:' | translate }}\n          </label>\n          <input\n            class=\"form-control\"\n            id=\"confirmString\"\n            placeholder=\"{{ 'Type here' | translate }}\"\n            name=\"confirmString\"\n            type=\"text\"\n            autocomplete=\"off\"\n            [(ngModel)]=\"confirmString\"\n          />\n        </div>\n      </form>\n    }\n    <ng-content></ng-content>\n  </div>\n  <div class=\"alert-footer\">\n    @if (labels.cancel !== null) {\n      <button\n        class=\"btn btn-default\"\n        title=\"{{ labels.cancel | translate }}\"\n        type=\"button\"\n        (click)=\"dismiss()\"\n        data-cy=\"c8y-confirm-modal--cancel\"\n      >\n        {{ labels.cancel | translate }}\n      </button>\n    }\n    <button\n      class=\"btn btn-primary m-t-xs-8\"\n      title=\"{{ labels.ok | translate }}\"\n      type=\"button\"\n      (click)=\"close()\"\n      data-cy=\"c8y-confirm-modal--ok\"\n      [disabled]=\"isOkButtonDisabled\"\n    >\n      {{ labels.ok | translate }}\n    </button>\n  </div>\n</div>\n","import { Component, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Status, StatusType } from '../../../common/status.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ConfirmModalComponent } from '../../../modal/modal-confirm.component';\nimport { ModalLabels } from '../../../select-modal/select-modal.model';\nimport { Cookie, CookiePreferences } from '../cookie-banner.model';\nimport { CookieBannerService } from '../cookie-banner.service';\nimport { NgFor } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '../../../i18n/c8y-translate.pipe';\nimport { HumanizePipe } from '../../../common/humanize.pipe';\n\n@Component({\n  selector: 'c8y-cookie-banner-preferences-modal',\n  templateUrl: './cookie-banner-preferences-modal.component.html',\n  standalone: true,\n  imports: [ConfirmModalComponent, NgFor, FormsModule, C8yTranslatePipe, HumanizePipe]\n})\nexport class CookieBannerPreferencesModalComponent {\n  @ViewChild('modalRef', { static: false }) modalRef: ConfirmModalComponent;\n  closeSubject: Subject<CookiePreferences> = new Subject();\n  title = gettext('Cookie preferences');\n  labels: ModalLabels = { ok: gettext('Save settings'), cancel: gettext('Cancel') };\n  status: StatusType = Status.INFO;\n  configCookiePreferences: CookiePreferences;\n  configCookiePreferencesList: Cookie[];\n\n  constructor(private cookieBannerService: CookieBannerService) {}\n\n  ngOnInit() {\n    this.configCookiePreferencesList = this.cookieBannerService.transformCookiePreferencesToList(\n      this.configCookiePreferences\n    );\n  }\n\n  async ngAfterViewInit() {\n    try {\n      await this.modalRef.result;\n      this.onClose();\n    } catch (error) {\n      this.onDismiss();\n    }\n  }\n\n  onClose() {\n    const cookiePref: CookiePreferences =\n      this.cookieBannerService.transformCookiePreferencesListToCookiePreferences(\n        this.configCookiePreferencesList\n      );\n\n    this.closeSubject.next(cookiePref);\n    this.closeSubject.complete();\n  }\n\n  onDismiss() {\n    this.closeSubject.next(undefined);\n    this.closeSubject.complete();\n  }\n\n  getCookieDescription(cookieType: 'required' | 'functional' | 'marketing'): string {\n    return this.cookieBannerService.getCookieDescription(cookieType);\n  }\n}\n","<c8y-confirm-modal [title]=\"title\" [status]=\"status\" [labels]=\"labels\" #modalRef>\n\n  <div *ngFor=\"let item of configCookiePreferencesList\" class=\"row p-t-8 p-b-8 separator-top\">\n    <div class=\"col-xs-2\">\n      <div class=\"text-center\">\n        <label class=\"c8y-switch\">\n          <input\n            name=\"{{ item.name }}\"\n            type=\"checkbox\"\n            [(ngModel)]=\"item.value\"\n            [disabled]=\"item.isReadonly\"\n          />\n          <span></span>\n        </label>\n      </div>\n    </div>\n    <div class=\"col-xs-10\">\n      <h4 class=\"text-medium\">\n        {{ item.name | translate | humanize }}\n      </h4>\n      <p>\n        {{ getCookieDescription(item.name) | translate }}\n      </p>\n    </div>\n  </div>\n</c8y-confirm-modal>\n","import { gettext } from '@c8y/ngx-components/gettext';\n\nexport const CookieBannerDefaultTexts = {\n  // Note: any changes must be synced with `cookieBanner.cookieBannerTitle` property in `packages/public-options/options.json`.\n  cookieBannerTitle: gettext('About cookies on this website'),\n  // Note: any changes must be synced with `cookieBanner.cookieBannerText` property in `packages/public-options/options.json`.\n  cookieBannerText: gettext(\n    'Cookies are important to the proper functioning of a site. To improve your website experience, we use cookies to remember login details and provide secure login, collect statistics to optimize site functionality, and deliver content tailored to your interests. Click \"Agree and proceed\" to accept cookies and go directly to the site or click \"Configure preferences\" for further details and to manage your options. You can revoke your consent at any time.'\n  )\n} as const;\n\nexport interface CookieBannerSettings {\n  cookieBannerTitle?: string;\n  cookieBannerText: string;\n  policyUrl?: string;\n  policyVersion?: string;\n  cookieBannerDisabled?: boolean;\n}\n\nexport interface CookiePreferences {\n  required?: boolean | string;\n  functional?: boolean | string;\n  marketing?: boolean | string;\n  policyVersion?: string;\n}\n\nexport interface Cookie {\n  name: string;\n  value: boolean;\n  isReadonly?: boolean;\n}\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { CookieBannerPreferencesModalComponent } from './cookie-banner-preferences-modal/cookie-banner-preferences-modal.component';\nimport {\n  CookieBannerDefaultTexts,\n  CookieBannerSettings,\n  CookiePreferences\n} from './cookie-banner.model';\nimport { CookieBannerService } from './cookie-banner.service';\nimport { NgIf } from '@angular/common';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-cookie-banner',\n  templateUrl: './cookie-banner.component.html',\n  standalone: true,\n  imports: [NgIf, C8yTranslatePipe]\n})\nexport class CookieBannerComponent implements OnInit {\n  settings: Partial<CookieBannerSettings>;\n  showBanner: boolean;\n  shouldDisable = false;\n  cookiePreferences: CookiePreferences;\n  constructor(\n    private bsModalService: BsModalService,\n    private cookieBannerService: CookieBannerService\n  ) {}\n\n  ngOnInit() {\n    this.settings = this.getSettings();\n    this.cookiePreferences = this.cookieBannerService.getCookiePreferencesConfig();\n    this.shouldShowCookieBanner();\n  }\n\n  getSettings(): Partial<CookieBannerSettings> {\n    const settings = {\n      ...CookieBannerDefaultTexts,\n      ...this.cookieBannerService.getCookieBannerSettings()\n    };\n    return settings;\n  }\n\n  onConfigurePreferences() {\n    this.disableButtons(true);\n\n    const initialState = {\n      configCookiePreferences: this.cookiePreferences\n    };\n\n    const modalRef = this.bsModalService.show(CookieBannerPreferencesModalComponent, {\n      initialState\n    });\n\n    modalRef.content.closeSubject.subscribe((userCookiePreferences: CookiePreferences) => {\n      this.disableButtons(false);\n      if (userCookiePreferences) {\n        const policyVersion = this.settings.policyVersion;\n        this.cookieBannerService.setCookies(userCookiePreferences, policyVersion);\n        this.setCookieBannerVisibility(false);\n      }\n    });\n  }\n\n  acceptCookies() {\n    const policyVersion = this.settings.policyVersion;\n    this.cookieBannerService.setCookies(\n      this.cookiePreferences || { required: true },\n      policyVersion\n    );\n    this.setCookieBannerVisibility(false);\n  }\n\n  rejectCookies() {\n    const policyVersion = this.settings.policyVersion;\n    this.cookieBannerService.setCookies(\n      {\n        required: true,\n        functional: false,\n        marketing: false\n      },\n      policyVersion\n    );\n    this.setCookieBannerVisibility(false);\n  }\n\n  private shouldShowCookieBanner() {\n    this.setCookieBannerVisibility(this.cookieBannerService.shouldShowCookieBanner());\n  }\n\n  private disableButtons(shouldDisable: boolean) {\n    this.shouldDisable = shouldDisable;\n  }\n\n  private setCookieBannerVisibility(shouldShow: boolean) {\n    this.showBanner = shouldShow;\n    this.cookieBannerService.isCookieBannerShowed$.next(shouldShow);\n  }\n}\n","<div class=\"c8y-cookie-banner\">\n  <div class=\"container\">\n    <div class=\"row p-t-16 p-b-16\" *ngIf=\"showBanner\">\n      <div class=\"col-md-2\" *ngIf=\"settings.cookieBannerTitle\">\n        <h3>{{ settings.cookieBannerTitle | translate }}</h3>\n        <div class=\"p-b-16 visible-sm visible-xs\"></div>\n      </div>\n      <div class=\"col-md-7\">\n        <div class=\"cookie-banner-content text-pre-line\">\n          {{ settings.cookieBannerText | translate }}\n          <a\n            href=\"{{ settings.policyUrl }}\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            *ngIf=\"settings.policyUrl\"\n           \n          >\n            {{ 'See also our Privacy Notice.' | translate }}\n          </a>\n        </div>\n      </div>\n      <div class=\"col-md-3\">\n        <div class=\"row\">\n          <div class=\"col-sm-6 col-md-12\">\n            <div class=\"p-b-16 visible-sm visible-xs\"></div>\n            <button\n              class=\"btn btn-primary btn-block\"\n              (click)=\"acceptCookies()\"\n              [disabled]=\"shouldDisable\"\n            >\n              {{ 'Agree and proceed' | translate }}\n            </button>\n          </div>\n          <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n            <div class=\"p-b-16\"></div>\n            <button\n              class=\"btn btn-primary btn-block\"\n              (click)=\"rejectCookies()\"\n              [disabled]=\"shouldDisable\"\n            >\n              {{ 'Reject all`cookies`' | translate }}\n            </button>\n          </div>\n          <div class=\"col-sm-6 col-md-12\" *ngIf=\"!!cookiePreferences\">\n            <div class=\"p-b-16\"></div>\n            <button\n              class=\"btn btn-default btn-block\"\n              (click)=\"onConfigurePreferences()\"\n              [disabled]=\"shouldDisable\"\n            >\n              {{ 'Configure preferences' | translate }}\n            </button>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport { AlertService } from '../alert/alert.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { LocationStrategy } from '@angular/common';\nimport {\n  BasicAuth,\n  BearerAuthFromSessionStorage,\n  CookieAuth,\n  FetchClient,\n  Realtime\n} from '@c8y/client';\nimport { TOKEN_KEY, TFATOKEN_KEY } from '@c8y/bootstrap';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SimplifiedAuthService {\n  protected alert = inject(AlertService);\n  protected basicAuth = inject(BasicAuth);\n  protected cookieAuth = inject(CookieAuth);\n  protected realtime = inject(Realtime);\n  protected ui = inject(AppStateService);\n  protected client = inject(FetchClient);\n  protected location = inject(LocationStrategy, { optional: true });\n\n  /**\n   * Logs the user out\n   * @param reload If set to false, the page will not reload\n   */\n  async logout(reload = true) {\n    let resData = null;\n    try {\n      const [, cookieRes] = await this.reset();\n      resData = await cookieRes.json();\n    } catch (ex) {\n      this.alert.removeLastDanger();\n    } finally {\n      if (resData && resData.url) {\n        this.redirect(resData.url);\n      } else if (reload) {\n        this.location.replaceState({}, '', '', '');\n        window.location.reload();\n      }\n    }\n  }\n\n  /**\n   * Resets the stored auth-data\n   */\n  async reset() {\n    this.cleanLocalStorage();\n    this.cleanSessionStorage();\n    this.realtime.disconnect();\n    this.ui.currentUser.next(null);\n    return Promise.all([\n      this.basicAuth.logout(),\n      this.cookieAuth.logout(),\n      this.client.authIsInstanceOf(BearerAuthFromSessionStorage)\n        ? this.client.performLogoutOnCurrentAuthStrategy()\n        : BearerAuthFromSessionStorage.removeEntriesFromSessionStorage()\n    ]);\n  }\n\n  protected cleanLocalStorage() {\n    localStorage.removeItem(TOKEN_KEY);\n    localStorage.removeItem(TFATOKEN_KEY);\n  }\n\n  protected cleanSessionStorage() {\n    sessionStorage.removeItem(TOKEN_KEY);\n    sessionStorage.removeItem(TFATOKEN_KEY);\n  }\n\n  protected redirect(url: string) {\n    window.location.href = url;\n  }\n}\n","import { Component, OnDestroy } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, takeUntil } from 'rxjs/operators';\nimport { ActionBarService } from '../action-bar/action-bar.service';\nimport { OptionsService } from '../common/options.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { HeaderService } from '../header/header.service';\nimport { NavigatorService } from '../navigator/navigator.service';\nimport { SetupService } from '../setup/setup.service';\nimport { TabsService } from '../tabs/tabs.service';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\nimport { MessageBannerComponent } from './message-banner/message-banner.component';\nimport { HeaderBarComponent } from '../header/header-bar/header-bar.component';\nimport { DrawerOutletComponent } from '../drawer/drawer-outlet/drawer-outlet.component';\nimport { AlertOutletComponent } from '../alert/alert-outlet.component';\nimport { TabsOutletComponent } from '../tabs/tabs-outlet.component';\nimport { ActionBarComponent } from '../action-bar/action-bar.component';\nimport { RouterOutlet } from '@angular/router';\nimport { SetupComponent } from '../setup/setup.component';\nimport { CookieBannerComponent } from './cookie-banner/cookie-banner.component';\nimport { SimplifiedAuthService } from '../authentication/simplified-auth.service';\n\n@Component({\n  selector: 'c8y-bootstrap',\n  templateUrl: './bootstrap.template.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    MessageBannerComponent,\n    HeaderBarComponent,\n    DrawerOutletComponent,\n    AlertOutletComponent,\n    TabsOutletComponent,\n    ActionBarComponent,\n    NgClass,\n    RouterOutlet,\n    SetupComponent,\n    CookieBannerComponent,\n    AsyncPipe\n  ]\n})\nexport class BootstrapComponent implements OnDestroy {\n  navigatorOpen$: Observable<boolean>;\n  noAppsMargin$: Observable<boolean>;\n  tabsOrientation: string;\n  showPoweredBy = true;\n  showMainView$: Observable<boolean>;\n  private destroy$: Subject<void> = new Subject<void>();\n\n  constructor(\n    public tabs: TabsService,\n    public ui: AppStateService,\n    public navigator: NavigatorService,\n    public actionBar: ActionBarService,\n    public headerService: HeaderService,\n    private options: OptionsService,\n    public setupService: SetupService,\n    public authService: SimplifiedAuthService\n  ) {\n    this.noAppsMargin$ = this.headerService.map(({ nav }) => !nav.open && nav.hiddenOnStartup);\n    this.tabsOrientation = this.options.tabsHorizontal ? 'horizontal' : 'vertical';\n    this.ui\n      .map(({ lang }) => lang)\n      .pipe(takeUntil(this.destroy$), distinctUntilChanged())\n      .subscribe(() => {\n        this.actionBar.refresh();\n      });\n    this.showPoweredBy = !this.options.get('hidePowered');\n    this.showMainView$ = this.setupService.isSetupNeeded$.pipe(map(setupNeeded => !setupNeeded));\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","<c8y-message-banner\n  class=\"c8y-message-banner\"\n></c8y-message-banner>\n\n<div\n  [class.head-open]=\"headerService.headerOpen\"\n  *ngIf=\"showMainView$ | async; else setupView\"\n>\n  <c8y-header-bar\n    *ngIf=\"!headerService.hideHeader\"\n    #header\n  ></c8y-header-bar>\n  <c8y-drawer-outlet\n    [tabindex]=\"(headerService.navigatorOpen$ | async) ? '0' : '-1'\"\n    role=\"region\"\n    position=\"left\"\n    data-cy=\"bootstrap.template--c8y-drawer-outlet\"\n    [open]=\"headerService.navigatorOpen$ | async\"\n  ></c8y-drawer-outlet>\n\n  <div class=\"alerts\">\n    <c8y-alert-outlet></c8y-alert-outlet>\n  </div>\n  <c8y-tabs-outlet\n    role=\"navigation\"\n    #tabsComponent\n    [tabs]=\"tabs.items$ | async\"\n    [hasHeader]=\"tabsComponent.hasHeader\"\n    [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n    [orientation]=\"tabs.orientation$ | async\"\n  ></c8y-tabs-outlet>\n  <c8y-action-bar\n    role=\"group\"\n    #actionBarComponent\n    [navigatorOpen]=\"headerService.navigatorOpen$ | async\"\n    [hasTabs]=\"tabsComponent.hasTabs\"\n    [hasHeader]=\"tabsComponent.hasHeader\"\n    [isTabsHorizontal]=\"tabsComponent?.isHorizontal\"\n    [items$]=\"actionBar.items$\"\n  ></c8y-action-bar>\n\n  <div\n    class=\"mcontainer\"\n    [ngClass]=\"{\n      open: headerService.navigatorOpen$ | async,\n      'no-apps-margin': noAppsMargin$ | async,\n      'horizontal-tabs': tabsComponent.isHorizontal,\n      'vertical-tabs': !tabsComponent.isHorizontal,\n      'has-tabs': tabsComponent.hasTabs,\n      'has-action-bar': !actionBarComponent?.hidden,\n      'has-header': headerService.hideHeader\n    }\"\n  >\n    <main\n      class=\"container-fluid\"\n      id=\"main-content\"\n      tabindex=\"-1\"\n    >\n      <router-outlet></router-outlet>\n      <ng-content select=\"#c8y-legacy-view\"></ng-content>\n      <!-- legacy ng-view, will not be migrated atm -->\n    </main>\n  </div>\n</div>\n\n<ng-template #setupView>\n  <div>\n    <c8y-header-bar\n      *ngIf=\"!headerService.hideHeader\"\n      [simple]=\"true\"\n    ></c8y-header-bar>\n    <div class=\"alerts\">\n      <c8y-alert-outlet></c8y-alert-outlet>\n    </div>\n    <div\n      class=\"mcontainer\"\n      role=\"main\"\n    >\n      <div class=\"container-fluid\">\n        <c8y-setup></c8y-setup>\n      </div>\n    </div>\n  </div>\n</ng-template>\n\n<c8y-cookie-banner></c8y-cookie-banner>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { DrawerOutletComponent } from './drawer-outlet/drawer-outlet.component';\n\n@NgModule({\n  imports: [A11yModule, CommonModule, DrawerOutletComponent],\n  exports: [DrawerOutletComponent]\n})\nexport class DrawerModule {}\n","import { Component, EnvironmentInjector, Injector, Input, ViewChild } from '@angular/core';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n@Component({\n  selector: 'c8y-breadcrumb-item',\n  templateUrl: './breadcrumb-item.component.html',\n  standalone: true\n})\nexport class BreadcrumbItemComponent {\n  /**\n   * Icon to display in the breadcrumb item.\n   */\n  @Input() icon: SupportedIconsSuggestions;\n  /**\n   * Determines if the label should be translated. Set to true to enable translation.\n   * Translation occurs if translated text is available.\n   */\n  @Input() translate: boolean;\n  /**\n   * The label text of the breadcrumb item. This is displayed to the user.\n   */\n  @Input() label: string;\n  /**\n   * The navigation path that the breadcrumb item links to.\n   */\n  @Input() path: string;\n  @Input() injector: Injector;\n  @ViewChild('template', { static: false }) template: any;\n\n  constructor(_injector: EnvironmentInjector) {\n    this.injector = _injector;\n  }\n}\n","<ng-template #template>\n  <ng-content></ng-content>\n</ng-template>","import { Component, ContentChildren, QueryList } from '@angular/core';\nimport { Breadcrumb, BreadcrumbItem } from './breadcrumb.model';\nimport { BreadcrumbService } from './breadcrumb.service';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\n\n@Component({\n  selector: 'c8y-breadcrumb',\n  templateUrl: './breadcrumb.component.html',\n  standalone: true\n})\nexport class BreadcrumbComponent implements Breadcrumb {\n  items: BreadcrumbItem[];\n  @ContentChildren(BreadcrumbItemComponent) private contentChildItems: QueryList<BreadcrumbItem>;\n  private viewInitTimeout;\n\n  constructor(private breadcrumbService: BreadcrumbService) {}\n\n  ngAfterViewInit() {\n    this.items = this.contentChildItems.toArray();\n    this.viewInitTimeout = setTimeout(() => this.breadcrumbService.add(this as Breadcrumb));\n  }\n\n  ngOnDestroy() {\n    clearTimeout(this.viewInitTimeout);\n    this.breadcrumbService.remove(this as Breadcrumb);\n  }\n}\n","<ng-template>\n  <ng-content></ng-content>\n</ng-template>","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { CommonModule } from '../common/common.module';\nimport { BreadcrumbItemComponent } from './breadcrumb-item.component';\nimport { BreadcrumbOutletComponent } from './breadcrumb-outlet.component';\nimport { BreadcrumbComponent } from './breadcrumb.component';\n\n/**\n * The angular module definition for breadcrumbs.\n * @exports {@link BreadcrumbComponent}\n * @exports {@link BreadcrumbItemComponent}\n * @exports {@link BreadcrumbOutletComponent}\n */\n@NgModule({\n  imports: [\n    RouterModule.forChild([]),\n    CommonModule,\n    TooltipModule.forRoot(),\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    BreadcrumbOutletComponent\n  ],\n  exports: [BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbOutletComponent]\n})\nexport class BreadcrumbModule {}\n","import { Component, Input } from '@angular/core';\nimport { NavigatorNode } from './navigator-node';\nimport { IconDirective } from '../common/icon.directive';\n\n/**\n * Navigator node icon component.\n */\n@Component({\n  selector: 'c8y-navigator-icon',\n  template: `<i class=\"icon\" [c8yIcon]=\"icon\"></i>`,\n  standalone: true,\n  imports: [IconDirective]\n})\nexport class NavigatorIconComponent {\n  /**\n   * Navigator node.\n   */\n  @Input() node: NavigatorNode;\n\n  /**\n   * Returns the navigator node icon.\n   * If the icon is not defined, it returns the default icon (cog).\n   */\n  get icon() {\n    const DEFAULT_ICON = 'cog';\n    return this.node.icon || DEFAULT_ICON;\n  }\n\n  /**\n   * Returns the navigator icon CSS class.\n   */\n  get iconClass() {\n    return `dlt-c8y-icon-${this.icon}`;\n  }\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { PopoverDirective, PopoverModule } from 'ngx-bootstrap/popover';\nimport { StatusType } from '../common/status.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NgFor, NgClass } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\nexport interface PopoverConfirmButtons {\n  /**\n   * The label of the button\n   */\n  label: string;\n  /**\n   * Which action to perform.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  action: () => Promise<any>;\n  /**\n   * The status class attached to the button.\n   */\n  status?: StatusType | 'primary' | 'default';\n}\n\n/**\n * A component to show a popover right next to the\n * user action. Add this component where the confirm modal\n * should be shown and toggle isOpen to display it. You\n * can use `await isShow()` to wait for a result on the\n * click action.\n */\n@Component({\n  selector: 'c8y-popover-confirm',\n  templateUrl: './popover-confirm.component.html',\n  standalone: true,\n  imports: [PopoverModule, NgFor, NgClass, C8yTranslatePipe]\n})\nexport class PopoverConfirmComponent {\n  @ViewChild(PopoverDirective, { static: false }) popover: PopoverDirective;\n  @Input() buttons: PopoverConfirmButtons[] = [\n    { label: gettext('cancel'), action: () => Promise.reject() }\n  ];\n  @Input() message: string;\n  @Input() title: string;\n  @Input() isOpen = false;\n  @Input() containerClass = '';\n  @Input() placement = 'right';\n  @Input() outsideClick = false;\n  @Input() adaptivePosition = false;\n  @Input() container = 'body';\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  click: (action: () => Promise<any>) => void;\n\n  /**\n   * Show the popover. Wait until an action is performed on it.\n   */\n  async show(buttons?: PopoverConfirmButtons[]) {\n    this.buttons = buttons || this.buttons;\n    this.isOpen = true;\n    let result;\n    try {\n      result = await new Promise((resolve, reject) => {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return (this.click = (action: () => Promise<any>) => action().then(resolve).catch(reject));\n      });\n    } catch (ex) {\n      throw ex;\n    } finally {\n      this.isOpen = false;\n    }\n    return result;\n  }\n\n  buttonStatus(status) {\n    if (status) {\n      return `btn-${status}`;\n    }\n    return 'btn-default';\n  }\n\n  handleOutsideClick() {\n    this.click(() => Promise.reject());\n  }\n}\n","<div\n  [class]=\"containerClass\"\n  [popoverTitle]=\"title | translate\"\n  [popover]=\"popover\"\n  [isOpen]=\"isOpen\"\n  [container]=\"container\"\n  [placement]=\"placement\"\n  [outsideClick]=\"outsideClick\"\n  (onHidden)=\"handleOutsideClick()\"\n  triggers=\"\"\n  [adaptivePosition]=\"adaptivePosition\"\n>\n  <ng-content></ng-content>\n</div>\n<ng-template #popover>\n  <p>\n    {{ message | translate }}\n  </p>\n  <div class=\"popover-footer d-flex gap-16 flex-wrap a-i-center\">\n    <ng-container *ngFor=\"let button of buttons\">\n      <button\n        class=\"btn btn-sm m-l-0\"\n        title=\"{{ button.label | translate }}\"\n        [attr.data-cy]=\"'popover-confirm--' + (button.label | translate)\"\n        [ngClass]=\"buttonStatus(button.status)\"\n        (click)=\"click(button.action)\"\n      >\n        {{ button.label | translate }}\n      </button>\n    </ng-container>\n  </div>\n</ng-template>\n","// tslint:disable-next-line:max-line-length\nimport { AsyncPipe, NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\nimport { ActivationEnd, Router, RouterLink } from '@angular/router';\nimport { isUndefined } from 'lodash-es';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { Subject, merge } from 'rxjs';\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\nimport { C8yComponentOutlet } from '../common/component-outlet.directive';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { PopoverConfirmComponent } from '../modal/popover-confirm.component';\nimport { NavigatorIconComponent } from './navigator-icon.component';\nimport { ClickOptions, NavigatorNode } from './navigator-node';\nimport { BreadcrumbService } from '../breadcrumb/breadcrumb.service';\n\nexport const enum ClickEventSource {\n  ICON = 'icon',\n  EXPANDER = 'expander',\n  LINK = 'link'\n}\n\n/**\n * Navigator node renderer.\n */\n@Component({\n  selector: 'c8y-navigator-node',\n  templateUrl: './navigator-node.component.html',\n  standalone: true,\n  imports: [\n    C8yComponentOutlet,\n    NgClass,\n    RouterLink,\n    NgTemplateOutlet,\n    CollapseModule,\n    IconDirective,\n    PopoverConfirmComponent,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class NavigatorNodeComponent implements AfterViewInit, OnChanges, OnDestroy {\n  /**\n   * @ignore\n   */\n  @ViewChild('icon', { read: ViewContainerRef, static: false }) iconSlot: ViewContainerRef;\n\n  /**\n   * Navigator node.\n   */\n  @Input() node: NavigatorNode;\n\n  /**\n   * Determines whether the navigator node is a root node (top node in the hierarchy).\n   */\n  @Input() isRoot: boolean;\n\n  /**\n   * Event emitter responsible for broadcasting one of the following events: \"icon\", \"expander\" or \"link\" as string value.\n   *\n   * The type of event depends on where you click on the navigator node:\n   * * clicking the icon will broadcast the event \"icon\",\n   * * clicking the expander will broadcast the event \"expander\",\n   * * clicking the label will broadcast the event \"link\".\n   */\n  @Output() nodeClick: EventEmitter<string> = new EventEmitter();\n\n  /**\n   * @ignore\n   */\n  @ViewChild(PopoverConfirmComponent, { static: false }) confirm: PopoverConfirmComponent;\n\n  private viewInitTimeout;\n\n  /**\n   * A subject that is triggered as soon as the navigator node is initialized.\n   */\n  nodeInit$ = new Subject<void>();\n\n  /**\n   * A observable which emits, as soon as the active state of the node changes.\n   */\n  isActive$ = merge(\n    this.nodeInit$,\n    this.router.events.pipe(filter(e => e instanceof ActivationEnd))\n  ).pipe(\n    map(() => {\n      if (isUndefined(this.node.path)) {\n        return false;\n      }\n      // on exact match, for empty routes '' we need a special\n      // handling as there seems to be a bug with angular, as it\n      // does not show the primary outlet in this cases.\n      const currentUrlTree = this.router.parseUrl(this.router.url);\n      if (\n        this.node.routerLinkExact &&\n        !currentUrlTree.root.children['primary'] &&\n        this.node.path === '/'\n      ) {\n        return true;\n      }\n\n      return this.router.isActive(this.node.path, {\n        paths: this.node.routerLinkExact ? 'exact' : 'subset',\n        queryParams: 'ignored',\n        fragment: 'ignored',\n        matrixParams: 'ignored'\n      });\n    }),\n    distinctUntilChanged(),\n    tap(isActive => {\n      if (isActive) {\n        this.expandCollapse(true);\n        this.expandRecursiveParent(this.node.parents);\n      }\n    })\n  );\n\n  constructor(\n    private router: Router,\n    private breadcrumbService: BreadcrumbService\n  ) {}\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (\n      changes.node &&\n      !changes.node.firstChange &&\n      changes.node.previousValue.icon !== changes.node.currentValue.icon\n    ) {\n      this.updateIcon();\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  ngAfterViewInit() {\n    if (!this.node.component) {\n      this.viewInitTimeout = setTimeout(() => {\n        this.updateIcon();\n        this.node.confirm = this.confirm;\n        this.nodeInit$.next();\n      });\n    }\n    this.node.refreshCallback = this.updateIcon.bind(this);\n  }\n\n  /**\n   * Returns the expander title.\n   */\n  get expandTitle() {\n    return !this.node.open ? 'Expand' : 'Collapse';\n  }\n\n  /**\n   * Click event handler.\n   *\n   * @param {string} from Source of the click event.\n   * @param event DOM event.\n   */\n  click(from: 'icon' | 'expander' | 'link' = 'link', $event?: MouseEvent) {\n    let open: boolean;\n    switch (from) {\n      case ClickEventSource.EXPANDER:\n        if ($event) {\n          $event.preventDefault();\n          $event.stopPropagation();\n        }\n        open = !this.node.open;\n        break;\n      case ClickEventSource.ICON:\n      case ClickEventSource.LINK:\n        open = this.router.isActive(this.node.path, this.node.routerLinkExact)\n          ? true\n          : !this.node.open;\n        break;\n    }\n    this.handleExpandCollapse(open, from, $event);\n    if (this.node.parents?.length === 1) {\n      this.breadcrumbService.selectPreferredByPath(this.node.parents[0].path);\n    }\n    this.nodeClick.emit(from);\n  }\n\n  /**\n   * Expands or collapses the navigator node and its children recursively.\n   *\n   * @param {boolean} open Open or close the node.\n   * @param {ClickOptions} forNode Click options.\n   */\n  expandCollapse(open, forNode: ClickOptions = {}) {\n    this.node.open = open;\n    forNode.open = open;\n    this.node.click(forNode);\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnDestroy(): void {\n    clearTimeout(this.viewInitTimeout);\n\n    if (this.node) {\n      this.node.destroy();\n    }\n  }\n\n  /**\n   * Expands the parent nodes recursively.\n   * @param nodes The nodes that should be tried to get opened.\n   * @param clickOption The click options to perform on the parent nodes.\n   */\n  expandRecursiveParent(nodes: NavigatorNode[], clickOption: ClickOptions = { expander: true }) {\n    nodes.forEach(parentNode => {\n      if (!parentNode.open) {\n        parentNode.open = true;\n        parentNode.click(clickOption);\n      }\n      this.expandRecursiveParent(parentNode.parents, clickOption);\n    });\n  }\n\n  private handleExpandCollapse(open, from, $event) {\n    if (\n      open === this.node.open ||\n      (this.node.path && !open && from !== ClickEventSource.EXPANDER)\n    ) {\n      return;\n    }\n    this.expandCollapse(open, { [from]: true, $event });\n  }\n\n  private updateIcon() {\n    if (this.node.iconTemplate) {\n      this.updateIconTemplate();\n    } else {\n      this.updateIconComponent();\n    }\n  }\n\n  private updateIconComponent() {\n    let componentType = NavigatorIconComponent;\n    if (this.node && this.node.iconComponent) {\n      componentType = this.node.iconComponent;\n    }\n    this.iconSlot.clear();\n    const componentRef = this.iconSlot.createComponent(componentType, {\n      injector: this.node.injector\n    });\n    componentRef.instance.node = this.node;\n  }\n\n  private updateIconTemplate() {\n    this.iconSlot.clear();\n    this.iconSlot.createEmbeddedView(this.node.iconTemplate, undefined, {\n      injector: this.node.injector\n    });\n  }\n}\n","@if (node.component) {\n  <ng-container\n    *c8yComponentOutlet=\"node.component; environmentInjector: node.injector\"\n  ></ng-container>\n}\n\n@if (!node.component) {\n  <div\n    class=\"slot\"\n    [hidden]=\"node.hidden\"\n    (dragstart)=\"node.dragStart($event)\"\n    (dragend)=\"node.dragEnd($event)\"\n    (drop)=\"node.drop($event)\"\n    [draggable]=\"node.draggable\"\n    [ngClass]=\"{ dragged: node.dragged, disabled: node.loading }\"\n  >\n    <ng-container>\n      <div\n        class=\"link\"\n        tabindex=\"-1\"\n        [routerLink]=\"node.canNavigate ? node.path : undefined\"\n        [ngClass]=\"{\n          active: isActive$ | async,\n          'dragged-hover': node.draggedHover && !node.dragged\n        }\"\n        (dragover)=\"node.canDrop && $event.preventDefault()\"\n        (dragenter)=\"node.canDrop && node.dragEnter($event)\"\n        (dragleave)=\"node.canDrop && node.dragLeave($event)\"\n      >\n        <ng-container *ngTemplateOutlet=\"navicon\"></ng-container>\n        <button\n          class=\"btn-clean\"\n          title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n          [attr.aria-expanded]=\"node.hasChildren ? node.open : null\"\n          type=\"button\"\n          draggable=\"false\"\n          [attr.data-cy]=\"node.label\"\n          [attr.id]=\"isRoot ? node.id : undefined\"\n          (click)=\"click(node.canNavigate ? 'link' : 'expander', $event)\"\n          [ngClass]=\"{\n            'root-link': isRoot,\n            open: node.open && node.hasChildren,\n            parent: node.hasChildren\n          }\"\n        >\n          <ng-container *ngTemplateOutlet=\"inner\"></ng-container>\n        </button>\n      </div>\n    </ng-container>\n    @if (node.children.length) {\n      <div\n        class=\"children panel-expand expand\"\n        [collapse]=\"!node.open\"\n        [isAnimated]=\"true\"\n      >\n        @for (childNode of node.children; track childNode) {\n          <c8y-navigator-node\n            [node]=\"childNode\"\n            (nodeClick)=\"nodeClick.emit($event)\"\n          ></c8y-navigator-node>\n        }\n      </div>\n    }\n  </div>\n}\n\n<!-- icon -->\n<ng-template #navicon>\n  <!-- loader -->\n  @if (node.loading && !isRoot) {\n    <i\n      class=\"icon-spin loadingIndicator\"\n      [c8yIcon]=\"'circle-o-notch'\"\n      [ngClass]=\"{ 'm-l-16': isRoot, 'm-l-8': !isRoot }\"\n    ></i>\n  }\n  <ng-container #icon></ng-container>\n</ng-template>\n\n<ng-template #inner>\n  <!--title  -->\n  <span>{{ node.translateLabel ? (node.label | translate) : node.label }}</span>\n\n  <!--expander  -->\n  @if (node.hasChildren) {\n    <i\n      class=\"expander\"\n      [c8yIcon]=\"'chevron-down'\"\n      [attr.aria-label]=\"expandTitle\"\n      role=\"button\"\n      (click)=\"click('expander', $event)\"\n      data-cy=\"c8y-navigator-node--expander\"\n    ></i>\n  }\n\n  <!--  Popover confirm  -->\n  <c8y-popover-confirm\n    triggers=\"focus\"\n    containerClass=\"navigator-popover\"\n  ></c8y-popover-confirm>\n</ng-template>\n","import { Component } from '@angular/core';\nimport { NavigatorNode } from './navigator-node';\nimport { HeaderService } from '../header/header.service';\nimport { Observable } from 'rxjs';\nimport { NavigatorService } from './navigator.service';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { SkipLinkDirective } from '../common/skip-link.directive';\nimport { NgFor, AsyncPipe } from '@angular/common';\nimport { NavigatorNodeComponent } from './navigator-node.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * The component shows all nodes that have been added to the navigator.\n * In addition, it allows you to add a header and a footer to the navigator.\n *\n * ```html\n * <c8y-navigator-outlet>\n *   <header class=\"navigator-slot-top\"></header>\n *   <footer class=\"navigator-slot-bottom\"></footer>\n * </c8y-navigator-outlet>\n * ```\n */\n@Component({\n  selector: 'c8y-navigator-outlet, c8y-ui-navigator',\n  templateUrl: './navigator-outlet.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [\n    C8yTranslateDirective,\n    SkipLinkDirective,\n    NgFor,\n    NavigatorNodeComponent,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class NavigatorOutletComponent {\n  /**\n   * Navigator nodes list.\n   */\n  nodes$: Observable<NavigatorNode[]>;\n\n  constructor(\n    private headerService: HeaderService,\n    private navigatorNodes: NavigatorService\n  ) {\n    this.nodes$ = this.navigatorNodes.items$;\n  }\n\n  /**\n   * Closes the navigator menu after clicking an item in the menu, in case of insufficient screen width.\n   */\n  collapseNavigator(from: 'icon' | 'expander' | 'link') {\n    if (from === 'link' && !this.headerService.largeWidth) {\n      this.headerService.closeNavigator();\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  trackByPathOrLabel(index, node) {\n    return node.path ? node.path : node.label;\n  }\n}\n","<div class=\"navigatorContent\" role=\"navigation\" [attr.aria-label]=\"'Main navigation' | translate\">\n  <button class=\"sr-only sr-only-focusable btn btn-default btn-sm\" tabindex=\"0\" [c8ySkipLink]=\"'main-content'\" translate>Skip to content</button>\n  <c8y-navigator-node\n    (nodeClick)=\"collapseNavigator($event)\"\n    [node]=\"node\"\n    *ngFor=\"let node of nodes$ | async; trackBy: trackByPathOrLabel\"\n    [isRoot]=\"true\"\n    class=\"d-contents\"\n  ></c8y-navigator-node>\n</div>\n","import { Component, Input, Optional, Output, EventEmitter, HostListener } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { isEmpty } from 'lodash';\nimport { ModalLabels } from '../select-modal/select-modal.model';\nimport { NgClass, NgIf } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * C8Y component for creating modals.\n *\n * Creating custom modal:\n * ```typescript\n *  import { Component } from \"@angular/core\";\n *  import { Subject } from 'rxjs';\n *\n * @Component({\n *  selector: \"my-modal\",\n *  template: `\n *    <c8y-modal title=\"CustomTitle\"\n *      (onClose)=\"onClose($event)\"\n *      (onDismiss)=\"onDismiss($event)\"\n *      [labels]=\"labels\"\n *      [disabled]=\"true\" <- will disable ok button\n *      >\n *        <span>I am body of modal</span>\n *        <span>For simple string use body=\"string\"</span>\n *    </c8y-modal>`\n * })\n *\n * export class MyModalComponent {\n *\n *  closeSubject: Subject<boolean> = new Subject();\n *  labels : ModalLabels = {ok: \"customOK\", cancel: \"customCancel\"};\n *\n *  onDismiss(event){\n *    this.closeSubject.next(false);\n *  }\n *\n *  onClose(event) {\n *    this.closeSubject.next(true);\n *  }\n * }\n * ```\n *\n * Showing modal:\n * ```typescript\n * import { BsModalService } from \"ngx-bootstrap/modal\";\n *\n * constructor(\n *  public bsModalService: BsModalService,\n * ) {}\n *\n * showModal() {\n *  const modalRef = this.bsModalService.show(MyModalComponent);\n *  modalRef.content.closeSubject.subscribe(result => {\n *    console.log('results:', result);\n *  });\n * }\n * ```\n */\n@Component({\n  selector: 'c8y-modal',\n  templateUrl: './modal.component.html',\n  standalone: true,\n  imports: [NgClass, NgIf, C8yTranslatePipe]\n})\nexport class ModalComponent {\n  /**\n   * Emits 'true' when 'cancel' button is clicked.\n   */\n  @Output() onDismiss: EventEmitter<boolean> = new EventEmitter();\n  /**\n   * Emits 'true' when 'ok' button is clicked.\n   */\n  @Output() onClose: EventEmitter<boolean> = new EventEmitter();\n  /**\n   * Indicates if the 'ok' (confirmation) button is disabled.\n   */\n  @Input() disabled = false;\n  /**\n   * Callback function which is called right after 'ok' button is clicked, before 'onClose' emits.\n   */\n  @Input() close: () => void;\n  /**\n   * Callback function which is called right after 'cancel' button is clicked, before 'onDismiss' emits.\n   */\n  @Input() dismiss: () => void;\n  /**\n   * Title of modal.\n   */\n  @Input() title: string;\n  /**\n   * Modal body.\n   */\n  @Input() body: string;\n  /**\n   * Indicates if modal should use custom footer provided with content projection (or no footer at all).\n   * If false, default footer with 'cancel' and 'ok' buttons will be displayed.\n   */\n  @Input() customFooter = false;\n  /**\n   * CSS classes for modal header.\n   */\n  @Input() headerClasses = '';\n\n  /**\n   * Custom labels for 'cancel' and 'ok' buttons.\n   */\n  @Input() set labels({ ok, cancel }: ModalLabels) {\n    this._labels = { ok, cancel };\n  }\n\n  get labels(): ModalLabels {\n    return this._labels;\n  }\n\n  private _labels: ModalLabels = { ok: gettext('OK'), cancel: gettext('Cancel') };\n\n  constructor(@Optional() private modal: BsModalRef) {}\n\n  /**\n   * Hides modal or calls 'dismiss' input callback, then emits 'onDismiss' output.\n   * Method is called when 'cancel' button is clicked, but can be also triggered by accessing 'ModalComponent' instance.\n   */\n  _dismiss() {\n    let fn = this.dismiss;\n    if (!fn && this.modal) {\n      fn = () => this.modal.hide();\n    }\n    if (fn) {\n      fn();\n    }\n    this.onDismiss.emit(true);\n  }\n\n  /**\n   * Hides modal or calls 'close' input callback, then emits 'onClose' output.\n   * Method is called when 'ok' button is clicked, but can be also triggered by accessing 'ModalComponent' instance.\n   */\n  _close() {\n    let fn = this.close;\n    if (!fn && this.modal) {\n      fn = () => this.modal.hide();\n    }\n    if (fn) {\n      fn();\n    }\n    this.onClose.emit(true);\n  }\n\n  /**\n   * 'Enter' keyboard button handler. Calls '_dismiss' or '_close' method when only one corresponding button exists.\n   * @param _event Enter keydown event\n   */\n  @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(_event: KeyboardEvent) {\n    const hasOnlyOneButton = isEmpty(this.labels.ok) !== isEmpty(this.labels.cancel);\n    const isCancelClickable = !this.customFooter && this.labels.cancel;\n    const isOkClickable = !this.customFooter && !this.disabled && this.labels.ok;\n    if (hasOnlyOneButton && isCancelClickable) {\n      this._dismiss();\n    }\n    if (hasOnlyOneButton && isOkClickable) {\n      this._close();\n    }\n  }\n}\n","<div class=\"viewport-modal\">\n  <div class=\"modal-header {{ headerClasses }}\" [ngClass]=\"{ separator: title }\">\n    <ng-content select=\"[c8y-modal-title]\"></ng-content>\n    <div [hidden]=\"!title\" id=\"modal-title\" class=\"modal-title\">\n      {{ title | translate }}\n    </div>\n  </div>\n  <div class=\"modal-inner-scroll\" id=\"modal-body\">\n    <div [ngClass]=\"{ 'modal-body': !customFooter, 'd-contents': customFooter }\">\n      <p *ngIf=\"title\" class=\"text-center text-break-word\">\n        {{ body }}\n      </p>\n      <ng-content></ng-content>\n    </div>\n  </div>\n  <ng-content select=\"[c8y-modal-footer-custom]\"></ng-content>\n  <div class=\"modal-footer\" *ngIf=\"!customFooter\">\n    <ng-content select=\"[c8y-modal-footer]\"></ng-content>\n    <button\n      type=\"button\"\n      title=\"{{ labels.cancel | translate }}\"\n      *ngIf=\"labels.cancel\"\n      class=\"btn btn-default\"\n      (click)=\"_dismiss()\"\n    >\n      {{ labels.cancel | translate }}\n    </button>\n    <button\n      type=\"button\"\n      title=\"{{ labels.ok | translate }}\"\n      *ngIf=\"labels.ok\"\n      class=\"btn btn-primary\"\n      (click)=\"_close()\"\n      [disabled]=\"disabled\"\n    >\n      {{ labels.ok | translate }}\n    </button>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ModalModule as BsModalModule } from 'ngx-bootstrap/modal';\nimport { ConfirmModalComponent } from './modal-confirm.component';\nimport { ModalComponent } from './modal.component';\nimport { CommonModule } from '../common/common.module';\nimport { PopoverConfirmComponent } from './popover-confirm.component';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\n/**\n * The angular module definition for modal.\n * @exports ConfirmModalComponent\n * @exports ModalComponent\n * @exports PopoverConfirmComponent\n */\n@NgModule({\n  imports: [\n    BsModalModule.forRoot(),\n    CommonModule,\n    PopoverModule.forRoot(),\n    ConfirmModalComponent,\n    ModalComponent,\n    PopoverConfirmComponent\n  ],\n  exports: [ConfirmModalComponent, ModalComponent, PopoverConfirmComponent]\n})\nexport class ModalModule {}\n","import { Injectable } from '@angular/core';\nimport { ExtensionFactory } from '../common';\nimport { DrawerItem } from '../drawer';\nimport { NavigatorOutletComponent } from './navigator-outlet.component';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { NavigatorService } from './navigator.service';\n\n@Injectable()\nexport class NavigatorDrawerFactory implements ExtensionFactory<DrawerItem> {\n  protected drawerItem: DrawerItem = {\n    component: NavigatorOutletComponent,\n    position: 'left',\n    priority: 50,\n    id: 'navigatorOutlet'\n  };\n\n  constructor(private navigatorService: NavigatorService) {}\n\n  get(): Observable<DrawerItem | DrawerItem[]> {\n    return this.navigatorService.hasItemsInNavigator$.pipe(\n      map(tmp => (tmp ? this.drawerItem : []))\n    );\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { CommonModule } from '../common/common.module';\nimport { NavigatorIconComponent } from './navigator-icon.component';\nimport { NavigatorNodeComponent } from './navigator-node.component';\nimport { NavigatorOutletComponent } from './navigator-outlet.component';\nimport { ModalModule } from '../modal/modal.module';\nimport { hookDrawer } from '../drawer/drawer.service';\nimport { NavigatorDrawerFactory } from './navigator-drawer.factory';\n\n/**\n * The angular module definition for the navigator.\n * @exports NavigatorOutletComponent\n * @exports NavigatorNodeComponent\n */\n@NgModule({\n  imports: [\n    RouterModule,\n    CollapseModule.forRoot(),\n    CommonModule,\n    ModalModule,\n    NavigatorOutletComponent,\n    NavigatorNodeComponent,\n    NavigatorIconComponent\n  ],\n  exports: [NavigatorOutletComponent, NavigatorNodeComponent]\n})\nexport class NavigatorModule {\n  static providers() {\n    return [hookDrawer(NavigatorDrawerFactory)];\n  }\n}\n","import { Component, Input, Output, ViewChild, EventEmitter } from '@angular/core';\nimport { Search } from './search.model';\nimport { SearchService } from './search.service';\n\n@Component({\n  selector: 'c8y-search',\n  templateUrl: './search.component.html',\n  standalone: true\n})\nexport class SearchComponent implements Search {\n  @Input() name: string;\n  @Input() icon = 'search';\n  @Input() priority = 0;\n  @ViewChild('template', { static: false }) template: any;\n  @Output() search = new EventEmitter<Search>();\n  @Input() term = '';\n\n  private viewInitTimeout;\n\n  constructor(private searchService: SearchService) {}\n\n  onSearch() {\n    this.search.emit(this);\n  }\n\n  ngAfterViewInit() {\n    this.template = undefined;\n    this.viewInitTimeout = setTimeout(() => this.searchService.add(this as Search));\n  }\n\n  ngOnDestroy() {\n    clearTimeout(this.viewInitTimeout);\n    this.searchService.remove(this as Search);\n  }\n}\n","<ng-template #template>\n  <ng-content></ng-content>\n</ng-template>","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { escape, escapeRegExp } from 'lodash-es';\n\n@Component({\n  selector: 'c8y-highlight',\n  template: '<span [innerHTML]=\"highlightedText\"></span>',\n  standalone: true\n})\nexport class HighlightComponent {\n  @ViewChild('text', { read: ElementRef, static: true })\n  container: ElementRef;\n\n  @Input()\n  pattern = '';\n\n  @Input()\n  text = '';\n\n  @Input()\n  elementClass = 'text-info';\n\n  @Input()\n  shouldTrimPattern = false;\n\n  highlightedText = '';\n\n  ngOnChanges(): void {\n    const textNoHtml = escape(this.text || '');\n    const patternEventuallyTrimmed = this.shouldTrimPattern ? this.pattern?.trim() : this.pattern;\n    const patternNoHtml = escape(patternEventuallyTrimmed || '');\n    const patternForRegex = escapeRegExp(patternNoHtml).replace(/\\\\\\*/g, '.*');\n    this.highlightedText = textNoHtml.replace(\n      new RegExp(patternForRegex, 'i'),\n      `<strong class=\"${this.elementClass}\">$&</strong>`\n    );\n  }\n}\n","import { Component, Input } from '@angular/core';\r\nimport { gettext } from '@c8y/ngx-components/gettext';\r\nimport { IconDirective } from '../common/icon.directive';\r\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\r\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\r\n\r\n@Component({\r\n  selector: 'c8y-search-result-empty',\r\n  templateUrl: './search-result-empty.component.html',\r\n  standalone: true,\r\n  imports: [IconDirective, C8yTranslateDirective, C8yTranslatePipe]\r\n})\r\nexport class SearchResultEmptyComponent {\r\n  private readonly NO_RESULT_FOUND = gettext('No results found.');\r\n  private msg: string = this.NO_RESULT_FOUND;\r\n\r\n  @Input('message')\r\n  set _message(msg: string) {\r\n    if (msg && msg.length > 0) {\r\n      this.msg = msg;\r\n    } else {\r\n      this.msg = this.NO_RESULT_FOUND;\r\n    }\r\n  }\r\n\r\n  get message() {\r\n    return this.msg;\r\n  }\r\n}\r\n","<div class=\"no-results\">\n  <div class=\"c8y-empty-state\">\n    <h1 c8yIcon=\"search\"></h1>\n    <div class=\"p-t-8\">\n      <p><strong>{{ message | translate }}</strong></p>\n      <small translate>Refine your search terms.</small>\n    </div>\n  </div>\n</div>\n","import { AfterViewChecked, Directive, ElementRef, Optional, Renderer2 } from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Directive({\n  selector: 'input[required], input[formControlName]',\n  standalone: true\n})\nexport class RequiredInputPlaceholderDirective implements AfterViewChecked {\n  private shouldSkipRequiredHint = false;\n  private placeholder: string;\n  private req: boolean;\n  constructor(\n    private el: ElementRef,\n    private renderer: Renderer2,\n    private translationService: TranslateService,\n    @Optional() private ngControl: NgControl\n  ) {\n    this.shouldSkipRequiredHint = !!this.el.nativeElement.closest('[placeholder-no-required-hint]');\n  }\n\n  ngAfterViewChecked(): void {\n    if (this.el?.nativeElement?.required !== undefined || this.ngControl?.control) {\n      const isRequired =\n        this.el?.nativeElement?.required ||\n        this.ngControl?.control?.hasValidator(Validators.required);\n      const willSetRequiredHint = isRequired && !this.shouldSkipRequiredHint;\n      const placeholder = this.el.nativeElement.placeholder;\n\n      if (this.placeholder !== placeholder || this.req !== willSetRequiredHint) {\n        this.updatePlaceholder(this.getTextForPlaceholder(placeholder, willSetRequiredHint));\n      }\n    }\n  }\n\n  private getTextForPlaceholder(placeholder = '', required = false) {\n    this.req = required;\n    const requiredText = `(${this.translationService.instant(gettext('required'))})`;\n    const requiredTextIndex = placeholder.lastIndexOf(requiredText);\n    if (requiredTextIndex > 0) {\n      placeholder = placeholder.slice(0, requiredTextIndex - 1);\n    }\n    if (requiredTextIndex === 0) {\n      placeholder = '';\n    }\n    if (!required) {\n      return placeholder;\n    }\n    return placeholder.trim() ? `${placeholder} ${requiredText}` : requiredText;\n  }\n\n  private updatePlaceholder(placeholder) {\n    this.renderer.setAttribute(this.el.nativeElement, 'placeholder', placeholder);\n    this.placeholder = placeholder;\n  }\n}\n","import {\n  Component,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  Input,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { assignWith } from 'lodash-es';\nimport { GainsightService } from '../product-experience/gainsight.service';\nimport {\n  ProductExperienceEvent,\n  ProductExperienceEventSource,\n  PRODUCT_EXPERIENCE_EVENT_SOURCE\n} from '../product-experience/product-experience.model';\nimport { NgIf } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * Actions are functions that can be executed on the\n * current list item. They are displayed next to the\n * item and can be grouped in a dropdown.\n *\n * ```html\n * <c8y-li>\n *   <c8y-li-action (click)=\"deleteDevice(device.id)\" icon=\"times\">\n *     Delete\n *   </c8y-li-action>\n *   <c8y-li-action (click)=\"(false)\" icon=\"rocket\">\n *     Launch to space\n *   </c8y-li-action>\n * </c8y-li>\n * ```\n */\n@Component({\n  selector: 'c8y-list-item-action, c8y-li-action',\n  templateUrl: './list-item-action.component.html',\n  providers: [\n    {\n      provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n      useExisting: forwardRef(() => ListItemActionComponent)\n    }\n  ],\n  standalone: true,\n  imports: [NgIf, IconDirective, C8yTranslatePipe]\n})\nexport class ListItemActionComponent implements ProductExperienceEventSource {\n  /**\n   * @ignore\n   */\n  @ViewChild('template', { static: false })\n  template: any;\n  /**\n   * The label to display (you can alternatively use\n   * content projection to display the label).\n   */\n  @Input()\n  label: string;\n  /**\n   * The name of the icon to use.\n   */\n  @Input()\n  icon: SupportedIconsSuggestions;\n  /**\n   * Defines if the action is disabled or not.\n   */\n  @Input()\n  disabled = false;\n  /**\n   * An EventEmitter to determine what to do if the\n   * action is triggered.\n   */\n  @Output()\n  click = new EventEmitter<void>();\n\n  /**\n   * The product experience event to be triggered\n   * when the action is clicked.\n   */\n  productExperienceEvent: ProductExperienceEvent;\n\n  constructor(private gainsightService: GainsightService) {}\n\n  /**\n   * @ignore\n   */\n  @HostListener('click', ['$event.target'])\n  onClick(event: HTMLElement) {\n    const element = event.closest('[title]') || event.closest('[uib-tooltip]');\n    if (!element) {\n      return;\n    }\n    const eventName = this.productExperienceEvent?.eventName || 'listItemAction';\n    const actionName = element.getAttribute('title') || element.getAttribute('uib-tooltip');\n    const action = this.gainsightService.translateToEnglish(actionName);\n    // Assign url and action to event data only if they are not already defined\n    const eventData = assignWith(\n      this.productExperienceEvent?.data,\n      {\n        url: element.baseURI,\n        action\n      },\n      (targetVal, sourceVal) => sourceVal ?? targetVal\n    );\n\n    this.gainsightService.triggerEvent(eventName, eventData);\n  }\n}\n","<ng-template #template>\n  <li>\n    <button\n      title=\"{{ label | translate }}\"\n      (click)=\"click.emit($event)\"\n      data-cy=\"c8y-li-action--btn\"\n      [disabled]=\"disabled\"\n    >\n      <i\n        [c8yIcon]=\"icon\"\n        *ngIf=\"icon\"\n      ></i>\n      &nbsp;\n      <span *ngIf=\"label\">{{ label | translate }}</span>\n      <ng-content></ng-content>\n    </button>\n  </li>\n</ng-template>\n","import { Component, Input } from '@angular/core';\n\n/**\n * Display collapsed content on a list item. Can be\n * used for more detailed information. Use it with\n * content projection.\n *\n * ```html\n * <c8y-li>\n *   <c8y-collapsed>\n *     <strong>I am only visible if extended</strong>\n *   </c8y-collapsed>\n * </c8y-li>\n * ```\n */\n@Component({\n  selector: 'c8y-list-item-collapse, c8y-li-collapse',\n  templateUrl: './list-item-collapse.component.html',\n  standalone: true\n})\nexport class ListItemCollapseComponent {\n  /**\n   * The way how to toggle collapse state.\n   * button (default) - additional button for toggle collapse state\n   * row - toggling collapse state by clicking to entire row.\n   */\n  @Input()\n  collapseWay: 'button' | 'row' = 'button';\n}\n","<ng-content></ng-content>\n","import { Component, Input } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\n/**\n * The footer can be used with either content projection\n * or a simple string as an input.\n *\n * ```html\n * <c8y-li>\n *   Content\n *   <c8y-li-footer>I am a footer</c8y-li-footer>\n * </c8y-li>\n * ```\n */\n@Component({\n  selector: 'c8y-list-item-footer, c8y-li-footer',\n  templateUrl: './list-item-footer.component.html',\n  standalone: true,\n  imports: [NgIf]\n})\nexport class ListItemFooterComponent {\n  /**\n   * A simple string that can be used instead\n   * of content projection.\n   */\n  @Input()\n  footer: string;\n}\n","<span *ngIf=\"footer\">{{footer}}</span>\n<ng-content></ng-content>\n","import {\n  Component,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Output,\n  QueryList\n} from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { delay, filter, takeUntil, tap } from 'rxjs/operators';\nimport { ListItemActionComponent } from './list-item-action.component';\nimport { ListItemCollapseComponent } from './list-item-collapse.component';\nimport { ListItemFooterComponent } from './list-item-footer.component';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { DropdownDirectionDirective } from '../common/dropdown-direction.directive';\nimport { DropdownFocusTrapDirective } from '../common/dropdown-focus-trap.directive';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * A list item is a representation of an item inside a list and\n * can be used to compose different styles in a list (mainly in a\n * <c8y-group-list>-component but also in others like the\n * <c8y-typeahead>-component):\n *  - a list with a footer\n *  - a list with one or multiple actions\n *  - an icon\n *  - a checkbox or radio input\n *\n * The item can be composed via content projection. The following\n * example shows a radio list with an icon, two actions\n * and a footer:\n * ```html\n * <c8y-list-group>\n *   <c8y-li\n *     *c8yFor=\"\n *       let device of devices;\n *       let i = index;\n *     \"\n *   >\n *     <c8y-li-radio (onSelect)=\"updateSelected($event, device)\"></c8y-li-radio>\n *     <c8y-li-icon [icon]=\"'rocket'\"></c8y-li-icon>\n *     {{ i + 1 }}. {{ device.name || '-' }}\n *     <c8y-li-footer>\n *       Device id: <a [routerLink]=\"['/device', device.id]\">{{ device.id }}</a>\n *     </c8y-li-footer>\n *     <c8y-li-action (click)=\"deleteDevice(device.id)\" icon=\"times\">\n *       Delete\n *     </c8y-li-action>\n *     <c8y-li-action (click)=\"(false)\" icon=\"rocket\">\n *       Launch to space\n *     </c8y-li-action>\n *   </c8y-li>\n * </c8y-list-group>\n * ```\n */\n@Component({\n  selector: 'c8y-list-item, c8y-li',\n  templateUrl: './list-item.component.html',\n  host: {\n    class: 'c8y-list__item'\n  },\n  standalone: true,\n  imports: [\n    NgClass,\n    IconDirective,\n    BsDropdownModule,\n    DropdownDirectionDirective,\n    DropdownFocusTrapDirective,\n    CdkTrapFocus,\n    NgTemplateOutlet,\n    CollapseModule,\n    C8yTranslatePipe\n  ]\n})\nexport class ListItemComponent {\n  /**\n   * If set to true, the class \"active\" is added which\n   * indicates that the current row is active.\n   */\n  @Input()\n  @HostBinding('class.active')\n  active = false;\n\n  /**\n   * If set to true, the class \"highlighted\" is added which\n   * indicates that the current row is highlighted.\n   */\n  @Input()\n  @HostBinding('class.highlighted')\n  highlighted = false;\n\n  /**\n   * If set to true, the class \"c8y-list__item--empty-actions\" is added which adds\n   * additional padding to compensate for the \"actions\" column in other list items.\n   */\n  @Input()\n  @HostBinding('class.c8y-list__item--empty-actions')\n  emptyActions = false;\n\n  /**\n   * If set to true, the item will be displayed in a dense style.\n   */\n  @Input()\n  @HostBinding('class.c8y-list__item--dense')\n  dense = false;\n\n  /**\n   * Indicates if the current list item is collapsed. You can trigger the collapsing from\n   * any element event by toggling this value.\n   *\n   * ```html\n   * <c8y-li #li (click)=\"li.collapsed = !li.collapsed\">\n   *  Toggle\n   *  <c8y-li-collapse>\n   *    I can be toggled by clicking on the row.\n   *  </c8y-li-collapse\n   * </c8y-li>\n   * ```\n   */\n  @Input()\n  collapsed = true;\n\n  /**\n   * Indicates if the current list item is selectable.\n   */\n  @Input()\n  @HostBinding('class.selectable')\n  selectable = true;\n\n  /**\n   * An event emitter which is triggered when the user collapses the content\n   * via the chevron on the right.\n   */\n  @Output()\n  collapsedChange = new EventEmitter<boolean>();\n\n  /**\n   * A [[ListItemFooterComponent]] element which can be used to show a footer.\n   * ```html\n   * <c8y-li>\n   *  I am the main content\n   *  <c8y-li-footer>\n   *    I am the footer content\n   *  </c8y-li-footer>\n   * </c8y-li>\n   * ```\n   */\n  @ContentChild(ListItemFooterComponent, { static: false })\n  itemFooter: ListItemFooterComponent;\n\n  /**\n   * [[ListItemActionComponent]] elements which can be used to show an action.\n   * An action is displayed on the right in the dropdown and usually consists of an\n   * icon and a label.\n   * ```html\n   * <c8y-li>\n   *  I am the main content\n   *  <c8y-li-action (click)=\"launchToSpace(device.id)\" icon=\"rocket\">\n   *    Launch\n   *  </c8y-li-action>\n   *  <c8y-li-action (click)=\"deleteDevice(device.id)\" icon=\"times\">\n   *    Delete\n   *  </c8y-li-action>\n   * </c8y-li>\n   * ```\n   */\n  @ContentChildren(ListItemActionComponent)\n  itemActions: QueryList<ListItemActionComponent>;\n\n  /**\n   * [[ListItemCollapseComponent]] elements which can be used to show detail views.\n   * ```html\n   * <c8y-li>\n   *  I am the main content\n   *  <c8y-li-collapse>\n   *    I am detailed content\n   *  </c8y-li-collapse>\n   * </c8y-li>\n   * ```\n   */\n  @ContentChild(ListItemCollapseComponent, { static: false })\n  itemCollapse: ListItemCollapseComponent;\n\n  /**\n   * @ignore\n   */\n  showFooter = false;\n  /**\n   * @ignore\n   */\n  showActions = false;\n  /**\n   * @ignore\n   */\n  showCollapse = false;\n  /**\n   * @ignore\n   */\n  actions: ListItemActionComponent[];\n\n  private pulse$: Subject<boolean> = new Subject<boolean>();\n  private destroy$: Subject<void> = new Subject();\n  private readonly ACTION_ITEM_HEIGHT = 40;\n\n  /**\n   * @ignore\n   */\n  constructor(public element: ElementRef) {}\n\n  /**\n   * @ignore\n   */\n  ngOnInit(): void {\n    this.pulse$\n      .pipe(\n        filter(apply => !!apply),\n        tap(() => this.element.nativeElement.classList.remove('c8y-list--pulse')),\n        delay(100),\n        tap(() => this.element.nativeElement.classList.add('c8y-list--pulse')),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n\n  /**\n   * @ignore\n   */\n  ngAfterContentChecked(): void {\n    this.actions = this.itemActions.toArray();\n    this.showFooter = this.itemFooter != null;\n    this.showActions = this.itemActions.length > 0;\n    this.showCollapse = this.itemCollapse != null;\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  /**\n   * Toggles the collapse state and emits this state as\n   * collapsedChange output as boolean.\n   * @param $event Pass optional an event to stop propagation.\n   */\n  toggleCollapsed($event?: Event) {\n    if ($event) {\n      $event.stopPropagation();\n    }\n    this.collapsed = !this.collapsed;\n    this.collapsedChange.emit(this.collapsed);\n  }\n\n  /**\n   * Toggles the collapse state in case the `collapseWay` is set to `row` and emits this state as\n   * collapsedChange output as boolean.\n   */\n  rowToggleCollapsed() {\n    if (!this.itemCollapse || this.itemCollapse.collapseWay !== 'row') {\n      return;\n    }\n    this.toggleCollapsed();\n  }\n\n  /**\n   * Highlights the list-item. This method should be used to show the\n   * user that something within this item was changed.\n   */\n  pulse() {\n    this.pulse$.next(true);\n  }\n}\n","<div\n  [ngClass]=\"{ expanded: !collapsed, interact: itemCollapse && itemCollapse.collapseWay === 'row' }\"\n>\n  <div class=\"c8y-list__item__block\">\n    <ng-content select=\"c8y-list-item-drag-handle, c8y-li-drag-handle\"></ng-content>\n    <ng-content select=\"c8y-list-item-radio, c8y-li-radio\"></ng-content>\n    <ng-content select=\"c8y-list-item-checkbox, c8y-li-checkbox\"></ng-content>\n\n    <ng-content select=\"c8y-list-item-icon, c8y-li-icon\"></ng-content>\n\n    <div\n      class=\"c8y-list__item__body text-truncate-wrap\"\n      (click)=\"rowToggleCollapsed()\"\n    >\n      <ng-content select=\"c8y-list-item-body, c8y-li-body\"></ng-content>\n      <ng-content></ng-content>\n\n      @if (showFooter) {\n        <div class=\"c8y-list__item__footer\">\n          <ng-content select=\"c8y-list-item-footer, c8y-li-footer\"></ng-content>\n        </div>\n      }\n    </div>\n\n    @if ((showCollapse && itemCollapse && itemCollapse.collapseWay === 'button') || showActions) {\n      <div class=\"c8y-list__item__actions\">\n        @if (showCollapse && itemCollapse.collapseWay === 'button') {\n          <button\n            class=\"collapse-btn\"\n            title=\"{{ 'Expand' | translate }}\"\n            [attr.aria-expanded]=\"!collapsed\"\n            type=\"button\"\n            (click)=\"toggleCollapsed($event)\"\n            data-cy=\"c8y-li--collapse-btn\"\n          >\n            <i [c8yIcon]=\"'chevron-down'\"></i>\n          </button>\n        }\n\n        @if (showActions) {\n          <div\n            class=\"dropdown\"\n            placement=\"bottom right\"\n            container=\"body\"\n            #liDropdownActions=\"bs-dropdown\"\n            dropdown\n            #dropDirection=\"bs-dropdown\"\n            c8yDropdownFocusTrap\n          >\n            <button\n              class=\"dropdown-toggle c8y-dropdown\"\n              title=\"{{ 'Actions' | translate }}\"\n              type=\"button\"\n              dropdownToggle\n              data-cy=\"c8y-li--actions-btn\"\n            >\n              <i [c8yIcon]=\"'ellipsis-v'\"></i>\n            </button>\n            <ul\n              class=\"dropdown-menu dropdown-menu-right\"\n              data-cy=\"list-item--dropdown-menu\"\n              *dropdownMenu\n            >\n              <ng-content select=\"c8y-list-item-action, c8y-li-action\"></ng-content>\n\n              @for (action of actions; track action) {\n                <ng-container *ngTemplateOutlet=\"action.template\"></ng-container>\n              }\n            </ul>\n          </div>\n\n          <ng-content select=\"c8y-list-item-action, c8y-li-action\"></ng-content>\n        }\n      </div>\n    }\n  </div>\n\n  @if (showCollapse) {\n    <div\n      [collapse]=\"collapsed\"\n      [isAnimated]=\"true\"\n    >\n      <div class=\"c8y-list__item__collapse--container\">\n        <ng-content select=\"c8y-list-item-collapse, c8y-li-collapse\"></ng-content>\n      </div>\n    </div>\n  }\n</div>\n","import { Component, ContentChild, HostBinding } from '@angular/core';\nimport { ListItemComponent } from './list-item.component';\n\n/**\n * Allows to display a timeline. Should be used with\n * content projection.\n *\n * ```html\n * <c8y-list-group>\n *   <c8y-li-timeline>\n *     24.April 2020\n *     <c8y-li>\n *       Hello\n *     </c8y-li>\n *   </c8y-li-timeline>\n * </c8y-list-group>\n * ```\n */\n@Component({\n  selector: 'c8y-list-item-timeline, c8y-li-timeline',\n  templateUrl: './list-item-timeline.component.html',\n  host: {\n    class: 'c8y-list--timeline__item'\n  },\n  standalone: true\n})\nexport class ListItemTimelineComponent {\n  @ContentChild(ListItemComponent, { static: false }) listItemComponent: ListItemComponent;\n  @HostBinding('class.expanded') get expanded() {\n    return !this.listItemComponent?.collapsed;\n  }\n}\n","<small class=\"c8y-list--timeline__item__date\">\n  <ng-content></ng-content>\n</small>\n<ng-content select=\"c8y-li, c8y-list-item\"></ng-content>\n","import { Component, HostBinding, ContentChild } from '@angular/core';\nimport { ListItemTimelineComponent } from './list-item-timeline.component';\n\n/**\n * List groups are flexible and powerful components for displaying\n * both simple lists of elements and complex ones with custom content.\n *\n * ```html\n * <c8y-list-group>\n *   <c8y-li>\n *     Plain <strong>Text</strong>\n *   </c8y-li>\n *   <c8y-li>\n *     <c8y-li-icon [icon]=\"'rocket'\"></c8y-li-icon>\n *     Icon\n *   </c8y-li>\n *   <c8y-li>\n *     <c8y-li-radio></c8y-li-radio>\n *     Radio\n *   </c8y-li>\n *   <c8y-li>\n *     <c8y-li-checkbox></c8y-li-checkbox>\n *     Checkbox\n *   </c8y-li>\n *   <c8y-li>\n *     Content\n *     <c8y-li-footer>\n *       Footer\n *     </c8y-li-footer>\n *   </c8y-li>\n *   <c8y-li>\n *     Content\n *     <c8y-li-action icon=\"rocket\">\n *       Launch\n *     </c8y-li-action>\n *   </c8y-li>\n *   <c8y-li>\n *     Content\n *     <c8y-li-collapse>\n *       Collapsed content\n *     </c8y-li-collapse>\n *   </c8y-li>\n * </c8y-list-group>\n * ```\n */\n@Component({\n  selector: 'c8y-list-group',\n  templateUrl: './list-group.component.html',\n  host: {\n    class: 'c8y-list__group'\n  },\n  standalone: true\n})\nexport class ListGroupComponent {\n  /**\n   * @ignore\n   */\n  @HostBinding('class.c8y-list--timeline')\n  timeline = false;\n\n  /**\n   * Displays the current list as a timeline. Best used\n   * with content projection.\n   *\n   * ```html\n   * <c8y-list-group>\n   *   <c8y-li-timeline>\n   *     24.April 2020\n   *     <c8y-li>\n   *       Hello\n   *     </c8y-li>\n   *   </c8y-li-timeline>\n   * </c8y-list-group>\n   * ```\n   */\n  @ContentChild(ListItemTimelineComponent, { static: false })\n  timelineComponent: ListItemTimelineComponent;\n\n  /**\n   * @ignore\n   */\n  ngAfterContentChecked(): void {\n    this.timeline = !!this.timelineComponent;\n  }\n}\n","<ng-content></ng-content>\n","import { Injectable, QueryList } from '@angular/core';\nimport { findIndex } from 'lodash';\nimport { BsDropdownDirective } from 'ngx-bootstrap/dropdown';\nimport {\n  Observable,\n  Subject,\n  distinctUntilChanged,\n  fromEvent,\n  map,\n  merge,\n  startWith,\n  takeUntil,\n  withLatestFrom\n} from 'rxjs';\nimport { ListItemComponent } from '../list-group';\n\n/**\n * This service provides keyboard navigation for dropdowns.\n *\n * It allows to navigate over the items in the dropdown using the keyboard\n * or search for them. For this to correctly work, the service needs to provided\n * as component provider in the component. Additionally the `ListItemComponent`\n * needs to be used in the dropdown items. Also each item needs to have a\n * span[data-search-label] element to search for the item.\n */\n@Injectable()\nexport class SelectKeyboardService {\n  private readonly KEYCODE_UP = 'ArrowUp';\n  private readonly KEYCODE_DOWN = 'ArrowDown';\n  private readonly KEYCODE_TAB = 'Tab';\n  private readonly KEYCODE_ENTER = 'Enter';\n  private readonly KEYCODE_ESC = 'Escape';\n  private readonly KEYCODE_SPACE = 'Space';\n\n  private destroyed$: Subject<void> = new Subject();\n\n  /**\n   * Conifguration options for the keyboard service.\n   */\n  options = {\n    /**\n     * If true, the input will be cleared when the user selects an item.\n     */\n    emptyInput: false,\n    /**\n     * Search on key event.\n     */\n    keyboardSearch: false,\n    /**\n     * Space key event is used to select.\n     */\n    spaceSelect: false,\n    /**\n     * Highlights the first element, if no match was found by startWith search.\n     */\n    noMatchHighlightFirst: false\n  };\n\n  /**\n   * Registers the keyboard event listener for the dropdown.\n   *\n   * @param input The input element to search for items.\n   * @param list A QueryList of all the [ListItemComponent] on which can be searched\n   * @param dropdown The dropdown itself as [BsDropdownDirective].\n   * @returns A Observable<number> where number is the index of the selected [ListItemComponent]\n   */\n  register$(\n    input: HTMLInputElement,\n    list: QueryList<ListItemComponent>,\n    dropdown: BsDropdownDirective\n  ): Observable<number> {\n    if (this.destroyed$.isStopped) {\n      this.destroyed$ = new Subject<void>();\n    }\n\n    return merge(\n      fromEvent<KeyboardEvent>(input, 'keyup'),\n      fromEvent<KeyboardEvent>(input, 'keydown')\n    ).pipe(\n      withLatestFrom(list.changes.pipe(startWith(list))),\n      map(([e, items]) => this.handleKeyboard(e, input, items.toArray(), dropdown)),\n      distinctUntilChanged(),\n      takeUntil(this.destroyed$)\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.unregister();\n  }\n\n  /**\n   * Unregister the keyboard event listner.\n   */\n  unregister() {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n\n  /**\n   * Returns true if the keyboard event is fired by a selection event (Enter, Down, Tab, Up, Space)\n   * @returns true if the event is a selection event.\n   */\n  isSelectionEvent(event: KeyboardEvent): boolean {\n    return [\n      this.KEYCODE_ENTER,\n      this.KEYCODE_DOWN,\n      this.KEYCODE_TAB,\n      this.KEYCODE_UP,\n      ...(this.options.spaceSelect ? [this.KEYCODE_SPACE] : [])\n    ].includes(event.code);\n  }\n\n  private handleKeyboard(\n    event: KeyboardEvent,\n    input: HTMLInputElement,\n    items: ListItemComponent[],\n    dropdown: BsDropdownDirective\n  ): number {\n    if (this.isSelectionEvent(event)) {\n      return this.handleArrowKeySelection(event, input, items, dropdown);\n    }\n\n    if (event.code === this.KEYCODE_ESC) {\n      return this.handleCancel(event, dropdown, input);\n    }\n\n    if (this.options.keyboardSearch) {\n      return this.handleInputBoxSearch(items, input);\n    }\n    return -1;\n  }\n\n  private handleInputBoxSearch(items: ListItemComponent[], input: HTMLInputElement) {\n    if (!input.value) {\n      return -1;\n    }\n    const index = findIndex(items, item => {\n      const label: HTMLElement =\n        item.element.nativeElement.querySelector('span[data-search-label]');\n      if (!label) {\n        return false;\n      }\n      return label\n        .getAttribute('data-search-label')\n        .toLowerCase()\n        .startsWith(input.value.toLowerCase());\n    });\n\n    if (index > -1) {\n      this.highlightItem(items[index], items);\n    } else if (this.options.noMatchHighlightFirst && items.length > 0) {\n      this.highlightItem(items[0], items);\n    }\n    return index;\n  }\n\n  private handleArrowKeySelection(\n    event: KeyboardEvent,\n    input: HTMLInputElement,\n    items: ListItemComponent[],\n    dropdown: BsDropdownDirective\n  ): number {\n    const keyCode = event.code;\n    const activeIndex = findIndex(items, item => item.active);\n    const highlightedIndex = findIndex(items, item => item.highlighted);\n    const index = highlightedIndex > -1 ? highlightedIndex : activeIndex;\n\n    if (event.type !== 'keydown') {\n      return index;\n    }\n\n    if (this.options.emptyInput) {\n      input.value = '';\n    }\n\n    if (keyCode === this.KEYCODE_ENTER || keyCode === this.KEYCODE_TAB) {\n      if (index > -1) {\n        event.preventDefault();\n        items[index].element.nativeElement.click();\n      }\n      dropdown.hide();\n      input.blur();\n      return index;\n    }\n    if (keyCode === this.KEYCODE_SPACE) {\n      if (index > -1) {\n        const clickEvent = new MouseEvent('click', {\n          bubbles: false\n        });\n        items[index].element.nativeElement.dispatchEvent(clickEvent);\n      }\n      dropdown.show();\n      return index;\n    }\n    const upOrDown = keyCode === this.KEYCODE_DOWN ? 1 : -1;\n    if (index > -1) {\n      items[index].highlighted = false;\n    }\n    return this.selectNextItemOnKeyboardMove(items, index, upOrDown);\n  }\n\n  private handleCancel(\n    event: KeyboardEvent,\n    dropdown: BsDropdownDirective,\n    input: HTMLInputElement\n  ) {\n    event.stopPropagation();\n    dropdown.hide();\n    input.blur();\n    return -1;\n  }\n\n  private selectNextItemOnKeyboardMove(\n    items: ListItemComponent[],\n    index: number,\n    upOrDown: -1 | 1\n  ): number {\n    if (items[index + upOrDown]) {\n      if (!items[index + upOrDown].selectable) {\n        return this.selectNextItemOnKeyboardMove(items, index + upOrDown, upOrDown);\n      }\n      this.highlightItem(items[index + upOrDown]);\n      return index;\n    }\n    if (index + upOrDown > -1) {\n      this.highlightItem(items[0]);\n      return 0;\n    }\n    this.highlightItem(items[items.length - 1]);\n    return items.length - 1;\n  }\n\n  private highlightItem(item: ListItemComponent, items: ListItemComponent[] = []) {\n    queueMicrotask(() => {\n      items.forEach(item => (item.highlighted = false));\n      item.highlighted = true;\n      item.element.nativeElement.scrollIntoView({ block: 'nearest' });\n    });\n  }\n}\n","import { NgClass } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  Output,\n  QueryList,\n  ViewChild\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormsModule,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  Validator\n} from '@angular/forms';\nimport { IIdentified } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { get, isEqual, set } from 'lodash-es';\nimport { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\nimport { IconDirective } from '../common/icon.directive';\nimport { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { ListGroupComponent } from '../list-group/list-group.component';\nimport { ListItemComponent } from '../list-group/list-item.component';\nimport { SelectKeyboardService } from './select-keyboard.service';\n\n@Component({\n  selector: 'c8y-typeahead',\n  templateUrl: './typeahead.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => TypeaheadComponent)\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => TypeaheadComponent),\n      multi: true\n    },\n    SelectKeyboardService\n  ],\n  standalone: true,\n  imports: [\n    BsDropdownModule,\n    RequiredInputPlaceholderDirective,\n    FormsModule,\n    NgClass,\n    IconDirective,\n    ListGroupComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class TypeaheadComponent implements ControlValueAccessor, Validator, AfterViewInit {\n  @ViewChild('searchControl', { static: false }) searchControl: ElementRef;\n  @ViewChild('searchControlModel', { static: false }) searchControlModel;\n  @ViewChild('dropdown', { static: false }) dropdown: BsDropdownDirective;\n  @ContentChildren(ListItemComponent) list: QueryList<ListItemComponent>;\n\n  @Input()\n  required = false;\n\n  @Input()\n  maxlength: string | number;\n\n  @Input()\n  disabled = false;\n\n  @Input()\n  allowFreeEntries = true;\n\n  @Input()\n  placeholder: string;\n\n  @Input()\n  displayProperty = 'name';\n\n  @Input()\n  icon = 'caret-down';\n\n  @Input()\n  name: string = this.displayProperty;\n\n  @Input()\n  autoClose = true;\n\n  @Input()\n  hideNew = false;\n\n  @Input()\n  container: '' | 'body' = '';\n\n  @Input()\n  selected: IIdentified = {\n    id: null\n  };\n\n  @Input()\n  title: string = gettext('Search');\n\n  @Input()\n  highlightFirstItem = true;\n\n  @Output()\n  onSearch = new EventEmitter<string>();\n\n  @Output()\n  onIconClick = new EventEmitter<{ icon: string; $event: MouseEvent }>();\n\n  private onChange: (name) => void;\n  private onTouched: () => void;\n\n  private readonly destroyed$: Subject<void> = new Subject();\n\n  constructor(private selectKeyboardService: SelectKeyboardService) {}\n\n  writeValue(value) {\n    if (value && this.searchControl) {\n      this.searchControl.nativeElement.value = get(value, this.displayProperty, '');\n    }\n\n    if (\n      typeof this.onChange === 'function' &&\n      !isEqual(value, this.selected) &&\n      this.selected != null\n    ) {\n      this.onChange(value);\n    }\n\n    this.selected = value;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n  }\n\n  doBlur() {\n    if (this.onTouched) {\n      this.onTouched();\n    }\n  }\n\n  getDisplayProperty() {\n    return get(this.selected, this.displayProperty, '');\n  }\n\n  onShown() {\n    this.searchControl.nativeElement.focus();\n  }\n\n  /**\n   * Resets the input field - clear value and clean field to be pristine and untouched.\n   */\n  reset() {\n    this.searchControlModel.reset();\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n\n  ngAfterViewInit(): void {\n    fromEvent(this.searchControl.nativeElement, 'keydown')\n      .pipe(debounceTime(200), distinctUntilChanged(), takeUntil(this.destroyed$))\n      .subscribe((event: KeyboardEvent) => {\n        // ignore OS/browser shortcuts (Cmd/Ctrl/Alt combos, e.g. Cmd+A, Shift+Cmd+4)\n        if (event.metaKey || event.ctrlKey || event.altKey) {\n          return;\n        }\n\n        if (this.selectKeyboardService.isSelectionEvent(event)) {\n          return;\n        }\n        this.dropdown.show();\n        const value = (event.target as HTMLInputElement).value;\n        this.selected = {\n          id: null\n        };\n        set(this.selected, this.displayProperty, value || '');\n\n        if (typeof this.onChange === 'function') {\n          this.onChange(this.selected);\n        }\n        this.onSearch.emit(value);\n      });\n\n    this.selectKeyboardService\n      .register$(this.searchControl.nativeElement, this.list, this.dropdown)\n      .subscribe();\n\n    this.list.changes\n      .pipe(\n        filter(() => !!this.searchControlModel?.model),\n        takeUntil(this.destroyed$)\n      )\n      .subscribe((queryList: QueryList<ListItemComponent>) => {\n        if (this.highlightFirstItem) {\n          const firstSelectable = queryList.find(item => item.selectable);\n          if (firstSelectable) {\n            firstSelectable.highlighted = true;\n          }\n        }\n      });\n  }\n\n  validate(_ctrl: AbstractControl): { [key: string]: any } {\n    if (this.required && !get(_ctrl.value, this.displayProperty, '')) {\n      return { required: true };\n    }\n\n    if (\n      !this.allowFreeEntries &&\n      this.selected &&\n      this.selected.id === null &&\n      get(_ctrl.value, this.displayProperty)\n    ) {\n      return { notExisting: true };\n    }\n\n    return null;\n  }\n}\n","<div\n  class=\"c8y-search-dropdown dropdown fit-w\"\n  placement=\"bottom left\"\n  dropdown\n  [container]=\"container\"\n  #dropdown=\"bs-dropdown\"\n  [autoClose]=\"true\"\n  (onShown)=\"onShown()\"\n  [isDisabled]=\"disabled\"\n  dropdownToggle\n>\n  <div\n    class=\"input-group input-group-dropdown\"\n    role=\"button\"\n  >\n    <input\n      class=\"form-control text-truncate\"\n      type=\"text\"\n      #searchControl\n      #searchControlModel=\"ngModel\"\n      [ngClass]=\"{\n        'p-r-80':\n          !hideNew &&\n          (selected\n            ? selected.id === null && getDisplayProperty()?.length > 0 && allowFreeEntries\n            : false),\n        'p-r-40': hideNew || getDisplayProperty()?.length === 0\n      }\"\n      [required]=\"required\"\n      [ngModel]=\"selected ? getDisplayProperty() : ''\"\n      [placeholder]=\"placeholder | translate\"\n      (blur)=\"doBlur()\"\n      [name]=\"name\"\n      [maxlength]=\"maxlength\"\n      [disabled]=\"disabled\"\n    />\n    @if (\n      !hideNew &&\n      selected &&\n      selected.id === null &&\n      getDisplayProperty()?.length > 0 &&\n      allowFreeEntries\n    ) {\n      <span\n        class=\"label label-info p-absolute\"\n        style=\"top: 10px; right: 40px; z-index: 10\"\n      >\n        {{ 'New' | translate }}\n      </span>\n    }\n\n    <span class=\"input-group-btn\">\n      <button\n        class=\"btn btn-dot\"\n        [title]=\"title\"\n        type=\"button\"\n        [disabled]=\"disabled\"\n        (click)=\"onIconClick.emit({ icon, $event })\"\n        data-cy=\"typeahead-button\"\n      >\n        <i\n          class=\"text-primary\"\n          [c8yIcon]=\"icon\"\n        ></i>\n      </button>\n    </span>\n  </div>\n  <c8y-list-group\n    class=\"dropdown-menu dropdown-menu--modal\"\n    [style.width]=\"container === 'body' ? searchControl.clientWidth + 'px' : undefined\"\n    role=\"menu\"\n    data-cy=\"typeahead--dropdown-menu\"\n    *dropdownMenu\n  >\n    <ng-content select=\"div, c8y-li, c8y-list-item, button, a\"></ng-content>\n  </c8y-list-group>\n</div>\n","import { Injectable } from '@angular/core';\nimport { FeatureService, IFeatureToggle } from '@c8y/client';\nimport { BehaviorSubject, firstValueFrom, NEVER, Observable } from 'rxjs';\nimport { map, shareReplay, switchMap } from 'rxjs/operators';\nimport { AppStateService } from '../common';\n@Injectable({ providedIn: 'root' })\nexport class FeatureCacheService {\n  private refreshTrigger = new BehaviorSubject<void>(undefined);\n  private features$ = this.appState.currentUser.pipe(\n    switchMap(user => {\n      if (!user) {\n        return NEVER;\n      }\n      return this.refreshTrigger.pipe(switchMap(() => this.loadFeatures()));\n    }),\n    shareReplay(1)\n  );\n\n  constructor(\n    private featureService: FeatureService,\n    private appState: AppStateService\n  ) {}\n\n  /**\n   * Needed for the angularJS implmentation to show/hide some old features.\n   * Returns a promise\n   */\n  getFeatureStatePromise(key: string): Promise<boolean> {\n    return firstValueFrom(this.getFeatureState(key));\n  }\n\n  /**\n   *\n   * @param key - The feature key to check\n   * @returns true if the feature key exists in the list of features and it is no GA\n   */\n  featureExists(key: string): Observable<boolean> {\n    return this.features$.pipe(\n      map(features =>\n        features.some(feature => feature.key === key && feature.phase !== 'GENERALLY_AVAILABLE')\n      )\n    );\n  }\n\n  getFeatureState(key: string): Observable<boolean> {\n    return this.features$.pipe(\n      map(features => {\n        const feature = features.find(f => f.key === key);\n        return feature?.active || false;\n      })\n    );\n  }\n\n  resetFeatureState(): void {\n    this.refreshTrigger.next();\n  }\n\n  private async loadFeatures(): Promise<IFeatureToggle[]> {\n    try {\n      const response = await this.featureService.list({ pageSize: 1000 });\n      return response.data || [];\n    } catch (e) {\n      console.error('Error loading features:', e);\n      return [];\n    }\n  }\n}\n","import { Injector } from '@angular/core';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * The search is an icon that appears on the upper right corner\n * and opens a template or a search bar on click on it.\n * @deprecated Please don't use the search factory. It will be refactored soon.\n */\nexport interface Search {\n  /**\n   * The name of the search\n   * @deprecated Needed for upgrade only.\n   */\n  name?: string;\n  /**\n   * The icon for the search. Defaults to the search icon. (optional)\n   */\n  icon?: SupportedIconsSuggestions;\n  /**\n   * Ordering of the actions (high number first) (optional)\n   */\n  priority?: number;\n  /**\n   * Angular template used for Content Projection (optional)\n   */\n  template?: any;\n  /**\n   * The default search term. Defaults to an empty string (optional=)\n   */\n  term?: string;\n  /**\n   * Used to load the providers for the components. If not provided, default injector us used.\n   */\n  injector?: Injector;\n  /**\n   * A function triggers if the user performance a search.\n   * @param term The term used by the user.\n   */\n  onSearch(term);\n}\n\n/**\n * Factory to implement if used in a hook for Multi Provider extension.\n */\nexport type SearchFactory = ExtensionFactory<Search>;\n\n/**\n * Feature key for wildcard search.\n */\nexport const WILDCARD_SEARCH_FEATURE_KEY = 'ui.search.wildcard';\n","import { inject, Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService, QueriesUtil } from '@c8y/client';\nimport { catchError, firstValueFrom, of } from 'rxjs';\nimport { Pagination } from '../data-grid';\nimport { FeatureCacheService } from '../preview-feature/feature-cache.service';\nimport { WILDCARD_SEARCH_FEATURE_KEY } from './search.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class InventorySearchService {\n  protected DEFAULT_PAGE_SIZE = 50;\n  private inventoryService: InventoryService = inject(InventoryService);\n  private featureCacheService: FeatureCacheService = inject(FeatureCacheService);\n  private queriesUtil = new QueriesUtil();\n\n  async isWildcardSearchEnabled(): Promise<boolean> {\n    return firstValueFrom(\n      this.featureCacheService\n        .getFeatureState(WILDCARD_SEARCH_FEATURE_KEY)\n        .pipe(catchError(() => of(true)))\n    );\n  }\n\n  /**\n   * Returns the full-text search results.\n   *\n   * @param term The search term.\n   * @param pagination The currently used pagination.\n   */\n  async search(\n    term: string,\n    pagination: Pagination = { currentPage: 1, pageSize: this.DEFAULT_PAGE_SIZE }\n  ) {\n    const isWildcardSearchEnabled = await this.isWildcardSearchEnabled();\n    const searchFilterQuery = this.getDefaultSearchQuery();\n    if (isWildcardSearchEnabled) {\n      const query = this.queriesUtil.addAndFilter(searchFilterQuery, {\n        __or: {\n          name: `*${term.trim().replace(/\\s+/g, '*')}*`,\n          id: term.trim(),\n          'c8y_Hardware.serialNumber': `*${term.trim().replace(/\\s+/g, '*')}*`\n        }\n      });\n      return this.inventoryService.listQuery(query, {\n        withTotalPages: true,\n        pageSize: pagination.pageSize,\n        withChildren: false,\n        currentPage: pagination.currentPage || 1\n      });\n    }\n\n    return this.inventoryService.listQuery(searchFilterQuery, {\n      withTotalPages: true,\n      text: term,\n      pageSize: pagination.pageSize,\n      withChildren: false,\n      currentPage: pagination.currentPage || 1\n    });\n  }\n\n  /**\n   * Returns group search results by name.\n   *\n   * @param term The search term - name of group.\n   * @param pagination The currently used pagination.\n   */\n  async searchGroups(\n    term: string,\n    pagination: Pagination = { currentPage: 1, pageSize: this.DEFAULT_PAGE_SIZE }\n  ) {\n    const isWildcardSearchEnabled = await this.isWildcardSearchEnabled();\n    const searchFilterQuery = this.getGroupsSearchFilterQuery();\n    if (isWildcardSearchEnabled) {\n      const query = this.queriesUtil.addAndFilter(searchFilterQuery, {\n        __or: {\n          name: `*${term.trim().replace(/\\s+/g, '*')}*`,\n          id: term.trim(),\n          'c8y_Hardware.serialNumber': `*${term.trim().replace(/\\s+/g, '*')}*`\n        }\n      });\n\n      return this.inventoryService.listQuery(query, {\n        withTotalPages: true,\n        pageSize: pagination.pageSize,\n        withChildren: false,\n        currentPage: pagination.currentPage || 1\n      });\n    }\n\n    return this.inventoryService.listQuery(searchFilterQuery, {\n      withTotalPages: true,\n      text: term,\n      pageSize: pagination.pageSize,\n      withChildren: false,\n      currentPage: pagination.currentPage || 1\n    });\n  }\n\n  /**\n   * Will return only valid group assets and filter out\n   * none useful inventories (e.g. c8y_JsonSchema).\n   * @param data All managed objects that should be filtered.\n   */\n  filterOnlyGroups(data: IManagedObject[]): IManagedObject[] {\n    return data.filter(mo => mo.c8y_IsDeviceGroup || mo.c8y_IsDynamicGroup);\n  }\n\n  private getGroupsSearchFilterQuery() {\n    return {\n      __filter: {\n        __and: [\n          { __not: { __has: 'c8y_IsDynamicGroup.invisible' } },\n          {\n            __or: [{ __has: 'c8y_IsDeviceGroup' }, { __has: 'c8y_IsDynamicGroup' }]\n          }\n        ]\n      }\n    };\n  }\n\n  private getDefaultSearchQuery() {\n    return {\n      __filter: {\n        __or: [{ __has: 'c8y_IsDeviceGroup' }, { __has: 'c8y_IsDevice' }, { __has: 'c8y_IsAsset' }]\n      }\n    };\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { NgIf, NgClass } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * An icon to display on a list item. Use it with content projection.\n *\n * ```html\n * <c8y-li>\n *   <c8y-li-icon=\"rocket\"></c8y-li-icon>\n * </c8y-li>\n * ```\n */\n@Component({\n  selector: 'c8y-list-item-icon, c8y-li-icon',\n  templateUrl: './list-item-icon.component.html',\n  host: {\n    class: 'c8y-list__item__icon'\n  },\n  standalone: true,\n  imports: [NgIf, IconDirective, NgClass]\n})\nexport class ListItemIconComponent {\n  /**\n   * The icon name passed to the `c8yIcon` directive.\n   */\n  @Input()\n  icon: SupportedIconsSuggestions;\n\n  /**\n   * A status to change the color of the icon.\n   */\n  @Input()\n  status?:\n    | 'statusOk'\n    | 'statusUnknown'\n    | 'statusAlert'\n    | 'statusNok'\n    | 'status critical'\n    | 'status warning'\n    | 'status minor'\n    | 'status major';\n}\n","<i [c8yIcon]=\"icon\" [ngClass]=\"status\" *ngIf=\"icon\"></i>\n<ng-content></ng-content>","import { formatDate } from '@angular/common';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '../i18n/translate.service';\n// TODO remove  when c8y-icon will works\n\nexport enum SendStatus {\n  AVAILABLE = 'AVAILABLE',\n  UNAVAILABLE = 'UNAVAILABLE',\n  UNKNOWN = 'UNKNOWN',\n  MAINTENANCE = 'MAINTENANCE',\n  NOT_MONITORED = 'NOT_MONITORED'\n}\n\nexport enum PushStatus {\n  CONNECTED = 'CONNECTED',\n  DISCONNECTED = 'DISCONNECTED',\n  UNKNOWN = 'UNKNOWN',\n  MAINTENANCE = 'MAINTENANCE'\n}\n\nexport const SendStatusLabels = {\n  AVAILABLE: gettext('Send connection: online'),\n  NOT_MONITORED: gettext('Send connection: not monitored'),\n  UNAVAILABLE: gettext('Send connection: offline'),\n  UNKNOWN: gettext('Send connection status unknown'),\n  MAINTENANCE: gettext('Device is under maintenance')\n} as const;\n\nexport const PushStatusLabels = {\n  CONNECTED: gettext('Push connection: active'),\n  DISCONNECTED: gettext('Push connection: inactive'),\n  UNKNOWN: gettext('Push connection: inactive'),\n  MAINTENANCE: gettext('Device is under maintenance')\n} as const;\n\nexport const deviceAvailabilityIconMap = {\n  sendData: {\n    [SendStatus.AVAILABLE]: {\n      icon: 'long-arrow-right',\n      class: 'statusOk'\n    },\n    [SendStatus.UNAVAILABLE]: {\n      icon: 'long-arrow-right',\n      class: 'statusNok'\n    },\n    [SendStatus.UNKNOWN]: {\n      icon: 'long-arrow-right',\n      class: 'statusUnknown'\n    },\n    [SendStatus.NOT_MONITORED]: {\n      icon: 'long-arrow-right',\n      class: 'statusUnknown'\n    }\n  },\n  push: {\n    [PushStatus.CONNECTED]: {\n      icon: 'long-arrow-left',\n      class: 'statusOk'\n    },\n    [PushStatus.DISCONNECTED]: {\n      icon: 'long-arrow-left',\n      class: 'statusUnknown'\n    },\n    [PushStatus.UNKNOWN]: {\n      icon: 'long-arrow-left',\n      class: 'statusUnknown'\n    },\n    [PushStatus.MAINTENANCE]: {\n      icon: 'wrench',\n      class: 'statusAlert'\n    }\n  },\n  device: {\n    MAINTENANCE: {\n      icon: 'wrench',\n      class: 'statusAlert'\n    }\n  }\n};\n\nexport const tooltips = {\n  sendStatusConnected: (lastMessage, translateService) => {\n    const date = formatDate(\n      new Date(lastMessage),\n      'medium',\n      translateService.currentLang || TranslateService.defaultLang()\n    );\n    return translateService.instant(gettext('Device last request:\\n{{date}}'), { date });\n  },\n  sendStatusDisconnected: gettext('Connection not monitored'),\n  pushStatusConnected: gettext('Connection to device established'),\n  pushStatusDisconnected: gettext(\n    'Connection to device not established (not supported by device or no connectivity)'\n  ),\n  maintenance: gettext('Device is under maintenance')\n};\n","import { Component, Input, AfterContentInit, OnChanges } from '@angular/core';\nimport {\n  deviceAvailabilityIconMap,\n  PushStatusLabels,\n  SendStatusLabels,\n  tooltips\n} from './device-availability';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get } from 'lodash-es';\nimport { NgIf, NgClass } from '@angular/common';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'device-status, c8y-device-status',\n  templateUrl: './device-status.component.html',\n  standalone: true,\n  imports: [NgIf, TooltipModule, NgClass, C8yTranslatePipe]\n})\nexport class DeviceStatusComponent implements AfterContentInit, OnChanges {\n  @Input('mo') set node(value) {\n    this._mo = value.mo || value;\n  }\n\n  /**\n   * Max width of the svg icon in pixels.\n   */\n  @Input() size = 20;\n\n  private _mo;\n  private requiredAvailability;\n  private availabilityStatus;\n  private pushStatus;\n  private sendStatus;\n\n  constructor(private translateService: TranslateService) {}\n\n  get() {\n    return this._mo;\n  }\n\n  ngOnChanges() {\n    this.setStatusProperites();\n  }\n\n  ngAfterContentInit() {\n    this.setStatusProperites();\n  }\n\n  setStatusProperites() {\n    this.requiredAvailability = get(this._mo, 'c8y_RequiredAvailability');\n    this.availabilityStatus = get(this._mo, 'c8y_Availability.status');\n\n    this.pushStatus = get(this._mo, 'c8y_Connection.status') || 'UNKNOWN';\n    this.sendStatus =\n      this.availabilityStatus || (this.requiredAvailability ? 'UNKNOWN' : 'NOT_MONITORED');\n  }\n\n  status() {\n    let statuses;\n\n    if (this.availabilityStatus === 'MAINTENANCE' || this.pushStatus === 'MAINTENANCE') {\n      statuses = this.getMaintenanceStatus();\n    } else {\n      statuses = this.getSendPushStatus();\n    }\n\n    return statuses;\n  }\n\n  getMaintenanceStatus() {\n    return {\n      sendStatus: false,\n      pushStatus: false,\n      maintenanceStatus: {\n        icon: deviceAvailabilityIconMap.device.MAINTENANCE.icon,\n        class: deviceAvailabilityIconMap.device.MAINTENANCE.class,\n        tooltip: tooltips.maintenance\n      }\n    };\n  }\n\n  private getSendPushStatus() {\n    return {\n      sendStatus: {\n        icon: deviceAvailabilityIconMap.sendData[this.sendStatus].icon,\n        class: deviceAvailabilityIconMap.sendData[this.sendStatus].class,\n        status: this.sendStatus,\n        label: SendStatusLabels[this.sendStatus],\n        tooltip: this.getSendStatusTooltip(this._mo)\n      },\n      pushStatus: {\n        icon: deviceAvailabilityIconMap.push[this.pushStatus].icon,\n        class: deviceAvailabilityIconMap.push[this.pushStatus].class,\n        status: this.pushStatus,\n        label: PushStatusLabels[this.pushStatus],\n        tooltip: this.getPushStatusTooltip(this.pushStatus === 'CONNECTED')\n      },\n      maintenanceStatus: false\n    };\n  }\n\n  private getSendStatusTooltip(device) {\n    const availability = device && device.c8y_Availability;\n    const lastMessage = availability && availability.lastMessage;\n    if (lastMessage) {\n      return tooltips.sendStatusConnected(lastMessage, this.translateService);\n    }\n    return tooltips.sendStatusDisconnected;\n  }\n\n  private getPushStatusTooltip(isActive) {\n    return isActive ? tooltips.pushStatusConnected : tooltips.pushStatusDisconnected;\n  }\n}\n","@if (size < 32) {\n  <button\n    class=\"btn-clean p-0\"\n    style=\"max-width: {{ size }}px\"\n    [attr.aria-label]=\"'Connection status' | translate\"\n    tooltip=\"{{\n      !!status().maintenanceStatus\n        ? (status().maintenanceStatus.tooltip | translate)\n        : (status().sendStatus.tooltip | translate) +\n          '\\n' +\n          (status().pushStatus.tooltip | translate)\n    }}\"\n    placement=\"right\"\n    container=\"body\"\n    [adaptivePosition]=\"false\"\n    [delay]=\"500\"\n  >\n    <svg\n      style=\"max-width: {{ size }}px; min-width: 16px; pointer-events: none; padding: 0;\"\n      viewBox=\"0 0 90 90\"\n      fill=\"none\"\n    >\n      @if (!status().maintenanceStatus) {\n        <g>\n          <path\n            class=\"sendStatus\"\n            [ngClass]=\"status().sendStatus.class\"\n            d=\"M45 3C21.804 3 3 21.804 3 45H87C87 21.804 68.196 3 45 3Z\"\n          />\n          <path\n            fill-rule=\"evenodd\"\n            clip-rule=\"evenodd\"\n            d=\"M67.0952 27.4943C67.0952 27.27 66.9967 27.0702 66.8472 26.9215L57.2702 18.1929C57.0221 17.9922 56.6974 17.9439 56.3974 18.0679C56.0982 18.1929 55.9231 18.4674 55.9231 18.7903V24.3768H24.7981C24.3493 24.3768 24 24.7262 24 25.1749V29.9634C24 30.4121 24.3493 30.7614 24.7981 30.7614H55.9231V36.3471C55.9231 36.6718 56.1237 36.9463 56.3974 37.0713C56.6974 37.1953 57.0221 37.1451 57.2702 36.9208L66.8472 28.0927C66.9967 27.944 67.0952 27.7196 67.0952 27.4943Z\"\n            fill=\"var(--c8y-palette-high)\"\n          />\n        </g>\n        <g>\n          <path\n            class=\"pushStatus\"\n            d=\"M45 87C68.196 87 87 68.196 87 45L3 45C3 68.196 21.804 87 45 87Z\"\n            [ngClass]=\"status().pushStatus.class\"\n          />\n          <path\n            fill-rule=\"evenodd\"\n            clip-rule=\"evenodd\"\n            d=\"M23.9048 62.4943C23.9048 62.27 24.0033 62.0702 24.1528 61.9215L33.7298 53.1929C33.9779 52.9922 34.3026 52.9439 34.6026 53.0679C34.9018 53.1929 35.0769 53.4674 35.0769 53.7903V59.3768H66.2019C66.6507 59.3768 67 59.7262 67 60.1749V64.9634C67 65.4121 66.6507 65.7614 66.2019 65.7614H35.0769V71.3471C35.0769 71.6718 34.8763 71.9463 34.6026 72.0713C34.3026 72.1953 33.9779 72.1451 33.7298 71.9208L24.1528 63.0927C24.0033 62.944 23.9048 62.7196 23.9048 62.4943Z\"\n            fill=\"var(--c8y-palette-high)\"\n          />\n        </g>\n      }\n      @if (!!status().maintenanceStatus) {\n        <g>\n          <path\n            class=\"maintenanceStatus\"\n            d=\"M45.5 88C68.9721 88 88 68.9721 88 45.5C88 22.0279 68.9721 3 45.5 3C22.0279 3 3 22.0279 3 45.5C3 68.9721 22.0279 88 45.5 88Z\"\n            fill=\"var(--c8y-palette-status-warning)\"\n          />\n          <path\n            fill-rule=\"evenodd\"\n            clip-rule=\"evenodd\"\n            d=\"M66.7 32.6935C66.7 33.6665 66.346 34.8755 66.021 35.8195C64.163 41.0685 59.119 44.6975 53.544 44.6975C46.259 44.6975 40.33 38.7685 40.33 31.4835C40.33 24.1985 46.259 18.2695 53.544 18.2695C55.698 18.2695 58.499 18.9175 60.299 20.1275C60.593 20.3345 60.77 20.6005 60.77 20.9535C60.77 21.2785 60.563 21.6005 60.299 21.7795L51.656 26.7625V33.3685L57.349 36.5245C58.322 35.9635 65.165 31.6595 65.754 31.6595C66.346 31.6615 66.7 32.1035 66.7 32.6935ZM48 45.5225L27.886 65.6375C27.207 66.3165 26.234 66.7295 25.23 66.7295C24.228 66.7295 23.254 66.3165 22.546 65.6375L19.421 62.4515C18.713 61.7735 18.299 60.8005 18.299 59.7975C18.299 58.7955 18.712 57.8225 19.421 57.1125L39.506 37.0295C41.04 40.8935 44.137 43.9895 48 45.5225ZM29.006 57.9105C29.006 56.8785 28.151 56.0235 27.118 56.0235C26.085 56.0235 25.23 56.8775 25.23 57.9105C25.23 58.9435 26.085 59.7975 27.118 59.7975C28.15 59.7975 29.006 58.9425 29.006 57.9105Z\"\n            fill=\"var(--c8y-palette-high)\"\n          />\n        </g>\n      }\n\n      <path\n        d=\"M88 45C88 68.7482 68.7482 88 45 88C21.2518 88 2 68.7482 2 45C2 21.2518 21.2518 2 45 2C68.7482 2 88 21.2518 88 45Z\"\n        stroke=\"var(--c8y-root-component-border-color)\"\n        stroke-width=\"4\"\n        stroke-miterlimit=\"10\"\n      />\n    </svg>\n  </button>\n}\n@if (size >= 32) {\n  <svg\n    class=\"d-inline-block\"\n    style=\"max-width: {{ size }}px; min-width: 20px;\"\n    viewBox=\"0 0 90 90\"\n    fill=\"none\"\n  >\n    @if (!status().maintenanceStatus) {\n      <g\n        tooltip=\"{{ status().sendStatus.tooltip | translate }}\"\n        container=\"body\"\n        [delay]=\"500\"\n      >\n        <path\n          class=\"sendStatus\"\n          d=\"M45 3C21.804 3 3 21.804 3 45H87C87 21.804 68.196 3 45 3Z\"\n          [ngClass]=\"status().sendStatus.class\"\n        />\n        <path\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M67.0952 27.4943C67.0952 27.27 66.9967 27.0702 66.8472 26.9215L57.2702 18.1929C57.0221 17.9922 56.6974 17.9439 56.3974 18.0679C56.0982 18.1929 55.9231 18.4674 55.9231 18.7903V24.3768H24.7981C24.3493 24.3768 24 24.7262 24 25.1749V29.9634C24 30.4121 24.3493 30.7614 24.7981 30.7614H55.9231V36.3471C55.9231 36.6718 56.1237 36.9463 56.3974 37.0713C56.6974 37.1953 57.0221 37.1451 57.2702 36.9208L66.8472 28.0927C66.9967 27.944 67.0952 27.7196 67.0952 27.4943Z\"\n          fill=\"var(--c8y-palette-high)\"\n        />\n      </g>\n      <g\n        tooltip=\"{{ status().pushStatus.tooltip | translate }}\"\n        container=\"body\"\n        [delay]=\"500\"\n      >\n        <path\n          class=\"pushStatus\"\n          d=\"M45 87C68.196 87 87 68.196 87 45L3 45C3 68.196 21.804 87 45 87Z\"\n          [ngClass]=\"status().pushStatus.class\"\n        />\n        <path\n          style=\"pointer-events: none\"\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M23.9048 62.4943C23.9048 62.27 24.0033 62.0702 24.1528 61.9215L33.7298 53.1929C33.9779 52.9922 34.3026 52.9439 34.6026 53.0679C34.9018 53.1929 35.0769 53.4674 35.0769 53.7903V59.3768H66.2019C66.6507 59.3768 67 59.7262 67 60.1749V64.9634C67 65.4121 66.6507 65.7614 66.2019 65.7614H35.0769V71.3471C35.0769 71.6718 34.8763 71.9463 34.6026 72.0713C34.3026 72.1953 33.9779 72.1451 33.7298 71.9208L24.1528 63.0927C24.0033 62.944 23.9048 62.7196 23.9048 62.4943Z\"\n          fill=\"var(--c8y-palette-high)\"\n        />\n      </g>\n    }\n    @if (!!status().maintenanceStatus) {\n      <g\n        tooltip=\"{{ status().maintenanceStatus.tooltip | translate }}\"\n        container=\"body\"\n        [delay]=\"500\"\n      >\n        <path\n          d=\"M45.5 88C68.9721 88 88 68.9721 88 45.5C88 22.0279 68.9721 3 45.5 3C22.0279 3 3 22.0279 3 45.5C3 68.9721 22.0279 88 45.5 88Z\"\n          fill=\"var(--c8y-palette-status-warning)\"\n        />\n        <path\n          style=\"pointer-events: none\"\n          fill-rule=\"evenodd\"\n          clip-rule=\"evenodd\"\n          d=\"M69.7 35.6935C69.7 36.6665 69.346 37.8755 69.021 38.8195C67.163 44.0685 62.119 47.6975 56.544 47.6975C49.259 47.6975 43.33 41.7685 43.33 34.4835C43.33 27.1985 49.259 21.2695 56.544 21.2695C58.698 21.2695 61.499 21.9175 63.299 23.1275C63.593 23.3345 63.77 23.6005 63.77 23.9535C63.77 24.2785 63.563 24.6005 63.299 24.7795L54.656 29.7625V36.3685L60.349 39.5245C61.322 38.9635 68.165 34.6595 68.754 34.6595C69.346 34.6615 69.7 35.1035 69.7 35.6935ZM51 48.5225L30.886 68.6375C30.207 69.3165 29.234 69.7295 28.23 69.7295C27.228 69.7295 26.254 69.3165 25.546 68.6375L22.421 65.4515C21.713 64.7735 21.299 63.8005 21.299 62.7975C21.299 61.7955 21.712 60.8225 22.421 60.1125L42.506 40.0295C44.04 43.8935 47.137 46.9895 51 48.5225ZM32.006 60.9105C32.006 59.8785 31.151 59.0235 30.118 59.0235C29.085 59.0235 28.23 59.8775 28.23 60.9105C28.23 61.9435 29.085 62.7975 30.118 62.7975C31.15 62.7975 32.006 61.9425 32.006 60.9105Z\"\n          fill=\"var(--c8y-palette-high)\"\n        />\n      </g>\n    }\n\n    <path\n      d=\"M88 45C88 68.7482 68.7482 88 45 88C21.2518 88 2 68.7482 2 45C2 21.2518 21.2518 2 45 2C68.7482 2 88 21.2518 88 45Z\"\n      stroke=\"var(--c8y-root-component-border-color)\"\n      stroke-width=\"4\"\n      stroke-miterlimit=\"10\"\n    />\n  </svg>\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, Paging } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { defer, empty, merge, Observable, of, Subject, UnaryFunction } from 'rxjs';\nimport { switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { ManagedObjectType } from '../common/managed-object-type';\nimport { TypeaheadComponent } from '../select/typeahead.component';\nimport { InventorySearchService } from './inventory-search.service';\nimport { NgIf, NgTemplateOutlet, NgClass, NgFor, AsyncPipe } from '@angular/common';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { IconDirective } from '../common/icon.directive';\nimport { FormsModule } from '@angular/forms';\nimport { ListItemComponent } from '../list-group/list-item.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { ListItemIconComponent } from '../list-group/list-item-icon.component';\nimport { DeviceStatusComponent } from '../device-status/device-status.component';\nimport { ForOfDirective } from '../common/forOf.directive';\nimport { EmptyStateComponent } from '../common/empty-state/empty-state.component';\nimport { LoadingComponent } from '../common/loading.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { ShouldShowMoPipe } from '../common/should-show-mo.pipe';\nimport { GetGroupIconPipe } from '../common/get-group-icon.pipe';\n\n@Component({\n  selector: 'c8y-search-input',\n  templateUrl: './search-input.component.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    BsDropdownModule,\n    CdkTrapFocus,\n    IconDirective,\n    NgTemplateOutlet,\n    FormsModule,\n    NgClass,\n    TypeaheadComponent,\n    ListItemComponent,\n    C8yTranslateDirective,\n    NgFor,\n    ListItemIconComponent,\n    DeviceStatusComponent,\n    ForOfDirective,\n    EmptyStateComponent,\n    LoadingComponent,\n    C8yTranslatePipe,\n    AsyncPipe,\n    ShouldShowMoPipe,\n    GetGroupIconPipe\n  ]\n})\nexport class SearchInputComponent {\n  @Input()\n  mode: 'search' | 'select' | 'wildcardsearch' = 'search';\n\n  /**\n   * Unlocks the ability to place a custom template under the search input.\n   */\n  @Input() enableCustomTemplatePlaceholder = false;\n\n  /**\n   * A custom placeholder in the search bar.\n   */\n  @Input() customPlaceholder: string;\n\n  /**\n   * Event, which is used to set a new external term. Passing null will re-execute the query to BE.\n   * This allows new filters to be applied to the currently selected term.\n   */\n  @Input() externalTerm: EventEmitter<string>;\n  /**\n   * A custom query setter used to override the standard query. In order to obtain data.\n   */\n  @Input()\n  set customDataQuery(query: UnaryFunction<string, Observable<IResultList<IManagedObject>>>) {\n    if (query) {\n      this.customQuery = query;\n    }\n  }\n  @Input() container: '' | 'body' = '';\n\n  @Input() groupsOnly = false;\n\n  @Output()\n  filter = new EventEmitter<string>();\n\n  @Output()\n  search = new EventEmitter<string>();\n\n  @Output()\n  reset = new EventEmitter<IManagedObject>();\n\n  @Output()\n  onClick = new EventEmitter<IManagedObject>();\n\n  @Output()\n  onOpenToggle = new EventEmitter<boolean>();\n\n  deviceType: typeof ManagedObjectType = ManagedObjectType;\n  term = '';\n  defaultPlaceholder = gettext('Search for groups or assets…');\n  selected;\n\n  customQuery: (text: string) => Observable<IResultList<IManagedObject>>;\n  results$: Observable<IResultList<IManagedObject>>;\n  recentSearchResults: IManagedObject[] = [];\n  recentlyRegisteredResults$: Observable<IResultList<IManagedObject>>;\n  isLoading = false;\n  noMatch = false;\n\n  readonly RESET_TEXT = gettext('Clear search results');\n  readonly SEARCH_TEXT = gettext('Search');\n\n  private readonly RECENT_SEARCH_STORAGE_KEY = 'recent_search_view';\n  private readonly MAX_RECENT_SEARCH_RESULTS = 5;\n  private readonly DEFAULT_FILTER: object = {\n    withTotalPages: true,\n    pageSize: 5,\n    withChildren: false\n  };\n  private readonly KEYCODE_ENTER = 'Enter';\n  private readonly KEYCODE_ESC = 'Escape';\n  private onDestroy$ = new Subject<void>();\n\n  @ViewChild(TypeaheadComponent, { static: false })\n  private typeahead: TypeaheadComponent;\n\n  @ViewChild('searchDropdown', { static: false })\n  private dropdown: BsDropdownDirective;\n\n  constructor(\n    private router: Router,\n    private inventory: InventoryService,\n    private inventorySearchService: InventorySearchService,\n    private cd: ChangeDetectorRef\n  ) {}\n\n  async ngOnInit() {\n    const recentSearchIds = JSON.parse(localStorage.getItem(this.RECENT_SEARCH_STORAGE_KEY));\n    if (recentSearchIds && recentSearchIds.length > 0) {\n      const { data } = await this.inventory.list({ ids: recentSearchIds.join(',') });\n      this.recentSearchResults = this.groupsOnly\n        ? this.inventorySearchService.filterOnlyGroups(data)\n        : data;\n      this.recentlyRegisteredResults$ = defer(() =>\n        this.inventory.list({\n          q: '$orderby=creationTime desc',\n          ...this.DEFAULT_FILTER\n        })\n      );\n    }\n    if (this.mode === 'select') {\n      requestAnimationFrame(() => {\n        this.subscribeOnSearch();\n      });\n    }\n\n    if (this.externalTerm) {\n      this.externalTerm.pipe(takeUntil(this.onDestroy$)).subscribe(term => {\n        if (term === null) {\n          this.typeahead?.onSearch?.emit(this.term);\n          return;\n        }\n        this.typeahead?.onSearch?.emit(term);\n      });\n    }\n  }\n\n  @HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {\n    if (event.key === this.KEYCODE_ESC) {\n      this.hideDropdown();\n    }\n  }\n\n  onOpenChange(isOpen: boolean): void {\n    this.onOpenToggle.emit(isOpen);\n    if (isOpen) {\n      // needs to request an animation frame as\n      // otherwise the typeahead is undefined\n      requestAnimationFrame(() => {\n        this.subscribeOnSearch();\n        this.typeahead.dropdown.show();\n        this.typeahead.searchControl.nativeElement.focus();\n      });\n    }\n  }\n\n  open(event: Event, mo: IManagedObject, term?) {\n    event.stopPropagation();\n    const isAlreadyRecent = this.recentSearchResults.find(({ id }) => id === mo.id);\n    if (!isAlreadyRecent) {\n      this.recentSearchResults.unshift(mo);\n      this.recentSearchResults = this.recentSearchResults.slice(0, this.MAX_RECENT_SEARCH_RESULTS);\n    }\n    const recentSearchIds = this.recentSearchResults.map(({ id }) => id);\n    localStorage.setItem(this.RECENT_SEARCH_STORAGE_KEY, JSON.stringify(recentSearchIds));\n\n    if (term && this.mode !== 'wildcardsearch') {\n      this.term = term;\n      this.selected = mo;\n    }\n\n    this.onClick.emit(mo);\n    this.hideDropdown();\n  }\n\n  onReset(status: { icon: string; $event: MouseEvent }) {\n    status.$event.stopPropagation();\n    this.reset.emit(this.selected);\n    this.typeahead.onSearch.emit('');\n    this.selected = undefined;\n    this.typeahead.searchControl.nativeElement.focus();\n  }\n\n  keyDown(event: KeyboardEvent) {\n    if (event.key === this.KEYCODE_ENTER) {\n      // enter hit can be faster then typeahead debounce,\n      // therefore we take the term from the DOM element\n      // itself:\n      const searchTerm = (event.target as any).value;\n      this.onSearch(searchTerm);\n    }\n  }\n\n  onSearch(search: string) {\n    this.search.emit(search);\n    if (this.mode !== 'wildcardsearch') {\n      this.hideDropdown();\n    }\n  }\n\n  onFilter(search: string) {\n    this.filter.emit(search);\n    this.hideDropdown();\n  }\n\n  onOpenAssetTable() {\n    this.router.navigateByUrl('/assetsearch');\n    this.hideDropdown();\n  }\n\n  ngOnDestroy() {\n    if (this.onDestroy$) {\n      this.onDestroy$.next();\n      this.onDestroy$.complete();\n    }\n  }\n\n  private hideDropdown() {\n    if (this.dropdown) {\n      this.dropdown.hide();\n      return;\n    }\n\n    if (this.typeahead && this.typeahead.dropdown) {\n      this.typeahead.dropdown.hide();\n      return;\n    }\n  }\n\n  private subscribeOnSearch() {\n    if (!this.results$) {\n      this.results$ = this.typeahead.onSearch.pipe(\n        tap(term => this.onTypingStarted(term)),\n        switchMap(term => this.mergeRequest(term)),\n        tap(() => this.cd.detectChanges())\n      );\n    }\n  }\n\n  private mergeRequest(term: string): Observable<IResultList<IManagedObject>> {\n    return merge(\n      of({ data: [] } as IResultList<IManagedObject>),\n      this.handleQuery(term).pipe(tap(({ data, paging }) => this.onLoadingDone(data, paging)))\n    );\n  }\n\n  private handleQuery(term: string) {\n    if (!term) {\n      return empty();\n    }\n    if (this.customQuery) {\n      return defer(() => this.customQuery(term));\n    }\n    return defer(() =>\n      this.groupsOnly\n        ? this.inventorySearchService.searchGroups(term)\n        : this.inventorySearchService.search(term)\n    );\n  }\n\n  private onLoadingDone(data: IManagedObject[], paging: Paging<IManagedObject>) {\n    this.isLoading = false;\n    this.noMatch = paging && paging.nextPage === null && data.length === 0;\n  }\n\n  private onTypingStarted(term) {\n    this.noMatch = false;\n    this.term = term;\n    this.isLoading = term.length > 0;\n  }\n}\n","<div\n  class=\"dropdown\"\n  #searchDropdown=\"bs-dropdown\"\n  [insideClick]=\"true\"\n  (isOpenChange)=\"onOpenChange($event)\"\n  [cdkTrapFocus]=\"searchDropdown.isOpen\"\n  *ngIf=\"mode === 'search' || mode === 'wildcardsearch'\"\n  dropdown\n>\n  <button\n    class=\"main-header-button dropdown-toggle c8y-dropdown\"\n    [title]=\"'Search' | translate\"\n    type=\"button\"\n    dropdownToggle\n    data-cy=\"search-input--search-btn\"\n  >\n    <i\n      class=\"icon-2x\"\n      c8yIcon=\"search\"\n    ></i>\n  </button>\n\n  <div\n    class=\"search-header-menu dropdown-menu dropdown-menu-right\"\n    id=\"searchDropdown\"\n    *dropdownMenu\n  >\n    <ng-container *ngTemplateOutlet=\"form\"></ng-container>\n  </div>\n</div>\n\n<div\n  class=\"search-header-inline\"\n  *ngIf=\"mode === 'select'\"\n>\n  <ng-container *ngTemplateOutlet=\"form\"></ng-container>\n</div>\n<ng-template #form>\n  <form\n    [ngClass]=\"{ 'c8y-search-form': mode === 'search' || mode === 'wildcardsearch' }\"\n    novalidate\n    #searchForm=\"ngForm\"\n  >\n    <c8y-typeahead\n      (onIconClick)=\"onReset($event)\"\n      [icon]=\"term ? 'times' : 'search'\"\n      [title]=\"(term ? RESET_TEXT : SEARCH_TEXT) | translate\"\n      placeholder=\"{{ customPlaceholder ? customPlaceholder : defaultPlaceholder }}\"\n      name=\"selected\"\n      [(ngModel)]=\"selected\"\n      (keydown)=\"keyDown($event)\"\n      [allowFreeEntries]=\"false\"\n      [container]=\"container\"\n      [highlightFirstItem]=\"false\"\n      [ngClass]=\"{ 'input-group-search input-group-lg': mode !== 'select' }\"\n    >\n      <div *ngIf=\"enableCustomTemplatePlaceholder\">\n        <ng-content></ng-content>\n      </div>\n\n      <!-- filter buttons -->\n      <c8y-li\n        class=\"m-l-32 m-r-32\"\n        *ngIf=\"term.length !== 0 && mode === 'search'\"\n        [selectable]=\"false\"\n      >\n        <div class=\"d-flex\">\n          <p class=\"m-r-4 text-muted\">\n            <em translate>Searching by exact match. Click for other search options:</em>\n          </p>\n          <div class=\"btn-group btn-group-sm\">\n            <button\n              class=\"btn btn-default\"\n              title=\"{{ 'Starts with' | translate }}\"\n              type=\"button\"\n              data-cy=\"search-input--search-starts-with\"\n              (click)=\"onFilter(term + '*')\"\n            >\n              {{ 'Starts with' | translate }}\n            </button>\n            <button\n              class=\"btn btn-default\"\n              title=\"{{ 'Contains' | translate }}\"\n              type=\"button\"\n              data-cy=\"search-input--search-contains\"\n              (click)=\"onFilter('*' + term + '*')\"\n            >\n              {{ 'Contains' | translate }}\n            </button>\n            <button\n              class=\"btn btn-default\"\n              title=\"{{ 'Ends with' | translate }}\"\n              type=\"button\"\n              data-cy=\"search-input--search-ends-with\"\n              (click)=\"onFilter('*' + term)\"\n            >\n              {{ 'Ends with' | translate }}\n            </button>\n          </div>\n        </div>\n      </c8y-li>\n\n      <!-- Recent search -->\n      <c8y-li\n        class=\"m-l-32 m-r-32\"\n        *ngIf=\"term.length === 0 && recentSearchResults.length > 0\"\n        [selectable]=\"false\"\n      >\n        <div class=\"legend\">\n          <span\n            class=\"text-bold text-muted\"\n            translate\n          >\n            Recent search views\n          </span>\n        </div>\n      </c8y-li>\n      <c8y-li\n        class=\"c8y-list__item--link m-l-32 m-r-32\"\n        *ngFor=\"let result of term.length === 0 ? recentSearchResults : []\"\n        (click)=\"open($event, result, result.name)\"\n      >\n        <c8y-li-icon>\n          <ng-container *ngIf=\"result | shouldShowMo: deviceType.DEVICE; else group\">\n            <device-status [mo]=\"result\"></device-status>\n          </ng-container>\n          <ng-template #group>\n            <i\n              class=\"c8y-icon-duocolor\"\n              [c8yIcon]=\"result | getGroupIcon | async\"\n            ></i>\n          </ng-template>\n        </c8y-li-icon>\n        {{ result.name || '--' }}\n      </c8y-li>\n\n      <!-- Recently registered devices -->\n      <c8y-li\n        class=\"m-l-32 m-r-32\"\n        *ngIf=\"\n          term.length === 0 && (recentlyRegisteredResults$ | async)?.data?.length > 0 && !groupsOnly\n        \"\n        [selectable]=\"false\"\n      >\n        <div class=\"legend\">\n          <span\n            class=\"text-bold text-muted\"\n            translate\n          >\n            Recently registered devices\n          </span>\n        </div>\n      </c8y-li>\n      <c8y-li\n        class=\"c8y-list__item--link m-l-32 m-r-32\"\n        *c8yFor=\"\n          let result of term.length === 0 && !groupsOnly\n            ? recentlyRegisteredResults$\n            : { data: [] };\n          loadMore: 'none'\n        \"\n        (click)=\"open($event, result, result.name)\"\n      >\n        <c8y-li-icon>\n          <ng-container *ngIf=\"result | shouldShowMo: deviceType.DEVICE; else group\">\n            <device-status [mo]=\"result\"></device-status>\n          </ng-container>\n          <ng-template #group>\n            <i\n              class=\"c8y-icon-duocolor\"\n              [c8yIcon]=\"result | getGroupIcon | async\"\n            ></i>\n          </ng-template>\n        </c8y-li-icon>\n        {{ result.name || '--' }}\n      </c8y-li>\n\n      <!-- Search results -->\n      <c8y-li\n        class=\"m-l-32 m-r-32\"\n        *ngIf=\"term.length !== 0\"\n        [selectable]=\"false\"\n      >\n        <div class=\"legend\">\n          <span\n            class=\"text-bold text-muted\"\n            translate\n          >\n            Search results\n          </span>\n        </div>\n      </c8y-li>\n      <c8y-li\n        class=\"c8y-list__item--link m-l-32 m-r-32\"\n        [title]=\"result.name\"\n        *c8yFor=\"\n          let result of results$;\n          loadMore: 'auto';\n          notFound: notFoundTemplate;\n          loadingTemplate: loading;\n          loadNextLabel: 'Find more…'\n        \"\n        (click)=\"open($event, result, result.name)\"\n        data-cy=\"search-input--search-results\"\n      >\n        <c8y-li-icon>\n          <ng-container *ngIf=\"result | shouldShowMo: deviceType.DEVICE; else group\">\n            <device-status [mo]=\"result\"></device-status>\n          </ng-container>\n          <ng-template #group>\n            <i\n              class=\"c8y-icon-duocolor\"\n              [c8yIcon]=\"result | getGroupIcon | async\"\n            ></i>\n          </ng-template>\n        </c8y-li-icon>\n        {{ result.name || '--' }}\n      </c8y-li>\n\n      <!-- No search results found entry -->\n      <ng-template #notFoundTemplate>\n        <c8y-ui-empty-state\n          [icon]=\"'search'\"\n          [title]=\"'No match found.' | translate\"\n          data-cy=\"search-input--empty-state\"\n          [ngClass]=\"{ 'p-4': mode === 'search' || mode === 'wildcardsearch' }\"\n          [horizontal]=\"true\"\n          *ngIf=\"noMatch\"\n        >\n          <small\n            translate\n            *ngIf=\"mode === 'search'\"\n          >\n            Try to filter or open the asset grid to show all devices and groups.\n          </small>\n          <small\n            translate\n            *ngIf=\"mode === 'select' || mode === 'wildcardsearch'\"\n          >\n            Try to rephrase your search word.\n          </small>\n        </c8y-ui-empty-state>\n      </ng-template>\n\n      <!-- loading bar first entries -->\n      <c8y-li *ngIf=\"isLoading\">\n        <c8y-loading></c8y-loading>\n      </c8y-li>\n\n      <!-- loading bar for loading more entries (inventory roles) -->\n      <ng-template #loading>\n        <c8y-li>\n          <c8y-loading></c8y-loading>\n        </c8y-li>\n      </ng-template>\n\n      <!-- more filter possibilities -->\n      <c8y-li\n        class=\"m-t-24 bg-level-2 p-t-16 p-b-16 p-l-24 p-r-24 sticky-bottom\"\n        [selectable]=\"false\"\n        *ngIf=\"mode === 'search' || mode === 'wildcardsearch'\"\n      >\n        <div class=\"d-flex a-i-center\">\n          <i\n            class=\"text-info m-r-4\"\n            c8yIcon=\"info-circle\"\n          ></i>\n          <p\n            class=\"m-r-8\"\n            translate\n          >\n            Need more filter possibilities?\n          </p>\n          <button\n            class=\"m-l-16 btn btn-default btn-sm\"\n            title=\"{{ 'Go to the asset data table' | translate }}\"\n            type=\"button\"\n            (mousedown)=\"onOpenAssetTable()\"\n            data-cy=\"search-input--asset-table-btn\"\n          >\n            {{ 'Go to the asset data table' | translate }}\n          </button>\n        </div>\n      </c8y-li>\n    </c8y-typeahead>\n  </form>\n</ng-template>\n","import { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  ContentChildren,\n  OnInit,\n  inject\n} from '@angular/core';\nimport { ListItemComponent } from '../list-group/list-item.component';\nimport { Item, selectedFunction, selectedLabelFunction } from './select.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { PropertyValueTransformService } from '../i18n';\nimport { DropdownDirectionDirective } from '../common/dropdown-direction.directive';\nimport { NgIf, NgFor } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { FormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { NameTransformPipe } from '../i18n/name-transform.pipe';\n\n@Component({\n  selector: 'c8y-select-legacy',\n  templateUrl: './select-legacy.component.html',\n  standalone: true,\n  imports: [\n    BsDropdownModule,\n    DropdownDirectionDirective,\n    NgIf,\n    NgFor,\n    IconDirective,\n    FormsModule,\n    C8yTranslatePipe,\n    NameTransformPipe\n  ]\n})\nexport class SelectLegacyComponent implements OnChanges, OnInit {\n  @Input() placeholder: string = gettext('Select item');\n  @Input() selectedLabel: string | selectedLabelFunction;\n  @Input() applyLabel: string = gettext('Apply');\n  @Input() items: Item[];\n\n  @Input()\n  set selected(value: Item[] | selectedFunction) {\n    this._selected = value || [];\n  }\n  get selected(): Item[] | selectedFunction {\n    return this._selected;\n  }\n\n  @Input() updateItems: EventEmitter<boolean>;\n  @Input() disableApplyOnNoSelection = false;\n  @Input() addDropdownContainerToBody = false;\n  @Output() onChange: EventEmitter<Item[]> = new EventEmitter();\n  @ViewChild(BsDropdownDirective, { static: false }) dropdown: BsDropdownDirective;\n  @ContentChildren(ListItemComponent) liChildren;\n  textFilter = '';\n  labelText = '';\n  isOpen = false;\n  filteredItems: Item[] = [];\n  searchFilter = null;\n  readonly sizeToShowFilter: number = 5;\n  labelsForSelectAll: any = {\n    all: gettext('All'),\n    allFiltered: gettext('All filtered'),\n    none: gettext('Select filter…')\n  };\n  showAllLabel = false;\n  itemsSelected: Set<Item> = new Set();\n  private stopClicks = false;\n  private propertyValueTransformService = inject(PropertyValueTransformService);\n  private translateService = inject(TranslateService);\n  private _selected: Item[] | selectedFunction;\n\n  @HostListener('click', ['$event'])\n  preventClick(evt) {\n    if (this.stopClicks) {\n      evt.stopPropagation();\n    }\n    this.stopClicks = this.isOpen;\n  }\n\n  isOpenChange(isOpen: boolean) {\n    this.isOpen = isOpen;\n    if (isOpen) {\n      this.updateSelected();\n      this.searchFilter = null;\n    } else {\n      this.stopClicks = false;\n    }\n  }\n\n  outterSelected(item: Item) {\n    const { selected } = this;\n    let isSelected: any = () => false;\n    if (typeof selected === 'function') {\n      isSelected = selected;\n    } else if (Array.isArray(selected)) {\n      isSelected = (i: Item) => selected.indexOf(i) > -1;\n    }\n    return isSelected(item);\n  }\n\n  isSelected(item: Item) {\n    return this.itemsSelected.has(item);\n  }\n\n  isAllItemsSelected() {\n    return this.itemsSelected.size === this.items.length;\n  }\n\n  isAllFilteredSelected() {\n    return this.itemsSelected.size === this.filteredItems.length;\n  }\n\n  isNoItemSelected() {\n    return !this.itemsSelected.size;\n  }\n\n  applyChanges() {\n    const selected = Array.from(this.itemsSelected.values());\n    this.onChange.emit(selected);\n    this.dropdown.hide();\n  }\n\n  selectAll(checked: boolean) {\n    this.itemsSelected.clear();\n    this.filteredItems.forEach(item => this.onChangeItem(checked, item));\n  }\n\n  ngOnInit() {\n    if (this.updateItems) {\n      this.updateItems.subscribe(() => {\n        this.updateSelected();\n        this.updateLabel();\n        this.showAllLabel = this.isAllItemsSelected();\n      });\n    }\n  }\n\n  onChangeItem(checked: boolean, item: Item) {\n    if (checked) {\n      this.itemsSelected.add(item);\n    } else {\n      this.itemsSelected.delete(item);\n    }\n  }\n\n  deselectItem(item: Item) {\n    this.itemsSelected.delete(item);\n    const selected = Array.from(this.itemsSelected.values());\n    this.onChange.emit(selected);\n  }\n\n  updateFiltered(term: string) {\n    if (term) {\n      const search = new RegExp(term, 'i');\n      this.filteredItems = this.items.filter(({ name }) => search.test(name));\n    } else {\n      this.filteredItems = this.items;\n    }\n  }\n\n  getSelectAllToggleStatus() {\n    const label = this.getLabel();\n    const checked = this.isAllSelected();\n    const indeterminate = !checked && this.itemsSelected.size > 0;\n\n    return { label, checked, indeterminate };\n  }\n  ngOnChanges(changes: SimpleChanges) {\n    if (this.isOpen) {\n      return;\n    }\n    if (changes.items || changes.selected || changes.applyLabel) {\n      this.updateSelected();\n      this.updateLabel();\n      this.showAllLabel = this.isAllItemsSelected();\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.updateItems && !this.updateItems.closed) {\n      this.updateItems.unsubscribe();\n    }\n  }\n\n  private updateLabel() {\n    const outterSelected = this.items.filter(i => this.outterSelected(i));\n    if (typeof this.selectedLabel === 'string') {\n      const itemName = this.propertyValueTransformService.getName({ name: this.selectedLabel });\n      this.labelText = itemName && this.translateService.instant(itemName);\n    } else if (typeof this.selectedLabel === 'function') {\n      const itemName = this.propertyValueTransformService.getName({\n        name: this.selectedLabel(outterSelected)\n      });\n      this.labelText = itemName && this.translateService.instant(itemName);\n    } else {\n      this.labelText = outterSelected\n        .map(({ name }) => {\n          const itemName = this.propertyValueTransformService.getName({ name });\n          return itemName && this.translateService.instant(itemName);\n        })\n        .join(', ');\n    }\n  }\n\n  private updateSelected() {\n    const { itemsSelected, items } = this;\n    itemsSelected.clear();\n    items.forEach(item => {\n      if (this.outterSelected(item)) {\n        itemsSelected.add(item);\n      }\n    });\n    this.filteredItems = items;\n  }\n\n  private isAllSelected() {\n    if (this.getLabel() === this.labelsForSelectAll.allFiltered) {\n      return this.isAllFilteredSelected();\n    } else {\n      return this.isAllItemsSelected();\n    }\n  }\n\n  private getLabel() {\n    return this.searchFilter ? this.labelsForSelectAll.allFiltered : this.labelsForSelectAll.all;\n  }\n}\n","<div\n  class=\"dropdown fit-w\"\n  container=\"{{ addDropdownContainerToBody ? 'body' : null }}\"\n  (isOpenChange)=\"isOpenChange($event)\"\n  dropdown\n  #dropdown=\"bs-dropdown\"\n  c8yDropdownDirection\n  px-event=\"Select type\"\n  [insideClick]=\"true\"\n>\n  <div class=\"input-group dropdown-toggle\">\n    <div\n      class=\"form-control pointer d-flex inner-scroll\"\n      (click)=\"dropdown.isOpen = !dropdown.isOpen\"\n    >\n      <ng-container *ngIf=\"itemsSelected.size !== items.length; else all\">\n        <em\n          class=\"text-muted\"\n          *ngIf=\"itemsSelected.size === 0\"\n        >\n          {{ placeholder | translate }}\n        </em>\n        <span\n          class=\"tag tag--info chip\"\n          *ngFor=\"let selectedItem of itemsSelected\"\n        >\n          <button\n            class=\"btn btn-xs btn-clean text-10\"\n            title=\"{{ 'Remove' | translate }}\"\n            type=\"button\"\n            (click)=\"deselectItem(selectedItem); $event.stopPropagation()\"\n          >\n            <i [c8yIcon]=\"'times'\"></i>\n          </button>\n          {{ selectedItem.name | nameTransform | translate }}\n        </span>\n      </ng-container>\n      <ng-template #all>\n        {{ 'All`possible options`' | translate }}\n      </ng-template>\n    </div>\n    <div class=\"input-group-btn\">\n      <button\n        class=\"btn btn-default d-flex a-i-center w-auto\"\n        title=\"{{ labelText || placeholder | translate }}\"\n        aria-haspopup=\"true\"\n        dropdownToggle\n      >\n        <i class=\"c8y-glyph-caret icon-16\"></i>\n      </button>\n    </div>\n  </div>\n\n  <ul\n    class=\"dropdown-menu multiselect-container\"\n    *dropdownMenu\n  >\n    <ng-content select=\"c8y-li\"></ng-content>\n    <ng-container *ngIf=\"liChildren.length === 0\">\n      <li\n        class=\"multiselect-item sticky-top\"\n        *ngIf=\"items.length > sizeToShowFilter\"\n      >\n        <div class=\"input-group input-group-search\">\n          <input\n            class=\"form-control\"\n            placeholder=\"{{ 'Filter' | translate }}…\"\n            type=\"search\"\n            (keyup)=\"updateFiltered($event.target.value)\"\n            [(ngModel)]=\"searchFilter\"\n          />\n          <span class=\"input-group-addon\">\n            <i\n              c8yIcon=\"search\"\n              *ngIf=\"!textFilter\"\n            ></i>\n            <i\n              class=\"text-muted\"\n              c8yIcon=\"times\"\n              *ngIf=\"textFilter\"\n              (click)=\"textFilter = ''\"\n            ></i>\n          </span>\n        </div>\n      </li>\n\n      <li class=\"multiselect-item\">\n        <label\n          class=\"c8y-checkbox input-sm\"\n          [title]=\"getSelectAllToggleStatus().label | translate\"\n          ng-click=\"vm.toggleSelectAll(); $event.preventDefault()\"\n        >\n          <input\n            class=\"m-t-0\"\n            type=\"checkbox\"\n            [checked]=\"getSelectAllToggleStatus().checked\"\n            (change)=\"selectAll($event.target.checked)\"\n            [indeterminate]=\"getSelectAllToggleStatus().indeterminate\"\n          />\n          <span></span>\n          <span class=\"label-text\">\n            {{ getSelectAllToggleStatus().label | translate }}\n          </span>\n        </label>\n      </li>\n\n      <li\n        class=\"multiselect-item\"\n        *ngFor=\"let item of filteredItems\"\n      >\n        <label\n          class=\"c8y-checkbox d-flex a-i-center\"\n          [title]=\"item.name | nameTransform | translate\"\n        >\n          <input\n            type=\"checkbox\"\n            [checked]=\"isSelected(item)\"\n            (change)=\"onChangeItem($event.target.checked, item)\"\n          />\n          <span></span>\n          <span class=\"m-l-8\">{{ item.name | nameTransform | translate }}</span>\n        </label>\n      </li>\n      <li class=\"divider\"></li>\n      <li class=\"sticky-bottom bg-level-0\">\n        <button\n          class=\"btn btn-primary btn-block\"\n          title=\"{{ applyLabel | translate }}\"\n          [disabled]=\"disableApplyOnNoSelection && isNoItemSelected()\"\n          (click)=\"applyChanges()\"\n        >\n          {{ applyLabel | translate }}\n        </button>\n      </li>\n    </ng-container>\n  </ul>\n</div>\n","import { Component, Input } from '@angular/core';\nimport { NgIf } from '@angular/common';\n\n/**\n * The li-body component can be used to define the body.\n * Usually it doesn't need to be used, as it is the default\n * content projected to a <c8y-li>.\n */\n@Component({\n  selector: 'c8y-list-item-body, c8y-li-body',\n  templateUrl: './list-item-body.component.html',\n  standalone: true,\n  imports: [NgIf]\n})\nexport class ListItemBodyComponent {\n  /**\n   * An optional string content.\n   */\n  @Input()\n  body: string;\n}\n","<span *ngIf=\"body\">{{body}}</span>\n<ng-content></ng-content>\n","import { Output, EventEmitter, Component, Input, SimpleChanges, forwardRef } from '@angular/core';\nimport { CheckboxControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ElementRef, Renderer2 } from '@angular/core';\nimport { NgClass } from '@angular/common';\n\n/**\n * A component to display checkboxes in a c8y-li. Use it with content projection. It\n * can be used standalone or with an ngModel.\n *\n * ```html\n * <c8y-li>\n *   <c8y-li-checkbox></c8y-li-checkbox>\n * </c8y-li>\n * ```\n */\n@Component({\n  selector: 'c8y-list-item-checkbox, c8y-li-checkbox',\n  templateUrl: './list-item-checkbox.component.html',\n  host: {\n    class: 'c8y-list__item__check'\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => ListItemCheckboxComponent)\n    }\n  ],\n  standalone: true,\n  imports: [NgClass]\n})\nexport class ListItemCheckboxComponent extends CheckboxControlValueAccessor {\n  /**\n   * Indicates if the checkbox is selected.\n   */\n  @Input()\n  selected = false;\n  /**\n   * Sets the checkbox into the indeterminate state.\n   */\n  @Input()\n  indeterminate?: boolean;\n  /**\n   * Indicates if the checkbox is disabled.\n   */\n  @Input()\n  disabled = false;\n  /**\n   * An event emitted as soon as the checkbox is selected.\n   */\n  @Output()\n  onSelect = new EventEmitter<boolean>();\n\n  /**\n   * Allows to display the chceckbox as a switch\n   */\n  @Input() displayAsSwitch = false;\n\n  constructor(\n    private renderer: Renderer2,\n    private elementRef: ElementRef\n  ) {\n    super(renderer, elementRef);\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.selected && !changes.selected.firstChange) {\n      this.onSelect.emit(changes.selected.currentValue);\n    }\n  }\n\n  /**\n   * Selects the checkbox.\n   * @param value The value to pass.\n   */\n  select(value) {\n    this.onSelect.emit(value);\n    this.onChange(value);\n    this.selected = value;\n  }\n\n  // default implementation (https://github.com/angular/angular/blob/main/packages/forms/src/directives/checkbox_value_accessor.ts#L54) not sufficient.\n  // get overruled by our binding on checked..\n  writeValue(value: boolean): void {\n    this.selected = value;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n}\n","<label [ngClass]=\"displayAsSwitch ? 'c8y-switch c8y-switch--inline' : 'c8y-checkbox'\">\n  <input\n    type=\"checkbox\"\n    class=\"form-control\"\n    [disabled]=\"disabled\"\n    [checked]=\"selected\"\n    (change)=\"select($event.target.checked); (false)\"\n    [indeterminate]=\"indeterminate\"\n  />\n  <span></span>\n  <span class=\"sr-only\">event</span>\n</label>\n<ng-content></ng-content>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'c8y-list-item-drag-handle, c8y-li-drag-handle',\n  template: `<ng-content></ng-content>`,\n  standalone: true\n})\nexport class ListItemDragHandleComponent {}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  SimpleChanges,\n  ViewChild,\n  forwardRef\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\n\n/**\n * A component to display a radio button in a c8y-li. Use it with content projection. It\n * can be used standalone or with an ngModel.\n *\n * ```html\n * <c8y-li>\n *   <c8y-li-radio></c8y-li-radio>\n * </c8y-li>\n * ```\n */\n@Component({\n  selector: 'c8y-list-item-radio, c8y-li-radio',\n  templateUrl: './list-item-radio.component.html',\n  host: {\n    class: 'c8y-list__item__radio'\n  },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => ListItemRadioComponent)\n    }\n  ],\n  standalone: true,\n  imports: [C8yTranslateDirective]\n})\nexport class ListItemRadioComponent implements ControlValueAccessor {\n  /**\n   * @ignore\n   */\n  @ViewChild('radio', { static: true }) radio: ElementRef;\n  /**\n   * Indicates if the radio is selected.\n   */\n  @Input()\n  selected = false;\n  /**\n   * The name of the radio (use different names for different radio groups).\n   */\n  @Input()\n  name = 'list_item_radio';\n  /**\n   * Indicates if the radio is disabled.\n   */\n  @Input()\n  disabled = false;\n  /**\n   * An event emitted as soon as the radio is selected.\n   */\n  @Output()\n  onSelect = new EventEmitter<boolean>();\n  /**\n   * The current value.\n   */\n  @Input() value: any;\n  /**\n   * @ignore\n   */\n  model: any;\n  /**\n   * @ignore\n   */\n  onChange: (value: any) => void;\n  /**\n   * @ignore\n   */\n  onTouched: () => void;\n\n  /**\n   * Resets the native radio element.\n   */\n  reset() {\n    this.radio.nativeElement.checked = false;\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.selected && !changes.selected.firstChange) {\n      this.onSelect.emit(changes.selected.currentValue);\n    }\n  }\n\n  /**\n   * Triggered when the radio is changed.\n   * @param checked Should it be checked or not?\n   */\n  change(checked) {\n    this.onSelect.emit(checked);\n    this.model = this.value;\n    if (this.onChange) {\n      this.onChange(this.model);\n    }\n    if (this.onTouched) {\n      this.onTouched();\n    }\n  }\n\n  /**\n   * Registers an onChange event.\n   */\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  /**\n   * Registers an onTouch event.\n   */\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * @ignore\n   */\n  writeValue(value: boolean): void {\n    this.model = value;\n  }\n}\n","<label class=\"c8y-radio\">\n  <input\n    #radio\n    id=\"event\"\n    type=\"radio\"\n    [name]=\"name\"\n    [checked]=\"selected\"\n    (change)=\"change($event.target.checked); (false)\"\n    [disabled]=\"disabled\"\n  />\n  <span></span>\n  <span for=\"event\" class=\"sr-only\" translate>event</span>\n</label>\n<ng-content></ng-content>\n","import { NgModule } from '@angular/core';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CommonModule } from '../common/common.module';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { ListGroupComponent } from './list-group.component';\nimport { ListItemActionComponent } from './list-item-action.component';\nimport { ListItemBodyComponent } from './list-item-body.component';\nimport { ListItemCheckboxComponent } from './list-item-checkbox.component';\nimport { ListItemCollapseComponent } from './list-item-collapse.component';\nimport { ListItemDragHandleComponent } from './list-item-drag-handle.component';\nimport { ListItemFooterComponent } from './list-item-footer.component';\nimport { ListItemIconComponent } from './list-item-icon.component';\nimport { ListItemRadioComponent } from './list-item-radio.component';\nimport { ListItemTimelineComponent } from './list-item-timeline.component';\nimport { ListItemComponent } from './list-item.component';\n\n/**\n * The list-group module allows you to compose different styles\n * of lists used in Cumulocity IoT. They can consist of plain\n * text, actions, icons and more.\n *\n * ```html\n * <c8y-list-group>\n *   <c8y-li>Item 1<c8y-li>\n *   <c8y-li>Item 2<c8y-li>\n * </c8y-list-group>\n * ```\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    CollapseModule.forRoot(),\n    BsDropdownModule,\n    A11yModule,\n    ListGroupComponent,\n    ListItemComponent,\n    ListItemIconComponent,\n    ListItemBodyComponent,\n    ListItemFooterComponent,\n    ListItemActionComponent,\n    ListItemCollapseComponent,\n    ListItemCheckboxComponent,\n    ListItemRadioComponent,\n    ListItemTimelineComponent,\n    ListItemDragHandleComponent\n  ],\n  exports: [\n    ListGroupComponent,\n    ListItemComponent,\n    ListItemIconComponent,\n    ListItemBodyComponent,\n    ListItemFooterComponent,\n    ListItemActionComponent,\n    ListItemCollapseComponent,\n    ListItemCheckboxComponent,\n    ListItemRadioComponent,\n    ListItemTimelineComponent,\n    ListItemDragHandleComponent\n  ]\n})\nexport class ListGroupModule {}\n","// tslint:disable: max-line-length\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport interface ValidationRules {\n  pattern?: RegExp;\n  message?: string;\n  maxLength?: number;\n  minLength?: number;\n}\n\nexport enum DatapointLibraryValidationErrors {\n  IS_REQUIRED = 'required',\n  PATTERN = 'pattern',\n  SHOULD_CONTAIN_NUMBER = 'number',\n  SHOULD_BE_DEFINED = 'should-be-defined',\n  GREATER_THAN_SCALE_MAX = 'greater-than-scale-max',\n  LESS_THAN_SCALE_MIN = 'less-than-scale-min',\n  GREATER_THAN_RANGE_MAX = 'greater-than-range-max',\n  LESS_THAN_RANGE_MIN = 'less-than-range-min',\n  MIN_ACTIVE_COUNT = 'minActiveCount',\n  MAX_ACTIVE_COUNT = 'maxActiveCount'\n}\n\n// @dynamic\nexport class ValidationPattern {\n  static readonly messages = {\n    deviceId: gettext('Device ID must not contain spaces or slashes (\"/\").'),\n    domain: gettext(\n      'Only lowercase letters, digits and hyphens allowed in the first part of the URI. ' +\n        'Must start with a letter; hyphens only allowed in the middle. Must be a valid URI.'\n    ),\n    email: gettext('Invalid email address.'),\n    emails: gettext('Invalid email addresses.'),\n    internationalPhoneNumber: gettext(\n      'Must be a valid phone number (only digits, spaces, slashes (\"/\"), dashes (\"-\"), and plus (\"+\") allowed, for example: +49 9 876 543 210).'\n    ),\n    loginAlias: gettext(\n      'Login alias must not contain slashes (\"/\", \"\\\\\") nor (\"+\"), (\":\"), (\"$\") signs.'\n    ),\n    invalidColor: gettext('Invalid color \"{{ currentValue }}\".'),\n    max: gettext('Max value: {{ max }}'),\n    min: gettext('Min value: {{ min }}'),\n    minLength: gettext('Should have at least {{ minLength }} characters.'),\n    minlength: gettext('Should have at least {{ requiredLength }} characters.'),\n    maxLength: gettext('Should have at most {{ maxLength }} characters.'),\n    maxlength: gettext('Should have at most {{ requiredLength }} characters.'),\n    pattern: gettext('Does not match pattern {{ requiredPattern }}.'),\n    opcuaBrowsePath: gettext('Invalid OPC UA URI.'),\n    password: gettext(\n      'Password must have at least {{ minLength }} characters and no more than {{ maxLength }} and can only contain letters, numbers and following symbols: {{ allowedCharactersList }}'\n    ),\n    passwordSimple: gettext(\n      'Password must have at least {{ minLength }} characters and no more than {{ maxLength }}.'\n    ),\n    passwordConfirm: gettext('Passwords do not match.'),\n    passwordStrength: gettext('Password is not strong enough, use a stronger password.'),\n    passwordStrengthChecklist: gettext(\n      'Password is not strong enough, use a stronger password. Check the requirements listed on the right.'\n    ),\n    required: gettext('This field is required.'),\n    tenantId: gettext(\n      'May contain lowercase letters, digits, and hyphens. ' +\n        'Must start with a letter; hyphens only allowed in the middle; minimum 2 characters.'\n    ),\n    urlSegment: gettext('Slash, single or double dots and white space not allowed.'),\n    user: gettext(\n      'Username must not contain spaces nor slashes (\"/\", \"\\\\\") nor (\"+\"), (\":\"), (\"$\") signs.'\n    ),\n    httpUrl: gettext('Must be a valid HTTP(S) URL.'),\n    colonedHexNumber: gettext(\n      'Must be a valid hexadecimal number. Must contain only the following characters: 0-9, a-f, A-F, :.'\n    ),\n    noWhiteSpaceOnly: gettext('This field must not contain only whitespaces'),\n    noLeadingOrTrailingWhitespaces: gettext(\n      'Must not contain any leading or trailing whitespaces.'\n    ),\n    noDots: gettext('Dots not allowed.'),\n    integer: gettext('Invalid type, expected integer.'),\n    simpleJsonPath: gettext('Must be a valid JSON path'),\n    [DatapointLibraryValidationErrors.SHOULD_CONTAIN_NUMBER]: gettext(\n      'This field must contain a number.'\n    ),\n    [DatapointLibraryValidationErrors.SHOULD_BE_DEFINED]: gettext('Value must be defined.'),\n    [DatapointLibraryValidationErrors.GREATER_THAN_SCALE_MAX]: gettext(\n      'Value must be less than scale maximum.'\n    ),\n    [DatapointLibraryValidationErrors.LESS_THAN_SCALE_MIN]: gettext(\n      'Value must be greater than scale minimum.'\n    ),\n    [DatapointLibraryValidationErrors.GREATER_THAN_RANGE_MAX]: gettext(\n      'Value must be less than respective maximum.'\n    ),\n    [DatapointLibraryValidationErrors.LESS_THAN_RANGE_MIN]: gettext(\n      'Value must be greater than respective minimum.'\n    ),\n    quickLinkUrl: gettext('Value must be a full or relative URL.')\n  } as const;\n\n  static readonly rules = {\n    deviceId: {\n      pattern: /^[^\\s/]*$/\n    },\n    domain: {\n      pattern: /^[a-z]+[a-z0-9-]*[a-z0-9]+\\.{1}.+$/\n    },\n    groupName: {\n      maxLength: 254\n    },\n    hostname: {\n      pattern:\n        /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$/\n    },\n    ip: {\n      pattern:\n        /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/\n    },\n    opcuaBrowsePath: {\n      pattern: /^(opc.tcp|http|https):\\/\\/[^ \"]+$/\n    },\n    password: {\n      // Note: min length {8} is a fallback default. Actual password validation uses\n      // PasswordValidationService with dynamically configured min length.\n      pattern: /^[a-zA-Z0-9`~!@#$%^&*()_|+\\-=?;:'\",.<>{}[\\]\\\\/]{8,32}$/\n    },\n    tenantId: {\n      pattern: /^[a-z]+[a-z0-9-]*[a-z0-9]+$/\n    },\n    user: {\n      pattern: /^[^\\\\/\\s$:+]*$/\n    },\n    urlSegment: {\n      pattern: /^(([.]{1,2})|([/])+|(([/]*)([.]{1,2})([/]*))|((.*)([/]|[ ]+)(.*))|(\\s+))$/\n    },\n    loginAlias: {\n      pattern: /^[^\\\\/$:+]*$/\n    },\n    noWhiteSpaceOnly: {\n      pattern: /^(?!\\s*$).+/\n    },\n    noLeadingOrTrailingWhitespaces: {\n      pattern: /^[^\\s].*[^\\s]$|^[^\\s]$/\n    },\n    noDots: {\n      pattern: /^[^.]*$/\n    },\n    httpUrl: {\n      pattern: /^(https?):\\/\\/.*$/\n    },\n    colonedHexNumber: {\n      pattern: /^[0-9a-fA-F:]+$/\n    },\n    integer: {\n      pattern: /^-?\\d+$/\n    },\n    quickLinkUrl: {\n      pattern: /^(https?:\\/\\/.+|\\/[^?#]*(\\?.*)?(#.*)?|\\?.*|#.*)$/\n    }\n  };\n\n  static get(key: string) {\n    const pattern = this.rules[key];\n    return pattern as ValidationRules;\n  }\n}\n","import { NG_VALIDATORS, AbstractControl, Validator } from '@angular/forms';\nimport { Directive, Input } from '@angular/core';\nimport { ValidationPattern } from './validation-pattern';\n\n@Directive({\n  selector: '[c8yDefaultValidation]',\n  providers: [{ provide: NG_VALIDATORS, useExisting: DefaultValidationDirective, multi: true }],\n  standalone: true\n})\nexport class DefaultValidationDirective implements Validator {\n  @Input() c8yDefaultValidation = '';\n\n  validate(control: AbstractControl): { [key: string]: any } | null {\n    if (!control.value) {\n      return null;\n    }\n    const validation = ValidationPattern.get(this.c8yDefaultValidation);\n    if (!validation) {\n      throw new Error(`Pattern ${this.c8yDefaultValidation} not found.`);\n    }\n\n    let valid = true;\n    if (validation.pattern) {\n      valid = validation.pattern.test(control.value);\n    }\n    if (validation.maxLength) {\n      valid = control.value.length < validation.maxLength;\n    }\n    if (validation.minLength) {\n      valid = control.value.length >= validation.minLength;\n    }\n    return valid ? null : { [this.c8yDefaultValidation]: true };\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport {\n  FormControl,\n  AbstractControl,\n  NG_VALIDATORS,\n  ValidationErrors,\n  Validator,\n  Validators\n} from '@angular/forms';\n\n/**\n * A directive that adds the `emails` validator to controls marked with the\n * `emails` attribute. The directive is provided with the `NG_VALIDATORS` multi-provider list.\n *\n * ```html\n * <input type=\"text\" name=\"emails\" ngModel emails>\n * <input type=\"text\" name=\"emails\" ngModel emails=\"true\">\n * <input type=\"text\" name=\"emails\" ngModel [emails]=\"true\">\n * ```\n */\n@Directive({\n  selector: '[emails][formControlName],[emails][formControl],[emails][ngModel]',\n  providers: [{ provide: NG_VALIDATORS, useExisting: EmailsValidatorDirective, multi: true }],\n  standalone: true\n})\nexport class EmailsValidatorDirective implements Validator {\n  private _enabled = false;\n  private _onChange?: () => void;\n  private separator = ',';\n\n  /**\n   * Tracks changes to the emails attribute bound to this directive.\n   */\n  @Input()\n  set emails(value: boolean | string) {\n    this._enabled = value === '' || value === true || value === 'true';\n    if (this._onChange) {\n      this._onChange();\n    }\n  }\n\n  /**\n   * Method that validates whether email addresses are valid.\n   * Returns the validation result if enabled, otherwise null.\n   */\n  validate(control: AbstractControl): ValidationErrors | null {\n    if (!this._enabled) {\n      return null;\n    }\n\n    const value = control.value || '';\n    const emails = value.split(this.separator).map(email => email.trim());\n    const invalid = emails.some(email => Validators.email(new FormControl(email)));\n    return invalid ? { emails: true } : null;\n  }\n\n  /**\n   * Registers a callback function to call when the validator inputs change.\n   */\n  registerOnValidatorChange(fn: () => void): void {\n    this._onChange = fn;\n  }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\nimport { Subject, timer } from 'rxjs';\nimport { debounce, distinctUntilChanged, map } from 'rxjs/operators';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-filter',\n  templateUrl: './filter-input.component.html',\n  standalone: true,\n  imports: [IconDirective, C8yTranslatePipe]\n})\nexport class FilterInputComponent implements OnInit, OnDestroy {\n  @Input() icon: SupportedIconsSuggestions;\n  @Output() onSearch = new EventEmitter<string>();\n  filterChange$ = new Subject<KeyboardEvent>();\n  @Input()\n  filterTerm = '';\n  searchLabel = gettext('search');\n  closeLabel = gettext('close');\n  private readonly CARRIAGE_RETURN_KEY = 13;\n  private readonly CARRIAGE_RETURN_CODE = 'Enter';\n  private readonly CARRIAGE_ESCAPE_CODE = 'Escape';\n  private readonly AUTO_SEARCH_DEBOUNCE = 500;\n\n  ngOnInit() {\n    this.filterChange$\n      .pipe(\n        debounce((event: KeyboardEvent) => {\n          if (\n            event.code === this.CARRIAGE_RETURN_CODE ||\n            event.keyCode === this.CARRIAGE_RETURN_KEY\n          ) {\n            event.preventDefault();\n            return timer(0);\n          }\n\n          if (event.code === this.CARRIAGE_ESCAPE_CODE) {\n            this.reset();\n            return timer(0);\n          }\n\n          return timer(this.AUTO_SEARCH_DEBOUNCE);\n        }),\n        map((e: KeyboardEvent) => (e.target as HTMLInputElement).value),\n        distinctUntilChanged()\n      )\n      .subscribe(filterTerm => {\n        this.filterTerm = filterTerm;\n        this.onSearch.emit(filterTerm);\n      });\n  }\n\n  reset() {\n    this.filterTerm = '';\n    this.onSearch.emit('');\n  }\n\n  ngOnDestroy(): void {\n    this.filterChange$.complete();\n  }\n}\n","<div class=\"input-group input-group-search\">\n  <input\n    class=\"form-control\"\n    placeholder=\"{{ 'Filter…' | translate }}\"\n    type=\"text\"\n    [value]=\"filterTerm\"\n    (keydown)=\"filterChange$.next($event)\"\n    px-event=\"Filter…\"\n    data-cy=\"filter-input--filter-input\"\n  />\n  <span class=\"input-group-btn\">\n    <button\n      class=\"btn btn-clean\"\n      title=\"{{ filterTerm.length === 0 ? searchLabel : closeLabel }}\"\n      px-event=\"Clear filtering\"\n      (click)=\"reset()\"\n    >\n      <i [c8yIcon]=\"filterTerm.length === 0 ? 'search' : 'close'\"></i>\n    </button>\n  </span>\n</div>\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n  selector: 'c8y-message',\n  standalone: true\n})\nexport class MessageDirective {\n  @Input() name: string;\n  @Input() text: string;\n}\n","import { Component, ContentChildren, Input, QueryList } from '@angular/core';\nimport { MessageDirective } from './message.directive';\nimport { ValidationPattern } from './validation-pattern';\nimport { TranslateService } from '@ngx-translate/core';\nimport { C8yTranslatePipe } from '../i18n';\n\n@Component({\n  selector: 'c8y-messages',\n  templateUrl: './messages.component.html',\n  standalone: true,\n  imports: [C8yTranslatePipe]\n})\nexport class MessagesComponent {\n  @Input() show: object = {};\n  @Input() defaults: object = ValidationPattern.messages;\n  @Input() helpMessage = '';\n  @ContentChildren(MessageDirective) customMessages: QueryList<MessageDirective>;\n  messages = [];\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  messageMap: any = {};\n\n  constructor(private translateService: TranslateService) {}\n\n  ngAfterContentInit(): void {\n    this.messageMap = Object.assign(\n      {},\n      this.defaults,\n      this.customMessages.reduce((messages, directive) => {\n        messages[directive.name] = directive.text;\n        return messages;\n      }, {})\n    );\n  }\n\n  changeVisibility(show: object) {\n    this.show = show;\n    this.ngOnChanges();\n  }\n\n  ngOnChanges() {\n    if (this.show) {\n      this.messages = Object.keys(this.show)\n        .map(key => this.toMessage(key, this.show[key]))\n        // if an null message is returned, it will not be displayed\n        .filter(message => message !== null);\n    } else {\n      this.messages = [];\n    }\n  }\n\n  private toMessage(key, value) {\n    // First check customMessages directly for the most up-to-date text\n    // (handles async binding updates that occur after ngAfterContentInit)\n    const customMessage = this.customMessages?.find(({ name }) => name === key);\n    let message = customMessage?.text || this.messageMap[key];\n\n    if (\n      (!message || message === ValidationPattern.messages.pattern) &&\n      key === 'pattern' &&\n      typeof value?.requiredPattern === 'string'\n    ) {\n      const pattern = value.requiredPattern.replace(/^\\//, '').replace(/\\/$/, '');\n      const foundPattern = Object.keys(ValidationPattern.rules).find(\n        tmp => ValidationPattern.rules[tmp].pattern?.source === pattern\n      );\n      if (foundPattern) {\n        key = foundPattern;\n        const foundCustomMessage = this.customMessages?.find(({ name }) => name === key);\n        message = foundCustomMessage?.text || this.messageMap[key];\n      }\n    }\n    if (!message) {\n      return null;\n    }\n    return this.translateService.instant(message, value);\n  }\n}\n","<small class=\"form-control-feedback-message\">\n  @for (msg of messages; track msg) {\n    <div class=\"d-block\">\n      {{ msg | translate }}\n    </div>\n  }\n  @if (!messages.length && helpMessage) {\n    <div class=\"help-block\">\n      {{ helpMessage | translate }}\n    </div>\n  }\n  <ng-content></ng-content>\n</small>\n","import {\n  AfterContentInit,\n  Component,\n  ContentChild,\n  DoCheck,\n  HostBinding,\n  Input,\n  OnDestroy\n} from '@angular/core';\nimport { FormControl, FormControlName, NgModel, ValidationErrors } from '@angular/forms';\nimport { BehaviorSubject, merge, Subject } from 'rxjs';\nimport { debounceTime, filter, takeUntil } from 'rxjs/operators';\nimport { MessagesComponent } from './messages.component';\nimport { NgIf } from '@angular/common';\n\n/**\n * A form group helps to validate an input of a form element.\n *\n * ```html\n *  <c8y-form-group [hasWarning]=\"user.email.length === 0\">\n *   <label translate for=\"userEmail\">Email</label>\n *   <input\n *     id=\"userEmail\"\n *     class=\"form-control\"\n *     type=\"email\"\n *     name=\"email\"\n *     [maxlength]=\"254\"\n *     autocomplete=\"off\"\n *     placeholder=\"{{'e.g. joe.doe@exmpl.com' | translate}}\"\n *     [(ngModel)]=\"user.email\"\n *     email\n *     required\n *   >\n *   <c8y-messages>\n *     <c8y-message *ngIf=\"user.email.length === 0\" translate></c8y-message>\n *     <c8y-message name=\"required\" text=\"The E-Mail is SUPER required\"></c8y-message>\n *   </c8y-messages>\n *  </c8y-form-group>\n * ```\n *\n * @param status The current status could be error, warning or success.\n * @param hasError Set this to true to display a error.\n * @param hasWarning Set this to true to display a warning.\n * @param hasSuccess Set this to true to display a success.\n * @param novalidation Set this to true to disable automatic validation by this component.\n */\n@Component({\n  selector: 'c8y-form-group',\n  templateUrl: './form-group.component.html',\n  host: {\n    class: 'form-group'\n  },\n  standalone: true,\n  imports: [MessagesComponent, NgIf]\n})\nexport class FormGroupComponent implements AfterContentInit, DoCheck, OnDestroy {\n  @Input() hasError = false;\n  @Input() hasWarning = false;\n  @Input() hasSuccess = false;\n  @Input() novalidation = false;\n  @Input() status: string;\n\n  @HostBinding('class.has-error') get error() {\n    return this.status === 'error' || this.hasError;\n  }\n  @HostBinding('class.has-warning') get warning() {\n    return this.status === 'warning' || this.hasWarning;\n  }\n  @HostBinding('class.has-success') get success() {\n    return this.status === 'success' || this.hasSuccess;\n  }\n\n  @ContentChild(MessagesComponent, { static: false }) customErrorMessage: MessagesComponent;\n  @ContentChild(NgModel, { static: true }) model: NgModel;\n  @ContentChild(FormControlName, { static: true }) formControlName: FormControlName;\n\n  errors: ValidationErrors;\n\n  private control: FormControl | NgModel;\n  private controlTouched$: BehaviorSubject<boolean>;\n\n  private readonly VALIDATION_DEBOUNCE_MS = 100;\n\n  private destroyed$: Subject<void> = new Subject();\n\n  ngAfterContentInit(): void {\n    this.initNgModel();\n    this.initFormControl();\n  }\n\n  initNgModel() {\n    if (this.model) {\n      this.observeControl(this.model);\n    }\n  }\n\n  initFormControl() {\n    if (this.formControlName) {\n      this.observeControl(this.formControlName.control);\n    }\n  }\n\n  observeControl(control: FormControl | NgModel) {\n    this.control = control;\n    this.controlTouched$ = new BehaviorSubject<boolean>(control.touched);\n    merge(control.valueChanges, control.statusChanges, this.controlTouched$)\n      .pipe(\n        filter(() => (control.dirty || control.touched) && !this.novalidation),\n        debounceTime(this.VALIDATION_DEBOUNCE_MS),\n        takeUntil(this.destroyed$)\n      )\n      .subscribe(() => this.updateErrors(control));\n  }\n\n  updateErrors(control: FormControl | NgModel) {\n    this.hasError = control.touched && control.status === 'INVALID';\n    const errors = this.hasError ? control.errors : {};\n    if (this.customErrorMessage) {\n      this.customErrorMessage.changeVisibility(errors);\n    } else {\n      this.errors = errors;\n    }\n  }\n\n  ngDoCheck() {\n    if (this.controlTouched$) {\n      if (this.controlTouched$.value !== this.control.touched) {\n        this.controlTouched$.next(this.control.touched);\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n}\n","<ng-content></ng-content>\n<c8y-messages *ngIf=\"!customErrorMessage\" [show]=\"errors\"></c8y-messages>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-input-group-list',\n  templateUrl: 'input-group-list.component.html',\n  standalone: true,\n  imports: [NgIf, TooltipModule, IconDirective, C8yTranslatePipe]\n})\nexport class InputGroupListComponent {\n  @Input() plus = true;\n  @Input() minus = true;\n  @Input() index: number;\n\n  @Output() onRemove: EventEmitter<number> = new EventEmitter<number>();\n  @Output() onAdd: EventEmitter<number> = new EventEmitter<number>();\n  add() {\n    this.onAdd.emit(this.index);\n  }\n\n  remove() {\n    this.onRemove.emit(this.index);\n  }\n}\n","<ng-container>\n  <div class=\"input-group\">\n    <ng-content></ng-content>\n    <div class=\"input-group-btn\">\n      <button\n        *ngIf=\"minus\"\n        tooltip=\"{{ 'Remove' | translate }}\"\n        [attr.aria-label]=\"'Remove' | translate\"\n        [delay]=\"500\"\n        type=\"button\"\n        class=\"btn btn-dot btn-dot--danger\"\n        (click)=\"remove()\"\n      >\n        <i c8yIcon=\"minus-circle\"></i>\n      </button>\n      <button\n        *ngIf=\"plus\"\n        tooltip=\"{{ 'Add' | translate }}\"\n        [attr.aria-label]=\"'Add' | translate\"\n        [delay]=\"500\"\n        type=\"button\"\n        class=\"btn btn-dot text-primary\"\n        (click)=\"add()\"\n      >\n        <i c8yIcon=\"plus-circle\"></i>\n      </button>\n    </div>\n  </div>\n</ng-container>\n","import { Directive, QueryList, AfterContentInit, ContentChildren } from '@angular/core';\nimport { InputGroupListComponent } from './input-group-list.component';\n\n@Directive({\n  selector: '[c8yInputGroupListContainer]',\n  standalone: true\n})\nexport class InputGroupListContainerDirective implements AfterContentInit {\n  @ContentChildren(InputGroupListComponent) listProjections: QueryList<InputGroupListComponent>;\n\n  ngAfterContentInit() {\n    this.listProjections.map(element => {\n      if (element !== this.listProjections.last) {\n        setTimeout(() => {\n          element.plus = false;\n        });\n      }\n    });\n\n    this.listProjections.changes.subscribe(elements => {\n      if (elements.length === 1) {\n        setTimeout(() => {\n          elements.first.plus = true;\n          elements.first.minus = false;\n        });\n\n        return;\n      }\n      elements.map(element => {\n        setTimeout(() => {\n          element.minus = true;\n        });\n\n        if (element !== elements.last) {\n          setTimeout(() => {\n            element.plus = false;\n          });\n        }\n        if (element === elements.last) {\n          setTimeout(() => {\n            element.plus = true;\n          });\n        }\n      });\n    });\n  }\n}\n","import { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\nimport { Directive, Input } from '@angular/core';\n\nimport { isUndefined, isFinite } from 'lodash-es';\n\n@Directive({\n  selector: '[min]',\n  providers: [{ provide: NG_VALIDATORS, useExisting: MinValidationDirective, multi: true }],\n  standalone: true\n})\nexport class MinValidationDirective implements Validator {\n  @Input() min: string | number = '';\n\n  validate(control: AbstractControl): { [key: string]: any } | null {\n    const parsedMin = typeof this.min === 'number' ? this.min : parseFloat(this.min);\n    if (isUndefined(control.value) || !isFinite(parsedMin)) {\n      return null;\n    }\n\n    const valid = control.value !== null ? !(control.value < parsedMin) : true;\n    return valid ? null : { min: { min: parsedMin, actual: control.value } };\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { FormGroupComponent } from './form-group.component';\nimport { InputGroupListContainerDirective } from './input-group-list-container.directive';\nimport { NgFor } from '@angular/common';\nimport { InputGroupListComponent } from './input-group-list.component';\nimport { FormsModule } from '@angular/forms';\nimport { RequiredInputPlaceholderDirective } from './required-input-placeholder.directive';\nimport { MinValidationDirective } from './min-validation.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-ip-range-input-list',\n  templateUrl: './ip-range-input-list.component.html',\n  standalone: true,\n  imports: [\n    FormGroupComponent,\n    InputGroupListContainerDirective,\n    NgFor,\n    InputGroupListComponent,\n    FormsModule,\n    RequiredInputPlaceholderDirective,\n    MinValidationDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class IpRangeInputListComponent {\n  @Input()\n  set data(list) {\n    this.ipRangeList = list;\n    if (this.ipRangeList.length === 0) {\n      this.add();\n    }\n  }\n\n  get data() {\n    return this.ipRangeList;\n  }\n\n  ipRangeList: Array<{ ip: string; cidr: number }>;\n\n  add() {\n    this.ipRangeList.push({ ip: '', cidr: undefined });\n  }\n\n  remove(index) {\n    this.ipRangeList.splice(index, 1);\n  }\n}\n","<c8y-form-group class=\"m-t-8 m-b-8\">\n  <ul c8yInputGroupListContainer class=\"list-unstyled\">\n    <li class=\"m-b-8\" *ngFor=\"let item of data; let i = index\">\n      <c8y-input-group-list [index]=\"i\" (onAdd)=\"add()\" (onRemove)=\"remove($event)\">\n        <input\n          type=\"text\"\n          name=\"ipAddress\"\n          class=\"form-control m-r-4\"\n          placeholder=\"{{ 'IP range start, e.g.' | translate }} 192.168.0.1\"\n          style=\"flex-grow: 2\"\n          [(ngModel)]=\"item.ip\"\n          [required]=\"true\"\n          #ipAddress\n        />\n        <input\n          type=\"number\"\n          name=\"cidr\"\n          [min]=\"0\"\n          class=\"form-control\"\n          placeholder=\"{{ 'e.g.' | translate }} 20\"\n          [(ngModel)]=\"item.cidr\"\n          [required]=\"true\"\n          #cidr\n        />\n      </c8y-input-group-list>\n    </li>\n  </ul>\n</c8y-form-group>\n","import { Directive, EventEmitter, Output, OnInit, OnDestroy } from '@angular/core';\nimport { NgControl, AbstractControl } from '@angular/forms';\n\nimport { debounceTime, distinctUntilChanged, tap } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Directive({\n  selector: 'textarea[prettyValidJson]',\n  standalone: true\n})\nexport class JsonValidationPrettifierDirective implements OnInit, OnDestroy {\n  @Output() invalidJSON: EventEmitter<string> = new EventEmitter();\n  private abstractCtrl: AbstractControl;\n  private message: string = gettext('Must be a valid JSON object.');\n  private debounceTimeInMs = 1000;\n  private subscription: Subscription;\n\n  constructor(ngCtrl: NgControl) {\n    this.abstractCtrl = ngCtrl.control;\n  }\n\n  ngOnInit() {\n    this.subscription = this.abstractCtrl.valueChanges\n      .pipe(\n        tap(() => this.clearValidationMessage()),\n        debounceTime(this.debounceTimeInMs),\n        distinctUntilChanged()\n      )\n      .subscribe(value => {\n        this.validateInputAndPrettify(value);\n      });\n  }\n\n  ngOnDestroy() {\n    if (this.subscription && !this.subscription.closed) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  validateInputAndPrettify(value) {\n    if (value) {\n      try {\n        const validJsonObject = JSON.parse(value);\n        const pretty = JSON.stringify(validJsonObject, undefined, 2);\n        this.abstractCtrl.setValue(pretty);\n      } catch (ex) {\n        this.setErrorAndValidationMessage();\n      }\n    }\n  }\n\n  private setErrorAndValidationMessage() {\n    this.abstractCtrl.setErrors({ invalidBodyTemplate: true });\n    this.invalidJSON.emit(this.message);\n  }\n\n  private clearValidationMessage() {\n    this.invalidJSON.emit(undefined);\n  }\n}\n","import { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\nimport { Directive, Input } from '@angular/core';\n\nimport { isUndefined, isFinite } from 'lodash-es';\n\n@Directive({\n  selector: '[max]',\n  providers: [{ provide: NG_VALIDATORS, useExisting: MaxValidationDirective, multi: true }],\n  standalone: true\n})\nexport class MaxValidationDirective implements Validator {\n  @Input() max: string | number = '';\n\n  validate(control: AbstractControl): { [key: string]: any } | null {\n    const parsedMax = typeof this.max === 'number' ? this.max : parseFloat(this.max);\n    if (isUndefined(control.value) || !isFinite(parsedMax)) {\n      return null;\n    }\n\n    const valid = !(control.value > parsedMax);\n    return valid ? null : { max: { max: parsedMax, actual: control.value } };\n  }\n}\n","import {\n  NG_VALIDATORS,\n  AbstractControl,\n  Validator,\n  ValidatorFn,\n  ValidationErrors\n} from '@angular/forms';\nimport { Directive } from '@angular/core';\nimport { parsePhoneNumberFromString } from 'libphonenumber-js/max';\n\n@Directive({\n  selector: '[c8yPhoneValidation]',\n  providers: [{ provide: NG_VALIDATORS, useExisting: PhoneValidationDirective, multi: true }],\n  standalone: true\n})\nexport class PhoneValidationDirective implements Validator {\n  validate(control: AbstractControl): ValidationErrors | null {\n    return validateInternationalPhoneNumber()(control);\n  }\n}\nexport function validateInternationalPhoneNumber(): ValidatorFn {\n  const allowedCharactersPattern = /^[/\\d\\-+ ]*$/;\n  return (control: AbstractControl): ValidationErrors | null => {\n    let numberValid;\n\n    try {\n      const phoneNumber = parsePhoneNumberFromString(control.value);\n      numberValid = allowedCharactersPattern.test(control.value) && phoneNumber.isValid();\n      if (numberValid && control.value !== phoneNumber.format('E.164')) {\n        control.setValue(phoneNumber.format('E.164'), {\n          emitEvent: false,\n          emitModelToViewChange: false\n        });\n      }\n    } catch (e) {\n      numberValid = !control.value;\n    }\n\n    return numberValid ? null : { internationalPhoneNumber: true };\n  };\n}\n","import { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n  selector: 'input[type=\"range\"]',\n  standalone: true\n})\nexport class RangeDirective {\n  constructor(public elementRef: ElementRef) {}\n}\n","import { Component, ContentChild, forwardRef, OnDestroy, Input, TemplateRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { toNumber } from 'lodash-es';\nimport { RangeDirective } from './range.directive';\nimport { NgClass, NgIf, NgTemplateOutlet } from '@angular/common';\n\n/**\n * A component to render a range slider in Cumulocity UI. You need to wrap the default range\n * input in this component, then use one of the four available options for the value display mode:\n * `pop`, `start`, `end`, and `inline`\n *\n * ```html\n * <c8y-range valueDisplayMode=\"inline\">\n *   <input id=\"range\" type=\"range\" min=\"0\" max=\"100000\" value=\"0\" step=\"1\">\n * </c8y-range>\n * ```\n */\n@Component({\n  selector: 'c8y-range',\n  templateUrl: './range.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RangeComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [NgClass, NgIf, NgTemplateOutlet]\n})\nexport class RangeComponent implements OnDestroy, ControlValueAccessor {\n  /**\n   * Value display mode, available options: `pop`, `start`, `end`, and `inline` (fallback)\n   */\n  @Input() valueDisplayMode: 'pop' | 'inline' | 'end' | 'start' = 'inline';\n  /**\n   * The range input\n   */\n  @ContentChild(RangeDirective, { static: true })\n  range: RangeDirective;\n  /**\n   * The range value slider\n   */\n  @ContentChild('c8yRangeValue', { static: true })\n  rangeValue: TemplateRef<unknown>;\n  /**\n   * The current value.\n   */\n  value: number;\n  /**\n   * The current position of the tooltip from left\n   */\n  left: string;\n  /**\n   * @ignore\n   */\n  onChange: (value: number) => void;\n  /**\n   * @ignore\n   */\n  onTouched: () => void;\n\n  /**\n   * @ignore\n   * @param obj The value to update\n   */\n  writeValue(obj: () => void): void {\n    this.range.elementRef.nativeElement.value = obj;\n    this.updateValue();\n  }\n\n  /**\n   * @ignore\n   * @param fn The function to register for changes\n   */\n  registerOnChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n\n  /**\n   * @ignore\n   * @param fn The function to register for changes\n   */\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * @ignore\n   */\n  ngAfterContentInit(): void {\n    this.updateValue();\n    this.range.elementRef.nativeElement.addEventListener('input', () => this.updateValue());\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnDestroy(): void {\n    this.range.elementRef.nativeElement.removeEventListener('input', () => this.updateValue());\n  }\n\n  /**\n   * @ignore\n   */\n  updateValue() {\n    const rangeValue = this.range.elementRef.nativeElement.value;\n    this.value = toNumber(rangeValue);\n    if (this.onChange) {\n      this.onChange(this.value);\n    }\n    this.updatePosition();\n  }\n\n  /**\n   * Updates the position of the slider\n   */\n  updatePosition() {\n    const range = this.range.elementRef.nativeElement;\n    const newValue = Number(((range.value - range.min) * 100) / (range.max - range.min));\n    const newPosition = 12 - newValue * 0.24;\n    this.left = `calc(${newValue}% + (${newPosition}px))`;\n  }\n}\n","<div\n  class=\"range-wrap\"\n  [ngClass]=\"valueDisplayMode\"\n  style=\"--track-width: {{ left }}\"\n>\n  <div\n    class=\"range-value\"\n    [style.left]=\"left\"\n  >\n    <span *ngIf=\"!rangeValue\">{{ value }}</span>\n    <ng-container *ngTemplateOutlet=\"rangeValue\"></ng-container>\n  </div>\n  <ng-content></ng-content>\n</div>\n","import { Directive } from '@angular/core';\nimport {\n  AbstractControl,\n  NG_VALIDATORS,\n  ValidationErrors,\n  Validator,\n  Validators\n} from '@angular/forms';\n\nconst SIMPLE_JSON_PATH_REGEX = /^[^.\\s]+(\\.\\S+)*$/;\n\nexport function simpleJsonPathValidator(control: AbstractControl): ValidationErrors | null {\n  const errors = Validators.pattern(SIMPLE_JSON_PATH_REGEX)(control);\n\n  return !!errors\n    ? {\n        simpleJsonPath: errors.pattern\n      }\n    : null;\n}\n\n@Directive({\n  selector: '[simpleJsonPath]',\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      useExisting: SimpleJsonPathValidatorDirective,\n      multi: true\n    }\n  ],\n  standalone: true\n})\nexport class SimpleJsonPathValidatorDirective implements Validator {\n  validate(control: AbstractControl<any, any>): ValidationErrors | null {\n    return simpleJsonPathValidator(control);\n  }\n}\n","import { Directive, ElementRef, Input, HostBinding, Renderer2 } from '@angular/core';\n\n@Directive({\n  selector: 'textarea[heightPerRow]',\n  standalone: true\n})\nexport class TextAreaRowHeightDirective {\n  @Input()\n  @HostBinding('rows')\n  rows = 1;\n\n  @Input('heightPerRow')\n  heightPerRow: string;\n\n  private minHeightPerRow = 20;\n\n  constructor(\n    private elem: ElementRef,\n    private renderer: Renderer2\n  ) {}\n\n  ngAfterViewInit() {\n    const convertedValue = Number(this.heightPerRow);\n    if (this.heightPerRow && convertedValue && convertedValue > this.minHeightPerRow) {\n      this.setHeight(`${this.rows * convertedValue}px`);\n    } else {\n      this.setHeight(`${this.rows * this.minHeightPerRow}px`);\n    }\n  }\n\n  private setHeight(value: string) {\n    this.renderer.setStyle(this.elem.nativeElement, 'height', value);\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport {\n  AbstractControl,\n  NG_VALIDATORS,\n  ValidationErrors,\n  Validator,\n  ValidatorFn\n} from '@angular/forms';\nimport { find, get, isEqualWith } from 'lodash-es';\n\nexport function uniqueInCollectionByPathValidator(\n  collection: Iterable<object>,\n  path: string,\n  comparator?: (val1: any, val2: any) => boolean\n): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    const match = find(collection, element =>\n      isEqualWith(get(element, path), control.value, comparator)\n    );\n\n    return !!match && !!control.value\n      ? { uniqueByPath: { key: path, value: get(match, path) } }\n      : null;\n  };\n}\n\n@Directive({\n  selector: '[uniqueByPath]',\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      useExisting: UniqueInCollectionByPathValidationDirective,\n      multi: true\n    }\n  ],\n  standalone: true\n})\nexport class UniqueInCollectionByPathValidationDirective implements Validator {\n  @Input() collection: Iterable<object>;\n  @Input() path: string;\n  @Input() comparator: (val1: any, val2: any) => boolean;\n\n  validate(control: AbstractControl): ValidationErrors | null {\n    return uniqueInCollectionByPathValidator(this.collection, this.path, this.comparator)(control);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { ArrayValidationErrors, ArrayValidationErrorValue } from './validate-array-elements';\n\n/**\n * This pipe should be used in pair with validateArrayElements function - it allows to distribute\n * errors for each position in array, from the object prepared by validateArrayElements.\n *\n * ```ts\n * errors = {\n *  \"INNER_ARRAY_ERROR_minlength\": {\n *    isArrayError: true,\n *    originalKey: \"minlength\",\n *    entries: [\n *      {\n *        index: 0,\n *        errorData: {\n *        requiredLength: 5,\n *        actualLength: 4\n *        }\n *      },\n *      {\n *        index: 2,\n *        errorData: {\n *          requiredLength: 5,\n *          actualLength: 3\n *        }\n *      },\n *    ]\n *  },\n *  \"minlength\": {\n *    requiredLength: 5,\n *    actualLength: 3\n *  }\n * }\n * ```\n *\n * ```html\n * <small *ngFor=\"let error of errors | extractArrayValidationErrors:index | keyvalue\">\n *  {{ error.key | humanizeValidationMessage | translate: error.value }}\n * </small>\n * ```\n *\n * Above code renders only these error messages that are generated by Array entries.\n *\n */\n\n@Pipe({\n  name: 'extractArrayValidationErrors',\n  standalone: true\n})\nexport class ExtractArrayValidationErrorsPipe implements PipeTransform {\n  transform(\n    validationErrors: ArrayValidationErrors | ValidationErrors | null,\n    index: number\n  ): ValidationErrors | null {\n    if (!validationErrors) {\n      return null;\n    }\n\n    const errorObject = {};\n    Object.keys(validationErrors).forEach(key => {\n      if (validationErrors[key].isArrayError) {\n        const unprefixedKey = validationErrors[key].originalKey;\n        const arrayValidationError: ArrayValidationErrorValue = validationErrors[key];\n        const relatedError = arrayValidationError.entries.find(entry => entry.index === index);\n        if (relatedError) {\n          errorObject[unprefixedKey] = relatedError.errorData;\n        }\n      }\n    });\n    return Object.keys(errorObject).length ? errorObject : null;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationPattern } from './validation-pattern';\n\n/**\n * This pipe is responsible for transforming validation error key to actual translatable that\n * are defined in ValidationPattern class.\n *\n * ```html\n * <c8y-message>\n *  {{ 'minLength' | humanizeValidationMessage }}\n * </c8y-message>\n * ```\n *\n * Above code renders corresponding validation message for minLength:\n * \"Should have at least {{ requiredLength }} characters\"\n *\n * It is possible to chain translate pipe:\n *\n * ```ts\n * const errorData = { requiredLength: 5, actualLength: 1};\n * ```\n *\n * ```html\n * <div>\n *  {{ 'minLength' | humanizeValidationMessage | translate: errorData  }}\n * </div>\n * ```\n *\n * should render: \"Should have at least 5 characters\"\n *\n * It is also possible to provide custom translation message. For example:\n *\n * ```ts\n * const errorData = { requiredLength: 5, actualLength: 1 };\n * const customMessages = {\n *   minLength: gettext(\"File name should have at least {{ requiredLength }} characters\")\n * };\n * ```\n *\n * ```html\n * <div>\n *  {{ 'minLength' | humanizeValidationMessage:customMessages | translate: errorData }}\n * </div>\n * ```\n *\n * should render:\n * \"File name should have at least 5 characters\"\n */\n\n@Pipe({\n  name: 'humanizeValidationMessage',\n  standalone: true\n})\nexport class HumanizeValidationMessagePipe implements PipeTransform {\n  transform(errorName: string, customMessages: { [key: string]: string } = {}): string {\n    return customMessages[errorName] || ValidationPattern.messages[errorName] || errorName;\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ValidationErrors } from '@angular/forms';\nimport { ArrayValidationErrors } from './validate-array-elements';\n\n/**\n * This pipe should be used in case when there might be generic Array validators, that could populate error object\n * with errors that are directly related to array elements. Such errors should be handled separately, but there still\n * might be errors that applies to whole array. This allows to filter out entry-specific messages from error object.\n *\n * ```ts\n * errors = {\n *  \"INNER_ARRAY_ERROR_minlength\": {\n *    isArrayError: true,\n *    originalKey: \"minlength\",\n *    entries: [\n *    {\n *      index: 0,\n *      errorData: {\n *        requiredLength: 5,\n *        actualLength: 4\n *      }\n *    },\n *    {\n *      index: 2,\n *      errorData: {\n *        requiredLength: 5,\n *        actualLength: 3\n *      }\n *    },\n *    ]\n *  },\n *  \"minlength\": {\n *    requiredLength: 5,\n *    actualLength: 3\n *  }\n * }\n * ```\n *\n * ```html\n * <small *ngFor=\"let error of errors | filterNonArrayValidationErrors | keyvalue\">\n *  {{error.key | humanizeValidationMessage | translate: error.value}}\n * </small>\n * ```\n *\n * Above code renders only these error messages that are not generated by Array entries.\n *\n */\n\n@Pipe({\n  name: 'filterNonArrayValidationErrors',\n  standalone: true\n})\nexport class FilterNonArrayValidationErrorsPipe implements PipeTransform {\n  transform(validationErrors: ArrayValidationErrors | ValidationErrors): ValidationErrors | null {\n    if (!validationErrors) {\n      return null;\n    }\n\n    const errorObject = { ...validationErrors };\n    Object.keys(errorObject).forEach(errorKey => {\n      if (errorObject[errorKey].isArrayError) {\n        delete errorObject[errorKey];\n      }\n    });\n\n    return Object.keys(errorObject).length ? errorObject : null;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule as NgFormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { CommonModule } from '../common/common.module';\nimport { DefaultValidationDirective } from './default-validation.directive';\nimport { EmailsValidatorDirective } from './emails-validator.directive';\nimport { FilterInputComponent } from './filter-input.component';\nimport { FormGroupComponent } from './form-group.component';\nimport { InputGroupListContainerDirective } from './input-group-list-container.directive';\nimport { InputGroupListComponent } from './input-group-list.component';\nimport { IpRangeInputListComponent } from './ip-range-input-list.component';\nimport { JsonValidationPrettifierDirective } from './json-validation-prettifier.directive';\nimport { MaxValidationDirective } from './max-validation.directive';\nimport { MessageDirective } from './message.directive';\nimport { MessagesComponent } from './messages.component';\nimport { MinValidationDirective } from './min-validation.directive';\nimport { PhoneValidationDirective } from './phone-validation.directive';\nimport { RangeComponent } from './range.component';\nimport { RangeDirective } from './range.directive';\nimport { RequiredInputPlaceholderDirective } from './required-input-placeholder.directive';\nimport { SimpleJsonPathValidatorDirective } from './simple-json-path-validator.directive';\nimport { TextAreaRowHeightDirective } from './text-area-row-height.directive';\nimport { UniqueInCollectionByPathValidationDirective } from './unique-in-collection-by-path-validation.directive';\nimport { ExtractArrayValidationErrorsPipe } from './extract-array-validation-errors.pipe';\nimport { HumanizeValidationMessagePipe } from './humanize-validation-message.pipe';\nimport { FilterNonArrayValidationErrorsPipe } from './filter-non-array-validation-errors.pipe';\n\n/**\n * @exports FormGroupComponent A component that allows to group an input and can display warnings and errors.\n * @exports PhoneValidationDirective Allows to validate international phone numbers.\n * @exports NewsletterDirective Allows to subscribe to the newsletter.\n * @exports DefaultValidationDirective Allows to validate some predefined patterns.\n * @exports MessageDirective A directive that allows to define messages.\n * @exports MessagesComponent Allows to display error messages.\n * @exports RangeComponent A component that allows to display a styled range slider.\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    NgFormsModule,\n    ReactiveFormsModule,\n    PopoverModule,\n    TooltipModule,\n    FormGroupComponent,\n    MessageDirective,\n    MessagesComponent,\n    PhoneValidationDirective,\n    DefaultValidationDirective,\n    MinValidationDirective,\n    MaxValidationDirective,\n    InputGroupListComponent,\n    InputGroupListContainerDirective,\n    JsonValidationPrettifierDirective,\n    TextAreaRowHeightDirective,\n    RequiredInputPlaceholderDirective,\n    IpRangeInputListComponent,\n    FilterInputComponent,\n    EmailsValidatorDirective,\n    RangeDirective,\n    RangeComponent,\n    SimpleJsonPathValidatorDirective,\n    UniqueInCollectionByPathValidationDirective,\n    ExtractArrayValidationErrorsPipe,\n    FilterNonArrayValidationErrorsPipe,\n    HumanizeValidationMessagePipe\n  ],\n  exports: [\n    PhoneValidationDirective,\n    DefaultValidationDirective,\n    MinValidationDirective,\n    MaxValidationDirective,\n    NgFormsModule,\n    FormGroupComponent,\n    MessageDirective,\n    MessagesComponent,\n    InputGroupListComponent,\n    InputGroupListContainerDirective,\n    JsonValidationPrettifierDirective,\n    TextAreaRowHeightDirective,\n    RequiredInputPlaceholderDirective,\n    IpRangeInputListComponent,\n    FilterInputComponent,\n    EmailsValidatorDirective,\n    RangeDirective,\n    RangeComponent,\n    SimpleJsonPathValidatorDirective,\n    UniqueInCollectionByPathValidationDirective,\n    ExtractArrayValidationErrorsPipe,\n    FilterNonArrayValidationErrorsPipe,\n    HumanizeValidationMessagePipe\n  ]\n})\nexport class FormsModule {}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n  selector: '[c8ySelectItem]',\n  standalone: true\n})\nexport class SelectItemDirective {\n  @Input('c8ySelectItem') value: string;\n  @Input('c8ySelectItemLabel') label: string;\n  constructor(public templateRef: TemplateRef<SelectItemDirective>) {}\n}\n","import { Directive, TemplateRef } from '@angular/core';\nimport { SelectableItem } from './select.model';\n\n@Directive({\n  selector: '[c8ySelectedItems]',\n  standalone: true\n})\nexport class SelectedItemsDirective {\n  selectedItems: SelectableItem[] = [];\n\n  constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { SelectableItemTemplate } from './select.model';\n\n/**\n * Pipe to filter items by searching in their label property.\n * Performs a case-insensitive partial match on the item's label.\n *\n * @example\n * ```html\n * <c8y-li *ngFor=\"let item of items | filterBy: searchValue\">\n *   {{ item.label }}\n * </c8y-li>\n * ```\n */\n@Pipe({\n  name: 'filterBy',\n  standalone: true\n})\nexport class FilterByPipe implements PipeTransform {\n  /**\n   * Filters an array of SelectableItemTemplate by checking if the label\n   * contains the search value (case-insensitive).\n   *\n   * @param items - Array of items to filter\n   * @param searchValue - Search string to match against item labels\n   * @returns Filtered array of items\n   */\n  transform(\n    items: SelectableItemTemplate[] | null | undefined,\n    searchValue = ''\n  ): SelectableItemTemplate[] {\n    if (!items || !searchValue || !searchValue.trim()) {\n      return items || [];\n    }\n    const normalizedSearchValue = searchValue.toLowerCase().trim();\n    return items.filter(item => item.label.toLowerCase().includes(normalizedSearchValue));\n  }\n}\n","import {\n  AfterContentInit,\n  AfterViewInit,\n  Component,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  QueryList,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren,\n  forwardRef\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { Subject } from 'rxjs';\nimport { ListItemComponent } from '../list-group';\nimport { SelectItemDirective } from './select-item.directive';\nimport { SelectKeyboardService } from './select-keyboard.service';\nimport { SelectableItem, SelectableItemTemplate } from './select.model';\nimport { SelectedItemsDirective } from './selected-items.directive';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';\nimport { ListGroupComponent } from '../list-group/list-group.component';\nimport { ListItemCheckboxComponent } from '../list-group/list-item-checkbox.component';\nimport { ListItemBodyComponent } from '../list-group/list-item-body.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { isEqual } from 'lodash-es';\nimport { FilterByPipe } from './filter-by.pipe';\n\n@Component({\n  selector: 'c8y-select',\n  templateUrl: './select.component.html',\n  host: { class: 'c8y-select-v2' },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => SelectComponent)\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => SelectComponent),\n      multi: true\n    },\n    SelectKeyboardService\n  ],\n  standalone: true,\n  imports: [\n    BsDropdownModule,\n    NgClass,\n    NgTemplateOutlet,\n    IconDirective,\n    RequiredInputPlaceholderDirective,\n    ListGroupComponent,\n    ListItemComponent,\n    ListItemCheckboxComponent,\n    ListItemBodyComponent,\n    C8yTranslatePipe,\n    FilterByPipe\n  ]\n})\nexport class SelectComponent\n  implements AfterContentInit, OnChanges, OnDestroy, AfterViewInit, ControlValueAccessor, Validator\n{\n  /**\n   * Placeholder text to be displayed in the select.\n   */\n  @Input() placeholder: string = gettext('Select item…');\n\n  /**\n   * Items to be displayed in the select.\n   * Can be an array of strings or an array of objects with `label` and `value` properties.\n   *\n   * @example\n   * ```html\n   * <c8y-select [items]=\"[{ label: 'Item 1', value: 'item1' }, { label: 'Item 2', value: 'item2' }]\"></c8y-select>\n   * ```\n   *\n   * @example\n   * ```html\n   * <c8y-select [items]=\"['Item 1', 'Item 2', 'Item 3']\"></c8y-select>\n   * ```\n   *\n   * For more complex scenarios, you can use content-projection:\n   *\n   * @example\n   * ```html\n   * <c8y-select>\n   *    <i [c8yIcon]=\"'rocket'\" class=\"text-16\" *c8ySelectItem=\"'rocket'; label: 'Rocket'\"></i>\n   *    <i [c8yIcon]=\"'car'\" class=\"text-16\" *c8ySelectItem=\"'car'; label: 'Car'\"></i>\n   * </c8y-select>\n   * ```\n   */\n  @Input() set items(value: string[] | SelectableItem[] | SelectableItemTemplate[]) {\n    this._items = value.map(item => {\n      if (typeof item === 'string') {\n        return { label: item, value: item };\n      }\n      return item;\n    });\n  }\n\n  /**\n   * The items to be displayed in the select.\n   */\n  get items(): SelectableItemTemplate[] {\n    return this._items;\n  }\n\n  /**\n   * The selected item.\n   */\n  @Input()\n  set selected(value: string | SelectableItem | Array<string | SelectableItem>) {\n    const ensuredArray: (string | SelectableItem)[] = Array.isArray(value) ? value : [value];\n    const normalizedArray = ensuredArray.map(item => {\n      if (typeof item === 'string') {\n        return { label: item, value: item };\n      }\n      return item;\n    });\n    this._selected = normalizedArray\n      .map(item => {\n        return this._items.find(i => i.value === item.value);\n      })\n      .filter(Boolean);\n  }\n\n  /**\n   * Returns the selected item.\n   */\n  get selected(): SelectableItem[] {\n    return this._selected;\n  }\n\n  /**\n   * The container to put the dropdown to. Defaults to body.\n   */\n  @Input()\n  container: '' | 'body' = 'body';\n\n  /**\n   * If set to true, the user can select multiple items.\n   */\n  @Input()\n  multi = false;\n\n  /**\n   * If enabled, an item can be selected with the space key.\n   */\n  @Input() canSelectWithSpace = !this.multi;\n\n  /**\n   * If set to true, the select is disabled.\n   */\n  @Input()\n  disabled = false;\n\n  /**\n   * Defines, if the dropdown should close automatically after user interaction.\n   */\n  @Input()\n  autoClose = true;\n\n  /**\n   * Defines if the dropdown should stay open when the user clicks inside the select.\n   * If set to true, the dropdown will only close when the user clicks outside the select.\n   */\n  @Input()\n  insideClick: boolean;\n\n  /**\n   * Marks the select as required.\n   */\n  @Input()\n  required = false;\n\n  /**\n   * Allows the user to clear the selection.\n   */\n  @Input()\n  canDeselect = false;\n\n  /**\n   * The name used for this select.\n   */\n  @Input()\n  name = 'select';\n\n  /**\n   * The icon to be displayed in the select.\n   */\n  @Input()\n  icon = 'caret-down';\n\n  /**\n   * If set to true, the items will be filtered based on the user input\n   * in the search field. if false, only the right item will be highlighted.\n   */\n  @Input()\n  filterItems = false;\n\n  /**\n   * Emits if a item is selected.\n   */\n  @Output()\n  onSelect = new EventEmitter<SelectableItem>();\n\n  /**\n   * Emits if a item was deselected.\n   */\n  @Output()\n  onDeselect = new EventEmitter<SelectableItem>();\n\n  /**\n   * Emits when the select icon is clicked.\n   */\n  @Output()\n  onIconClick = new EventEmitter<{ icon: string; $event: MouseEvent }>();\n\n  /**\n   * Indicates if the search input has focus.\n   */\n  searchHasFocus = false;\n\n  /**\n   * The selectable items when content projection is used.\n   * @ignore\n   */\n  @ContentChildren(SelectItemDirective) projectedSelectableItems: QueryList<SelectItemDirective>;\n\n  /**\n   * The selected items when content projection is used.\n   * @ignore\n   */\n  @ContentChild(SelectedItemsDirective) projectedSelectedItems: SelectedItemsDirective;\n\n  @ViewChild('searchControl', { static: false }) private searchControl: ElementRef;\n  @ViewChild('dropdown', { static: false }) private dropdown: BsDropdownDirective;\n  @ViewChildren(ListItemComponent) private list: QueryList<ListItemComponent>;\n\n  /**\n   * A item which is preselected. It is used when a user types in the search input to give a visual typeahead feedback.\n   */\n  get preselectedItem(): SelectableItem {\n    return this._preselectedItem;\n  }\n\n  /**\n   * The internal select element.\n   * @ignore\n   */\n  private _selected: SelectableItem[] = [];\n\n  /**\n   * The internal pre-select element. It is used when a user types in the search input to give a visual typeahead feedback.\n   * @ignore\n   */\n  private _preselectedItem: SelectableItem;\n\n  /**\n   * The internal items element.\n   * @ignore\n   */\n  private _items: SelectableItemTemplate[] = [];\n\n  private destroy$ = new Subject<void>();\n  private onChange: (items: SelectableItem | SelectableItem[]) => void;\n  private onTouched: () => void;\n\n  /**\n   * @ignore\n   * @param selectKeyboardService The service to handle keyboard navigation.\n   */\n  constructor(private selectKeyboardService: SelectKeyboardService) {\n    this.selectKeyboardService.options = {\n      emptyInput: !this.filterItems,\n      keyboardSearch: true,\n      spaceSelect: this.canSelectWithSpace,\n      noMatchHighlightFirst: this.filterItems\n    };\n  }\n\n  /**\n   * @ignore\n   */\n  ngAfterContentInit(): void {\n    if (this.projectedSelectableItems.length > 0) {\n      this.projectedSelectableItems.forEach(item => {\n        this._items.push({\n          label: item.label,\n          value: item.value,\n          template: item.templateRef\n        });\n      });\n    }\n\n    if (!this.insideClick) {\n      this.insideClick = this.multi;\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  ngAfterViewInit(): void {\n    this.selectKeyboardService\n      .register$(this.searchControl.nativeElement, this.list, this.dropdown)\n      .subscribe(selectedIndex => {\n        if (selectedIndex > -1) {\n          this._preselectedItem = this._items[selectedIndex];\n        } else {\n          this._preselectedItem = null;\n        }\n      });\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.canSelectWithSpace || changes.filterItems) {\n      this.selectKeyboardService.options = {\n        emptyInput: !(changes.filterItems?.currentValue || this.filterItems),\n        keyboardSearch: true,\n        spaceSelect: changes.canSelectWithSpace?.currentValue || this.canSelectWithSpace,\n        noMatchHighlightFirst: changes.filterItems?.currentValue || this.filterItems\n      };\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.selectKeyboardService.unregister();\n  }\n\n  /**\n   * Selects an item. In the multi mode, it will toggle the selection of the item.\n   * @param item The item to select.\n   */\n  select(item: SelectableItem): void {\n    if (this.multi) {\n      const isSelected = this._selected.indexOf(item) > -1;\n      if (isSelected) {\n        this.deselect(item);\n        return;\n      }\n      this._selected.push(item);\n      this.emitChangeEvent();\n      this.onSelect.emit(item);\n      return;\n    }\n    this._selected = [item];\n    this._preselectedItem = item;\n    this.emitChangeEvent();\n    this.onSelect.emit(item);\n  }\n\n  /**\n   * Deselects an item.\n   * @param item The item to deselect.\n   */\n  deselect(item: SelectableItem): void {\n    let index = this._selected.indexOf(item);\n    if (index === -1) {\n      index = this._selected.findIndex(i => isEqual(i, item));\n    }\n    if (index > -1) {\n      this._selected.splice(index, 1);\n      this.emitChangeEvent();\n      this.onDeselect.emit(item);\n      this._preselectedItem = null;\n    }\n  }\n\n  /**\n   * Deselects all items\n   */\n  deselectAll(): void {\n    if (this._selected.length > 0) {\n      this.onDeselect.emit();\n      this._selected = [];\n      this._preselectedItem = null;\n      this.searchControl.nativeElement.value = '';\n      this.close();\n      this.emitChangeEvent();\n    }\n  }\n\n  /**\n   * Closes the dropdown.\n   */\n  close(): void {\n    this.dropdown.hide();\n  }\n\n  /**\n   * Opens the dropdown.\n   */\n  open(): void {\n    this.dropdown.show();\n  }\n\n  /**\n   * @ignore\n   * @param value The value to write.\n   */\n  writeValue(value: SelectableItem | SelectableItem[]) {\n    if (value) {\n      this.selected = value;\n    }\n  }\n\n  /**\n   * @ignore\n   * @param fn The function to register for onChange.\n   */\n  registerOnChange(fn: (items: SelectableItem | SelectableItem[]) => void): void {\n    this.onChange = fn;\n  }\n\n  /**\n   * @ignore\n   * @param fn The function to register for onTouched.\n   */\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * @ignore\n   * @param isDisabled Should disable or not\n   */\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  /**\n   * @ignore\n   */\n  doBlur(): void {\n    this.searchHasFocus = false;\n    if (this.onTouched) {\n      this.onTouched();\n    }\n  }\n\n  /**\n   * @ignore\n   */\n  doFocus(): void {\n    this.open();\n    queueMicrotask(() => {\n      this.searchHasFocus = true;\n    });\n  }\n\n  /**\n   * @ignore\n   */\n  validate(control: AbstractControl): ValidationErrors {\n    if (this.required && (!control.value || control.value.length === 0)) {\n      return { required: true };\n    }\n    return null;\n  }\n\n  /**\n   * Triggered if the dropdown was shown.\n   * @ignore\n   */\n  onShown(): void {\n    this.searchControl.nativeElement.focus();\n  }\n\n  /**\n   * Triggered if the dropdown was hidden.\n   * @ignore\n   */\n  onHidden(): void {\n    this.searchControl.nativeElement.value = '';\n    this._preselectedItem = null;\n  }\n\n  private emitChangeEvent(): void {\n    if (typeof this.onChange === 'function') {\n      this.onChange(this.multi ? this._selected : this._selected[0]);\n    }\n  }\n}\n","<div\n  class=\"c8y-search-dropdown dropdown fit-w\"\n  placement=\"bottom left\"\n  dropdown\n  [container]=\"container\"\n  #dropdown=\"bs-dropdown\"\n  [autoClose]=\"autoClose\"\n  [isDisabled]=\"disabled\"\n  [insideClick]=\"insideClick\"\n  (onShown)=\"onShown()\"\n  (onHidden)=\"onHidden()\"\n  dropdownToggle\n  (click)=\"open()\"\n>\n  <div\n    class=\"input-group input-group-dropdown\"\n    role=\"button\"\n  >\n    <div\n      class=\"form-control text-truncate\"\n      [ngClass]=\"{\n        'm-r-80': canDeselect && selected.length > 0,\n        'm-r-40': !canDeselect || selected.length === 0,\n        'text-truncate': !multi,\n        'inner-scroll d-flex a-i-center': multi\n      }\"\n    >\n      <!-- rendering of selected items (with content projection) -->\n      @if (projectedSelectedItems) {\n        <div class=\"selected-items\">\n          @for (selectedItem of selected; track selectedItem) {\n            <ng-container\n              *ngTemplateOutlet=\"\n                projectedSelectedItems.templateRef;\n                context: { $implicit: selectedItem }\n              \"\n            ></ng-container>\n          }\n        </div>\n        @if (selected.length === 0 && !searchHasFocus && searchControl.value.length === 0) {\n          <i class=\"text-muted\">\n            {{ placeholder | translate }}\n          </i>\n        }\n      } @else {\n        <div class=\"selected-items\">\n          @if (!multi) {\n            <!-- hidden is needed, otherwise the propagation does not work correctly -->\n            <span [hidden]=\"!searchHasFocus || !preselectedItem || filterItems\">\n              {{ preselectedItem?.label | translate }}\n            </span>\n            <span [hidden]=\"searchHasFocus || selected.length !== 1\">\n              {{ selected[0]?.label | translate }}\n            </span>\n          }\n          @if (selected.length === 0 && !preselectedItem && searchControl.value.length === 0) {\n            <i class=\"text-muted\">\n              {{ placeholder | translate }}\n            </i>\n          }\n          @if (multi) {\n            <span class=\"m-r-4\">{{ searchControl.value }}</span>\n            @for (selectedItem of selected; track selectedItem) {\n              <span class=\"tag tag--info chip\">\n                <button\n                  class=\"btn btn-xs btn-clean text-10 m-r-4\"\n                  title=\"{{ selectedItem.label | translate }}\"\n                  type=\"button\"\n                  [disabled]=\"disabled\"\n                  (click)=\"\n                    $event.preventDefault(); $event.stopPropagation(); deselect(selectedItem)\n                  \"\n                >\n                  <i c8yIcon=\"times\"></i>\n                </button>\n                {{ selectedItem.label | translate }}\n              </span>\n            }\n          }\n        </div>\n      }\n    </div>\n\n    <input\n      class=\"form-control text-truncate\"\n      type=\"text\"\n      autocomplete=\"off\"\n      #searchControl\n      [ngClass]=\"{\n        'p-absolute': true,\n        'm-r-80': canDeselect && selected.length > 0,\n        'm-r-40': !canDeselect || selected.length === 0\n      }\"\n      [required]=\"required\"\n      (blur)=\"doBlur()\"\n      (focus)=\"doFocus()\"\n      [name]=\"name\"\n      [disabled]=\"disabled\"\n    />\n\n    <span class=\"input-group-btn\">\n      <!-- this button is displayed only if we have something selected and are allowed to deselect -->\n      @if (canDeselect && selected.length > 0) {\n        <button\n          class=\"btn btn-dot\"\n          title=\"{{ 'Deselect' | translate }}\"\n          type=\"button\"\n          [disabled]=\"disabled\"\n          (click)=\"$event.preventDefault(); $event.stopPropagation(); deselectAll()\"\n          data-cy=\"deselect-all-button\"\n        >\n          <i c8yIcon=\"times\"></i>\n        </button>\n      }\n      <button\n        class=\"btn btn-dot\"\n        title=\"{{ 'Search' | translate }}\"\n        type=\"button\"\n        [disabled]=\"disabled\"\n        (click)=\"onIconClick.emit({ icon, $event })\"\n        data-cy=\"select-button\"\n      >\n        <i\n          class=\"text-primary\"\n          [c8yIcon]=\"icon\"\n        ></i>\n      </button>\n    </span>\n  </div>\n\n  <c8y-list-group\n    class=\"dropdown-menu dropdown-menu--modal dropdown-menu--select\"\n    [style.width]=\"container === 'body' ? searchControl.parentNode.clientWidth + 'px' : undefined\"\n    role=\"menu\"\n    data-cy=\"select--dropdown-menu\"\n    *dropdownMenu\n  >\n    <!-- rendering of items (default) -->\n    @for (item of filterItems ? (items | filterBy: searchControl.value) : items; track item) {\n      <c8y-li\n        style=\"cursor: pointer\"\n        [selectable]=\"true\"\n        [dense]=\"true\"\n        [active]=\"!multi && item.value === selected[0]?.value\"\n        (click)=\"select(item)\"\n      >\n        <span [attr.data-search-label]=\"item.label | translate\"></span>\n        @if (multi) {\n          <c8y-li-checkbox\n            [selected]=\"selected.indexOf(item) > -1\"\n            (click)=\"$event.preventDefault()\"\n          ></c8y-li-checkbox>\n        }\n        @if (!item.template) {\n          <c8y-li-body>\n            {{ item.label | translate }}\n          </c8y-li-body>\n        }\n        <ng-container\n          *ngTemplateOutlet=\"item?.template\"\n          ngProjectAs=\"c8y-li-body\"\n        ></ng-container>\n      </c8y-li>\n    }\n    <ng-content select=\"div\"></ng-content>\n  </c8y-list-group>\n</div>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'c8y-selected-items',\n  templateUrl: './selected-items.component.html',\n  standalone: true\n})\nexport class SelectedItemsComponent {}\n","<ng-content></ng-content>","import { NgModule } from '@angular/core';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { SelectLegacyComponent } from './select-legacy.component';\nimport { CommonModule } from '../common/common.module';\nimport { TypeaheadComponent } from './typeahead.component';\nimport { ListGroupModule } from '../list-group/list-group.module';\nimport { FormsModule } from '../forms/forms.module';\nimport { NameTransformPipe } from '../i18n';\nimport { SelectComponent } from './select.component';\nimport { SelectedItemsComponent } from './selected-items.component';\nimport { SelectItemDirective } from './select-item.directive';\nimport { SelectedItemsDirective } from './selected-items.directive';\n\n/**\n * The angular module definition for a select.\n * @exports SelectComponent\n */\n@NgModule({\n  imports: [\n    BsDropdownModule.forRoot(),\n    CommonModule,\n    ListGroupModule,\n    FormsModule,\n    NameTransformPipe,\n    SelectComponent,\n    SelectLegacyComponent,\n    TypeaheadComponent,\n    SelectedItemsComponent,\n    SelectItemDirective,\n    SelectedItemsDirective\n  ],\n  exports: [\n    SelectComponent,\n    SelectLegacyComponent,\n    TypeaheadComponent,\n    SelectedItemsComponent,\n    SelectItemDirective,\n    SelectedItemsDirective\n  ]\n})\nexport class SelectModule {}\n","import { NgModule } from '@angular/core';\nimport { DeviceStatusComponent } from './device-status.component';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { CommonModule } from '../common/common.module';\n/**\n * The angular module definition for a device-status.\n * @exports DeviceStatusComponent\n */\n@NgModule({\n  imports: [CommonModule, TooltipModule, DeviceStatusComponent],\n  exports: [DeviceStatusComponent]\n})\nexport class DeviceStatusModule {}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CommonModule } from '../common/common.module';\nimport { SearchOutletComponent } from './search-outlet.component';\nimport { SearchComponent } from './search.component';\nimport { FormsModule } from '@angular/forms';\nimport { HighlightComponent } from './highlight.component';\nimport { SearchResultEmptyComponent } from './search-result-empty.component';\nimport { SearchInputComponent } from './search-input.component';\nimport { SelectModule } from '../select/select.module';\nimport { ListGroupModule } from '../list-group/list-group.module';\nimport { DeviceStatusModule } from '../device-status/device-status.module';\nimport { A11yModule } from '@angular/cdk/a11y';\n\n/**\n * The angular module definition for the search.\n * @exports SearchComponent\n * @exports SearchOutletComponent\n * @exports HighlightComponent A component to highlight search results.\n */\n@NgModule({\n  imports: [\n    A11yModule,\n    FormsModule,\n    BsDropdownModule,\n    CommonModule,\n    SelectModule,\n    ListGroupModule,\n    DeviceStatusModule,\n    RouterModule.forChild([]),\n    SearchOutletComponent,\n    SearchComponent,\n    HighlightComponent,\n    SearchResultEmptyComponent,\n    SearchInputComponent\n  ],\n  exports: [\n    SearchOutletComponent,\n    SearchComponent,\n    HighlightComponent,\n    SearchResultEmptyComponent,\n    SearchInputComponent\n  ]\n})\nexport class CoreSearchModule {}\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Status, StatusType } from '../common/status.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { GainsightService } from '../product-experience/gainsight.service';\nimport { ProductExperienceEvent } from '../product-experience/product-experience.model';\nimport { ConfirmModalComponent, ConfirmOptions } from './modal-confirm.component';\n\n/**\n * Service to show a modal.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ModalService {\n  constructor(\n    private modalService: BsModalService,\n    private gainsightService: GainsightService\n  ) {}\n\n  /**\n   * Shows a quick confirm message modal.\n   * @param title The title of that modal.\n   * @param body The text body to display.\n   * @param status The status.\n   * @param labels The labels to use. Default: { ok: 'Confirm', cancel: 'Cancel'}\n   * @param confirmOptions Selection options to display as checkbox list.\n   * @param productExperienceEvent Additional data to attach to custom product experience events.\n   * @param requireCodeVerification Whether to require user to retype a random code for confirmation.\n   */\n  async confirm(\n    title: string,\n    body: string,\n    status: StatusType = Status.INFO,\n    labels: ConfirmModalComponent['labels'] = {},\n    confirmOptions: ConfirmOptions = {},\n    productExperienceEvent: ProductExperienceEvent = { eventName: 'confirmModal' },\n    requireCodeVerification = false\n  ) {\n    const modalLabels = {\n      ok: labels.ok || gettext('Confirm'),\n      cancel: labels.cancel || gettext('Cancel')\n    };\n    const modalRef = this.modalService.show(ConfirmModalComponent, {\n      initialState: {\n        title,\n        body,\n        labels: modalLabels,\n        status,\n        confirmOptions,\n        requireCodeVerification\n      },\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      ignoreBackdropClick: true\n    });\n    if (productExperienceEvent) {\n      productExperienceEvent.data = { ...productExperienceEvent.data, title };\n    }\n    this.triggerEvent(modalRef.content.result, modalLabels, productExperienceEvent);\n    return await modalRef.content.result;\n  }\n\n  /**\n   * Shows a quick acknowledge message modal.\n   * @param title The title of that modal.\n   * @param body The text body to display.\n   * @param status The status.\n   * @param acknowledgeLabel The label to use.\n   * @param productExperienceEvent Additional data to attach to custom product experience events.\n   */\n  async acknowledge(\n    title: string,\n    body: string,\n    status: StatusType = Status.INFO,\n    acknowledgeLabel: string = gettext('Confirm'),\n    productExperienceEvent: ProductExperienceEvent = { eventName: 'confirmModal' }\n  ) {\n    const labels = { ok: acknowledgeLabel, cancel: null };\n    const modalRef = this.modalService.show(ConfirmModalComponent, {\n      initialState: { title, body, labels, status },\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      ignoreBackdropClick: true\n    });\n    if (productExperienceEvent) {\n      productExperienceEvent.data = { ...productExperienceEvent.data, title };\n    }\n    this.triggerEvent(modalRef.content.result, labels, productExperienceEvent);\n    return await modalRef.content.result;\n  }\n\n  /**\n   * Shows a quick logout confirmation modal.\n   * @param body The text body to display. Default: 'You will be logged out to apply your changes. Do you want to proceed?'\n   * @param status The status.\n   * @param labels The labels to use. Default: { ok: 'Confirm and log out', cancel: 'Cancel' }\n   */\n  async confirmLogout(body?: string, status: StatusType = Status.WARNING, labels: any = {}) {\n    const modalLabels = {\n      ok: labels.ok || gettext('Confirm and log out'),\n      cancel: labels.cancel || gettext('Cancel')\n    };\n    const modalBody =\n      body || gettext('You must log out to apply your changes. Do you want to proceed?');\n    return await this.confirm(gettext('Logout required'), modalBody, status, modalLabels);\n  }\n\n  private triggerEvent(\n    result: Promise<boolean | { confirmed: boolean; confirmOptions: { [key: string]: boolean } }>,\n    labels: any,\n    productExperienceEvent: ProductExperienceEvent\n  ): void {\n    const data = { ...productExperienceEvent.data, url: window.location.href };\n    result\n      .then(() => {\n        this.gainsightService.triggerEvent(productExperienceEvent.eventName, {\n          ...data,\n          result: labels.ok\n        });\n      })\n      .catch(() => {\n        this.gainsightService.triggerEvent(productExperienceEvent.eventName, {\n          ...data,\n          result: labels.cancel\n        });\n      });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, fromEvent, of } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\nimport { OptionsService } from '../common/options.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { SupportedIcons } from '@c8y/ngx-components/icon-selector/icons';\nimport { getThemePreference, applyTheme, setThemePreference } from '@c8y/bootstrap';\n\nexport type ThemeOptions = 'light' | 'dark';\nexport type ThemePreferenceOptions = ThemeOptions | 'system';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ThemeSwitcherService {\n  darkThemeClass = `c8y-dark-theme`;\n  darkThemeAvailable$: Observable<boolean>;\n  userSelectedThemePreference$: Observable<ThemePreferenceOptions>;\n  currentlyAppliedTheme$: Observable<ThemeOptions>;\n  disableThemeSelection$: Observable<boolean>;\n  themeOptions = [\n    {\n      label: gettext('Light'),\n      value: 'light',\n      icon: 'sun'\n    },\n    {\n      label: gettext('Dark'),\n      value: 'dark',\n      icon: 'moon'\n    },\n    {\n      label: gettext('System'),\n      value: 'system',\n      icon: 'imac-settings'\n    }\n  ] as const satisfies {\n    label: string;\n    value: ThemePreferenceOptions;\n    icon: SupportedIcons;\n  }[];\n  private _userSelectedThemePreference$ = new BehaviorSubject<ThemePreferenceOptions>(\n    this.getCurrentThemePreference()\n  );\n  private _temporaryThemePreference$ = new BehaviorSubject<ThemeOptions | 'none'>('none');\n\n  constructor(private options: OptionsService) {\n    this.userSelectedThemePreference$ = this._userSelectedThemePreference$.asObservable();\n    const userSelectedTheme$ = this.userSelectedThemePreference$.pipe(\n      switchMap(preference => {\n        if (preference === 'system') {\n          return this.getUsersSystemPreferenceForTheme$();\n        }\n        return of(preference);\n      })\n    );\n    this.disableThemeSelection$ = this._temporaryThemePreference$.pipe(\n      map(preference => preference !== 'none')\n    );\n    this.currentlyAppliedTheme$ = this._temporaryThemePreference$.pipe(\n      switchMap(temporaryPreference => {\n        if (temporaryPreference !== 'none') {\n          return of(temporaryPreference);\n        }\n        return userSelectedTheme$;\n      })\n    );\n    this.darkThemeAvailable$ = this.options.get$('darkThemeAvailable').pipe(map(value => !!value));\n  }\n\n  getCurrentThemePreference(): 'light' | 'dark' | 'system' {\n    const value = getThemePreference();\n    if (value === 'system' || value === 'dark') {\n      return value;\n    }\n    return 'light';\n  }\n\n  getUsersSystemPreferenceForTheme$() {\n    return fromEvent(window.matchMedia('(prefers-color-scheme: dark)'), 'change').pipe(\n      startWith(window.matchMedia('(prefers-color-scheme: dark)')),\n      map((e: MediaQueryList) => (e.matches ? 'dark' : 'light'))\n    );\n  }\n\n  changeUserPreference(preference: 'light' | 'dark' | 'system') {\n    setThemePreference(preference);\n    this._userSelectedThemePreference$.next(preference);\n    this.applyTheme(preference);\n  }\n\n  temporaryChangeTheme(preference: 'light' | 'dark') {\n    this._temporaryThemePreference$.next(preference);\n    this.applyTheme(preference);\n  }\n\n  resetTemporaryTheme() {\n    this._temporaryThemePreference$.next('none');\n    this.applyTheme(this.getCurrentThemePreference());\n  }\n\n  applyTheme(preference: 'light' | 'dark' | 'system') {\n    applyTheme(preference);\n  }\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { AppStateService } from '../common/ui-state.service';\nimport { TranslateService } from '../i18n/translate.service';\nimport { ModalService } from '../modal/modal.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { UserPreferencesService } from '../common/user-preferences/user-preferences.service';\nimport { Status } from '../common/status.model';\nimport { Observable, Subject } from 'rxjs';\nimport { HeaderService } from '../header/header.service';\nimport { filter, first, takeUntil } from 'rxjs/operators';\nimport { ThemeSwitcherService } from './theme-switcher.service';\nimport { IconDirective } from '../common/icon.directive';\nimport { NgIf, NgFor, AsyncPipe } from '@angular/common';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { FormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-ui-settings',\n  templateUrl: './ui-settings.component.html',\n  standalone: true,\n  imports: [\n    IconDirective,\n    NgIf,\n    C8yTranslateDirective,\n    NgFor,\n    FormsModule,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class UiSettingsComponent implements OnInit, OnDestroy {\n  open$: Observable<boolean>;\n  currentLang: string;\n  languages: { lang: string; nativeLanguage: string }[];\n  private destroyed$: Subject<void> = new Subject();\n\n  constructor(\n    private translate: TranslateService,\n    private state: AppStateService,\n    private ui: AppStateService,\n    private userPreferences: UserPreferencesService,\n    private c8yModalService: ModalService,\n    private headerService: HeaderService,\n    public themeSwitcher: ThemeSwitcherService\n  ) {\n    this.currentLang = this.ui.state.lang;\n    this.ui.state$\n      .pipe(\n        filter(({ lang }) => lang !== this.currentLang),\n        takeUntil(this.destroyed$),\n        first()\n      )\n      .subscribe(({ lang }) => (this.currentLang = lang));\n    this.open$ = this.headerService.rightDrawerOpen$;\n  }\n\n  ngOnInit() {\n    this.languages = (this.state.state.langs as string[]).map(l => ({\n      lang: l,\n      nativeLanguage: this.translate.getNativeLanguage(l)\n    }));\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n\n  async onLanguageChange(changedLang: string): Promise<void> {\n    if (!changedLang) {\n      return;\n    }\n    await this.translate.switchToLanguage(changedLang);\n    if (await this.persistLanguage(changedLang)) {\n      location.reload();\n    }\n  }\n\n  async persistLanguage(lang: string): Promise<boolean> {\n    let shouldReload = true;\n    try {\n      await this.c8yModalService.confirm(\n        gettext('Reload recommended'),\n        gettext(\n          'To change the language in the entire application, we recommend you to reload the page. If you have any unsaved changes, you can reload later. How would you like to proceed?'\n        ),\n        Status.WARNING,\n        {\n          ok: gettext('Reload now'),\n          cancel: gettext('Reload later')\n        }\n      );\n    } catch (ex) {\n      shouldReload = false;\n    } finally {\n      this.translate.saveInLocalStorage(lang);\n      await this.userPreferences.set('language', lang);\n      this.currentLang = lang;\n    }\n    return shouldReload;\n  }\n}\n","<div class=\"separator-top p-t-8 p-b-8\">\n  <div class=\"c8y-right-drawer__item sticky-top\">\n    <i c8yIcon=\"eyedropper\"></i>\n    <span class=\"text-bold\">{{ 'UI settings' | translate }}</span>\n  </div>\n\n  <div\n    class=\"p-l-16 p-r-16 p-b-16\"\n    *ngIf=\"themeSwitcher.darkThemeAvailable$ | async\"\n  >\n    <p translate>Theme</p>\n    <div\n      class=\"c8y-switch-multistate\"\n      *ngIf=\"themeSwitcher.userSelectedThemePreference$ | async as themePreference\"\n    >\n      <ng-container *ngFor=\"let themeOption of themeSwitcher.themeOptions; index as i\">\n        <input\n          [attr.aria-label]=\"themeOption.label\"\n          tabindex=\"{{ (open$ | async) ? '0' : '-1' }}\"\n          name=\"theme-switcher\"\n          type=\"radio\"\n          [id]=\"'theme-option-' + i\"\n          [disabled]=\"themeSwitcher.disableThemeSelection$ | async\"\n          [checked]=\"themePreference === themeOption.value\"\n          (click)=\"themeSwitcher.changeUserPreference(themeOption.value)\"\n        />\n        <label\n          title=\"{{ themeOption.label | translate }}\"\n          [for]=\"'theme-option-' + i\"\n        >\n          <i [c8yIcon]=\"themeOption.icon\"></i>\n        </label>\n      </ng-container>\n      <div class=\"c8y-switch-multistate__handle\"></div>\n    </div>\n  </div>\n\n  <div class=\"form-group p-l-16 p-r-16\">\n    <label\n      for=\"userLang\"\n      translate\n    >\n      Language\n    </label>\n    <div class=\"c8y-select-wrapper\">\n      <select\n        id=\"userLang\"\n        tabindex=\"{{ (open$ | async) ? '0' : '-1' }}\"\n        #selectLang\n        [ngModel]=\"currentLang\"\n        (change)=\"onLanguageChange(selectLang.value)\"\n      >\n        <option\n          *ngFor=\"let language of languages\"\n          [value]=\"language.lang\"\n        >\n          {{ language.nativeLanguage }}\n        </option>\n      </select>\n      <span></span>\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from './../common/common.module';\nimport { UiSettingsComponent } from './ui-settings.component';\nimport { FormsModule } from '@angular/forms';\nimport { hookDrawer } from '../drawer/drawer.service';\n\n@NgModule({\n  imports: [CommonModule, FormsModule, UiSettingsComponent],\n  exports: [UiSettingsComponent]\n})\nexport class UiSettingsModule {\n  static providers() {\n    return [\n      hookDrawer({\n        component: UiSettingsComponent,\n        position: 'right',\n        priority: 90,\n        id: 'uiSettings'\n      })\n    ];\n  }\n}\n","import { Component, Input, ViewChild, EventEmitter, Output } from '@angular/core';\nimport { UserMenuItem } from './user.model';\nimport { UserMenuService } from './user-menu.service';\nimport { HeaderService } from '../header/header.service';\nimport { Observable } from 'rxjs';\nimport { NgIf, AsyncPipe } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n@Component({\n  selector: 'c8y-user-menu-item',\n  templateUrl: './user-menu-item.component.html',\n  standalone: true,\n  imports: [NgIf, C8yTranslatePipe, AsyncPipe]\n})\nexport class UserMenuItemComponent implements UserMenuItem {\n  @Input()\n  icon: SupportedIconsSuggestions;\n  @Input()\n  label: string;\n  @Input()\n  link: string;\n  @Input()\n  target: string;\n  @Input()\n  priority = 0;\n  @Input()\n  dataCy: string;\n  open$: Observable<boolean>;\n  @ViewChild('template', { static: false }) template: any;\n\n  @Output()\n  click = new EventEmitter<UserMenuItem>();\n  private viewInitTimeout;\n\n  constructor(\n    private userService: UserMenuService,\n    private headerService: HeaderService\n  ) {\n    this.open$ = this.headerService.rightDrawerOpen$;\n  }\n\n  ngAfterViewInit() {\n    this.viewInitTimeout = setTimeout(() => this.userService.add(this as UserMenuItem));\n  }\n\n  ngOnDestroy() {\n    clearTimeout(this.viewInitTimeout);\n    this.userService.remove(this as UserMenuItem);\n  }\n\n  onClick() {\n    this.click.emit(this);\n  }\n}\n","<ng-template #template>\n  <li>\n    <a\n      class=\"c8y-right-drawer__link\"\n      [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n      (click)=\"onClick()\"\n      [attr.data-cy]=\"dataCy\"\n      *ngIf=\"link\"\n      [attr.href]=\"link\"\n      [attr.target]=\"target\"\n    >\n      {{ label | translate }}\n      <ng-content></ng-content>\n    </a>\n    <button\n      class=\"c8y-right-drawer__link\"\n      [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n      type=\"button\"\n      *ngIf=\"!link\"\n      (click)=\"onClick()\"\n      [attr.data-cy]=\"dataCy\"\n    >\n      {{ label | translate }}\n      <ng-content></ng-content>\n    </button>\n  </li>\n</ng-template>\n","import { Component, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { UserService, ICredentials, FetchClient, Client, BasicAuth } from '@c8y/client';\nimport { AppStateService } from '../common/ui-state.service';\nimport { AlertService } from '../alert/alert.service';\nimport { ModalComponent } from '../modal/modal.component';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { FormsModule } from '@angular/forms';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';\nimport { MessagesComponent } from '../forms/messages.component';\nimport { MessageDirective } from '../forms/message.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-password-confirm-modal',\n  templateUrl: './password-confirm-modal.component.html',\n  standalone: true,\n  imports: [\n    ModalComponent,\n    FormsModule,\n    FormGroupComponent,\n    C8yTranslateDirective,\n    RequiredInputPlaceholderDirective,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class PasswordConfirmModalComponent {\n  @Output() passwordConfirmedEmitter = new EventEmitter<boolean>();\n  loading = false;\n  password: string;\n\n  @ViewChild('modal', { static: false }) private modal: ModalComponent;\n\n  constructor(\n    public user: UserService,\n    public ui: AppStateService,\n    private client: FetchClient,\n    private alert: AlertService\n  ) {}\n\n  async passwordConfirm() {\n    if (this.password) {\n      const supportUserName = this.ui.currentSupportUserName.value;\n      const userId = this.ui.currentUser.value.id;\n      const credentials: ICredentials = {\n        password: this.password,\n        user: `${supportUserName ? `${supportUserName}$` : ''}${userId}`,\n        tenant: this.client.tenant\n      };\n      try {\n        this.loading = true;\n        const auth = new BasicAuth(credentials);\n        const newClient = this.createNewClient(auth, this.client.baseUrl);\n        await newClient.user.current();\n        this.emitSuccessAndClose();\n      } catch (e) {\n        if (e.res && e.res.status === 401 && e.data && /pin|totp/i.test(e.data.message)) {\n          this.emitSuccessAndClose();\n        } else {\n          this.alert.danger(gettext(\"Provided password doesn't match your current one.\"));\n        }\n      } finally {\n        this.loading = false;\n      }\n    }\n  }\n\n  cancel() {\n    this.passwordConfirmedEmitter.emit(false);\n    this.modal._dismiss();\n  }\n\n  createNewClient(auth: BasicAuth, baseUrl: string) {\n    return new Client(auth, baseUrl);\n  }\n\n  private emitSuccessAndClose() {\n    this.passwordConfirmedEmitter.emit(true);\n    this.modal._dismiss();\n  }\n}\n","<c8y-modal [customFooter]=\"true\" [title]=\"'Confirm your current password' | translate\" #modal>\r\n  <form #confirmForm=\"ngForm\" (ngSubmit)=\"confirmForm.form.valid && passwordConfirm()\">\r\n    <div class=\"d-block p-24 p-b-0\">\r\n      <c8y-form-group [hasWarning]=\"true\">\r\n        <label translate for=\"currentPassword\">Enter your password</label>\r\n        <input\r\n          id=\"currentPassword\"\r\n          [(ngModel)]=\"password\"\r\n          type=\"password\"\r\n          name=\"password\"\r\n          class=\"form-control\"\r\n          placeholder=\"{{ 'Enter your password' | translate }}\"\r\n          required\r\n        />\r\n        <c8y-messages>\r\n          <c8y-message translate>\r\n            Enter the password of the user that you are currently logged in with.\r\n          </c8y-message>\r\n        </c8y-messages>\r\n      </c8y-form-group>\r\n    </div>\r\n    <div class=\"modal-footer separator-top bg-level-0 sticky-bottom\">\r\n      <button\r\n        title=\"{{ 'Cancel' | translate }}\"\r\n        class=\"btn btn-default\"\r\n        type=\"button\"\r\n        (click)=\"cancel()\"\r\n      >\r\n        {{ 'Cancel' | translate }}\r\n      </button>\r\n      <button\r\n        title=\"{{ 'Confirm' | translate }}\"\r\n        class=\"btn btn-primary\"\r\n        type=\"submit\"\r\n        [disabled]=\"!confirmForm.form.valid || loading\"\r\n      >\r\n        {{ 'Confirm' | translate }}\r\n      </button>\r\n    </div>\r\n  </form>\r\n</c8y-modal>\r\n","import { Component, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ModalComponent } from '../modal/modal.component';\nimport { FormsModule } from '@angular/forms';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';\nimport { MessagesComponent } from '../forms/messages.component';\nimport { MessageDirective } from '../forms/message.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-current-password-modal',\n  templateUrl: './current-password-modal.component.html',\n  standalone: true,\n  imports: [\n    ModalComponent,\n    FormsModule,\n    FormGroupComponent,\n    C8yTranslateDirective,\n    RequiredInputPlaceholderDirective,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class CurrentPasswordModalComponent {\n  @Output() currentPasswordEmitter = new EventEmitter<string | null>();\n  password: string;\n\n  constructor(private modal: BsModalRef) {}\n\n  passwordConfirm() {\n    this.currentPasswordEmitter.emit(this.password);\n    this.modal.hide();\n  }\n\n  cancel() {\n    this.currentPasswordEmitter.emit(null);\n    this.modal.hide();\n  }\n}\n","<c8y-modal [customFooter]=\"true\" [title]=\"'Confirm your current password' | translate\" #modal>\n  <form #confirmForm=\"ngForm\" (ngSubmit)=\"confirmForm.form.valid && passwordConfirm()\">\n    <div class=\"d-block p-24\">\n      <c8y-form-group [hasWarning]=\"true\">\n        <label translate for=\"currentPassword\">Enter your password</label>\n        <input\n          id=\"currentPassword\"\n          [(ngModel)]=\"password\"\n          type=\"password\"\n          name=\"password\"\n          class=\"form-control\"\n          required\n        />\n        <c8y-messages>\n          <c8y-message translate>\n            The password of the user that you are currently logged in with.\n          </c8y-message>\n        </c8y-messages>\n      </c8y-form-group>\n    </div>\n    <div class=\"modal-footer separator-top bg-level-0 sticky-bottom\">\n      <button\n        title=\"{{ 'Cancel' | translate }}\"\n        class=\"btn btn-default\"\n        type=\"button\"\n        (click)=\"cancel()\"\n      >\n        {{ 'Cancel' | translate }}\n      </button>\n      <button\n        title=\"{{ 'Confirm' | translate }}\"\n        class=\"btn btn-primary\"\n        [attr.data-cy]=\"'confirm-current-password-confirm-button'\"\n        type=\"submit\"\n        [disabled]=\"!confirmForm.form.valid\"\n      >\n        {{ 'Confirm' | translate }}\n      </button>\n    </div>\n  </form>\n</c8y-modal>\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { PasswordStrength } from '@c8y/client';\nimport { filter } from 'lodash-es';\nimport { PasswordStrengthColor } from './password.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PasswordConfirmModalComponent } from './password-confirm-modal.component';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { take } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { CurrentPasswordModalComponent } from './current-password-modal.component';\n\n@Injectable({ providedIn: 'root' })\nexport class PasswordService {\n  private DEFAULT_PASSWORD_MIN_LENGTH = 8;\n\n  private GREEN: PasswordStrengthColor = {\n    colorName: 'green',\n    color: 'rgb(0, 128, 0)',\n    description: gettext('strong'),\n    passwordStrength: PasswordStrength.GREEN\n  };\n  private YELLOW: PasswordStrengthColor = {\n    colorName: 'yellow',\n    color: 'rgb(255, 204, 51)',\n    description: gettext('medium'),\n    passwordStrength: PasswordStrength.YELLOW\n  };\n  private RED: PasswordStrengthColor = {\n    colorName: 'red',\n    color: 'rgb(170, 0, 51)',\n    description: gettext('weak'),\n    passwordStrength: PasswordStrength.RED\n  };\n\n  constructor(private modalService: BsModalService) {}\n\n  confirmPassword(): Observable<boolean> {\n    const modalInstance: any = this.modalService.show(PasswordConfirmModalComponent, {\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title'\n    });\n    const passwordConfirmedEmitter: EventEmitter<boolean> =\n      modalInstance.content.passwordConfirmedEmitter;\n    return passwordConfirmedEmitter.pipe(take(1));\n  }\n\n  /**\n   * Returns an observable with the password provided by user:\n   * - `string` when user provided a value\n   * - `null` when user cancelled the modal\n   */\n  currentPassword(): Observable<string | null> {\n    const modalInstance: any = this.modalService.show(CurrentPasswordModalComponent, {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title'\n    });\n    const currentPasswordEmitter: EventEmitter<string | null> =\n      modalInstance.content.currentPasswordEmitter;\n    return currentPasswordEmitter.pipe(take(1));\n  }\n\n  hasLowerCase(password: string) {\n    return password.search(/[a-z]/) !== -1;\n  }\n\n  hasUpperCase(password: string) {\n    return password.search(/[A-Z]/) !== -1;\n  }\n\n  hasNumbers(password: string) {\n    return password.search(/[0-9]/) !== -1;\n  }\n\n  hasSpecialChars(password: string) {\n    // Only match ALLOWED symbols, not any non-alphanumeric character\n    // Allowed: `~!@#$%^&*()_|+-=?;:'\",.<>{}[]\\\\/\n    return password.search(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>{}\\[\\]\\\\/]/) !== -1;\n  }\n\n  getStrengthColor(password: string): PasswordStrengthColor {\n    const passwordStrength = filter([\n      this.hasLowerCase(password),\n      this.hasUpperCase(password),\n      this.hasNumbers(password),\n      this.hasSpecialChars(password)\n    ]).length;\n\n    if (passwordStrength > 3) {\n      return this.GREEN;\n    } else if (passwordStrength >= 3) {\n      return this.YELLOW;\n    } else {\n      return this.RED;\n    }\n  }\n\n  getDefaultPasswordMinLength() {\n    return this.DEFAULT_PASSWORD_MIN_LENGTH;\n  }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { ITotp, UserService } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { NgIf } from '@angular/common';\nimport { QRCodeComponent } from 'angularx-qrcode';\n\n@Component({\n  selector: 'c8y-totp-setup',\n  templateUrl: './totp-setup.component.html',\n  standalone: true,\n  imports: [C8yTranslateDirective, NgIf, QRCodeComponent]\n})\nexport class TotpSetupComponent implements OnInit {\n  totpSecret: ITotp;\n\n  get qrCodeImage() {\n    return this.totpSecret ? this.totpSecret.secretQrUrl : '';\n  }\n\n  get secret() {\n    return this.totpSecret ? this.totpSecret.rawSecret : '';\n  }\n\n  get qrData() {\n    // TODO: waiting for BE:, now we need extract it from secretQrUrl\n    // https://cumulocity.atlassian.net/browse/MTM-36387\n    // return this.totpSecret ? this.totpSecret.qrData : '';\n    const url = new URL(this.qrCodeImage);\n    const otpAuth = url.searchParams.get('chl') || url.searchParams.get('data');\n    if (!otpAuth) {\n      this.alert.danger(gettext('Failed to generate a QR code.'));\n      return '';\n    }\n    return decodeURIComponent(otpAuth);\n  }\n\n  constructor(\n    private user: UserService,\n    private alert: AlertService\n  ) {}\n\n  async ngOnInit() {\n    try {\n      const { data } = await this.user.generateTotpSecret();\n      this.totpSecret = data;\n    } catch (ex) {\n      this.alert.addServerFailure(ex);\n    }\n  }\n}\n","<div class=\"text-center\">\n  <p\n    class=\"m-24 m-t-16 m-b-0\"\n    translate\n  >\n    Scan this QR code with your smartphone using the authenticator application.\n  </p>\n\n  <div class=\"d-flex j-c-center\">\n    <qrcode\n      [width]=\"180\"\n      *ngIf=\"totpSecret\"\n      [qrdata]=\"qrData\"\n      [errorCorrectionLevel]=\"'M'\"\n      [elementType]=\"'svg'\"\n    ></qrcode>\n  </div>\n  <p class=\"text-center text-muted\">\n    {{ secret }}\n  </p>\n</div>\n","import { Component, Output, EventEmitter, Input, ViewChild } from '@angular/core';\nimport { ControlContainer, NgForm, FormsModule } from '@angular/forms';\nimport { UserService } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\nimport { ModalComponent } from '../modal/modal.component';\nimport { NgClass, NgIf } from '@angular/common';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-totp-challenge',\n  templateUrl: './totp-challenge.component.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n  standalone: true,\n  imports: [\n    FormsModule,\n    NgClass,\n    FormGroupComponent,\n    C8yTranslateDirective,\n    RequiredInputPlaceholderDirective,\n    NgIf,\n    C8yTranslatePipe\n  ]\n})\nexport class TotpChallengeComponent {\n  /**\n   * Calls the verify endpoint if set to true (default true)\n   */\n  @Input() verify = true;\n  /**\n   * Emits the token on success.\n   */\n  @Output() onSuccess = new EventEmitter();\n  /**\n   * Emits if set up two-factor authentication is canceled.\n   */\n  @Output() totpUnconfirmedEmitter = new EventEmitter();\n  @Input() loading = false;\n  @Input() hasError = false;\n  @Input() isModal = false;\n  model = {\n    token: ''\n  };\n  @ViewChild('modal', { static: false }) private modal: ModalComponent;\n\n  constructor(\n    private users: UserService,\n    private alert: AlertService\n  ) {}\n\n  async verifyCode() {\n    try {\n      this.loading = true;\n      this.hasError = false;\n      if (this.verify) {\n        await this.users.verifyTotpCode(this.model.token);\n      }\n      this.onSuccess.emit(this.model.token);\n    } catch (e) {\n      this.hasError = true;\n      this.alert.removeLastDanger();\n      this.loading = false;\n    }\n  }\n\n  cancel() {\n    this.totpUnconfirmedEmitter.emit();\n  }\n}\n","<form #totpForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"verifyCode()\" novalidate>\n  <div class=\"d-block p-b-0\" [ngClass]=\"isModal ? 'p-24' : 'p-t-24'\">\n    <c8y-form-group\n      [hasError]=\"hasError\"\n      [novalidation]=\"true\"\n      [ngClass]=\"{ 'p-b-24': hasError }\"\n    >\n      <label translate for=\"totpToken\">Verification code</label>\n\n      <input\n        id=\"totpToken\"\n        [(ngModel)]=\"model.token\"\n        name=\"totpToken\"\n        type=\"text\"\n        autofocus\n        autocapitalize=\"off\"\n        autocorrect=\"off\"\n        autocomplete=\"off\"\n        class=\"form-control\"\n        placeholder=\"{{ 'e.g.' | translate }} 624327\"\n        required\n      />\n\n      <p id=\"helpinput\" *ngIf=\"!hasError\" class=\"help-block\" translate>\n        In case of key loss, please contact your platform administrator.\n      </p>\n    </c8y-form-group>\n  </div>\n  <div [ngClass]=\"isModal ? 'modal-footer separator-top bg-level-0 sticky-bottom' : 'text-center'\">\n    <button\n      class=\"btn btn-default\"\n      [ngClass]=\"{ 'btn-lg': !isModal }\"\n      type=\"button\"\n      title=\"{{ 'Cancel' | translate }}\"\n      (click)=\"cancel()\"\n    >\n      {{ 'Cancel' | translate }}\n    </button>\n    <button\n      class=\"btn btn-primary\"\n      [ngClass]=\"{ 'btn-lg': !isModal }\"\n      type=\"submit\"\n      title=\"{{ 'Verify' | translate }}\"\n      *ngIf=\"!loading\"\n      [disabled]=\"!totpForm.form.valid\"\n    >\n      {{ 'Verify' | translate }}\n    </button>\n\n    <button\n      class=\"btn btn-primary btn-pending\"\n      [ngClass]=\"{ 'btn-lg': !isModal }\"\n      type=\"submit\"\n      title=\"{{ 'Verifying…' | translate }}\"\n      *ngIf=\"loading\"\n    >\n      {{ 'Verifying…' | translate }}\n    </button>\n  </div>\n</form>\n","import { Component } from '@angular/core';\nimport { UserService } from '@c8y/client';\nimport { Status } from '../common/status.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ModalService } from '../modal/modal.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { SimplifiedAuthService } from '../authentication/simplified-auth.service';\nimport { ModalComponent } from '../modal/modal.component';\nimport { TotpSetupComponent } from '../authentication/totp-setup.component';\nimport { TotpChallengeComponent } from '../authentication/totp-challenge.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-user-totp-setup',\n  templateUrl: './user-totp-setup.component.html',\n  standalone: true,\n  imports: [ModalComponent, TotpSetupComponent, TotpChallengeComponent, C8yTranslatePipe]\n})\nexport class UserTotpSetupComponent {\n  constructor(\n    private user: UserService,\n    private modalService: ModalService,\n    private modal: BsModalRef,\n    private authService: SimplifiedAuthService\n  ) {}\n\n  async totpSetupVerified() {\n    await this.user.activateTotp();\n    this.modal.hide();\n    try {\n      await this.modalService.acknowledge(\n        gettext('Logout required'),\n        gettext('You must log out in order to apply your changes'),\n        Status.WARNING,\n        gettext('Log out')\n      );\n      await this.authService.logout();\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  close() {\n    this.modal.hide();\n  }\n}\n","<c8y-modal\n  [title]=\"'Set up two-factor authentication' | translate\"\n  [headerClasses]=\"'dialog-header'\"\n  [customFooter]=\"true\"\n>\n  <ng-container c8y-modal-title>\n    <span class=\"dlt-c8y-icon-phonelink-lock\"></span>\n  </ng-container>\n\n  <c8y-totp-setup></c8y-totp-setup>\n  <c8y-totp-challenge [isModal]=\"true\" (onSuccess)=\"totpSetupVerified()\" (totpUnconfirmedEmitter)=\"close()\"></c8y-totp-challenge>\n</c8y-modal>\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { NgClass } from '@angular/common';\n\n/**\n * The component is used to display a password control that includes the functionality of hiding and showing the input value.\n */\n\n@Component({\n  selector: 'c8y-password-input',\n  templateUrl: './password-input.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => PasswordInputComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [C8yTranslatePipe, NgClass]\n})\nexport class PasswordInputComponent implements ControlValueAccessor {\n  /**\n   * Id of input\n   */\n  @Input() id?: string = '';\n\n  /**\n   * Value for autocomplete attribute of input\n   */\n  @Input() autocomplete?: string = 'off';\n\n  /**\n   * shows large input when true (default: true)\n   */\n  @Input() large?: boolean = true;\n\n  value = '';\n  disabled = false;\n  type = 'password';\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\n  onChange = value => {};\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  writeValue(value: any): void {\n    this.value = value ? value : '';\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState?(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  onInput($event: any): void {\n    this.value = $event.currentTarget.value;\n    this.onChange(this.value);\n  }\n\n  onFocusOut(): void {\n    this.onTouched();\n  }\n}\n","<div\n  class=\"input-group input-group-password\"\n  [ngClass]=\"{ 'input-group-lg': large }\"\n>\n  <input\n    class=\"form-control\"\n    [ngClass]=\"{ 'input-lg': large }\"\n    [type]=\"type\"\n    [value]=\"value\"\n    [id]=\"id\"\n    (input)=\"onInput($event)\"\n    (focusout)=\"onFocusOut()\"\n    [disabled]=\"disabled\"\n    [autocomplete]=\"autocomplete\"\n  />\n  <span class=\"input-group-btn\">\n    @if (type === 'password') {\n      <button\n        class=\"btn btn-clean\"\n        title=\"{{ 'Show password' | translate }}\"\n        type=\"button\"\n        (click)=\"type = 'text'\"\n      >\n        <i class=\"dlt-c8y-icon-eye\"></i>\n      </button>\n    } @else {\n      <button\n        class=\"btn btn-clean\"\n        title=\"{{ 'Hide password' | translate }}\"\n        type=\"button\"\n        (click)=\"type = 'password'\"\n      >\n        <i class=\"dlt-c8y-icon-eye-slash\"></i>\n      </button>\n    }\n  </span>\n</div>\n","import { Injectable } from '@angular/core';\n\nexport type PasswordErrorKey = 'password' | 'passwordSimple';\n\nexport type PasswordValidationResult =\n  | { valid: true; errorKey: null }\n  | { valid: false; errorKey: PasswordErrorKey };\n\n/**\n * Shared password validation service for Angular and AngularJS.\n *\n * Validation logic:\n * - Invalid characters → error with full message (allowed symbols)\n * - Too long (>32) → error\n * - Too short when NOT enforced → simple error (length only)\n * - Too short when enforced → valid (checklist handles it)\n */\n@Injectable({ providedIn: 'root' })\nexport class PasswordValidationService {\n  readonly DEFAULT_MIN_LENGTH = 8;\n  readonly MAX_LENGTH = 32;\n  readonly ALLOWED_SYMBOLS = '`~!@#$%^&*()_|+-=?;:\\'\",.<>{}[]\\\\/';\n  readonly VALID_CHARS_PATTERN = /^[a-zA-Z0-9`~!@#$%^&*()_|+\\-=?;:'\",.<>{}[\\]\\\\/]*$/;\n\n  /**\n   * @param password The password to validate.\n   * @param strengthEnforced Whether password strength enforcement is enabled.\n   * @param minGreenLength Minimum length to be considered strong/green.\n   *   When strength is enforced, this is the green minimum from tenant settings.\n   *   Defaults to DEFAULT_MIN_LENGTH.\n   */\n  validate(\n    password: string,\n    strengthEnforced: boolean,\n    minGreenLength?: number\n  ): PasswordValidationResult {\n    const min = minGreenLength ?? this.DEFAULT_MIN_LENGTH;\n\n    if (!password) {\n      return { valid: true, errorKey: null };\n    }\n\n    // Invalid characters - always show full message with allowed symbols\n    if (!this.hasValidCharsOnly(password)) {\n      return { valid: false, errorKey: 'password' };\n    }\n\n    // Too long - always validate\n    if (password.length > this.MAX_LENGTH) {\n      return { valid: false, errorKey: strengthEnforced ? 'password' : 'passwordSimple' };\n    }\n\n    // Shorter than absolute minimum - always invalid regardless of enforcement\n    if (password.length < this.DEFAULT_MIN_LENGTH) {\n      return { valid: false, errorKey: 'passwordSimple' };\n    }\n\n    // Too short for configured min - only validate when strength is NOT enforced (checklist handles it otherwise)\n    if (!strengthEnforced && password.length < min) {\n      return { valid: false, errorKey: 'passwordSimple' };\n    }\n\n    return { valid: true, errorKey: null };\n  }\n\n  hasValidCharsOnly(password: string): boolean {\n    return this.VALID_CHARS_PATTERN.test(password);\n  }\n}\n","import { NG_VALIDATORS, AbstractControl, ValidationErrors, Validator } from '@angular/forms';\nimport { Directive, Input, inject } from '@angular/core';\nimport { PasswordValidationService } from './password-validation.service';\n\n/**\n * Password validation directive using shared PasswordValidationService.\n *\n * Returns `{ password: { minLength, maxLength, allowedCharactersList } }` for full message (with allowed symbols)\n * or `{ passwordSimple: { minLength, maxLength, allowedCharactersList } }` for simple message (length only).\n */\n@Directive({\n  selector: '[c8yPasswordValidation]',\n  providers: [{ provide: NG_VALIDATORS, useExisting: PasswordValidationDirective, multi: true }],\n  standalone: true\n})\nexport class PasswordValidationDirective implements Validator {\n  private validationService = inject(PasswordValidationService);\n\n  @Input() passwordStrengthEnforced?: boolean;\n  /** Minimum length to be considered strong/green. Only used when strength is enforced. */\n  @Input() minLength?: number;\n\n  validate(control: AbstractControl): ValidationErrors | null {\n    const password = control.value;\n    if (!password) {\n      return null;\n    }\n\n    const strengthEnforced = this.passwordStrengthEnforced === true;\n    const min = strengthEnforced\n      ? (this.minLength ?? this.validationService.DEFAULT_MIN_LENGTH)\n      : this.validationService.DEFAULT_MIN_LENGTH;\n    const result = this.validationService.validate(password, strengthEnforced, min);\n\n    if (result.valid) {\n      return null;\n    }\n\n    return {\n      [result.errorKey]: {\n        minLength: min,\n        maxLength: this.validationService.MAX_LENGTH,\n        allowedCharactersList: this.validationService.ALLOWED_SYMBOLS\n      }\n    };\n  }\n}\n","import { Directive, Attribute } from '@angular/core';\r\nimport { NG_VALIDATORS, Validator, AbstractControl } from '@angular/forms';\r\n\r\n@Directive({\r\n  selector: '[passwordConfirm]',\r\n  providers: [\r\n    {\r\n      provide: NG_VALIDATORS,\r\n      useExisting: PasswordConfirm,\r\n      multi: true\r\n    }\r\n  ],\r\n  standalone: true\r\n})\r\nexport class PasswordConfirm implements Validator {\r\n  constructor(@Attribute('passwordConfirm') public passwordConfirm: string) {}\r\n\r\n  validate(abControl: AbstractControl): { [key: string]: any } {\r\n    const value = abControl.value;\r\n    const controlToCompareWith = abControl.root.get(this.passwordConfirm);\r\n    if (controlToCompareWith && value !== controlToCompareWith.value) {\r\n      return { passwordConfirm: true };\r\n    }\r\n    return null;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { AppStateService } from '../common/ui-state.service';\nimport { ITenantLoginOption } from '@c8y/client';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class PasswordStrengthService {\n  GREEN_MIN_LENGTH_DEFAULT = 8;\n  private passwordStrengthSetting = {\n    enforcePasswordStrength: false,\n    greenMinLength: this.GREEN_MIN_LENGTH_DEFAULT,\n    passwordStrengthValidity: false\n  };\n\n  constructor(private ui: AppStateService) {}\n\n  /**\n   * Gets the minimal number of characters that a password should have to be considered a \"green\" strong one.\n   * @return The min length for password or default value.\n   */\n  async getGreenMinLength() {\n    const { greenMinLength } = (await this.getBasicAuthLoginOption()) || { greenMinLength: null };\n    this.passwordStrengthSetting.greenMinLength = greenMinLength || this.GREEN_MIN_LENGTH_DEFAULT;\n    return this.passwordStrengthSetting.greenMinLength;\n  }\n\n  /**\n   * Checks if password strength is enforced for system\n   * by retrieving value of `enforceStrength` property from loginOptions response\n   * @param refresh boolean used to refresh the app state where result of loginOptions response is stored.\n   * If false, it takes value from memory,\n   * if true, it refresh the app state value and then retrives data.\n   * @return boolean value, true if enforced, false otherwise.\n   */\n  async getEnforcePasswordStrength(refresh?) {\n    const loginOption = await this.getBasicAuthLoginOption(refresh);\n    const enforcePasswordStrength: string | boolean = loginOption?.enforceStrength;\n    if (typeof enforcePasswordStrength === 'string') {\n      this.passwordStrengthSetting.enforcePasswordStrength =\n        enforcePasswordStrength === 'true' ? true : false;\n    } else {\n      this.passwordStrengthSetting.enforcePasswordStrength = !!enforcePasswordStrength;\n    }\n    return this.passwordStrengthSetting.enforcePasswordStrength;\n  }\n\n  /**\n   * Checks if password strength is enforced for particular tenant\n   * by retrieving value of `strengthValidity` property from loginOptions response\n   * @param refresh boolean used to refresh the app state where result of loginOptions response is stored.\n   * If false, it takes value from memory,\n   * if true, it refresh the app state value and then retrives data.\n   * @return boolean value, true if enforced, false otherwise.\n   */\n  async getPasswordStrengthValidity(refresh = false) {\n    const loginOption = await this.getBasicAuthLoginOption(refresh);\n    const strengthValidity: string | boolean = loginOption?.strengthValidity;\n    if (typeof strengthValidity === 'string') {\n      this.passwordStrengthSetting.passwordStrengthValidity =\n        strengthValidity === 'true' ? true : false;\n    } else {\n      this.passwordStrengthSetting.passwordStrengthValidity = !!strengthValidity;\n    }\n    return this.passwordStrengthSetting.passwordStrengthValidity;\n  }\n\n  /**\n   * Function determines if enforced strength checks should be enabled for current tenant\n   * based on properties retrieved from loginOptions\n   * @param options object containing specific options:\n   *    - {refresh: true} - refreshes values of app state and returns fresh values as result of call\n   * @return boolean value, true if strength is enforced for tenant, false otherwise.\n   */\n  async getPasswordStrengthEnforced(options?: { refresh: true }) {\n    const refresh = options && options.refresh;\n    return Promise.all([\n      this.getEnforcePasswordStrength(refresh),\n      this.getPasswordStrengthValidity(refresh)\n    ]).then(values => {\n      const [enforcePasswordStrength, passwordStrengthValidity] = values;\n      return enforcePasswordStrength || passwordStrengthValidity;\n    });\n  }\n\n  private async getBasicAuthLoginOption(refresh?): Promise<ITenantLoginOption> {\n    if (refresh) {\n      await this.ui.refreshLoginOptions();\n    }\n    const loginOptions = this.ui.state.loginOptions || [];\n    const basicAuthLoginOption = loginOptions.find(({ type }) => type === 'BASIC');\n    return basicAuthLoginOption;\n  }\n}\n","import {\n  Component,\n  OnInit,\n  Input,\n  Output,\n  EventEmitter,\n  OnChanges,\n  SimpleChanges\n} from '@angular/core';\nimport { PasswordService } from './password.service';\nimport { assign } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { PasswordStrengthService } from './password-strength.service';\n\n@Component({\n  selector: 'c8y-password-check-list',\n  templateUrl: './password-check-list.component.html',\n  styles: [],\n  standalone: true,\n  imports: [IconDirective, C8yTranslateDirective, C8yTranslatePipe]\n})\nexport class PasswordCheckListComponent implements OnInit, OnChanges {\n  @Input() strengthEnforced = false;\n  @Input() password = '';\n  /**\n   * Optional override for the green minimum length from tenant login options.\n   * When provided, this value is used instead of fetching from PasswordStrengthService.\n   * Useful for downgraded AngularJS usage where the value comes from an interceptable HTTP call.\n   */\n  @Input() greenMinLength?: number;\n  @Output() onRequirementsFulfilled = new EventEmitter<boolean>();\n\n  minGreenLength = 8;\n  recommendedMinLength: number;\n  recommendedMinLengthCheck: {\n    label: string;\n    check: (password: string) => boolean;\n    icon: string;\n    contextualColor: string;\n    textColor: string;\n  };\n\n  enhancedStrengthCheckList = [\n    {\n      label: gettext('Include lowercase characters (for example, abcdef)'),\n      check: this.passwordService.hasLowerCase,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    },\n    {\n      label: gettext('Include uppercase characters (for example, ABCDEF)'),\n      check: this.passwordService.hasUpperCase,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    },\n    {\n      label: gettext('Include numbers (for example, 123456)'),\n      check: this.passwordService.hasNumbers,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    },\n    {\n      label: gettext('Include symbols (for example, !@#$%^)'),\n      check: this.passwordService.hasSpecialChars,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    }\n  ];\n\n  basicChecklist = [\n    {\n      label: gettext('Must have at least {{length}} characters'),\n      check: (password: string) => password.length >= this.minGreenLength,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    }\n  ];\n  combinedChecklist = [];\n\n  private defaultMinLength: number;\n\n  constructor(\n    private passwordStrength: PasswordStrengthService,\n    private passwordService: PasswordService\n  ) {}\n\n  async ngOnInit() {\n    this.defaultMinLength = this.passwordService.getDefaultPasswordMinLength();\n    if (!this.greenMinLength) {\n      this.greenMinLength = await this.passwordStrength.getGreenMinLength();\n    }\n\n    this.updateMinGreenLength();\n    this.onPasswordChange(this.password);\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (\n      (changes.strengthEnforced && !changes.strengthEnforced.firstChange) ||\n      (changes.greenMinLength && !changes.greenMinLength.firstChange)\n    ) {\n      this.updateMinGreenLength();\n    }\n    if (changes.password || changes.strengthEnforced || changes.greenMinLength) {\n      this.onPasswordChange(this.password);\n    }\n  }\n\n  get translateParams() {\n    return {\n      length: this.minGreenLength,\n      recommendedLength: this.recommendedMinLength\n    };\n  }\n\n  checkRequirement(requirement, password) {\n    const checked = requirement.check(password);\n    assign(requirement, {\n      icon: checked ? 'check-circle' : 'radio-button-unchecked',\n      contextualColor: checked ? 'text-success' : 'text-muted',\n      textColor: checked ? '' : 'text-muted'\n    });\n    return requirement;\n  }\n\n  onPasswordChange(password: unknown) {\n    const pwd = typeof password === 'string' ? password : '';\n    this.basicChecklist.forEach(requirement => {\n      this.checkRequirement(requirement, pwd);\n    });\n    this.enhancedStrengthCheckList.forEach(requirement => {\n      this.checkRequirement(requirement, pwd);\n    });\n    if (this.recommendedMinLengthCheck) {\n      this.checkRequirement(this.recommendedMinLengthCheck, pwd);\n    }\n    this.combinedChecklist = [...this.basicChecklist, ...this.enhancedStrengthCheckList];\n    this.onRequirementsFulfilled.emit(this.isPasswordValid());\n  }\n\n  isPasswordValid() {\n    const checklist = this.strengthEnforced ? this.combinedChecklist : this.basicChecklist;\n    return checklist.every(requirement => requirement.icon !== 'radio-button-unchecked');\n  }\n\n  private updateMinGreenLength() {\n    this.minGreenLength = this.strengthEnforced\n      ? this.greenMinLength || this.defaultMinLength\n      : this.defaultMinLength;\n\n    if (!this.strengthEnforced && this.greenMinLength > this.defaultMinLength) {\n      this.recommendedMinLength = this.greenMinLength;\n      this.recommendedMinLengthCheck = {\n        label: gettext('Have at least {{recommendedLength}} characters'),\n        check: (password: string) => password.length >= this.recommendedMinLength,\n        icon: '',\n        contextualColor: '',\n        textColor: ''\n      };\n    } else {\n      this.recommendedMinLength = undefined;\n      this.recommendedMinLengthCheck = undefined;\n    }\n  }\n}\n","@if (strengthEnforced) {\n  <div class=\"m-b-8\">{{ 'Password must meet the requirements below:' | translate }}</div>\n  <ul class=\"list-unstyled\">\n    @for (requirement of combinedChecklist; track requirement.label) {\n      <li class=\"small d-flex\">\n        <i\n          class=\"{{ requirement.contextualColor }}\"\n          [c8yIcon]=\"requirement.icon\"\n        ></i>\n        <span\n          class=\"m-l-4 small {{ requirement.textColor }}\"\n          [translate]=\"requirement.label\"\n          [translateParams]=\"this.translateParams\"\n        ></span>\n      </li>\n    }\n  </ul>\n} @else {\n  <div class=\"m-b-8\">{{ 'Password must meet the requirements below:' | translate }}</div>\n  <ul class=\"list-unstyled\">\n    @for (requirement of basicChecklist; track requirement.label) {\n      <li class=\"small d-flex\">\n        <i\n          class=\"{{ requirement.contextualColor }}\"\n          [c8yIcon]=\"requirement.icon\"\n        ></i>\n        <span\n          class=\"m-l-4 small {{ requirement.textColor }}\"\n          [translate]=\"requirement.label\"\n          [translateParams]=\"this.translateParams\"\n        ></span>\n      </li>\n    }\n  </ul>\n\n  <div class=\"m-b-8\">\n    {{ 'We recommend you to meet these conditions for a stronger password:' | translate }}\n  </div>\n  <ul class=\"list-unstyled\">\n    @if (recommendedMinLengthCheck) {\n      <li class=\"small d-flex\">\n        <i\n          class=\"{{ recommendedMinLengthCheck.contextualColor }}\"\n          [c8yIcon]=\"recommendedMinLengthCheck.icon\"\n        ></i>\n        <span\n          class=\"m-l-4 small {{ recommendedMinLengthCheck.textColor }}\"\n          [translate]=\"recommendedMinLengthCheck.label\"\n          [translateParams]=\"this.translateParams\"\n        ></span>\n      </li>\n    }\n    @for (requirement of enhancedStrengthCheckList; track requirement.label) {\n      <li class=\"small d-flex\">\n        <i\n          class=\"{{ requirement.contextualColor }}\"\n          [c8yIcon]=\"requirement.icon\"\n        ></i>\n        <span\n          class=\"m-l-4 small {{ requirement.textColor }}\"\n          [translate]=\"requirement.label\"\n          [translateParams]=\"this.translateParams\"\n        ></span>\n      </li>\n    }\n  </ul>\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  OnChanges,\n  Output,\n  ViewChild,\n  SimpleChanges,\n  ElementRef\n} from '@angular/core';\nimport { NewPassword } from './password.model';\nimport { ControlContainer, NgForm, NgModel, ValidatorFn, FormsModule } from '@angular/forms';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { PasswordInputComponent } from './password-input.component';\nimport { PasswordValidationDirective } from './password-validation.directive';\nimport { PasswordConfirm } from './password-confirm.directive';\nimport { PasswordCheckListComponent } from './password-check-list.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { PasswordStrengthService } from './password-strength.service';\nimport { PasswordValidationService } from './password-validation.service';\n\n@Component({\n  selector: 'c8y-new-password',\n  templateUrl: './new-password.component.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }],\n  standalone: true,\n  imports: [\n    FormGroupComponent,\n    C8yTranslateDirective,\n    PasswordInputComponent,\n    FormsModule,\n    PasswordValidationDirective,\n    PasswordConfirm,\n    PasswordCheckListComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class NewPasswordComponent implements OnChanges, OnInit {\n  @Output() password = new EventEmitter<NewPassword | object>();\n  @Input() showChangePasswordButton = true;\n  @Input() requireStrongPassword: boolean;\n  model: any = {};\n  changePassword = false;\n  passwordEnforced = false;\n  minlength: number;\n  requirementsFulfilled: boolean;\n\n  private readonly DEFAULT_MIN_LENGTH = 8;\n\n  /**\n   * Returns effective min length for validation:\n   * - When enforceStrength=true: use greenMinLength (or default 8)\n   * - When enforceStrength=false: always use default 8\n   */\n  get effectiveMinLength(): number {\n    return this.passwordEnforced\n      ? this.minlength || this.DEFAULT_MIN_LENGTH\n      : this.DEFAULT_MIN_LENGTH;\n  }\n  newPasswordModel: NgModel;\n\n  @ViewChild('newPassword')\n  set _newPasswordModel(ngModel: NgModel) {\n    if (ngModel) {\n      this.newPasswordModel = ngModel;\n      ngModel.control.addValidators(this.passwordChecklistValidator);\n    }\n  }\n\n  constructor(\n    private passwordStrength: PasswordStrengthService,\n    private passwordValidation: PasswordValidationService,\n    private cdRef: ChangeDetectorRef,\n    public elementRef: ElementRef\n  ) {}\n\n  // Only enforce checklist validation when password strength is enforced.\n  // When not enforced, checklist is just informational/recommendations.\n  passwordChecklistValidator: ValidatorFn = control =>\n    !this.passwordEnforced || this.requirementsFulfilled || !control.value\n      ? null\n      : { passwordStrengthChecklist: true };\n\n  async ngOnInit() {\n    try {\n      await this.loadPasswordStrengthSettings();\n      this.minlength = await this.passwordStrength.getGreenMinLength();\n    } catch (e) {\n      this.passwordEnforced = false;\n      this.minlength = this.DEFAULT_MIN_LENGTH;\n    }\n  }\n\n  async ngOnChanges(changes: SimpleChanges) {\n    if (changes.showChangePasswordButton) {\n      this.changePassword = !this.showChangePasswordButton;\n    }\n    if (\n      changes.requireStrongPassword?.previousValue !== changes.requireStrongPassword?.currentValue\n    ) {\n      await this.loadPasswordStrengthSettings();\n    }\n  }\n\n  newPasswordChanged() {\n    this.password.emit({\n      password: this.model.newPassword,\n      passwordStrength: this.model.strength\n    });\n  }\n\n  updateValidity(requirementsFulfilled: boolean) {\n    this.requirementsFulfilled = requirementsFulfilled;\n    this.cdRef.detectChanges();\n\n    if (!this.newPasswordModel) {\n      return;\n    }\n\n    this.newPasswordModel.control.updateValueAndValidity();\n\n    const errors = this.newPasswordModel.control.errors;\n    if (!errors || !this.passwordEnforced) {\n      return;\n    }\n\n    // Check if password has invalid characters (pattern error should take priority)\n    const password = this.model.newPassword || '';\n    const hasInvalidChars = password && !this.passwordValidation.hasValidCharsOnly(password);\n\n    const filteredErrors = { ...errors };\n    if (!this.requirementsFulfilled && !hasInvalidChars) {\n      // Checklist not fulfilled AND no invalid chars - show checklist error, hide pattern errors\n      delete filteredErrors['password'];\n      delete filteredErrors['passwordSimple'];\n    } else if (filteredErrors['password'] || filteredErrors['passwordSimple']) {\n      // Pattern error (invalid chars or checklist fulfilled) - show pattern error, hide checklist\n      delete filteredErrors['passwordStrengthChecklist'];\n    }\n\n    const remaining = Object.keys(filteredErrors).length ? filteredErrors : null;\n    this.newPasswordModel.control.setErrors(remaining);\n  }\n\n  async loadPasswordStrengthSettings(): Promise<void> {\n    if (this.requireStrongPassword) {\n      this.passwordEnforced = this.requireStrongPassword;\n    } else {\n      const passwordStrengthSettings = await this.passwordStrength.getPasswordStrengthEnforced({\n        refresh: true\n      });\n      this.passwordEnforced = passwordStrengthSettings;\n    }\n  }\n\n  toggleChangePassword() {\n    this.changePassword = !this.changePassword;\n    if (!this.changePassword) {\n      this.password.emit({});\n      this.model = {};\n    }\n  }\n}\n","@if (showChangePasswordButton) {\n  <div class=\"form-group\">\n    <button\n      class=\"btn btn-default\"\n      type=\"button\"\n      (click)=\"toggleChangePassword()\"\n      data-cy=\"c8y-new-password--change-button\"\n    >\n      @if (!changePassword) {\n        {{ 'Change password' | translate }}\n      } @else {\n        {{ 'Cancel password change' | translate }}\n      }\n    </button>\n  </div>\n}\n\n@if (changePassword) {\n  <div class=\"row content-flex-50\">\n    <div class=\"col-6\">\n      <c8y-form-group>\n        <label\n          for=\"newPassword\"\n          translate\n        >\n          Password\n        </label>\n        <c8y-password-input\n          name=\"newPassword\"\n          required\n          [id]=\"'newPassword'\"\n          #newPassword=\"ngModel\"\n          [(ngModel)]=\"model.newPassword\"\n          (change)=\"newPasswordChanged()\"\n          (input)=\"newPasswordConfirm.control.updateValueAndValidity()\"\n          c8yPasswordValidation\n          [passwordStrengthEnforced]=\"passwordEnforced\"\n          [minLength]=\"effectiveMinLength\"\n          [autocomplete]=\"'new-password'\"\n        ></c8y-password-input>\n      </c8y-form-group>\n\n      <c8y-form-group>\n        <label\n          for=\"newConfirmPassword\"\n          translate\n        >\n          Confirm password\n        </label>\n        <c8y-password-input\n          name=\"newPasswordConfirm\"\n          required\n          [id]=\"'newConfirmPassword'\"\n          #newPasswordConfirm=\"ngModel\"\n          [(ngModel)]=\"model.newPasswordConfirm\"\n          passwordConfirm=\"newPassword\"\n          [autocomplete]=\"'new-password'\"\n        ></c8y-password-input>\n      </c8y-form-group>\n    </div>\n    <div class=\"col-6\">\n      <c8y-password-check-list\n        [password]=\"model.newPassword\"\n        [strengthEnforced]=\"passwordEnforced\"\n        (onRequirementsFulfilled)=\"updateValidity($event)\"\n      ></c8y-password-check-list>\n    </div>\n  </div>\n}\n","import { Component, effect, EventEmitter, Input, OnInit, Output, viewChild } from '@angular/core';\nimport { IUser, TenantLoginOptionsService, TenantService, UserService } from '@c8y/client';\nimport { clone } from 'lodash-es';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { AlertService } from '../alert/alert.service';\nimport { NewPassword } from '../authentication/password.model';\nimport { AppStateService } from '../common/ui-state.service';\nimport { TranslateService } from '../i18n/translate.service';\nimport { UserTotpSetupComponent } from './user-totp-setup.component';\nimport { FormsModule } from '@angular/forms';\nimport { NgIf, AsyncPipe } from '@angular/common';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';\nimport { DefaultValidationDirective } from '../forms/default-validation.directive';\nimport { PhoneValidationDirective } from '../forms/phone-validation.directive';\nimport { NewPasswordComponent } from '../authentication/new-password.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\nexport interface User extends IUser {\n  phone: string;\n  sendPasswordResetEmail: boolean;\n  newsletter?: boolean;\n}\n\n@Component({\n  selector: 'c8y-user-edit',\n  templateUrl: './user-edit.component.html',\n  standalone: true,\n  imports: [\n    FormsModule,\n    NgIf,\n    C8yTranslateDirective,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    DefaultValidationDirective,\n    PhoneValidationDirective,\n    NewPasswordComponent,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class UserEditComponent implements OnInit {\n  @Input() loading = false;\n  @Input() set user(u: User) {\n    if (u) {\n      this._user = clone(u);\n      this.userIsExternal = u.customProperties.userOrigin === 'OAUTH2';\n      this.isPhoneRequired = this.isPhoneRequired && u.twoFactorAuthenticationEnabled;\n    }\n  }\n  get user() {\n    return this._user;\n  }\n  @Input() showProductExperienceOptions = false;\n  @Input() isUsageTrackingEnabled = true;\n  @Input() isUserEngagementPreferenceEnabled = true;\n  @Input() focusOnNewPassword = false;\n  @Output() onUser: EventEmitter<User> = new EventEmitter();\n  @Output() onUsageTrackingChange: EventEmitter<boolean> = new EventEmitter();\n  @Output() onUserEngagementPreferenceChange: EventEmitter<boolean> = new EventEmitter();\n  @Output() onCancel: EventEmitter<void> = new EventEmitter();\n  newPasswordComponent = viewChild<NewPasswordComponent>(NewPasswordComponent);\n\n  userHasActiveTotp = false;\n  userCanSetupTotp = false;\n  isPhoneRequired = false;\n  userIsExternal: boolean;\n  isTfaEnabled: boolean;\n\n  private _user: User;\n\n  constructor(\n    public state: AppStateService,\n    public translate: TranslateService,\n    private bsModalService: BsModalService,\n    private alert: AlertService,\n    private userService: UserService,\n    private tenantLoginOptionsService: TenantLoginOptionsService,\n    private tenantService: TenantService\n  ) {\n    effect(() => {\n      if (this.focusOnNewPassword && this.newPasswordComponent()) {\n        this.newPasswordComponent().toggleChangePassword();\n\n        setTimeout(() => {\n          this.newPasswordComponent().elementRef.nativeElement.scrollIntoView({\n            behavior: 'smooth',\n            block: 'center'\n          });\n        }, 100);\n      }\n    });\n  }\n\n  async ngOnInit() {\n    const currentTenant = (await this.tenantService.current()).data;\n    const { enabledOnSystemLevel, enabledOnTenantLevel } =\n      await this.tenantService.getTfaSettings(currentTenant);\n    this.isTfaEnabled = enabledOnSystemLevel || enabledOnTenantLevel;\n\n    await this.initializeTotpSettings();\n    if (this.user.twoFactorAuthenticationEnabled && !this.userCanSetupTotp) {\n      this.isPhoneRequired = true;\n    }\n  }\n\n  setupTotp() {\n    this.bsModalService.show(UserTotpSetupComponent, {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title'\n    });\n    this.cancel(); // to close the user edit modal and prevent console errors on logout\n  }\n\n  cancel() {\n    this.onCancel.emit();\n  }\n\n  async save() {\n    if (this.loading) {\n      return;\n    }\n\n    if (this.showProductExperienceOptions) {\n      this.onUsageTrackingChange.emit(this.isUsageTrackingEnabled);\n      /**\n       * Emits a user engagement preference change event.\n       * If usage tracking is disabled, it emits `false`. Otherwise, it emits the current state of the user engagement preference.\n       */\n      this.onUserEngagementPreferenceChange.emit(\n        this.isUsageTrackingEnabled === false ? false : this.isUserEngagementPreferenceEnabled\n      );\n    }\n\n    this.onUser.emit(this._user);\n  }\n\n  onNewPasswordChanged(newPassword: NewPassword) {\n    this._user.password = newPassword.password;\n  }\n\n  private async initializeTotpSettings() {\n    try {\n      this.userCanSetupTotp = await this.canUserSetupTotp();\n      if (this.userCanSetupTotp) {\n        const { data: totpActivity } = await this.userService.getActivityTotp();\n        this.userHasActiveTotp = totpActivity.isActive;\n      }\n    } catch (ex) {\n      this.alert.removeLastDanger();\n    }\n  }\n\n  private async canUserSetupTotp() {\n    // we don't check for tenant options here due to permission restrictions on that end-point\n    const loginOptions = (await this.tenantLoginOptionsService.listForCurrentTenant()).data;\n    return loginOptions.some(({ tfaStrategy = '' }) => tfaStrategy.toLowerCase() === 'totp');\n  }\n}\n","<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n  <div class=\"d-block p-24 p-b-0\">\n    <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n      Some of the user settings are not editable here because they are managed via your\n      authorization server.\n    </div>\n    <c8y-form-group>\n      <label translate for=\"userName\">Username</label>\n      <input\n        id=\"userName\"\n        class=\"form-control\"\n        [(ngModel)]=\"user.userName\"\n        name=\"userName\"\n        autocomplete=\"off\"\n        required\n        maxlength=\"254\"\n        placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n        [disabled]=\"user.id\"\n        c8yDefaultValidation=\"user\"\n      />\n    </c8y-form-group>\n\n    <c8y-form-group>\n      <label translate for=\"displayName\">Login alias</label>\n      <input\n        id=\"displayName\"\n        class=\"form-control\"\n        [(ngModel)]=\"user.displayName\"\n        name=\"displayName\"\n        autocomplete=\"off\"\n        maxlength=\"254\"\n        placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n        [disabled]=\"userIsExternal\"\n        c8yDefaultValidation=\"loginAlias\"\n      />\n    </c8y-form-group>\n\n    <c8y-form-group [hasWarning]=\"!user.email\">\n      <label translate for=\"userEmail\">Email</label>\n      <input\n        id=\"userEmail\"\n        class=\"form-control\"\n        type=\"email\"\n        name=\"email\"\n        [maxlength]=\"254\"\n        autocomplete=\"off\"\n        placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n        [(ngModel)]=\"user.email\"\n        email\n        [required]=\"true\"\n        [disabled]=\"userIsExternal\"\n      />\n    </c8y-form-group>\n\n    <div class=\"row\">\n      <div class=\"col-sm-6\">\n        <c8y-form-group>\n          <label translate for=\"userFirstName\">First name</label>\n          <input\n            id=\"userFirstName\"\n            class=\"form-control\"\n            autocomplete=\"off\"\n            placeholder=\"{{ 'e.g. Joe`LOCALIZE`' | translate }}\"\n            maxlength=\"50\"\n            name=\"firstName\"\n            [(ngModel)]=\"user.firstName\"\n            [disabled]=\"userIsExternal\"\n          />\n        </c8y-form-group>\n      </div>\n      <div class=\"col-sm-6\">\n        <c8y-form-group>\n          <label translate for=\"userLastName\">Last name</label>\n          <input\n            id=\"userLastName\"\n            class=\"form-control\"\n            autocomplete=\"off\"\n            placeholder=\"{{ 'e.g. Doe`LOCALIZE`' | translate }}\"\n            maxlength=\"50\"\n            name=\"lastName\"\n            [(ngModel)]=\"user.lastName\"\n            [disabled]=\"userIsExternal\"\n          />\n        </c8y-form-group>\n      </div>\n    </div>\n\n    <c8y-form-group>\n      <label translate for=\"userTelephone\">Telephone</label>\n      <input\n        id=\"userTelephone\"\n        class=\"form-control\"\n        autocomplete=\"off\"\n        name=\"phone\"\n        maxlength=\"254\"\n        [(ngModel)]=\"user.phone\"\n        placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n        c8yPhoneValidation\n        [required]=\"isPhoneRequired\"\n        [disabled]=\"userIsExternal\"\n      />\n    </c8y-form-group>\n\n    <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"showProductExperienceOptions\">\n      <label translate>Product experience</label>\n      <label class=\"c8y-switch\" for=\"productUsageTracking\">\n        <input\n          id=\"productUsageTracking\"\n          name=\"productUsageTracking\"\n          type=\"checkbox\"\n          [(ngModel)]=\"isUsageTrackingEnabled\"\n        />\n        <span></span>\n        {{ 'Enable personalized product experience tracking' | translate }}\n      </label>\n      <ng-container *ngIf=\"isUsageTrackingEnabled\">\n        <label class=\"c8y-switch m-l-0\" for=\"userEngagementPreference\">\n          <input\n            id=\"userEngagementPreference\"\n            name=\"userEngagementPreference\"\n            type=\"checkbox\"\n            [(ngModel)]=\"isUserEngagementPreferenceEnabled\"\n          />\n          <span></span>\n          {{ 'Enable in-product information & communication' | translate }}\n        </label>\n      </ng-container>\n    </c8y-form-group>\n\n    <div class=\"form-group p-t-16 separator-top\" *ngIf=\"!userIsExternal\">\n      <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n      <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n      <button\n        class=\"btn btn-default\"\n        type=\"button\"\n        title=\"{{ 'Set up two-factor authentication' | translate }}\"\n        (click)=\"setupTotp()\"\n        *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n      >\n        {{ 'Set up two-factor authentication' | translate }}\n      </button>\n    </div>\n\n    <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n      <label translate>Newsletter</label>\n      <label\n        title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n        class=\"c8y-checkbox\"\n      >\n        <input\n          type=\"checkbox\"\n          name=\"newsletter\"\n          [(ngModel)]=\"user.newsletter\"\n          [disabled]=\"userIsExternal\"\n        />\n        <span></span>\n        <span>\n          {{ 'Send me information about outages, maintenance or updates.' | translate }}\n        </span>\n      </label>\n    </c8y-form-group>\n  </div>\n  <div class=\"modal-footer separator-top bg-level-0 sticky-bottom\">\n    <button\n      class=\"btn btn-default\"\n      type=\"button\"\n      title=\"{{ 'Cancel' | translate }}\"\n      (click)=\"cancel()\"\n    >\n      {{ 'Cancel' | translate }}\n    </button>\n    <button\n      class=\"btn btn-primary\"\n      type=\"submit\"\n      title=\"{{ 'Save' | translate }}\"\n      [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n    >\n      {{ 'Save' | translate }}\n    </button>\n  </div>\n</form>\n","import { Component, OnInit } from '@angular/core';\nimport { BasicAuth, FetchClient, ICredentials, IUser, UserService } from '@c8y/client';\nimport { omit } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { AlertService } from '../alert/alert.service';\nimport { PasswordService } from '../authentication/password.service';\nimport { CookieBannerService } from '../bootstrap/cookie-banner/cookie-banner.service';\nimport { Status } from '../common/status.model';\nimport { AppStateService } from '../common/ui-state.service';\nimport { UserPreferencesService } from '../common/user-preferences/user-preferences.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ModalService } from '../modal/modal.service';\nimport { GainsightService } from '../product-experience/gainsight.service';\nimport { UserEngagementsService } from '../product-experience/user-engagements.service';\nimport { ModalComponent } from '../modal/modal.component';\nimport { UserEditComponent } from './user-edit.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { AsyncPipe } from '@angular/common';\n\n@Component({\n  selector: 'c8y-user-edit-modal',\n  templateUrl: './user-edit-modal.component.html',\n  standalone: true,\n  imports: [ModalComponent, UserEditComponent, C8yTranslatePipe, AsyncPipe]\n})\nexport class UserEditModalComponent implements OnInit {\n  currentUser: IUser;\n  changedLang: string;\n  loading = false;\n  showProductExperienceOptions = false;\n  currentUsageTrackingState: boolean;\n  currentUserEngagementPreferenceInitialState: boolean;\n  usageTrackingState: boolean;\n  userEngagementPreferenceNewState: boolean;\n  passwordChange = false;\n\n  constructor(\n    public modal: BsModalRef,\n    public user: UserService,\n    public ui: AppStateService,\n    private auth: BasicAuth,\n    private client: FetchClient,\n    private alert: AlertService,\n    private userPreferences: UserPreferencesService,\n    private c8yModalService: ModalService,\n    private gainsightService: GainsightService,\n    private cookieBannerService: CookieBannerService,\n    private passwordService: PasswordService,\n    private userEngagementsService: UserEngagementsService\n  ) {}\n\n  async ngOnInit() {\n    this.updateUserInAppState();\n    await this.setInitialProductExperienceOptions();\n  }\n\n  /**\n   * Initializes product experience options for the user.\n   *\n   * This function performs the following operations:\n   * - Determines if the user has the permission to edit product experience options.\n   * - If the user has the permission and functional cookies are enabled:\n   *   - Checks whether personalized product experience tracking is active.\n   *   - Checks whether in-product information and communication is active.\n   */\n  async setInitialProductExperienceOptions() {\n    this.showProductExperienceOptions =\n      await this.gainsightService.canEditProductExperienceSettings();\n\n    if (this.showProductExperienceOptions && this.cookieBannerService.isFunctionalCookieEnabled()) {\n      // Enable personalized product experience tracking option\n      this.currentUsageTrackingState =\n        !(await this.gainsightService.isGainsightPreferenceDisabledInUserPreferences(\n          this.gainsightService.USER_PREFERENCES_GAINSIGHT_KEY\n        ));\n\n      // Enable in-product information & communication option\n      this.currentUserEngagementPreferenceInitialState =\n        this.userEngagementsService.userEngagementsEnabled$.value;\n    }\n  }\n\n  async onDismiss() {\n    this.modal.hide();\n  }\n\n  onUsageTrackingChange(isEnabled: boolean) {\n    this.usageTrackingState = isEnabled;\n  }\n\n  onUserEngagementPreferenceChange(isEnabled: boolean) {\n    this.userEngagementPreferenceNewState = isEnabled;\n  }\n\n  async updateAndClose(user) {\n    this.loading = true;\n\n    try {\n      const passwordChanged = Boolean(user.password);\n      const isExternalUser = user.customProperties.userOrigin === 'OAUTH2';\n\n      if (!isExternalUser && passwordChanged) {\n        const currentPassword = await this.passwordService.currentPassword().toPromise();\n        if (!currentPassword) {\n          return;\n        }\n        await this.user.changeCurrentUserPassword(user.password, currentPassword);\n        this.updateCredentials(user.password);\n      }\n\n      if (user.customProperties.userOrigin !== 'OAUTH2') {\n        await this.user.updateCurrent(omit(user, 'password'));\n        await this.updateUserInAppState();\n      }\n\n      await this.updateProductExperienceOptions();\n\n      this.modal.hide();\n      this.alert.success(gettext('User saved.'));\n    } catch (e) {\n      if (e) {\n        this.alert.addServerFailure(e);\n      }\n    } finally {\n      this.loading = false;\n    }\n  }\n\n  async gainsightTrackingAppReload() {\n    try {\n      await this.c8yModalService.confirm(\n        gettext('Reload required'),\n        gettext(\n          'To change the tracking option in the entire application, you need to reload the page. If you have any unsaved changes, you can reload later. How would you like to proceed?'\n        ),\n        Status.WARNING,\n        {\n          ok: gettext('Reload now'),\n          cancel: gettext('Reload later')\n        }\n      );\n      location.reload();\n    } catch (ex) {\n      // do nothing\n    }\n  }\n\n  private async updateProductExperienceOptions() {\n    this.updateUserEngagementsPreference();\n    await this.updateTrackingOption();\n  }\n\n  /**\n   * Updates the user engagement preference if it has changed from the initial state.\n   * Calls the user engagements service to update the preference.\n   *\n   * The update only occurs if the current preference differs from the new state.\n   */\n  private updateUserEngagementsPreference() {\n    if (\n      this.currentUserEngagementPreferenceInitialState !== this.userEngagementPreferenceNewState\n    ) {\n      this.userEngagementsService.updateUserEngagementPreference(\n        this.userEngagementPreferenceNewState\n      );\n    }\n  }\n\n  /**\n   * Asynchronously updates the tracking option for user preferences.\n   * If the current usage tracking state differs from the new state,\n   * it updates the Gainsight preferences and sets a functional cookie\n   * before triggering a reload of the application.\n   */\n  private async updateTrackingOption() {\n    if (this.currentUsageTrackingState !== this.usageTrackingState) {\n      await this.userPreferences.set(\n        this.gainsightService.USER_PREFERENCES_GAINSIGHT_KEY,\n        this.usageTrackingState\n      );\n      this.gainsightService.setFunctionalCookie(this.usageTrackingState);\n      await this.gainsightTrackingAppReload();\n    }\n  }\n\n  private async updateUserInAppState() {\n    const currentUserResult = await this.user.current();\n    this.ui.currentUser.next(currentUserResult.data);\n  }\n\n  private updateCredentials(password: string) {\n    const newCredentials: ICredentials = {\n      password,\n      user: this.ui.currentUser.value.id,\n      tenant: this.client.tenant\n    };\n    this.auth.updateCredentials(newCredentials);\n  }\n}\n","<c8y-modal\n  [title]=\"'Edit user' | translate\"\n  [customFooter]=\"true\"\n  (onDismiss)=\"onDismiss()\"\n>\n  <c8y-user-edit\n    [user]=\"ui.currentUser | async\"\n    [loading]=\"loading\"\n    [isUsageTrackingEnabled]=\"currentUsageTrackingState\"\n    [isUserEngagementPreferenceEnabled]=\"currentUserEngagementPreferenceInitialState\"\n    [showProductExperienceOptions]=\"showProductExperienceOptions\"\n    [focusOnNewPassword]=\"passwordChange\"\n    (onUsageTrackingChange)=\"onUsageTrackingChange($event)\"\n    (onUserEngagementPreferenceChange)=\"onUserEngagementPreferenceChange($event)\"\n    (onUser)=\"updateAndClose($event)\"\n    (onCancel)=\"onDismiss()\"\n  ></c8y-user-edit>\n</c8y-modal>\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { UserEditModalComponent } from './user-edit-modal.component';\nimport { UserMenuItem } from './user.model';\nimport { Observable } from 'rxjs';\nimport { UserMenuService } from './user-menu.service';\nimport { HeaderService } from '../header';\nimport { AppStateService } from '../common';\nimport { NgIf, NgFor, AsyncPipe } from '@angular/common';\nimport { OutletDirective } from '../common/outlet.directive';\nimport { UserMenuItemComponent } from './user-menu-item.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { SimplifiedAuthService } from '../authentication/simplified-auth.service';\n\n@Component({\n  selector: 'c8y-user-menu-outlet',\n  templateUrl: './user-menu-outlet.component.html',\n  standalone: true,\n  imports: [NgIf, NgFor, OutletDirective, UserMenuItemComponent, C8yTranslatePipe, AsyncPipe]\n})\nexport class UserMenuOutletComponent {\n  items$: Observable<UserMenuItem[]>;\n  open$: Observable<boolean>;\n\n  constructor(\n    public ui: AppStateService,\n    private bsModalService: BsModalService,\n    private authService: SimplifiedAuthService,\n    private userMenu: UserMenuService,\n    private headerService: HeaderService\n  ) {\n    this.items$ = this.userMenu.items$;\n    this.open$ = this.headerService.rightDrawerOpen$;\n  }\n\n  async editUser() {\n    this.bsModalService.show(UserEditModalComponent, {\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title'\n    });\n  }\n\n  async logout() {\n    await this.authService.logout();\n  }\n}\n","<ng-container *ngIf=\"items$ | async as items\">\n  <div\n    class=\"p-t-8 p-b-8\"\n    *ngIf=\"items.length\"\n  >\n    <ul class=\"list-unstyled m-b-0\">\n      <ng-container *ngFor=\"let item of items\">\n        <ng-container *ngIf=\"item.template\">\n          <ng-container *c8yOutlet=\"item.template\"></ng-container>\n        </ng-container>\n        <ng-container *ngIf=\"!item.template\">\n          <li>\n            <button\n              class=\"c8y-right-drawer__link\"\n              [attr.aria-label]=\"item.label | translate\"\n              [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n              type=\"button\"\n              (click)=\"item.click()\"\n              [attr.href]=\"item.link\"\n              [attr.target]=\"item.target\"\n            >\n              {{ item.label | translate }}\n            </button>\n          </li>\n        </ng-container>\n      </ng-container>\n    </ul>\n  </div>\n</ng-container>\n\n<!-- the default items -->\n<c8y-user-menu-item\n  [icon]=\"'user-menu-male'\"\n  *ngIf=\"(ui.currentUser | async) && (ui.currentUser | async).id !== 'NO_LOGIN'\"\n  [label]=\"'User settings' | translate\"\n  [priority]=\"20\"\n  [dataCy]=\"'user-menu-user-settings-button'\"\n  (click)=\"editUser()\"\n></c8y-user-menu-item>\n<c8y-user-menu-item\n  [icon]=\"'sign-out'\"\n  *ngIf=\"(ui.currentUser | async) && (ui.currentUser | async).id !== 'NO_LOGIN'\"\n  [label]=\"'Logout' | translate\"\n  [dataCy]=\"'user-menu-logout-button'\"\n  (click)=\"logout()\"\n></c8y-user-menu-item>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PasswordService } from './password.service';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * @deprecated: [MTM-56403] Password strength indicator removed from UI in favor of the enhanced password strength check list.\n */\n@Component({\n  selector: 'c8y-password-strength',\n  templateUrl: './password-strength.component.html',\n  standalone: true,\n  imports: [C8yTranslateDirective, C8yTranslatePipe]\n})\nexport class PasswordStrengthComponent {\n  @Input('password')\n  set password(password: string) {\n    if (typeof password === 'string') {\n      this.model = this.passwordStrengthCheckerService.getStrengthColor(password);\n      this.strength.emit(this.model);\n    }\n  }\n  @Output()\n  strength = new EventEmitter();\n\n  model;\n\n  constructor(private passwordStrengthCheckerService: PasswordService) {\n    this.password = '';\n  }\n}\n","<div class=\"password-strength password-{{ model.colorName }}\">\r\n  <label class=\"password-strength-label small\" translate>\r\n    Password strength\r\n  </label>\r\n  <div>\r\n    <div class=\"password-bar\"></div>\r\n  </div>\r\n  <span class=\"small\">\r\n    {{ model.description | translate }}\r\n  </span>\r\n</div>\r\n","import { NgModule } from '@angular/core';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { CommonModule } from '../common/common.module';\nimport { PasswordCheckListComponent } from './password-check-list.component';\nimport { PasswordConfirm } from './password-confirm.directive';\nimport { PasswordStrengthComponent } from './password-strength.component';\nimport { NewPasswordComponent } from './new-password.component';\nimport { PasswordConfirmModalComponent } from './password-confirm-modal.component';\nimport { ModalModule } from '../modal/modal.module';\nimport { FormsModule } from '../forms/forms.module';\nimport { TotpChallengeComponent } from './totp-challenge.component';\nimport { TotpSetupComponent } from './totp-setup.component';\nimport { QRCodeComponent } from 'angularx-qrcode';\nimport { CurrentPasswordModalComponent } from './current-password-modal.component';\nimport { PasswordInputComponent } from './password-input.component';\n\n/**\n * The angular module definition for new password.\n * @exports PasswordStrengthComponent\n * @exports PasswordCheckListComponent\n * @exports PasswordConfirm\n * @exports NewPasswordComponent\n * @exports PasswordConfirmModalComponent\n */\n@NgModule({\n  imports: [\n    FormsModule,\n    TooltipModule,\n    CommonModule,\n    ModalModule,\n    QRCodeComponent,\n    TotpChallengeComponent,\n    PasswordConfirm,\n    PasswordStrengthComponent,\n    PasswordCheckListComponent,\n    NewPasswordComponent,\n    PasswordConfirmModalComponent,\n    CurrentPasswordModalComponent,\n    TotpSetupComponent,\n    PasswordInputComponent\n  ],\n  exports: [\n    TotpChallengeComponent,\n    PasswordStrengthComponent,\n    PasswordCheckListComponent,\n    PasswordConfirm,\n    NewPasswordComponent,\n    PasswordConfirmModalComponent,\n    CurrentPasswordModalComponent,\n    TotpSetupComponent,\n    PasswordInputComponent\n  ]\n})\nexport class AuthenticationModule {}\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { IUser, UserService } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-user-totp-revoke',\n  templateUrl: './user-totp.component.html',\n  standalone: true,\n  imports: [PopoverModule, IconDirective, C8yTranslateDirective, C8yTranslatePipe]\n})\nexport class UserTotpRevokeComponent {\n  @Input() user: IUser;\n  @Output('revoke') revokeEmitter = new EventEmitter<void>();\n  constructor(\n    private users: UserService,\n    private alert: AlertService\n  ) {}\n\n  async revoke() {\n    try {\n      await this.users.totpRevokeSecret(this.user);\n      this.alert.success(gettext('User TOTP secret revoked.'));\n      this.revokeEmitter.next();\n    } catch (e) {\n      this.alert.addServerFailure(e);\n    }\n  }\n}\n","<button\n  class=\"btn btn-default\"\n  type=\"button\"\n  [popoverTitle]=\"'Revoke TOTP secret' | translate\"\n  [popover]=\"confirm\"\n  #popover=\"bs-popover\"\n  placement=\"bottom\"\n>\n  <i c8yIcon=\"key\"></i>\n  {{ 'Revoke TOTP secret' | translate }}\n</button>\n\n<ng-template #confirm>\n  <p class=\"m-b-16\" translate>\n    This action will revoke the user's stored TOTP secret which will require a new setup.\n  </p>\n  <button\n    class=\"btn btn-default\"\n    type=\"button\"\n    title=\"{{ 'Cancel' | translate }}\"\n    (click)=\"popover.hide()\"\n    translate\n  >\n    Cancel\n  </button>\n  <button\n    class=\"btn btn-danger\"\n    type=\"button\"\n    title=\"{{ 'Revoke' | translate }}\"\n    (click)=\"revoke(); popover.hide()\"\n    translate\n  >\n    Revoke\n  </button>\n</ng-template>\n","import { gettext } from '@c8y/ngx-components/gettext';\nimport { Injectable } from '@angular/core';\nimport { AlertService } from '../alert/alert.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ClipboardService {\n  constructor(private alertService: AlertService) {}\n\n  async writeText(text: string, messages?: { success?: string; error?: string }) {\n    try {\n      await navigator.clipboard.writeText(text);\n      this.alertService.success(messages?.success || gettext('Copied to clipboard.'));\n    } catch (e) {\n      this.alertService.danger(messages?.error || gettext('Could not copy to clipboard.'));\n    }\n  }\n\n  async readText(messages?: { success?: string; error?: string }): Promise<string> {\n    try {\n      const text = await navigator.clipboard.readText();\n      this.alertService.success(messages?.success || gettext('Pasted from clipboard.'));\n      return text;\n    } catch (e) {\n      this.alertService.danger(messages?.error || gettext('Could not paste from clipboard.'));\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { AlertModule } from '../alert/alert.module';\nimport { ClipboardService } from './clipboard.service';\n\n@NgModule({\n  imports: [AlertModule],\n  providers: [ClipboardService]\n})\nexport class ClipboardModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { IUser } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Pipe({\n  name: 'userRolesList',\n  standalone: true\n})\nexport class UserRolesListPipe implements PipeTransform {\n  constructor(private translateService: TranslateService) {}\n  transform(user: IUser, translate = true): string {\n    if (!user) {\n      return '';\n    }\n\n    const groups: Array<any> = (user as any).groups?.references || [];\n    let groupNames = groups.map(ref => ref.group?.name).filter(groupName => !!groupName);\n\n    if (!groupNames.length) {\n      return '';\n    }\n\n    if (translate) {\n      groupNames = groupNames.map(name => this.translateService.instant(name));\n    }\n\n    return groupNames.join(', ');\n  }\n}\n","import { Component } from '@angular/core';\nimport { AppStateService } from '../../common';\nimport { HeaderService } from '../../header/header.service';\nimport { NgIf, AsyncPipe } from '@angular/common';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { ShortenUserNamePipe } from '../../common/shorten-user-name.pipe';\nimport { UserNameInitialsPipe } from '../../common/user-name-initials.pipe';\nimport { UserRolesListPipe } from './user-roles-list.pipe';\n\n@Component({\n  selector: 'c8y-user-details-drawer',\n  templateUrl: './user-details-drawer.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [\n    NgIf,\n    C8yTranslatePipe,\n    AsyncPipe,\n    ShortenUserNamePipe,\n    UserNameInitialsPipe,\n    UserRolesListPipe\n  ]\n})\nexport class UserDetailsDrawerComponent {\n  constructor(\n    public appState: AppStateService,\n    public headerService: HeaderService\n  ) {}\n\n  close() {\n    this.headerService.closeRightDrawer();\n  }\n}\n","<div class=\"c8y-right-drawer__header separator-bottom\">\n  <button type=\"button\" class=\"close\" [attr.tabindex]=\"(headerService.rightDrawerOpen$ | async) ? '0' : '-1'\" title=\"{{ 'Close' | translate }}\" (click)=\"close()\">\n    &times;\n  </button>\n  <div class=\"d-flex a-i-center\">\n    <div class=\"user-dot\">{{ appState.currentUser | async | userNameInitials }}</div>\n    <div class=\"min-width-0\">\n      <p\n        *ngIf=\"appState.currentUser | async as currentUser\"\n        class=\"text-truncate text-medium text-16\"\n        title=\"{{ currentUser | shortenUserName }}\"\n      >\n        {{ currentUser | shortenUserName }}\n      </p>\n      <small\n        *ngIf=\"appState.currentUser | async | userRolesList as userRoles\"\n        [title]=\"userRoles\"\n        class=\"text-truncate\"\n      >\n        {{ userRoles }}\n      </small>\n    </div>\n  </div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../../common';\nimport { hookDrawer } from '../../drawer/drawer.service';\nimport { UserDetailsDrawerComponent } from './user-details-drawer.component';\nimport { UserRolesListPipe } from './user-roles-list.pipe';\n\n@NgModule({\n  imports: [CommonModule, UserDetailsDrawerComponent, UserRolesListPipe]\n})\nexport class UserDetailsDrawerModule {\n  static providers() {\n    return [\n      hookDrawer({\n        component: UserDetailsDrawerComponent,\n        position: 'right',\n        priority: 120,\n        id: 'userDetailsDrawer'\n      })\n    ];\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { ModalModule } from '../modal/modal.module';\nimport { UserMenuItemComponent } from './user-menu-item.component';\nimport { UserEditModalComponent } from './user-edit-modal.component';\nimport { UserEditComponent } from './user-edit.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { UserMenuOutletComponent } from './user-menu-outlet.component';\nimport { AuthenticationModule } from '../authentication/authentication.module';\nimport { AlertModule } from '../alert/alert.module';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { RouterModule } from '@angular/router';\nimport { FormsModule } from '../forms/forms.module';\nimport { UserTotpSetupComponent } from './user-totp-setup.component';\nimport { UserTotpRevokeComponent } from './user-totp-revoke.component';\nimport { ClipboardModule } from '../clipboard/clipboard.module';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { hookDrawer } from '../drawer/drawer.service';\nimport { UserDetailsDrawerModule } from './user-details-drawer/user-details-drawer.module';\n\n/**\n * The angular module definition for the user menu.\n * @exports UserMenuComponent\n * @exports UserMenuItemComponent\n * @exports UserEditComponent\n * @exports UserEditModalComponent\n */\n@NgModule({\n  imports: [\n    A11yModule,\n    FormsModule,\n    CommonModule,\n    ModalModule,\n    BsDropdownModule,\n    AuthenticationModule,\n    AlertModule,\n    RouterModule,\n    TooltipModule.forRoot(),\n    PopoverModule,\n    ClipboardModule,\n    UserDetailsDrawerModule,\n    UserMenuOutletComponent,\n    UserEditComponent,\n    UserEditModalComponent,\n    UserMenuItemComponent,\n    UserTotpSetupComponent,\n    UserTotpRevokeComponent\n  ],\n  exports: [\n    UserMenuOutletComponent,\n    UserMenuItemComponent,\n    UserEditComponent,\n    UserEditModalComponent,\n    UserTotpSetupComponent,\n    UserTotpRevokeComponent\n  ]\n})\nexport class UserModule {\n  static providers() {\n    return [\n      ...UserDetailsDrawerModule.providers(),\n      hookDrawer({\n        component: UserMenuOutletComponent,\n        position: 'right',\n        priority: 100,\n        id: 'userMenuOutlet'\n      })\n    ];\n  }\n}\n","import { NgModule } from '@angular/core';\n\n@NgModule({\n  providers: []\n})\nexport class PluginsModule {}\n","import { InjectionToken } from '@angular/core';\nimport { ApplicationType } from '@c8y/client';\nimport { GenericHookType, hookGeneric, GenericHookOptions } from '../common';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n * @deprecated Consider using the `hookVersion` function instead.\n */\nexport const HOOK_VERSION = new InjectionToken<Version[]>('HOOK_VERSION');\n\nexport const VERSION_MODULE_CONFIG = new InjectionToken<VersionModuleConfig>(\n  'VERSION_MODULE_CONFIG'\n);\n\n/**\n * You can either provide a single `Version` as parameter:\n * ```typescript\n *  hookVersion(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookVersion([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<Version>`\n * ```typescript\n *  export class MyVersionFactory implements ExtensionFactory<Version> {...}\n *  ...\n *  hookVersion(MyVersionFactory)\n * ```\n * A typed alternative to `HOOK_VERSION`.\n * @param versions The `Version`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookVersion(\n  versions: GenericHookType<Version>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<Version>(versions, HOOK_VERSION, options);\n}\n\nexport interface Version extends CleanedVersion {\n  /** Influences the order of the version within the list of versions */\n  priority?: number;\n  /** Will hide the version in the whole UI (only included in download platform information) */\n  hidden?: boolean;\n}\n\nexport interface CleanedVersion {\n  /** Label of the version */\n  label: string;\n  /** The version */\n  version: string;\n  /**\n   * Type of the version.\n   * The JSON that can be copied to the clipboard will group the versions by type.\n   * Types could e.g. be `MICROSERVICE` and `HOSTED` for apps\n   */\n  type: ApplicationType | string;\n  /**\n   * Allows to provide any custom properties.\n   * These will be part of the JSON structure that will be copied to clipboard.\n   */\n  custom?: {\n    [key: string]: any;\n  };\n}\n\nexport interface VersionModuleConfig {\n  /** Will disable the `WebSDKVersionFactory` in case it is set to true */\n  disableWebSDKVersionFactory?: boolean;\n  /** Will disable the `WebSDKPluginVersionFactory` in case it is set to true */\n  disableWebSDKPluginVersionFactory?: boolean;\n  /** Will disable the `BackendVersionFactory` in case it is set to true */\n  disableBackendVersionFactory?: boolean;\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { distinctUntilChanged, filter, map, shareReplay } from 'rxjs/operators';\nimport { AppStateService, ExtensionFactory } from '../common';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Version, VersionModuleConfig, VERSION_MODULE_CONFIG } from './version.model';\n\n/**\n * Will provide the backend versions of the tenant.\n * The system option 'system' -> 'version' is used for this.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class BackendVersionFactory implements ExtensionFactory<Version> {\n  backendVersion$: Observable<Version | Version[]> = of([]);\n  constructor(\n    @Optional() @Inject(VERSION_MODULE_CONFIG) private config: VersionModuleConfig,\n    private appState: AppStateService\n  ) {\n    if (this.config?.disableBackendVersionFactory) {\n      return;\n    }\n    this.backendVersion$ = this.appState.state$.pipe(\n      map(state => state?.versions?.backend),\n      filter(backendVersion => !!backendVersion),\n      distinctUntilChanged(),\n      map(backendVersion => this.buildBackendVersion(backendVersion)),\n      shareReplay(1)\n    );\n  }\n\n  get(): Observable<Version | Version[]> {\n    return this.backendVersion$;\n  }\n\n  private buildBackendVersion(backendVersion: string): Version {\n    return {\n      label: gettext('Backend'),\n      version: backendVersion,\n      priority: 20,\n      type: 'SYSTEM',\n      hidden: true\n    };\n  }\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport {\n  ExtensionPointForPlugins,\n  fromTriggerOnce,\n  getInjectedHooks,\n  sortByPriority,\n  stateToFactory\n} from '../common';\nimport { CleanedVersion, HOOK_VERSION, Version } from './version.model';\nimport { pick } from 'lodash-es';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class VersionService extends ExtensionPointForPlugins<Version> {\n  items$: Observable<Version[]>;\n  nonHiddenItems$: Observable<Version[]>;\n\n  constructor(rootInjector: Injector, pluginService: PluginsResolveService) {\n    super(rootInjector, pluginService);\n    this.items$ = this.setupItemsObservable();\n\n    this.nonHiddenItems$ = this.items$.pipe(\n      map(versions => versions.filter(version => !version.hidden))\n    );\n  }\n\n  get state(): Set<Version> {\n    return this.state$.value;\n  }\n\n  add(version: Version) {\n    this.state.add(version);\n    this.emitNewState();\n  }\n\n  remove(version: Version) {\n    this.state.delete(version);\n    this.emitNewState();\n  }\n\n  cleanUpVersions(versions: Version[]): CleanedVersion[] {\n    return versions.map(version => pick(version, 'label', 'version', 'type', 'custom'));\n  }\n\n  protected setupItemsObservable(): Observable<Version[]> {\n    return fromTriggerOnce<Version>(undefined, this.refresh$, [\n      getInjectedHooks<Version>(HOOK_VERSION, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      distinctUntilChanged(),\n      map(versions => sortByPriority(versions)),\n      shareReplay(1)\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { map, take } from 'rxjs/operators';\nimport { groupBy } from 'lodash-es';\nimport { VersionService } from './version.service';\nimport { AppStateService } from '../common/ui-state.service';\nimport { CleanedVersion } from './version.model';\nimport { ApplicationService, ApplicationType, ICurrentUser, IUser } from '@c8y/client';\n\n@Injectable({ providedIn: 'root' })\nexport class PlatformDetailsService {\n  constructor(\n    private version: VersionService,\n    private appState: AppStateService,\n    private apps: ApplicationService\n  ) {}\n\n  async getPlatformDetailsObject() {\n    const currentUser = this.appState.currentUser.value;\n    const userId = currentUser?.id;\n    const userPermissions = this.getUserPermissions(currentUser);\n    const [hookedVersions, microserviceVersions] = await Promise.all([\n      this.getVersions(),\n      this.getMicroserviceVersions(userId)\n    ]);\n    const versions = [...hookedVersions, ...microserviceVersions];\n    const groupedVersions: { [key: string]: CleanedVersion[] } = groupBy(versions, 'type');\n    const tenantId = this.appState.currentTenant.value?.name;\n    // useful as `domainName` might be pointing to a custom domain\n    // self link should still allow to identify the actual environment of the tenant\n    const tenantSelfLink = this.appState.currentTenant.value?.self;\n    const tenantDomainName = this.appState.currentTenant.value?.domainName;\n    const applicationKey = this.appState.currentApplication.value?.key;\n    const applicationId = this.appState.currentApplication.value?.id;\n    const time = new Date().toISOString();\n    const url = document.URL;\n    const obj = {\n      time,\n      tenantId,\n      tenantSelfLink,\n      tenantDomainName,\n      url,\n      userId,\n      userPermissions,\n      applicationId,\n      applicationKey,\n      versions: groupedVersions\n    };\n    return obj;\n  }\n\n  protected async getVersions(): Promise<CleanedVersion[]> {\n    const versions = await this.version.items$\n      .pipe(\n        take(1),\n        map(versions => this.version.cleanUpVersions(versions))\n      )\n      .toPromise();\n    return versions;\n  }\n\n  protected async getMicroserviceVersions(userId: string): Promise<CleanedVersion[]> {\n    try {\n      const { data: apps } = await this.apps.listByUser(userId, {\n        pageSize: 2000,\n        dropOverwrittenApps: true,\n        noPaging: true\n      });\n      return apps\n        .filter(app => !!app.manifest?.version && app.type === ApplicationType.MICROSERVICE)\n        .map(app => {\n          return {\n            label: app.name,\n            version: app.manifest.version,\n            type: app.type,\n            custom: {\n              owner: app.owner?.tenant?.id,\n              provider: app.manifest?.provider\n            }\n          };\n        });\n    } catch (e) {\n      console.warn(e);\n      return [];\n    }\n  }\n\n  protected getUserPermissions(user: ICurrentUser | null) {\n    if (!user) {\n      return null;\n    }\n    const userPermissions = this.getDirectPermissionsOfUser(user);\n    const groupPermissions = this.getPermissionsOfAssignedGroups(user);\n    return { user: userPermissions, groups: groupPermissions };\n  }\n\n  protected getDirectPermissionsOfUser(user: ICurrentUser): string[] {\n    const userChangedType = user as IUser;\n    const userRoleReferences = userChangedType.roles?.references || [];\n    return userRoleReferences.map(ref => ref.role.id);\n  }\n\n  protected getPermissionsOfAssignedGroups(\n    user: ICurrentUser\n  ): { id: string; name: string; permissions: string[] }[] {\n    const groups: Array<any> = (user as any).groups?.references || [];\n\n    return groups.map(ref => {\n      const roleReferences: Array<any> = ref.group?.roles?.references || [];\n      const permissions = roleReferences.map(ref => ref.role.id);\n      return {\n        id: ref.group.id,\n        name: ref.group.name,\n        permissions\n      };\n    });\n  }\n}\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { ClipboardService } from '../../clipboard/clipboard.service';\nimport { AppStateService } from '../../common/ui-state.service';\nimport { HeaderService } from '../../header/header.service';\nimport { Version } from '../version.model';\nimport { VersionService } from '../version.service';\nimport saveAs from 'file-saver';\nimport { PlatformDetailsService } from '../platform-details.service';\nimport { IconDirective } from '../../common/icon.directive';\nimport { NgIf, NgFor, AsyncPipe } from '@angular/common';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-version-list',\n  templateUrl: './version-list.component.html',\n  standalone: true,\n  imports: [IconDirective, NgIf, C8yTranslateDirective, NgFor, C8yTranslatePipe, AsyncPipe]\n})\nexport class VersionListComponent {\n  open$: Observable<boolean>;\n  versionsToDirectlyDisplay$: Observable<Version[]>;\n  currentTenantId$: Observable<string>;\n  constructor(\n    private version: VersionService,\n    private appState: AppStateService,\n    private clipboardService: ClipboardService,\n    private modalService: BsModalService,\n    private platformDetails: PlatformDetailsService,\n    private headerService: HeaderService\n  ) {\n    this.versionsToDirectlyDisplay$ = this.version.nonHiddenItems$;\n    this.currentTenantId$ = this.appState.currentTenant.pipe(\n      map(tenant => tenant?.name),\n      filter(tenantId => !!tenantId),\n      distinctUntilChanged()\n    );\n    this.open$ = this.headerService.rightDrawerOpen$;\n  }\n\n  async downloadPlatformDetails() {\n    const obj = await this.platformDetails.getPlatformDetailsObject();\n    const json = JSON.stringify(obj, undefined, 2);\n    const blob = new Blob([json]);\n    saveAs(blob, 'platform-details.json');\n  }\n\n  copyIt(text: string) {\n    this.clipboardService.writeText(text);\n  }\n}\n","<div class=\"separator-top p-t-8 p-b-8\">\n  <div class=\"c8y-right-drawer__item sticky-top\">\n    <i c8yIcon=\"c8y-c8y-c\"></i>\n    <span class=\"text-bold\">{{ 'Platform info' | translate }}</span>\n  </div>\n\n  <ul class=\"list-unstyled\">\n    <li\n      class=\"c8y-right-drawer__item\"\n      *ngIf=\"currentTenantId$ | async as tenantId\"\n    >\n      <span\n        class=\"flex-grow text-muted m-0 text-12 text-truncate\"\n        translate\n      >\n        Tenant ID\n      </span>\n      <button\n        class=\"m-l-auto flex-no-shrink btn-clean p-0 btn-link\"\n        title=\"{{ 'Copy tenant ID to the clipboard' | translate }}\"\n        [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n        type=\"button\"\n        (click)=\"$event.stopPropagation(); copyIt(tenantId)\"\n      >\n        {{ tenantId }}\n        <i\n          class=\"text-14 m-0\"\n          [c8yIcon]=\"'clipboard'\"\n        ></i>\n      </button>\n    </li>\n    <li\n      class=\"c8y-right-drawer__item\"\n      *ngFor=\"let versionEntry of versionsToDirectlyDisplay$ | async\"\n    >\n      <span\n        class=\"flex-no-shrink text-muted text-12 text-truncate m-r-8\"\n        [title]=\"versionEntry.label | translate\"\n      >\n        {{ versionEntry.label | translate }}\n      </span>\n      <span\n        class=\"flex-grow text-right text-truncate\"\n        [title]=\"versionEntry.version | translate\"\n      >\n        {{ versionEntry.version }}\n      </span>\n    </li>\n    <li class=\"c8y-right-drawer__item\">\n      <button\n        class=\"btn btn-default btn-sm\"\n        [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n        title=\"{{ 'Download platform details' | translate }}\"\n        (click)=\"downloadPlatformDetails()\"\n      >\n        <i c8yIcon=\"download\" class=\"m-t-0 m-b-0 text-14\"></i>\n        <span translate>Download platform details</span>\n      </button>\n    </li>\n  </ul>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ExtensionFactory, OptionsService } from '../common';\nimport { DrawerItem } from '../drawer';\nimport { VersionListComponent } from './version-list/version-list.component';\nimport { Observable, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\n@Injectable()\nexport class VersionDrawerFactory implements ExtensionFactory<DrawerItem> {\n  protected drawerItem: DrawerItem = {\n    component: VersionListComponent,\n    position: 'right',\n    priority: 80,\n    id: 'platformInformation'\n  };\n\n  constructor(private options: OptionsService) {}\n\n  get(): Observable<DrawerItem[] | DrawerItem> {\n    return this.shouldShowPlatformInformation$().pipe(\n      distinctUntilChanged(),\n      map(shouldShowPlatformInformation => {\n        if (shouldShowPlatformInformation) {\n          return this.drawerItem;\n        }\n        return [];\n      })\n    );\n  }\n\n  private shouldShowPlatformInformation$(): Observable<boolean> {\n    return combineLatest([\n      this.options.get$('hidePowered'),\n      this.options.get$('hidePlatformInformation')\n    ]).pipe(\n      map(([hidePowered, hidePlatformInformation]) => {\n        if (hidePlatformInformation === undefined) {\n          return !hidePowered;\n        }\n\n        return !hidePlatformInformation;\n      })\n    );\n  }\n}\n","import { ApplicationRemotePlugins, IApplication, VersioningMatrix } from '@c8y/client';\nimport type { PluginsExportScopes } from '../common/ApplicationOptions';\nexport interface PluginsConfig {\n  remotes: ApplicationRemotePlugins;\n  excludedRemotes?: ApplicationRemotePlugins;\n}\n\nexport enum ApplicationPluginStatus {\n  ORPHANED = 'ORPHANED',\n  LATEST = 'LATEST',\n  OUTDATED = 'OUTDATED',\n  REVOKED = 'REVOKED',\n  AUTO = 'AUTO'\n}\n\nexport enum PackageType {\n  /**\n   * A package coming from the official Cumulocity github enterprise.\n   */\n  OFFICIAL = 'OFFICIAL',\n  /**\n   * A package coming from any connected partner repository.\n   */\n  COMMUNITY = 'COMMUNITY',\n  /**\n   * A package where the origin is unknown (e.g. uploaded to management with an unknown label)\n   */\n  UNKNOWN = 'UNKNOWN',\n  /**\n   * A custom package e.g. uploaded to the tenant by a user\n   */\n  CUSTOM = 'CUSTOM',\n  /**\n   * A package that was archived by the user\n   */\n  ARCHIVED = 'ARCHIVED'\n}\n\nexport interface ApplicationPlugin {\n  id: string;\n  idLatest: string;\n  name?: string;\n  module: string;\n  path: string;\n  description?: string;\n  version?: string;\n  scope?: PluginsExportScopes;\n  installed?: boolean;\n  contextPath?: string;\n  status?: ApplicationPluginStatus;\n  tags?: string[];\n  license?: string;\n  type?: PackageType;\n  versioningMatrix?: VersioningMatrix;\n  selected?: boolean;\n  originApp?: IApplication;\n  installedViaTag?: string | false;\n  readmePath?: string;\n}\n","import { Injectable } from '@angular/core';\nimport {\n  ApplicationAvailability,\n  ApplicationRemotePlugins,\n  ApplicationService,\n  FetchClient,\n  IApplication,\n  IApplicationVersion,\n  IFetchOptions,\n  IFetchResponse,\n  IManifest\n} from '@c8y/client';\nimport { cloneDeep, get, uniqBy, groupBy } from 'lodash-es';\nimport { coerce, compare } from 'semver';\nimport { AppStateService } from '../common/ui-state.service';\nimport { ApplicationPlugin, PackageType, PluginsConfig } from './plugins.model';\nimport { PluginsExportScopes } from '../common/ApplicationOptions';\nimport { mergeRemotes, removeRemotes } from '@c8y/bootstrap';\n\n@Injectable({ providedIn: 'root' })\nexport class PluginsService {\n  static convertInstalledRemotesToIds(remotes: ApplicationRemotePlugins): string[] {\n    if (!remotes) {\n      return;\n    }\n    const importContextPaths = Object.keys(remotes);\n    const plugins = [];\n    importContextPaths.forEach(contextPath => {\n      const moduleNames = remotes[contextPath] || [];\n      plugins.push(\n        ...moduleNames.map(module => PluginsService.createPluginId(contextPath, module, '', true))\n      );\n    });\n    return plugins;\n  }\n\n  static createPluginId(\n    contextPath: string,\n    plugin: ApplicationPlugin | string,\n    version: string,\n    useLatest = false\n  ): string {\n    const moduleName = typeof plugin === 'string' ? plugin : plugin.module;\n    if (useLatest) {\n      return `${contextPath}/${moduleName}`;\n    }\n    return `${contextPath}@${version}/${moduleName}`;\n  }\n\n  constructor(\n    private applicationService: ApplicationService,\n    private appStateService: AppStateService,\n    private client: FetchClient\n  ) {}\n\n  /**\n   * Fetches a list of available packages.\n   * @param params Additional query parameters.\n   * @returns Returns a list of packages.\n   */\n  async listPackages(params: any = {}): Promise<IApplication[]> {\n    const apps = await this.listApplicationsByCurrentTenant(params);\n    const webApps = apps.filter(app => this.isPackage(app));\n    const uniqueWebApps = this.removeDuplicates(webApps, 'contextPath');\n    return uniqueWebApps.sort((a, b) => a.name.localeCompare(b.name));\n  }\n\n  /**\n   * Checks if an application is a package.\n   * @param application Application managed object.\n   * @returns Returns true if the application is a package.\n   */\n  isPackage(application: IApplication): boolean {\n    return application.manifest?.isPackage === true;\n  }\n\n  /**\n   * Updates the remotes field in the application configuration by adding new plugins.\n   * Important: if the remotes object is not set on the configuration object,\n   * remotes will not be added. Make sure that this object exists in the application configuration.\n   * @param application Application managed object.\n   * @param plugins List of remotes to be added.\n   * @returns Returns updated application remotes.\n   */\n  async addRemotes(\n    application: IApplication,\n    plugins: ApplicationPlugin | ApplicationPlugin[]\n  ): Promise<PluginsConfig> {\n    const pluginsArray = Array.isArray(plugins) ? plugins : [plugins];\n    const manifestRemotes = application.manifest?.remotes || {};\n    const appConfig: PluginsConfig | undefined = application?.config as PluginsConfig;\n    const appConfigRemotes = appConfig?.remotes || manifestRemotes;\n    const appConfigExcludedRemotes = appConfig?.excludedRemotes || {};\n    // only normal and self optional scoped plugins should be added to remotes\n    // self scoped plugins will be automatically added\n    const allPluginsExceptSelfScoped = this.getAllPluginsExceptSelfScoped(\n      pluginsArray,\n      application.contextPath\n    );\n    const newRemotes = this.addPluginToRemotesConfig(appConfigRemotes, allPluginsExceptSelfScoped);\n    // should be unproblematic to remove all categories of plugins from excluded remotes\n    const newExcludedRemotes = this.removePluginsFromRemotesConfig(\n      appConfigExcludedRemotes,\n      plugins\n    );\n    return await this.updateRemotesInAppConfig(application, newRemotes, newExcludedRemotes);\n  }\n\n  /**\n   * Updates the remotes field in the application configuration by removing plugins.\n   * @param application Application managed object.\n   * @param plugins List of remotes to be removed.\n   * @returns Returns updated application remotes.\n   */\n  async removeRemotes(\n    application: IApplication,\n    plugins: ApplicationPlugin | ApplicationPlugin[]\n  ): Promise<PluginsConfig> {\n    const pluginsArray = Array.isArray(plugins) ? plugins : [plugins];\n    const manifestRemotes = application.manifest?.remotes || {};\n    const appConfig: PluginsConfig | undefined = application?.config as PluginsConfig;\n    const appConfigRemotes = appConfig?.remotes || manifestRemotes;\n    const appConfigExcludedRemotes = appConfig?.excludedRemotes || {};\n    // app plugins need to be removed from remotes\n    const newRemotes = this.removePluginsFromRemotesConfig(appConfigRemotes, plugins);\n    // self scoped plugins need to be added to excluded remotes\n    // as they would be otherwise automatically added to remotes\n    const selfScopedPlugins = this.getSelfScopedPlugins(pluginsArray, application.contextPath);\n    const newExcludedRemotes = this.addPluginToRemotesConfig(\n      appConfigExcludedRemotes,\n      selfScopedPlugins\n    );\n    return await this.updateRemotesInAppConfig(application, newRemotes, newExcludedRemotes);\n  }\n\n  /**\n   * Updates the remotes field in the application configuration.\n   * @param application Application managed object.\n   * @param plugins List of remotes to be added.\n   * @returns Returns updated application remotes.\n   */\n  async updateRemotesInAppConfig(\n    application: IApplication,\n    plugins: ApplicationRemotePlugins,\n    excludedRemotes?: ApplicationRemotePlugins\n  ): Promise<PluginsConfig> {\n    const updatedAppWithConfig = await this.applicationService.updateApplicationConfig(\n      application,\n      {\n        remotes: plugins,\n        excludedRemotes: excludedRemotes || {}\n      } as PluginsConfig\n    );\n    return updatedAppWithConfig?.config || { remotes: {} };\n  }\n\n  /**\n   * Fetches the application manifest.\n   * @param application Application managed object.\n   * @returns Returns the application manifest.\n   */\n  async getCumulocityJsonFile(application: IApplication) {\n    const c8yJson = await this.applicationService.getAppManifest(application);\n    if (!c8yJson.remotes) {\n      c8yJson.remotes = {};\n    }\n    return c8yJson;\n  }\n\n  /**\n   * Sets the initial state of remotes in the configuration (when it's missing), based on the list of remotes being in the application manifest.\n   * @param application  Application managed object.\n   * @returns Returns a list of remotes that has been assigned to the configuration object.\n   */\n  async setInitialRemotes(application: IApplication) {\n    try {\n      const manifest: IManifest = await this.getCumulocityJsonFile(application);\n      const manifestRemotes: ApplicationRemotePlugins = manifest.remotes;\n\n      return await this.updateRemotesInAppConfig(application, manifestRemotes || {}, {});\n    } catch (er) {\n      return undefined;\n    }\n  }\n\n  async resetRemotes(application: IApplication) {\n    return await this.applicationService.updateApplicationConfig(application, {\n      remotes: undefined,\n      excludedRemotes: undefined\n    } as PluginsConfig);\n  }\n\n  /**\n   * Sorts versions list or list of objects by version property\n   * @returns list of versions as array of strings or array of objects sorted by version property\n   *\n   * @param {{ list: T[]; path: string[] } | string[]} source data to sort\n   * @param {'asc' | 'desc'} order ascending or descending order of sorting\n   *\n   * **Example**\n   * ```typescript\n   * const data = ['1.5.0', '2.0.0'];\n   * const sortedData = pluginsService.sortVersions(versions, 'desc');\n   * // sortedData:\n   * // ['2.0.0', '1.5.0']\n   * ```\n   *\n   * **Example**\n   * ```typescript\n   * const data = [\n   *  {app: {appVersion: '1.5.0'}},\n   *  {app: {appVersion: '2.0.0'}},\n   * ];\n   * const sortedData = pluginsService.sortVersions({list: data, path: ['app', 'appVersion']}, 'desc');\n   * // sortedData:\n   * // [\n   * //  {app: {appVersion: '2.0.0'}},\n   * //  {app: {appVersion: '1.5.0'}}\n   * // ]\n   * ```\n   */\n  sortVersions<T>(source: { list: T[]; path: string[] }, order: 'asc' | 'desc'): T[];\n  sortVersions(source: string[], order: 'asc' | 'desc'): string[];\n  sortVersions(source: any, order: 'asc' | 'desc'): any {\n    const sourceCopy = cloneDeep(source);\n    if (source.list && source.path) {\n      const path = sourceCopy.path.join('.');\n      return sourceCopy.list.sort(\n        (a, b) => compare(coerce(get(a, path)), coerce(get(b, path))) * (order === 'asc' ? 1 : -1)\n      );\n    } else {\n      return sourceCopy.sort((a, b) => compare(coerce(a), coerce(b)) * (order === 'asc' ? 1 : -1));\n    }\n  }\n\n  /**\n   * Extracts a list of exported plugins from the application object.\n   * @param application Application managed object.\n   * @param useLatest Set this to true, to not bind the plugin to any version.\n   * @returns Returns a list of exported plugins.\n   */\n  getMFExports(\n    application: IApplication,\n    excludedScopes = [\n      PluginsExportScopes.SELF,\n      PluginsExportScopes.SELF_OPTIONAL,\n      PluginsExportScopes.GLOBAL\n    ],\n    useLatest = false\n  ): ApplicationPlugin[] {\n    const manifest: Partial<IManifest> = application.manifest;\n    if (!manifest || !manifest.exports) {\n      return [];\n    }\n    return this.extendPluginsDetails(\n      application,\n      {\n        version: manifest.version,\n        binaryId: undefined\n      },\n      useLatest\n    ).filter(plugin => !excludedScopes.includes(plugin.scope));\n  }\n\n  /**\n   * Extracts a list of exports from each available package.\n   * @param allVersions If set to true, all and not only latest versions are included.\n   * @param excludedScopes Defines which scopes should not be loaded.\n   * @returns Returns a list of all exported plugins.\n   */\n  async getAllMFExports(\n    allVersions = false,\n    excludedScopes = [\n      PluginsExportScopes.SELF,\n      PluginsExportScopes.SELF_OPTIONAL,\n      PluginsExportScopes.GLOBAL\n    ]\n  ): Promise<ApplicationPlugin[]> {\n    const plugins = new Array<ApplicationPlugin>();\n    const packages = await this.listPackages();\n    for (const pkg of packages) {\n      if (!pkg?.manifest?.exports) {\n        continue;\n      }\n      if (allVersions && Array.isArray(pkg.applicationVersions)) {\n        pkg.applicationVersions.forEach(version => {\n          plugins.push(...this.extendPluginsDetails(pkg, version));\n        });\n      } else {\n        plugins.push(\n          ...this.extendPluginsDetails(pkg, {\n            version: pkg.manifest.version,\n            binaryId: undefined\n          })\n        );\n      }\n    }\n    return plugins.filter(plugin => !excludedScopes.includes(plugin.scope));\n  }\n\n  /**\n   * Extracts a list of remotes from the application object.\n   * @param application Application managed object.\n   * @returns Returns list of remotes.\n   */\n  getMFRemotes(application: IApplication): ApplicationRemotePlugins {\n    const manifest = application.manifest || {};\n    const config: PluginsConfig = application?.config as PluginsConfig;\n    let remotes = config?.remotes || manifest.remotes || {};\n    const manifestExports = manifest.exports || manifest.manifest?.exports || [];\n    const selfRemotes: string[] = manifestExports\n      .filter(plugin => plugin.scope === PluginsExportScopes.SELF)\n      .map(plugin => plugin.module || plugin.name);\n\n    if (selfRemotes.length) {\n      remotes = mergeRemotes([{ [application.contextPath]: selfRemotes }, remotes]);\n    }\n\n    remotes = removeRemotes(remotes, config?.excludedRemotes);\n    return remotes;\n  }\n\n  /**\n   * Determines the type of a package.\n   * A package is OFFICIAL if it comes from management tenant and has a label attached called OFFICIAL.\n   * A package is COMMUNITY if it has a label called COMMUNITY.\n   * A package is CUSTOM if it does not have any label attached.\n   * A package is UNKNOWN if it has a label attached but it does not match COMMUNITY or OFFICIAL.\n   *\n   * Labels can be used to identify the status of a package. Community packages always need\n   * a license validation. The label will be shown on the application card to tell a user\n   * whether they are looking into an official or community package.\n   *\n   * @param packageApplication The package application object to check.\n   * @returns The package type.\n   */\n  getPackageType(packageApplication: IApplication): PackageType {\n    const label = packageApplication.label || packageApplication.manifest?.label;\n    if (label === PackageType.ARCHIVED) {\n      return PackageType.ARCHIVED;\n    }\n    if (!label) {\n      return PackageType.CUSTOM;\n    }\n    if (label === PackageType.OFFICIAL && this.isOwnedByManagement(packageApplication)) {\n      return PackageType.OFFICIAL;\n    }\n    if (label === PackageType.COMMUNITY) {\n      return PackageType.COMMUNITY;\n    }\n    return PackageType.UNKNOWN;\n  }\n\n  /**\n   * Verifies if an application is owned by management tenant.\n   *\n   * @param app The application to verify.\n   * @returns True if owned by management tenant.\n   */\n  isOwnedByManagement(app: IApplication): boolean {\n    const appOwner = get(app, 'owner.tenant.id');\n    return appOwner === 'management';\n  }\n\n  pluginsFromManifest(manifest: IManifest): ApplicationPlugin[] {\n    const plugins: ApplicationPlugin[] = manifest.exports;\n    const extendedPlugins = plugins\n      .filter(p => p.scope === PluginsExportScopes.SELF)\n      .map(p => ({\n        ...p,\n        id: PluginsService.createPluginId(manifest.contextPath, p, manifest.version),\n        contextPath: manifest.contextPath,\n        version: manifest.version,\n        versioningMatrix: manifest.versioningMatrix,\n        license: manifest.license,\n        type: PackageType.CUSTOM\n      }));\n    return extendedPlugins;\n  }\n\n  async getReadmeFileContent(baseUrl: string): Promise<string> {\n    return this.getFileContent(baseUrl, 'readme');\n  }\n\n  async getChangelogFileContent(baseUrl: string): Promise<string> {\n    return this.getFileContent(baseUrl, 'changelog');\n  }\n\n  async getFileContent(baseUrl: string, fileType: 'readme' | 'changelog'): Promise<string> {\n    const file = await this.getFile(baseUrl, fileType);\n\n    if (file.status === 200) {\n      return await file.text();\n    }\n    return '';\n  }\n\n  private async getFile(\n    baseUrl: string,\n    fileType: 'readme' | 'changelog'\n  ): Promise<IFetchResponse> {\n    const options: IFetchOptions = {\n      method: 'GET',\n      headers: { 'Content-Type': 'text/markdown' }\n    };\n\n    const uppercaseFilename = fileType === 'readme' ? 'README.md' : 'CHANGELOG.md';\n\n    let result = await this.client.fetch(`${baseUrl}${uppercaseFilename}`, options);\n\n    if (result && result.status === 404) {\n      result = await this.client.fetch(`${baseUrl}${uppercaseFilename.toLowerCase()}`, options);\n    }\n\n    return result;\n  }\n\n  private isSelfScopedPlugin(plugin: ApplicationPlugin, contextPath?: string): boolean {\n    return (\n      plugin.scope === PluginsExportScopes.SELF &&\n      (!contextPath || plugin.contextPath === contextPath)\n    );\n  }\n\n  private getSelfScopedPlugins(\n    plugins: ApplicationPlugin[],\n    contextPath?: string\n  ): ApplicationPlugin[] {\n    return plugins.filter(plugin => this.isSelfScopedPlugin(plugin, contextPath));\n  }\n\n  private getAllPluginsExceptSelfScoped(\n    plugins: ApplicationPlugin[],\n    contextPath?: string\n  ): ApplicationPlugin[] {\n    return plugins.filter(plugin => !this.isSelfScopedPlugin(plugin, contextPath));\n  }\n\n  private removeDuplicates(apps: IApplication[], key: string): IApplication[] {\n    const uniqueList: IApplication[] = [];\n    const groupedAppsByKey: Record<string, IApplication[]> = groupBy(apps, key);\n    const groupedApps: IApplication[][] = Object.keys(groupedAppsByKey).map(\n      key => groupedAppsByKey[key]\n    );\n    for (const appsGroup of groupedApps) {\n      if (appsGroup.length < 2) {\n        uniqueList.push(...appsGroup);\n      } else {\n        const appFromCurrentTenant = appsGroup.find(app => this.isFromCurrentTenant(app));\n        if (appFromCurrentTenant) {\n          uniqueList.push(appFromCurrentTenant);\n          continue;\n        }\n        const appNotOwnedByManagement = appsGroup.find(app => !this.isOwnedByManagement(app));\n        uniqueList.push(appNotOwnedByManagement);\n      }\n    }\n    return uniqueList;\n  }\n\n  private isFromCurrentTenant(app: IApplication): boolean {\n    return app.owner.tenant.id === this.appStateService.currentTenant.value.name;\n  }\n\n  /**\n   * Modifies the list of plugins to have additional information such as id.\n   * @ignore\n   */\n  private extendPluginsDetails(\n    application: IApplication,\n    version: IApplicationVersion,\n    useLatest = false\n  ): ApplicationPlugin[] {\n    const plugins: ApplicationPlugin[] = application.manifest.exports;\n    const extendedPlugins: ApplicationPlugin[] = plugins.map(p => ({\n      ...p,\n      id: PluginsService.createPluginId(application.contextPath, p, version.version, useLatest),\n      idLatest: PluginsService.createPluginId(application.contextPath, p, version.version, true),\n      contextPath: application.contextPath,\n      version: version.version,\n      versioningMatrix: application.manifest.versioningMatrix,\n      tags: useLatest ? ['latest'] : version.tags || [],\n      license: application.manifest.license,\n      type: this.getPackageType(application),\n      originApp: application\n    }));\n    return extendedPlugins;\n  }\n\n  private async listApplicationsByCurrentTenant(params: any = {}): Promise<IApplication[]> {\n    const filter = Object.assign(\n      {\n        type: 'HOSTED',\n        pageSize: 2000,\n        withTotalPages: true\n      },\n      params\n    );\n    const sharedFilter = Object.assign(\n      {\n        availability: ApplicationAvailability.SHARED,\n        type: 'HOSTED',\n        pageSize: 2000,\n        withTotalPages: true\n      },\n      params\n    );\n\n    const tenantName = this.appStateService.currentTenant.value.name;\n    const [resultAppsOwnedByTenant, resultSharedApps] = await Promise.all([\n      this.applicationService.listByTenant(tenantName, filter),\n      this.applicationService.list(sharedFilter)\n    ]);\n    const { data: appsOwnedByTenant } = resultAppsOwnedByTenant;\n    const { data: sharedApps } = resultSharedApps;\n    const webApps = [...appsOwnedByTenant, ...sharedApps];\n    return uniqBy(webApps, (app: IApplication) => app.id);\n  }\n\n  private addPluginToRemotesConfig(\n    remotesConfig: ApplicationRemotePlugins,\n    plugins: ApplicationPlugin | ApplicationPlugin[]\n  ): ApplicationRemotePlugins {\n    if (!plugins) {\n      return;\n    }\n    const remotesCopy = cloneDeep(remotesConfig);\n    const temp = Array.isArray(plugins) ? plugins : [plugins];\n\n    temp.forEach(plugin => {\n      const { contextPath, moduleName } = this.parsePluginId(plugin.id);\n      if (!contextPath || !moduleName) {\n        return;\n      }\n      remotesCopy[contextPath]?.length >= 0\n        ? remotesCopy[contextPath].push(moduleName)\n        : (remotesCopy[contextPath] = []).push(moduleName);\n      remotesCopy[contextPath] = [...new Set(remotesCopy[contextPath])];\n    });\n    return remotesCopy;\n  }\n\n  private removePluginsFromRemotesConfig(\n    remotesConfig: ApplicationRemotePlugins,\n    plugins: ApplicationPlugin | ApplicationPlugin[]\n  ): ApplicationRemotePlugins {\n    const remotesCopy: ApplicationRemotePlugins = cloneDeep(remotesConfig);\n    const temp = Array.isArray(plugins) ? plugins : [plugins];\n\n    temp.forEach(plugin => {\n      const { rawContextPath, moduleName } = this.parsePluginId(plugin.id);\n      if (!rawContextPath || !moduleName) {\n        return;\n      }\n\n      // Find all keys in remotesConfig that match the plugin context (regardless of version)\n      Object.keys(remotesCopy).forEach(key => {\n        if (key === rawContextPath || key.startsWith(`${rawContextPath}@`)) {\n          remotesCopy[key] = remotesCopy[key].filter(p => p !== moduleName);\n          remotesCopy[key] = [...new Set(remotesCopy[key])];\n          if (remotesCopy[key].length === 0) {\n            delete remotesCopy[key];\n          }\n        }\n      });\n    });\n\n    return remotesCopy;\n  }\n\n  /**\n   * Parses id of the plugin and returns object with context path, raw context path (without version) and module name.\n   * For example:\n   * ```ts\n   * const id = 'widget-plugin@1021.0.1/WidgetPluginModule'\n   * const parsed = parsePluginId(id); // { contextPath: 'widget-plugin@1021.0.1', moduleName: 'WidgetPluginModule', rawContextPath: 'widget-plugin' }\n   * @param id Plugin id in the format of `<contextPath>@<version>/<moduleName>`\n   * @returns Object with context path, module name and raw context path (without version).\n   */\n  private parsePluginId(id: string): {\n    contextPath: string;\n    moduleName: string;\n    rawContextPath: string;\n  } {\n    const [contextPath, moduleName] = id.split('/');\n    const [rawContextPath] = contextPath.split('@');\n    return { rawContextPath, contextPath, moduleName };\n  }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { AppStateService, ExtensionFactory } from '../common';\nimport { Version, VersionModuleConfig, VERSION_MODULE_CONFIG } from './version.model';\nimport { Observable, of } from 'rxjs';\nimport { distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { PluginsService } from '../plugins/plugins.service';\nimport { ApplicationRemotePlugins } from '@c8y/client';\n\n/**\n * Will provide the version of plugins installed to the current application.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class WebSDKPluginVersionFactory implements ExtensionFactory<Version> {\n  webSDKPluginVersions$: Observable<Version[]> = of([]);\n\n  constructor(\n    @Optional() @Inject(VERSION_MODULE_CONFIG) private config: VersionModuleConfig,\n    private appState: AppStateService,\n    private plugins: PluginsService\n  ) {\n    if (this.config?.disableWebSDKPluginVersionFactory) {\n      return;\n    }\n    this.webSDKPluginVersions$ = this.appState.currentApplication.pipe(\n      map(app => this.plugins.getMFRemotes(app)),\n      filter(remotes => !!remotes),\n      distinctUntilChanged(),\n      map(remotes => this.getVersionsFromRemotes(remotes))\n    );\n  }\n\n  get(): Observable<Version[]> {\n    return this.webSDKPluginVersions$;\n  }\n\n  getVersionsFromRemotes(remotes: ApplicationRemotePlugins): Version[] {\n    const versions = new Array<Version>();\n    for (const key of Object.keys(remotes)) {\n      const modules = remotes[key];\n      if (!modules?.length) {\n        continue;\n      }\n      const [contextPath, version] = key.split('@', 2);\n\n      const versionsBehindKey: Version[] = modules.map(module => {\n        return {\n          label: `${contextPath} => ${module}`,\n          version: version || 'latest',\n          type: 'INSTALLED_MF_PLUGINS',\n          hidden: true,\n          custom: {\n            key,\n            contextPath,\n            module\n          }\n        };\n      });\n      versions.push(...versionsBehindKey);\n    }\n    return versions;\n  }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { AppStateService, ExtensionFactory } from '../common';\nimport { Version, VersionModuleConfig, VERSION_MODULE_CONFIG } from './version.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n/**\n * Will provide the application version (taken from package.json's `version` field) and\n * the installed versions of the packages`@c8y/ng1-modules` and `@c8y/ngx-components` if available.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class WebSDKVersionFactory implements ExtensionFactory<Version> {\n  webSDKVersions: Version[] = [];\n  private defaults = {\n    type: 'WebSDK',\n    priority: 0,\n    hidden: true\n  };\n\n  constructor(\n    @Optional() @Inject(VERSION_MODULE_CONFIG) private config: VersionModuleConfig,\n    private appState: AppStateService\n  ) {\n    if (this.config?.disableWebSDKVersionFactory) {\n      return;\n    }\n    const { ng1, ngx, package: pkg } = this.appState.state.versions.ui;\n    if (ng1) {\n      this.webSDKVersions.push({\n        ...this.defaults,\n        label: '@c8y/ng1-modules',\n        version: ng1\n      });\n    }\n    if (ngx) {\n      this.webSDKVersions.push({\n        ...this.defaults,\n        label: '@c8y/ngx-components',\n        version: ngx\n      });\n    }\n    if (pkg) {\n      this.webSDKVersions.push({\n        ...this.defaults,\n        label: gettext('Application'),\n        version: pkg,\n        priority: 50\n      });\n    }\n  }\n\n  get(): Version[] {\n    return this.webSDKVersions;\n  }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { AppStateService, ExtensionFactory } from '../common';\nimport { Version, VersionModuleConfig, VERSION_MODULE_CONFIG } from './version.model';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { IApplication } from '@c8y/client';\n\n/**\n * Provides the information about the current application.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ApplicationVersionFactory implements ExtensionFactory<Version> {\n  applicationVersions$: Observable<Version>;\n\n  constructor(\n    @Optional() @Inject(VERSION_MODULE_CONFIG) private config: VersionModuleConfig,\n    private appState: AppStateService\n  ) {\n    if (this.config?.disableWebSDKVersionFactory) {\n      return;\n    }\n    this.applicationVersions$ = this.appState.currentApplication.pipe(\n      map(app => this.getInformationFromApp(app))\n    );\n  }\n\n  get(): Observable<Version> {\n    return this.applicationVersions$;\n  }\n\n  getInformationFromApp(app: IApplication): Version {\n    return {\n      label: app.name,\n      version: app.version || app.manifest?.version,\n      type: 'CURRENT_APPLICATION',\n      hidden: true,\n      custom: {\n        ...app\n      }\n    };\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ClipboardModule } from '../clipboard/clipboard.module';\nimport { HookProviderTypes } from '../common';\nimport { CommonModule } from '../common/common.module';\nimport { hookDrawer } from '../drawer/drawer.service';\nimport { PluginsModule } from '../plugins/plugins.module';\nimport { BackendVersionFactory } from './backend-version.factory';\nimport { VersionDrawerFactory } from './version-drawer.factory';\nimport { VersionListComponent } from './version-list/version-list.component';\nimport { hookVersion, VersionModuleConfig, VERSION_MODULE_CONFIG } from './version.model';\nimport { WebSDKPluginVersionFactory } from './websdk-plugin-version.factory';\nimport { WebSDKVersionFactory } from './websdk-version.factory';\nimport { ApplicationVersionFactory } from './application-version.factory';\n\n@NgModule({\n  imports: [CommonModule, PluginsModule, ClipboardModule, VersionListComponent],\n  exports: [VersionListComponent]\n})\nexport class VersionModule {\n  static providers() {\n    return [\n      hookVersion(BackendVersionFactory, { providerType: HookProviderTypes.ExistingProvider }),\n      hookVersion(WebSDKVersionFactory, { providerType: HookProviderTypes.ExistingProvider }),\n      hookVersion(WebSDKPluginVersionFactory, { providerType: HookProviderTypes.ExistingProvider }),\n      hookVersion(ApplicationVersionFactory, { providerType: HookProviderTypes.ExistingProvider }),\n      hookDrawer(VersionDrawerFactory)\n    ];\n  }\n\n  static config(config: VersionModuleConfig = {}): ModuleWithProviders<VersionModule> {\n    return {\n      ngModule: VersionModule,\n      providers: [\n        {\n          provide: VERSION_MODULE_CONFIG,\n          useValue: config\n        }\n      ]\n    };\n  }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ActionModule } from '../action/action.module';\nimport { BreadcrumbModule } from '../breadcrumb/breadcrumb.module';\nimport { CommonModule } from '../common/common.module';\nimport { NavigatorModule } from '../navigator/navigator.module';\nimport { ProductExperienceModule } from '../product-experience/product-experience.module';\nimport { CoreSearchModule } from '../search/search.module';\nimport { UiSettingsModule } from '../ui-settings/ui-settings.module';\nimport { UserModule } from '../user/user.module';\nimport { VersionModule } from '../version';\nimport { HeaderBarComponent } from './header-bar/header-bar.component';\nimport { TitleOutletComponent } from './title/title-outlet.component';\nimport { TitleComponent } from './title/title.component';\nimport { ApplicationModule } from '../application/application.module';\nimport { DrawerModule } from '../drawer/drawer.module';\n\n/**\n * The angular module definition for the header of the application.\n * @exports HeaderBarComponent\n * @exports TitleComponent\n * @exports TitleOutletComponent\n * @exports AppIconComponent\n * @exports AppSwitcherComponent\n */\n@NgModule({\n  imports: [\n    ApplicationModule,\n    A11yModule,\n    UserModule,\n    CoreSearchModule,\n    CommonModule,\n    ActionModule,\n    BreadcrumbModule,\n    NavigatorModule,\n    VersionModule,\n    TooltipModule.forRoot(),\n    CollapseModule.forRoot(),\n    ProductExperienceModule,\n    DrawerModule,\n    UiSettingsModule,\n    TitleComponent,\n    HeaderBarComponent,\n    TitleOutletComponent\n  ],\n  exports: [HeaderBarComponent, TitleComponent, TitleOutletComponent]\n})\nexport class HeaderModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { PropertiesListComponent } from './properties-list.component';\n\n@NgModule({\n  imports: [CommonModule, PropertiesListComponent],\n  exports: [PropertiesListComponent],\n  providers: []\n})\nexport class PropertiesListModule {}\n","import { CdkStep, CdkStepperModule, STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';\nimport { NgModule } from '@angular/core';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { CommonModule } from '../common/common.module';\nimport { C8yStepperButtons } from './stepper-buttons.component';\nimport { C8yStepperIcon } from './stepper-icon.directive';\nimport { C8yStepperProgress } from './stepper-progress.component';\nimport { C8yStepper } from './stepper.component';\nimport { StepperOutletComponent } from './stepper-outlet.component';\nimport { FormsModule } from '@angular/forms';\n\n/**\n * The angular module definition for c8y-stepper (Wizard).\n * @exports C8yStepper\n * @exports C8yStepperIcon\n * @exports C8yStepperButtons\n * @exports CdkStep\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    CdkStepperModule,\n    TooltipModule,\n    FormsModule,\n    C8yStepper,\n    C8yStepperIcon,\n    C8yStepperProgress,\n    C8yStepperButtons,\n    StepperOutletComponent\n  ],\n  exports: [C8yStepper, CdkStep, C8yStepperIcon, C8yStepperButtons, StepperOutletComponent],\n  providers: [\n    {\n      /**\n       * This enables additional states, like: edit, done and error\n       * These states are used to display custom icons, if needed.\n       * Any change in here will most probably result in not showing custom icons anymore\n       */\n      provide: STEPPER_GLOBAL_OPTIONS,\n      useValue: { displayDefaultIndicatorType: false }\n    }\n  ]\n})\nexport class StepperModule {}\n","import { CdkStep } from '@angular/cdk/stepper';\nimport { Component, OnInit, OnDestroy } from '@angular/core';\nimport { C8yStepper } from '../stepper/stepper.component';\nimport { SetupComponent } from './setup.component';\nimport { Subscription } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { NgSwitch, NgSwitchCase, NgFor, NgIf, NgClass } from '@angular/common';\nimport { OperationResultComponent } from '../common/operation-result.component';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-setup-completed',\n  templateUrl: './setup-completed.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [\n    C8yTranslateDirective,\n    NgSwitch,\n    NgSwitchCase,\n    OperationResultComponent,\n    NgFor,\n    NgIf,\n    NgClass,\n    IconDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class SetupCompletedComponent implements OnInit, OnDestroy {\n  status: 'done' | 'warning' | 'error' = 'done';\n  readonly STEP_LABEL = gettext('Step');\n  private isVerified = false;\n  private stepperSelectionChangeSubscription: Subscription;\n\n  constructor(\n    public stepper: C8yStepper,\n    public step: CdkStep,\n    public setup: SetupComponent\n  ) {}\n\n  ngOnInit() {\n    this.stepperSelectionChangeSubscription = this.stepper.selectionChange.subscribe(\n      ({ selectedIndex }) => {\n        this.verify(selectedIndex);\n      }\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.stepperSelectionChangeSubscription.unsubscribe();\n  }\n\n  verify(selectedIndex) {\n    const isLastStep = this.stepper.steps.length - 1 === selectedIndex;\n    if (isLastStep || this.isVerified) {\n      // set the last step to completed\n      this.getOverallStatus();\n      this.setup.verify();\n      this.isVerified = true;\n    }\n  }\n\n  start() {\n    this.setup.finish();\n  }\n\n  back() {\n    this.stepper.previous();\n  }\n\n  gotoStep(index) {\n    this.stepper.selectedIndex = index;\n  }\n\n  private getOverallStatus() {\n    const validSteps = this.setup.steps.slice(0, this.setup.steps.length - 1);\n    this.status = 'done';\n    if (validSteps.find(step => !step.completed && step.required)) {\n      this.status = 'error';\n    } else if (validSteps.find(step => !step.completed && !step.required)) {\n      this.status = 'warning';\n    }\n    this.step.state = this.status;\n  }\n}\n","<div class=\"container-fluid flex-no-shrink fit-w\">\n  <div class=\"row separator-bottom\">\n    <div class=\"col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3 p-t-24 p-l-16 p-r-16\">\n      <h3\n        class=\"text-medium l-h-base\"\n        translate\n        data-cy=\"c8y-setup--completed-header-title\"\n      >\n        Summary\n      </h3>\n      <p\n        class=\"lead text-normal p-t-8 p-b-8\"\n        translate\n      >\n        Verify the setup result. If any step is not finished but required, you need to ensure that\n        you have finished the step.\n      </p>\n    </div>\n  </div>\n</div>\n<div class=\"inner-scroll flex-grow\">\n  <div class=\"container-fluid fit-w p-t-16\">\n    <div class=\"row\">\n      <div class=\"col-md-8 col-md-offset-2 col-lg-6 col-lg-offset-3\">\n        <div class=\"text-center\">\n          @switch (status) {\n            @case ('done') {\n              <c8y-operation-result\n                type=\"success\"\n                text=\"{{ 'Setup completed' | translate }}\"\n                [size]=\"120\"\n                [vertical]=\"true\"\n              ></c8y-operation-result>\n            }\n            @case ('warning') {\n              <c8y-operation-result\n                type=\"warning\"\n                text=\"{{ 'Setup completed with warnings' | translate }}\"\n                [size]=\"120\"\n                [vertical]=\"true\"\n              ></c8y-operation-result>\n            }\n            @case ('error') {\n              <c8y-operation-result\n                type=\"error\"\n                text=\"{{ 'Setup not completed' | translate }}\"\n                [size]=\"120\"\n                [vertical]=\"true\"\n              ></c8y-operation-result>\n            }\n          }\n        </div>\n        <ul class=\"list-unstyled m-t-16 separator-top\">\n          @for (step of setup.steps.slice(0, setup.steps.length - 1); track step.index) {\n            <li\n              class=\"p-t-4 p-b-4 d-flex a-i-center separator-bottom text-nowrap l-h-1\"\n              style=\"cursor: pointer\"\n              (click)=\"gotoStep(step.index)\"\n            >\n              @if (step.label) {\n                <span>\n                  <span\n                    class=\"dot small m-r-4 l-h-1\"\n                    [ngClass]=\"{\n                      'dot-success': step.completed,\n                      'dot-error': !step.completed && step.required,\n                      'dot-warning': !step.completed && !step.required\n                    }\"\n                  >\n                    {{ step.index + 1 }}\n                  </span>\n                  {{ step.label || (STEP_LABEL | translate) + ' ' }}\n                </span>\n              }\n              @if (!step.label) {\n                <span>\n                  <span translate>Step</span>\n                  {{ ' ' + (step.index + 1) }}\n                </span>\n              }\n              <span class=\"m-l-auto icon-20 l-h-1\">\n                @if (step.completed) {\n                  <i\n                    class=\"text-success\"\n                    [c8yIcon]=\"'success'\"\n                    [title]=\"'Completed' | translate\"\n                  ></i>\n                }\n                @if (!step.completed && step.required) {\n                  <i\n                    class=\"text-danger\"\n                    [c8yIcon]=\"'error'\"\n                    [title]=\"\n                      'Not completed and required. Go to the step and fulfill the setup.'\n                        | translate\n                    \"\n                  ></i>\n                }\n                @if (!step.completed && !step.required) {\n                  <i\n                    class=\"text-warning\"\n                    [c8yIcon]=\"'warning'\"\n                    [title]=\"'This step was not completed but it is also not required.' | translate\"\n                  ></i>\n                }\n              </span>\n            </li>\n          }\n        </ul>\n      </div>\n    </div>\n  </div>\n</div>\n<div class=\"card-footer separator d-flex gap-8 j-c-center\">\n  @if (stepper.selectedIndex !== 0) {\n    <button\n      class=\"btn btn-default\"\n      type=\"button\"\n      translate\n      (click)=\"back()\"\n      [disabled]=\"\n        setup.currentSetupState === setup.setupState.FINALIZING ||\n        setup.currentSetupState === setup.setupState.RELOADING\n      \"\n    >\n      Back\n    </button>\n  }\n  <button\n    class=\"btn btn-primary\"\n    type=\"button\"\n    data-cy=\"c8y-setup-completed--done-button\"\n    (click)=\"start()\"\n    [disabled]=\"\n      status === 'error' ||\n      setup.currentSetupState === setup.setupState.FINALIZING ||\n      setup.currentSetupState === setup.setupState.RELOADING\n    \"\n    [ngClass]=\"{\n      'btn-pending':\n        setup.currentSetupState === setup.setupState.FINALIZING ||\n        setup.currentSetupState === setup.setupState.RELOADING\n    }\"\n  >\n    @if (setup.currentSetupState === setup.setupState.WIZARD) {\n      <span translate>Save and reload</span>\n    }\n    @if (setup.currentSetupState === setup.setupState.FINALIZING) {\n      <span translate>Getting things ready…</span>\n    }\n    @if (setup.currentSetupState === setup.setupState.RELOADING) {\n      <span translate>Done. Reloading the application.</span>\n    }\n  </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Step, Steppers } from '../stepper/stepper.model';\nimport { SetupCompletedComponent } from './setup-completed.component';\nimport { SetupStep, SETUP_FINISHED_STEP_ID } from './setup.model';\n\n/**\n * A factory providing the 'Summary' step to the setup stepper.\n */\n@Injectable({ providedIn: 'root' })\nexport class SetupStepperFactory implements ExtensionFactory<Step> {\n  private readonly step = {\n    setupId: SETUP_FINISHED_STEP_ID,\n    stepperId: Steppers.SETUP,\n    component: SetupCompletedComponent,\n    label: gettext('Summary'),\n    priority: -Infinity\n  } as SetupStep;\n\n  get(): SetupStep {\n    return this.step;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { HeaderModule } from '../header/header.module';\nimport { PluginsModule } from '../plugins/plugins.module';\nimport { PropertiesListModule } from '../properties-list/properties-list.module';\nimport { hookStepper } from '../stepper/stepper.service';\nimport { StepperModule } from '../stepper/stepper.module';\nimport { SetupCompletedComponent } from './setup-completed.component';\nimport { SetupComponent } from './setup.component';\nimport { SetupStepperFactory } from './setup-stepper-factory';\nimport { HookProviderTypes } from '../common';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    HeaderModule,\n    StepperModule,\n    PluginsModule,\n    PropertiesListModule,\n    SetupComponent,\n    SetupCompletedComponent\n  ],\n  exports: [SetupComponent, SetupCompletedComponent],\n  providers: [\n    hookStepper(SetupStepperFactory, { providerType: HookProviderTypes.ExistingProvider })\n  ]\n})\nexport class SetupModule {}\n","import {\n  Component,\n  ViewChild,\n  Input,\n  AfterContentInit,\n  OnDestroy,\n  Injector,\n  EnvironmentInjector,\n  Output,\n  EventEmitter,\n  TemplateRef\n} from '@angular/core';\nimport { TabsService } from './tabs.service';\nimport { Tab, TabWithTemplate } from './tab.model';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n@Component({\n  selector: 'c8y-tab',\n  template: '<ng-template #tpl><ng-content></ng-content></ng-template>',\n  standalone: true\n})\nexport class TabComponent implements AfterContentInit, OnDestroy, TabWithTemplate<string> {\n  @ViewChild('tpl', { static: false }) template: TemplateRef<any>;\n  @Input() path: string;\n  @Input() label = '';\n  @Input() icon: SupportedIconsSuggestions;\n  @Input() priority: number;\n  @Input() orientation: 'horizontal' | 'vertical';\n  @Input() injector: Injector;\n  @Input() tabsOutlet: string;\n  @Input() isActive: boolean;\n  @Input() text: string;\n  @Input() showAlways = false;\n  @Output() onSelect = new EventEmitter();\n\n  constructor(\n    private tabs: TabsService,\n    _injector: EnvironmentInjector\n  ) {\n    this.injector = _injector;\n  }\n\n  ngAfterContentInit() {\n    setTimeout(() => this.tabs.add(this as Tab));\n  }\n\n  ngOnDestroy() {\n    this.tabs.remove(this as Tab);\n  }\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Tab } from './tab.model';\nimport { TabsService } from './tabs.service';\n\n/**\n * Register this component on the parent route of a view with multiple tabs where the first tab\n * is displayed only conditionally.\n *\n * Given the following routes leading to a single view with multiple tabs:<br>\n * /yourpath/tab-a -> Tab A<br>\n * /yourpath/tab-b -> Tab B<br>\n * /yourpath/tab-c -> Tab C\n *\n * Your components will be registered like\n * ```typescript\n * export const routes: Route[] = [\n *   {\n *     path: 'yourpath/tab-a',\n *     component: TabAComponent\n *   },\n *   {\n *     path: 'yourpath/tab-b',\n *     component: TabBComponent\n *   },\n *   {\n *     path: 'yourpath/tab-c',\n *     component: TabCComponent\n *   }\n * ];\n * ```\n *\n * In the simple case where Tab A is the first tab on the view and it is always displayed, you can register\n * your view in the navigation with a similar navigator node:\n *\n * ```typescript\n * new NavigatorNode({\n *   label: gettext('My tabs'),\n *   path: 'yourpath/tab-a',\n *   icon: 'gears',\n *   parent: gettext('Some parent node'),\n *   priority: 100\n * })\n * ```\n *\n * This will navigate to the first tab's component and activate the first tab in the view.\n *\n * In case Tab A is displayed conditionally you cannot link it from a navigator node since it may not be available in some cases.\n * In this situation `ConditionalTabsOutletComponent` comes handy as it will forward users to the first available tab on your view:\n *\n * ```typescript\n * new NavigatorNode({\n *   label: gettext('My tabs'),\n *   path: 'yourpath', // note that here we use only the parent route\n *   icon: 'gears',\n *   parent: gettext('Some parent node'),\n *   priority: 100\n * })\n *\n * [...]\n *\n * export const routes: Route[] = [\n *   {\n *     path: 'yourpath',\n *     component: ConditionalTabsOutletComponent // we register ConditionalTabsOutletComponent for the parent path\n *   },\n *   {\n *     path: 'yourpath/tab-a',\n *     component: TabAComponent\n *   },\n *   {\n *     path: 'yourpath/tab-b',\n *     component: TabBComponent\n *   },\n *   {\n *     path: 'yourpath/tab-c',\n *     component: TabCComponent\n *   }\n * ];\n * ```\n */\n@Component({\n  selector: 'c8y-conditional-tabs-outlet',\n  template: ` <router-outlet></router-outlet> `,\n  standalone: true,\n  imports: [RouterOutlet]\n})\nexport class ConditionalTabsOutletComponent implements OnInit, OnDestroy {\n  private endSubscriptions$: Subject<void> = new Subject();\n\n  constructor(\n    private tabsService: TabsService,\n    private router: Router\n  ) {}\n\n  ngOnInit(): void {\n    this.tabsService.firstTab$.pipe(takeUntil(this.endSubscriptions$)).subscribe((tab: Tab) => {\n      if (tab) {\n        this.router.navigate(typeof tab.path === 'string' ? [tab.path] : tab.path, {\n          replaceUrl: true\n        });\n      }\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.endSubscriptions$.next();\n    this.endSubscriptions$.complete();\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CommonModule } from '../common/common.module';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { TabComponent } from './tab.component';\nimport { TabsOutletComponent } from './tabs-outlet.component';\nimport { ConditionalTabsOutletComponent } from './conditional-tabs-outlet.component';\nimport { HeaderModule } from '../header/header.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    RouterModule.forChild([]),\n    TooltipModule.forRoot(),\n    HeaderModule,\n    ConditionalTabsOutletComponent,\n    TabsOutletComponent,\n    TabComponent\n  ],\n  exports: [ConditionalTabsOutletComponent, TabsOutletComponent, TabComponent]\n})\nexport class TabsModule {}\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ActionBarModule } from '../action-bar/action-bar.module';\nimport { AlertModule } from '../alert/alert.module';\nimport { CommonModule } from '../common/common.module';\nimport { DrawerModule } from '../drawer/drawer.module';\nimport { HeaderModule } from '../header/header.module';\nimport { ModalModule } from '../modal/modal.module';\nimport { NavigatorModule } from '../navigator/navigator.module';\nimport { SetupModule } from '../setup/setup.module';\nimport { TabsModule } from '../tabs/tabs.module';\nimport { BootstrapComponent } from './bootstrap.component';\nimport { CookieBannerPreferencesModalComponent } from './cookie-banner/cookie-banner-preferences-modal/cookie-banner-preferences-modal.component';\nimport { CookieBannerComponent } from './cookie-banner/cookie-banner.component';\nimport { CookieBannerService } from './cookie-banner/cookie-banner.service';\nimport { MessageBannerComponent } from './message-banner/message-banner.component';\n\n/**\n * The module which allows to bootstrap a custom application.\n * Use it as `bootstrap: []` component in your main app module\n * or as `<c8y-bootstrap>` in your main app.\n */\n@NgModule({\n  imports: [\n    FormsModule,\n    CommonModule,\n    HeaderModule,\n    RouterModule,\n    TabsModule,\n    ActionBarModule,\n    AlertModule,\n    NavigatorModule,\n    TooltipModule,\n    ModalModule,\n    SetupModule,\n    DrawerModule,\n    BootstrapComponent,\n    CookieBannerComponent,\n    CookieBannerPreferencesModalComponent,\n    MessageBannerComponent\n  ],\n  exports: [BootstrapComponent],\n  providers: [CookieBannerService]\n})\nexport class BootstrapModule {}\n","import {\n  ApplicationRef,\n  ComponentRef,\n  createComponent,\n  EmbeddedViewRef,\n  Injector,\n  Type\n} from '@angular/core';\nimport { NavigationStart, Router } from '@angular/router';\nimport { assign } from 'lodash';\nimport { firstValueFrom, Observable, Subject, timer } from 'rxjs';\nimport { filter, shareReplay, take, takeUntil, tap } from 'rxjs/operators';\nimport { DrawerHost, DrawerOptions } from './bottom-drawer.model';\n\nexport const DRAWER_ANIMATION_TIME = 400;\nexport class BottomDrawerRef<C> {\n  /**\n   * Event fired when the bottom drawer behind the reference is closed.\n   */\n  get onClosed$(): Observable<void> {\n    return this.closedObs$;\n  }\n\n  /**\n   * The instance of the component created.\n   */\n  instance: C;\n\n  private drawerComponentRef: ComponentRef<DrawerHost>;\n\n  private closedSubject$: Subject<void> = new Subject();\n  private closedObs$: Observable<void> = this.closedSubject$.asObservable().pipe(shareReplay());\n\n  constructor(\n    component: Type<C>,\n    private drawerComponent: Type<DrawerHost>,\n    private applicationRef: ApplicationRef,\n    private router: Router,\n    private options?: DrawerOptions<C>,\n    private removeCallback?: (ref: BottomDrawerRef<C>) => void,\n    private isTopCallback?: (ref: BottomDrawerRef<C>) => boolean\n  ) {\n    this.instance = this.attachDrawerToView(component);\n  }\n\n  /**\n   * Checks if this drawer is the topmost open drawer.\n   */\n  isTop(): boolean {\n    return this.isTopCallback?.(this) ?? false;\n  }\n\n  /**\n   * Closes the bottom drawer behind the reference.\n   */\n  async close(): Promise<void> {\n    this.removeCallback?.(this);\n    this.closedSubject$.next();\n    this.closedSubject$.complete();\n    await this.detachDrawerFromView();\n  }\n\n  private attachDrawerToView(component: Type<C>) {\n    const elementInjector = Injector.create({\n      providers: [{ provide: BottomDrawerRef, useValue: this }]\n    });\n\n    this.drawerComponentRef = createComponent(this.drawerComponent, {\n      environmentInjector: this.applicationRef.injector,\n      elementInjector\n    });\n\n    this.applicationRef.attachView(this.drawerComponentRef.hostView);\n\n    const hostElement = this.options?.host ?? document.getElementById('main-content');\n    hostElement.append((<EmbeddedViewRef<C>>this.drawerComponentRef.hostView).rootNodes[0]);\n\n    this.drawerComponentRef.changeDetectorRef.detectChanges();\n\n    this.drawerComponentRef.instance.drawerHost.clear();\n    const contentComponentRef =\n      this.drawerComponentRef.instance.drawerHost.createComponent(component);\n    assign(contentComponentRef.instance, this.options?.initialState);\n\n    if (this.options?.disableClickOutside) {\n      this.drawerComponentRef.instance.disableClickOutside = this.options.disableClickOutside;\n    }\n    if (this.options?.closeOnEscape !== undefined) {\n      this.drawerComponentRef.instance.closeOnEscape = this.options.closeOnEscape;\n    }\n\n    this.drawerComponentRef.changeDetectorRef.detectChanges();\n\n    // Listen for user-initiated closes (e.g., Escape key)\n    this.drawerComponentRef.instance.drawerOpen$\n      .pipe(\n        filter(isOpen => !isOpen),\n        take(1),\n        takeUntil(this.closedObs$)\n      )\n      .subscribe(() => {\n        this.close();\n      });\n\n    this.handleNavigation();\n\n    return contentComponentRef.instance;\n  }\n\n  private async detachDrawerFromView(): Promise<void> {\n    this.drawerComponentRef.instance.hide();\n    await this.detachDrawerWithAnimationDelay();\n  }\n\n  private detachDrawerWithAnimationDelay(): Promise<number> {\n    return firstValueFrom(\n      timer(DRAWER_ANIMATION_TIME).pipe(\n        tap(() => {\n          this.applicationRef.detachView(this.drawerComponentRef.hostView);\n          this.drawerComponentRef.destroy();\n          this.drawerComponentRef = null;\n        })\n      )\n    );\n  }\n\n  private handleNavigation() {\n    if (!this.options || !(this.options.closeOnNavigation === false)) {\n      this.router.events\n        .pipe(\n          filter(event => event instanceof NavigationStart),\n          filter(({ url: targetUrl }) => {\n            const currentUrlWithoutParams = this.router.url.split('?')[0];\n            const targetUrlWithoutParams = targetUrl.split('?')[0];\n\n            // this check is not to close the drawer when the query params change, e.g. when filter is applied to the list\n            return currentUrlWithoutParams !== targetUrlWithoutParams;\n          }),\n          take(1),\n          takeUntil(this.onClosed$)\n        )\n        .subscribe(() => this.close());\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, HostListener, ViewChild, ViewContainerRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { delay, shareReplay } from 'rxjs/operators';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { BottomDrawerRef } from './bottom-drawer-ref';\nimport { DrawerHost } from './bottom-drawer.model';\n\n/**\n * Bottom drawer component that slides up from the bottom of the viewport.\n * Typically managed by BottomDrawerService.\n */\n@Component({\n  standalone: true,\n  selector: 'c8y-bottom-drawer',\n  imports: [CommonModule, CdkTrapFocus],\n  templateUrl: './bottom-drawer.component.html'\n})\nexport class BottomDrawerComponent implements DrawerHost {\n  @ViewChild('drawerHost', { read: ViewContainerRef })\n  drawerHost: ViewContainerRef;\n\n  /**\n   * When enabled, clicking outside the drawer will not close it.\n   */\n  disableClickOutside = false;\n\n  closeOnEscape = true;\n\n  private drawerOpenSubject$ = new BehaviorSubject(true);\n  private drawerOpenObs$ = this.drawerOpenSubject$.asObservable().pipe(delay(0), shareReplay());\n\n  constructor(private bottomDrawerRef: BottomDrawerRef<any>) {}\n\n  get drawerOpen$() {\n    return this.drawerOpenObs$;\n  }\n\n  /**\n   * Handles Escape key press to close the drawer.\n   */\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeKey(event: KeyboardEvent) {\n    if (this.closeOnEscape && this.bottomDrawerRef.isTop()) {\n      event.preventDefault();\n      this.hide();\n    }\n  }\n\n  /**\n   * Hides the drawer with animation.\n   */\n  hide() {\n    this.disableClickOutside = false;\n    this.drawerOpenSubject$.next(false);\n    this.drawerOpenSubject$.complete();\n  }\n}\n","<div [ngClass]=\"{ drawerOpen: drawerOpen$ | async }\">\n  <div\n    class=\"bottom-drawer\"\n    [cdkTrapFocus]=\"drawerOpen$ | async\"\n    role=\"dialog\" \n    aria-modal=\"true\" \n    aria-labelledby=\"drawerTitle\"\n    [ngClass]=\"{ 'has-backdrop': disableClickOutside }\"\n  >\n    <div class=\"d-flex d-col no-align-items fit-h\">\n      <ng-template #drawerHost></ng-template>\n    </div>\n  </div>\n</div>\n","import { ApplicationRef, Injectable, Type } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BottomDrawerComponent } from './bottom-drawer.component';\nimport { BottomDrawerRef } from './bottom-drawer-ref';\nimport { DrawerOptions } from './bottom-drawer.model';\n\n/**\n * Service for opening components in a bottom drawer.\n *\n * @example\n * ```typescript\n * const drawer = this.drawerService.openDrawer(MyComponent, {\n *   initialState: { data: 'some data' },\n *   disableClickOutside: true\n * });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class BottomDrawerService {\n  private openDrawers: BottomDrawerRef<any>[] = [];\n\n  constructor(\n    private applicationRef: ApplicationRef,\n    private router: Router\n  ) {}\n\n  /**\n   * Opens a component in a bottom drawer.\n   *\n   * @param component - The component type to render\n   * @param options - Configuration options (initialState, disableClickOutside, closeOnNavigation, host)\n   * @returns A reference to the bottom drawer instance\n   */\n  openDrawer<C>(component: Type<C>, options?: DrawerOptions<C>): BottomDrawerRef<C> {\n    const drawerRef = new BottomDrawerRef(\n      component,\n      BottomDrawerComponent,\n      this.applicationRef,\n      this.router,\n      options,\n      (ref: BottomDrawerRef<any>) => this.remove(ref),\n      (ref: BottomDrawerRef<any>) => this.isTop(ref)\n    );\n    this.openDrawers.push(drawerRef);\n    return drawerRef;\n  }\n\n  isTop(drawerRef: BottomDrawerRef<any>): boolean {\n    return (\n      this.openDrawers.length > 0 && this.openDrawers[this.openDrawers.length - 1] === drawerRef\n    );\n  }\n\n  private remove(drawerRef: BottomDrawerRef<any>): void {\n    this.openDrawers = this.openDrawers.filter(d => d !== drawerRef);\n  }\n}\n","import { Component } from '@angular/core';\nimport { AppStateService } from '../../common';\nimport { Observable } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { IApplication } from '@c8y/client';\nimport { AppIconComponent } from '../../application/app-icon.component';\nimport { AsyncPipe } from '@angular/common';\nimport { HumanizeAppNamePipe } from '../../common/humanize-app-name.pipe';\n\n@Component({\n  selector: 'header[c8y-navigator-top]',\n  templateUrl: './navigator-top.component.html',\n  host: {\n    class: 'title navigator-slot-top'\n  },\n  standalone: true,\n  imports: [AppIconComponent, AsyncPipe, HumanizeAppNamePipe]\n})\nexport class NavigatorTopComponent {\n  app$: Observable<IApplication>;\n\n  constructor(public ui: AppStateService) {\n    this.app$ = this.ui.currentApplication.pipe(filter(app => !!app));\n  }\n}\n","<c8y-app-icon\n  [name]=\"(app$ | async).name\"\n  [contextPath]=\"(app$ | async).contextPath || (ui.state$ | async).app.contextPath\"\n  [app]=\"(app$ | async) || (ui.state$ | async).app\"\n></c8y-app-icon>\n<span>{{ app$ | async | humanizeAppName | async }}</span>\n","import { NgModule } from '@angular/core';\nimport { ApplicationModule } from '../../application/application.module';\nimport { CommonModule } from '../../common';\nimport { hookDrawer } from '../../drawer/drawer.service';\nimport { NavigatorTopComponent } from './navigator-top.component';\n\n@NgModule({\n  imports: [CommonModule, ApplicationModule, NavigatorTopComponent]\n})\nexport class NavigatorTopModule {\n  static providers() {\n    return [\n      hookDrawer({\n        component: NavigatorTopComponent,\n        position: 'left',\n        priority: 100,\n        id: 'tenantBrandAndAppIcon',\n        noneRequired: true\n      })\n    ];\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { OptionsService } from '../../common';\nimport { ThemeSwitcherService } from '../../ui-settings/theme-switcher.service';\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NavigatorBottomService {\n  readonly navigatorLogoVariable = 'navigator-platform-logo';\n  readonly navigatorLogoHeightVariable = 'navigator-platform-logo-height';\n  constructor(\n    private options: OptionsService,\n    private themeService: ThemeSwitcherService\n  ) {}\n\n  hasHidePoweredSet(): Observable<boolean> {\n    return this.options.get$('hidePowered').pipe(map(hidePowered => !!hidePowered));\n  }\n\n  hasCustomNavigatorLogoSet(): Observable<boolean> {\n    return combineLatest([\n      this.options.get$('brandingCSSVars'),\n      this.themeService.currentlyAppliedTheme$\n    ]).pipe(\n      map(([vars, theme]) => {\n        if (!vars || typeof vars !== 'object') {\n          return false;\n        }\n\n        const variableToLookFor =\n          theme === 'dark' ? `dark-${this.navigatorLogoVariable}` : this.navigatorLogoVariable;\n\n        if (typeof vars[variableToLookFor] === 'string') {\n          return true;\n        }\n        return false;\n      })\n    );\n  }\n\n  shouldShowBottomDrawer(): Observable<boolean> {\n    return of(true);\n  }\n\n  shouldShowDefaultPoweredBy(): Observable<boolean> {\n    return combineLatest([this.hasHidePoweredSet(), this.hasCustomNavigatorLogoSet()]).pipe(\n      map(([hidePowered, hasCustomLogo]) => !hidePowered && !hasCustomLogo)\n    );\n  }\n}\n","import { Component } from '@angular/core';\nimport { NavigatorBottomService } from './navigator-bottom.service';\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { C8yTranslateDirective } from '../../i18n';\n\n@Component({\n  selector: 'c8y-navigator-bottom',\n  templateUrl: './navigator-bottom.component.html',\n  host: {\n    class: 'navigator-slot-bottom'\n  },\n  standalone: true,\n  imports: [AsyncPipe, NgIf, C8yTranslateDirective]\n})\nexport class NavigatorBottomComponent {\n  hasCustomNavigatorLogoSet$ = this.bottomService.hasCustomNavigatorLogoSet();\n  hasHidePoweredSet$ = this.bottomService.hasHidePoweredSet();\n\n  constructor(private bottomService: NavigatorBottomService) {}\n}\n","<div\n  class=\"d-flex gap-8 {{!(hasCustomNavigatorLogoSet$ | async) ? 'c8y-logo' : ''}}\"\n  *ngIf=\"!(hasCustomNavigatorLogoSet$ | async); else branded\"\n>\n  <p\n    *ngIf=\"!(hasHidePoweredSet$ | async)\"\n    class=\"powered-by text-left a-s-end\"\n    translate\n  >\n    powered by`KEEP_ORIGINAL`\n  </p>\n  <a href=\"https://cumulocity.com\" target=\"_blank\" title=\"Cumulocity\" class=\"tenant-brand\"></a>\n</div>\n<ng-template #branded>\n  <div class=\"logo-spacer\"></div>\n  <div class=\"tenant-brand\"></div>\n  <p\n    class=\"powered-by text-center a-s-center\"\n    *ngIf=\"!(hasHidePoweredSet$ | async)\"\n    translate\n  >\n    powered by <a href=\"https://cumulocity.com\" target=\"_blank\">Cumulocity</a>`KEEP_ORIGINAL`\n  </p>\n  <div class=\"logo-spacer\"></div>\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { ExtensionFactory } from '../../common';\nimport { DrawerItem } from '../../drawer';\nimport { NavigatorBottomComponent } from './navigator-bottom.component';\nimport { map } from 'rxjs/operators';\nimport { Observable } from 'rxjs';\nimport { NavigatorBottomService } from './navigator-bottom.service';\n\n@Injectable()\nexport class NavigatorBottomDrawerFactory implements ExtensionFactory<DrawerItem> {\n  protected drawerItem: DrawerItem = {\n    component: NavigatorBottomComponent,\n    position: 'left',\n    priority: 1001,\n    id: 'poweredBy',\n    noneRequired: true\n  };\n\n  constructor(private bottomService: NavigatorBottomService) {}\n\n  get(): Observable<DrawerItem[] | DrawerItem> {\n    return this.bottomService.shouldShowBottomDrawer().pipe(\n      map(showBottomDrawer => {\n        if (!showBottomDrawer) {\n          return [];\n        }\n        return this.drawerItem;\n      })\n    );\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { hookDrawer } from '../../drawer/drawer.service';\nimport { NavigatorBottomDrawerFactory } from './navigator-bottom-drawer.factory';\n\n@NgModule({})\nexport class NavigatorBottomModule {\n  static providers() {\n    return [hookDrawer(NavigatorBottomDrawerFactory)];\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PasswordStrength } from '@c8y/client';\nimport { filter } from 'lodash-es';\nimport { PasswordStrengthColor } from './password.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable({ providedIn: 'root' })\nexport class PasswordStrengthCheckerService {\n  private GREEN: PasswordStrengthColor = {\n    colorName: 'green',\n    color: 'rgb(0, 128, 0)',\n    description: gettext('strong'),\n    passwordStrength: PasswordStrength.GREEN\n  };\n  private YELLOW: PasswordStrengthColor = {\n    colorName: 'yellow',\n    color: 'rgb(255, 204, 51)',\n    description: gettext('medium'),\n    passwordStrength: PasswordStrength.YELLOW\n  };\n  private RED: PasswordStrengthColor = {\n    colorName: 'red',\n    color: 'rgb(170, 0, 51)',\n    description: gettext('weak'),\n    passwordStrength: PasswordStrength.RED\n  };\n\n  hasLowerCase(password: string) {\n    return password.search(/[a-z]/) !== -1;\n  }\n\n  hasUpperCase(password: string) {\n    return password.search(/[A-Z]/) !== -1;\n  }\n\n  hasNumbers(password: string) {\n    return password.search(/[0-9]/) !== -1;\n  }\n\n  hasSpecialChars(password: string) {\n    // Only match ALLOWED symbols, not any non-alphanumeric character\n    // Allowed: `~!@#$%^&*()_|+-=?;:'\",.<>{}[]\\\\/\n    return password.search(/[`~!@#$%^&*()_|+\\-=?;:'\",.<>{}\\[\\]\\\\/]/) !== -1;\n  }\n\n  getStrengthColor(password: string): PasswordStrengthColor {\n    const passwordStrength = filter([\n      this.hasLowerCase(password),\n      this.hasUpperCase(password),\n      this.hasNumbers(password),\n      this.hasSpecialChars(password)\n    ]).length;\n\n    if (passwordStrength > 3) {\n      return this.GREEN;\n    } else if (passwordStrength >= 3) {\n      return this.YELLOW;\n    } else {\n      return this.RED;\n    }\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, AbstractControl } from '@angular/forms';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { get, map, some, min } from 'lodash-es';\nimport { BytesPipe } from '../common/bytes.pipe';\nimport { FilesService } from '../common/files.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CommonModule, IconDirective } from '../common';\nimport { C8yTranslatePipe } from '../i18n';\nimport { NgClass, NgIf } from '@angular/common';\n\n/**\n * A drop-zone which is a file selector allowing users to select file(s) from their file system, either natively or by drag and drop.\n *\n * ```html\n *  <div>\n *    <c8y-drop-area\n *      (dropped)=\"uploadFile($event)\"\n *      [icon]=\"'upload'\"\n *      [accept]=\"'.zip,.7z,video'\">\n *    </c8y-drop-area>\n *  </div>\n * ```\n */\n\n@Component({\n  selector: 'c8y-drop-area',\n  templateUrl: './drop-area.component.html',\n  providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: DropAreaComponent, multi: true }],\n  standalone: true,\n  imports: [CommonModule, C8yTranslatePipe, NgIf, NgClass, IconDirective]\n})\nexport class DropAreaComponent implements OnInit, ControlValueAccessor {\n  @Input() formControl: AbstractControl<any, any>;\n  @Input() title = gettext('Upload file');\n  @Input() message = gettext('Drop file here');\n  @Input() icon = 'plus-square';\n  @Input() loadingMessage = gettext('Uploading…');\n  @Input() forceHideList = false;\n  /** Affects displaying both the drop zone and the list of dropped files. */\n  @Input() alwaysShow = false;\n  @Input() clickToOpen = true;\n  @Input() loading = false;\n  /**\n   * Current progress of the upload as a percentage. If not given a spinner will be displayed.\n   */\n  @Input() progress = -1; // -1 = spinner\n  @Output() dropped: EventEmitter<DroppedFile[]> = new EventEmitter();\n  @Input() maxAllowedFiles = Infinity;\n  @Input() files: FileList;\n  @Input() maxFileSizeInMegaBytes: number;\n  /** Specifies a filter for what file types the user can pick from the file input dialog box.\n   *\n   * Specify file types by extensions:\n   * ```html\n   *  [accept]=\"'.zip,.7z'\"\n   * ```\n   *\n   * Specify file types by extensions and generic types [GENERIC_FILE_TYPE]{@link GENERIC_FILE_TYPE}:\n   * ```html\n   *  [accept]=\"'.pdf,archive'\"\n   * ```\n   *\n   * Specify file types by generic types [GENERIC_FILE_TYPE]{@link GENERIC_FILE_TYPE}:\n   * ```html\n   *  [accept]=\"'archive,video'\"\n   * ```\n   */\n  @Input() accept: string;\n  isOver = false;\n  errors = false;\n  errorMessage: string;\n  filesNameString: string;\n  acceptedExts: string[];\n  hasDropAreaSmallClass: boolean;\n  disabled = false;\n\n  @ViewChild('area', { static: true }) area: ElementRef;\n  @ViewChild('zone', { static: false }) zone: ElementRef;\n  @ViewChild('picker', { static: false }) picker: ElementRef;\n\n  constructor(\n    private cd: ChangeDetectorRef,\n    private filesService: FilesService,\n    private translate: TranslateService,\n    private bytes: BytesPipe,\n    private ref: ElementRef\n  ) {}\n\n  @HostListener('keyup', ['$event'])\n  onkeyup(event: KeyboardEvent) {\n    if (event.key === 'Enter') {\n      this.picker.nativeElement.click();\n    }\n  }\n\n  ngOnInit(): void {\n    this.acceptedExts = this.filesService.extractFileExtensions(this.accept).map(t => `.${t}`);\n    this.alwaysShow = this.alwaysShow || this.area.nativeElement.children.length === 0;\n\n    if (this.files && this.isFilesAnObjectOrArray() && this.files.length > 0) {\n      this.onFilesSelected(this.files);\n    }\n  }\n\n  ngAfterViewChecked() {\n    this.hasDropAreaSmallClass = this.ref.nativeElement.classList.contains('drop-area-sm');\n  }\n\n  /**\n   * Toggles the style of the drop zone element when a file is dragged over the component.\n   */\n  toggle(): void {\n    this.zone.nativeElement.style.height = this.area.nativeElement.offsetHeight + 'px';\n    this.onOver();\n  }\n\n  /**\n   * Shows computer browser with files to drop into drop-area zone.\n   */\n  showPicker($event?): void {\n    this.preventDefault($event);\n    this.picker.nativeElement.value = '';\n    this.picker.nativeElement.click();\n  }\n\n  /**\n   * Triggered when file is on over drop area, but not dropped.\n   */\n  onOver(): void {\n    if (!this.isOver) {\n      this.isOver = true;\n      document.addEventListener('dragover', this.preventDefault);\n      document.addEventListener('drop', this.preventDefault);\n    }\n  }\n\n  /**\n   * Triggered when file is dropped.\n   */\n  onPick($event): void {\n    this.errors = false;\n    this.preventDefault($event);\n    this.onFilesSelected($event.target.files);\n  }\n\n  /**\n   * Handle file when it is dropped into drop-area.\n   */\n  onDrop($event): void {\n    this.preventDefault($event);\n    this.onFilesSelected($event.dataTransfer.files);\n    this.stopDragging();\n  }\n\n  /**\n   * Checks condition what should be displayed: drop-area zone or list of dropped files.\n   */\n  shouldShowFilesList(): boolean {\n    return (\n      this.isFilesAnObjectOrArray() &&\n      !this.forceHideList &&\n      this.alwaysShow &&\n      !this.isFilesArrayEmpty() &&\n      !this.hasEmptyFiles() &&\n      !this.isTooManyFiles()\n    );\n  }\n\n  /**\n   * Triggered when file is picked over web application.\n   */\n  stopDragging(): void {\n    document.removeEventListener('dragover', this.preventDefault);\n    document.removeEventListener('drop', this.preventDefault);\n    this.isOver = false;\n  }\n\n  /**\n   * Delete files already dropped files.\n   */\n  onDelete() {\n    delete this.files;\n    delete this.filesNameString;\n    this.clearErrors();\n    this.dropped.emit(null);\n    this.onChange(null);\n    this.onTouched();\n    this.cd.markForCheck();\n  }\n\n  onChange: (value: any) => void = _ => undefined;\n  onTouched: () => void = () => undefined;\n\n  writeValue(value: any) {\n    this.files = value;\n    if (!value) {\n      this.onDelete();\n    } else {\n      this.filesNameString = this.getFilesNamesAsString(value);\n    }\n    this.cd.detectChanges();\n  }\n\n  registerOnChange(fn: any) {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any) {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean) {\n    this.disabled = isDisabled;\n  }\n\n  private async onFilesSelected(files: FileList) {\n    this.onTouched();\n    const hasValidNameLength = this.filesService.checkMaxLength(files);\n    if (!hasValidNameLength) {\n      this.onFileInvalidNameLength();\n      return;\n    }\n\n    const haveValidTypes = this.filesService.haveValidExtensions(files, this.accept);\n    if (!haveValidTypes) {\n      this.onFileInvalidType();\n      return;\n    }\n\n    const maxFileSizeInBytes = this.maxFileSizeInMegaBytes\n      ? this.convertMegaBytesToBytes(this.maxFileSizeInMegaBytes)\n      : null;\n    const haveValidSizes = await this.filesService.haveValidSizes(files, maxFileSizeInBytes);\n    if (!haveValidSizes) {\n      await this.onFileInvalidSize();\n      return;\n    }\n\n    this.files = files;\n    this.filesNameString = this.getFilesNamesAsString(files);\n    this.errors = false;\n\n    if (this.isTooManyFiles()) {\n      this.errors = true;\n      this.formControl?.setErrors({ tooManyFiles: true });\n      this.errorMessage = gettext('Too many files selected.');\n      return;\n    }\n\n    if (this.hasEmptyFiles()) {\n      this.errors = true;\n      this.formControl?.setErrors({ emptyFiles: true });\n      this.errorMessage = gettext('File must not be empty, select another one.');\n      return;\n    }\n\n    const droppedFiles: DroppedFile[] = this.compose(files);\n    this.dropped.emit(droppedFiles);\n    this.onChange(droppedFiles);\n    this.cd.markForCheck();\n  }\n\n  private onFileInvalidNameLength() {\n    this.errors = true;\n    this.formControl?.setErrors({ invalidNameLength: true });\n    this.errorMessage = gettext('The filename is too long.');\n  }\n\n  private onFileInvalidType() {\n    this.errors = true;\n    this.formControl?.setErrors({ invalidType: true });\n    this.errorMessage = gettext('The selected file is not supported.');\n  }\n\n  private async onFileInvalidSize() {\n    const maxFileSizeInBytes = this.maxFileSizeInMegaBytes\n      ? this.convertMegaBytesToBytes(this.maxFileSizeInMegaBytes)\n      : null;\n    const msg = gettext('The selected file is too large. The size limit is {{ limit }}.');\n    const limit = this.bytes.transform(\n      min([maxFileSizeInBytes, await this.filesService.loadBytesSizeLimit()])\n    );\n    this.errors = true;\n    this.formControl?.setErrors({ invalidSize: true });\n    this.errorMessage = this.translate.instant(msg, { limit });\n  }\n\n  private convertMegaBytesToBytes(maxFileSizeInMegaBytes: SizeInMegaBytes): SizeInBytes {\n    return maxFileSizeInMegaBytes * 1_048_576;\n  }\n\n  private getFilesNamesAsString(files: FileList): string {\n    return map(files, ({ name }) => name).join(', ');\n  }\n\n  private isFilesArrayEmpty() {\n    return get(this, 'files.length', 0) === 0;\n  }\n\n  private isTooManyFiles() {\n    return get(this, 'files.length', 0) > this.maxAllowedFiles;\n  }\n\n  private isFilesAnObjectOrArray() {\n    return typeof this.files === 'object';\n  }\n\n  private hasEmptyFiles() {\n    let result = true;\n    if (!this.isFilesArrayEmpty()) {\n      result = this.isAnyFileEmpty();\n    }\n    return result;\n  }\n\n  private isAnyFileEmpty(): boolean {\n    return some(Array.from(this.files), ['size', 0]);\n  }\n\n  private clearErrors() {\n    delete this.errorMessage;\n    this.errors = false;\n    this.formControl?.setErrors(null);\n  }\n\n  private preventDefault($event?) {\n    if ($event) {\n      $event.preventDefault();\n    }\n  }\n\n  private compose(files: FileList): DroppedFile[] {\n    return Array.from(files).map(file => ({\n      file,\n      readAsJson: async () => JSON.parse(await this.read(file, ReadAsType.TEXT)),\n      readAsText: async () => this.read(file, ReadAsType.TEXT),\n      readAsArrayBuffer: async () => this.read(file, ReadAsType.ARRAY_BUFFER),\n      readAsBinaryString: async () => this.read(file, ReadAsType.BINARY_STRING),\n      readAsDataURL: async () => this.read(file, ReadAsType.DATA_URL)\n    }));\n  }\n\n  private async read(file, type: ReadAsType): Promise<string> {\n    return new Promise<string>((resolve, reject) => {\n      const reader = new FileReader();\n      switch (type) {\n        case ReadAsType.TEXT: {\n          reader.readAsText(file);\n          break;\n        }\n        case ReadAsType.ARRAY_BUFFER: {\n          reader.readAsArrayBuffer(file);\n          break;\n        }\n        case ReadAsType.BINARY_STRING: {\n          reader.readAsBinaryString(file);\n          break;\n        }\n        case ReadAsType.DATA_URL: {\n          reader.readAsDataURL(file);\n          break;\n        }\n      }\n      reader.onload = () => this.onLoad(reader, resolve, reject);\n    });\n  }\n\n  private onLoad(reader, resolve, reject) {\n    if (reader.readyState !== 2) {\n      return;\n    }\n    if (reader.error) {\n      reject(reader.error);\n    }\n    resolve(reader.result);\n  }\n}\n\nexport interface DroppedFile {\n  file: File;\n  readAsText();\n  readAsArrayBuffer();\n  readAsBinaryString();\n  readAsDataURL();\n  readAsJson();\n}\n\nenum ReadAsType {\n  TEXT,\n  DATA_URL,\n  ARRAY_BUFFER,\n  BINARY_STRING\n}\n\ntype SizeInMegaBytes = number;\ntype SizeInBytes = number;\n","<div\n  class=\"drop-zone\"\n  [style.pointerEvents]=\"loading ? 'none' : 'auto'\"\n  [style.display]=\"isOver || alwaysShow || loading ? 'block' : 'none'\"\n  tabindex=\"0\"\n  *ngIf=\"!shouldShowFilesList()\"\n  [ngClass]=\"{ 'has-errors': errors, disabled: formControl?.disabled || disabled }\"\n  #zone\n  (dragleave)=\"stopDragging()\"\n  (drop)=\"onDrop($event)\"\n  (dragover)=\"onOver()\"\n  (click)=\"showPicker($event)\"\n>\n  <div\n    class=\"file-placeholder\"\n    data-cy=\"c8y-file-placeholder--drop-zone\"\n    [ngClass]=\"{ 'drag-over': isOver }\"\n  >\n    <div\n      class=\"d-flex d-col p-4 flex-center\"\n      *ngIf=\"loading\"\n    >\n      <div\n        class=\"progress progress-striped active m-0\"\n        style=\"min-width: 50%\"\n        *ngIf=\"progress !== -1\"\n      >\n        <div\n          class=\"progress-bar\"\n          [style.width]=\"progress + '%'\"\n          [attr.aria-label]=\"progress + '%'\"\n          aria-valuenow=\"0\"\n          aria-valuemin=\"0\"\n          aria-valuemax=\"100\"\n          role=\"progressbar\"\n        ></div>\n      </div>\n      <div\n        class=\"spinner-snake\"\n        *ngIf=\"progress === -1\"\n      ></div>\n      <p\n        class=\"m-t-auto m-b-auto m-r-8\"\n        *ngIf=\"!hasDropAreaSmallClass\"\n      >\n        {{ loadingMessage | translate }}\n      </p>\n    </div>\n    <div\n      class=\"hint-placeholder pointer\"\n      *ngIf=\"!loading\"\n      data-cy=\"drop-zone--hint-placeholder\"\n    >\n      <i class=\"dlt-c8y-icon-{{ icon }}\"></i>\n      <p\n        class=\"text-truncate\"\n        title=\"{{ message | translate }}\"\n        *ngIf=\"!errors\"\n      >\n        <b>{{ message | translate }}</b>\n        <br />\n        <span\n          *ngIf=\"alwaysShow && clickToOpen\"\n          translate\n        ></span>\n      </p>\n      <div\n        class=\"has-errors\"\n        *ngIf=\"errors\"\n      >\n        <p class=\"form-control-feedback-message\">\n          {{ errorMessage | translate }}\n        </p>\n      </div>\n    </div>\n  </div>\n</div>\n\n<div\n  class=\"drop-zone\"\n  [style.display]=\"isOver || alwaysShow || loading ? 'block' : 'none'\"\n  tabindex=\"0\"\n  *ngIf=\"shouldShowFilesList()\"\n>\n  <div\n    class=\"p-absolute p-4 fit-w fit-h d-flex d-col j-c-center a-i-center\"\n    *ngIf=\"loading\"\n  >\n    <div\n      class=\"progress progress-striped active m-0\"\n      style=\"min-width: 80%\"\n      *ngIf=\"progress !== -1\"\n    >\n      <div\n        class=\"progress-bar\"\n        [style.width]=\"progress + '%'\"\n        [attr.aria-label]=\"progress + '%'\"\n        aria-valuenow=\"0\"\n        aria-valuemin=\"0\"\n        aria-valuemax=\"100\"\n        role=\"progressbar\"\n      ></div>\n    </div>\n    <div *ngIf=\"progress === -1\">\n      <c8y-loading></c8y-loading>\n    </div>\n    <p\n      class=\"m-b-8\"\n      *ngIf=\"!hasDropAreaSmallClass\"\n    >\n      <strong>\n        {{ loadingMessage | translate }}\n      </strong>\n    </p>\n  </div>\n  <div\n    class=\"file-placeholder p-4\"\n    *ngIf=\"!loading\"\n  >\n    <div class=\"d-flex p-4 a-i-center\">\n      <i\n        class=\"icon-20 m-r-8\"\n        c8yIcon=\"file-o\"\n      ></i>\n      <span\n        class=\"text-truncate\"\n        title=\"{{ filesNameString }}\"\n      >\n        {{ filesNameString }}\n      </span>\n      <button\n        class=\"btn btn-dot btn-dot--danger showOnHover m-l-auto\"\n        title=\"{{ 'Remove' | translate }}\"\n        [attr.aria-label]=\"'Remove' | translate\"\n        type=\"button\"\n      >\n        <i\n          c8yIcon=\"minus-circle\"\n          (click)=\"onDelete()\"\n        ></i>\n      </button>\n    </div>\n  </div>\n</div>\n<label\n  class=\"sr-only\"\n  for=\"file\"\n>\n  {{ 'Select file' | translate }}\n</label>\n<input\n  class=\"hidden\"\n  id=\"file\"\n  type=\"file\"\n  #picker\n  *ngIf=\"clickToOpen\"\n  (change)=\"onPick($event)\"\n  (click)=\"picker.focus()\"\n  (blur)=\"onTouched()\"\n  [accept]=\"acceptedExts\"\n  [multiple]=\"maxAllowedFiles > 1\"\n  [disabled]=\"formControl?.disabled || disabled\"\n/>\n<div\n  #area\n  [hidden]=\"isOver || loading\"\n  (dragover)=\"toggle()\"\n>\n  <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { DropAreaComponent } from './drop-area.component';\n\n/**\n * The angular module definition for a drop-area.\n * @exports DropAreaComponent\n */\n@NgModule({\n  imports: [DropAreaComponent],\n  exports: [DropAreaComponent]\n})\nexport class DropAreaModule {}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { isEmpty } from 'lodash-es';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { IconDirective } from '../common/icon.directive';\nimport { DropAreaComponent, DroppedFile } from '../drop-area/drop-area.component';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';\nimport { ValidationPattern } from '../forms/validation-pattern';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { FilePickerConfig } from './file-picker-config.model';\nimport { PickedFiles } from './file-picker.model';\n\n/**\n * User can upload a binary directly or use an URL.\n *\n * ## Usage\n *\n * ```html\n * <div>\n * <c8y-file-picker [maxAllowedFiles]=\"1\" (onFilesPicked)=\"onFile($event)\">\n * </c8y-file-picker>\n * </div>\n * ```\n */\n\n@Component({\n  selector: 'c8y-file-picker',\n  templateUrl: './file-picker.component.html',\n  standalone: true,\n  imports: [\n    FormsModule,\n    PopoverModule,\n    FormGroupComponent,\n    DropAreaComponent,\n    IconDirective,\n    RequiredInputPlaceholderDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class FilePickerComponent implements OnInit {\n  @ViewChild(DropAreaComponent, { static: true }) dropArea: DropAreaComponent;\n  @Output() onFilesPicked: EventEmitter<PickedFiles> = new EventEmitter();\n  @Input() maxAllowedFiles = Infinity;\n  @Input() uploadChoice: 'uploadBinary' | 'uploadUrl' | 'provided' = 'uploadBinary';\n  @Input() allowedUploadChoices: Array<'uploadBinary' | 'uploadUrl' | 'provided'> = [\n    'uploadBinary',\n    'uploadUrl'\n  ];\n  @Input() fileUrl: string;\n  @Input() fileBinary: DroppedFile;\n  @Input() config: FilePickerConfig = { maxlength: 2048 };\n  /**\n   * Used only when displaying multiple file pickers in the same view.\n   */\n  @Input() filePickerIndex: number;\n  /**\n   * Additional string to be displayed in a popover.\n   */\n  @Input() fileUrlPopover: string;\n\n  ValidationPattern = ValidationPattern;\n  droppedFiles: DroppedFile[];\n  private fileToSave: PickedFiles;\n  providedPopover = gettext(\n    'Use this option if the device will resolve the binary itself. No file is uploaded.'\n  );\n\n  /**\n   * @ignore\n   */\n  ngOnInit(): void {\n    if (this.fileBinary) {\n      this.droppedFiles = [this.fileBinary];\n    }\n  }\n\n  /**\n   * Triggered by dropped file in component and pass it into drop-area component.\n   */\n  onFileDropped(droppedFiles: DroppedFile[]): void {\n    this.onFilesPicked.emit({\n      droppedFiles\n    });\n  }\n\n  /**\n   * Triggered when user changes upload choice, from upload url to upload binary.\n   */\n  clearInputFromUrl(): void {\n    delete this.fileUrl;\n    this.fileToSave = {\n      url: undefined\n    };\n    this.onFilesPicked.emit(this.fileToSave);\n  }\n\n  /**\n   * Triggered when user changes upload choice, to avoid cumulation of droppedFiles.\n   */\n  clearSelectedFiles(): void {\n    this.dropArea.onDelete();\n    this.fileToSave = {\n      droppedFiles: undefined\n    };\n    this.onFilesPicked.emit(this.fileToSave);\n  }\n\n  /**\n   * Triggered when user puts binary's url to upload.\n   */\n  onFileUrlChange(urlStr): void {\n    this.fileToSave = {\n      url: urlStr\n    };\n    this.onFilesPicked.emit(this.fileToSave);\n  }\n\n  /**\n   * Checks if there is popover to display.\n   */\n  isPopoverUsed() {\n    return !isEmpty(this.fileUrlPopover);\n  }\n\n  setProvidedOption(): void {\n    this.fileToSave = { url: '' };\n    delete this.fileUrl;\n    this.onFilesPicked.emit(this.fileToSave);\n  }\n}\n","<div class=\"form-group\">\n  <label\n    class=\"c8y-radio\"\n    [class.m-l-8]=\"allowedUploadChoices.includes('provided')\"\n    title=\"{{ 'Upload a binary' | translate }}\"\n  >\n    <input\n      name=\"uploadChoice-{{ filePickerIndex }}\"\n      type=\"radio\"\n      value=\"uploadBinary\"\n      #radio\n      [(ngModel)]=\"uploadChoice\"\n      (click)=\"clearInputFromUrl()\"\n    />\n    <span></span>\n    <span>{{ 'Upload a binary' | translate }}</span>\n  </label>\n  <label\n    class=\"c8y-radio m-l-8\"\n    title=\"{{ 'Provide a file path' | translate }}\"\n    data-cy=\"file-picker--file-path-input\"\n  >\n    <input\n      name=\"uploadChoice-{{ filePickerIndex }}\"\n      type=\"radio\"\n      value=\"uploadUrl\"\n      #radio\n      [(ngModel)]=\"uploadChoice\"\n      (click)=\"clearSelectedFiles()\"\n    />\n    <span></span>\n    <span>\n      {{ 'Provide a file path' | translate }}\n    </span>\n    @if (isPopoverUsed()) {\n      <button\n        class=\"btn-help\"\n        [attr.aria-label]=\"'Help' | translate\"\n        popover=\"{{ fileUrlPopover | translate }}\"\n        placement=\"top\"\n        placement=\"top\"\n        triggers=\"focus\"\n        container=\"body\"\n        type=\"button\"\n      ></button>\n    }\n  </label>\n  @if (allowedUploadChoices.includes('provided')) {\n    <label\n      class=\"c8y-radio m-l-8\"\n      title=\"{{ 'Mark as provided' | translate }}\"\n    >\n      <input\n        name=\"uploadChoice-{{ filePickerIndex }}\"\n        type=\"radio\"\n        value=\"provided\"\n        #radio\n        [(ngModel)]=\"uploadChoice\"\n        (click)=\"setProvidedOption()\"\n      />\n      <span></span>\n      <span>{{ 'Provided' | translate }}</span>\n      <button\n        class=\"btn-help\"\n        [attr.aria-label]=\"'Help' | translate\"\n        popover=\"{{ providedPopover | translate }}\"\n        placement=\"top\"\n        triggers=\"focus\"\n        container=\"body\"\n        type=\"button\"\n      ></button>\n    </label>\n  }\n</div>\n\n<div [hidden]=\"uploadChoice !== 'uploadBinary'\">\n  <c8y-form-group class=\"m-0\">\n    <c8y-drop-area\n      class=\"drop-area-sm\"\n      [title]=\"'Drop file or click to browse' | translate\"\n      [attr.aria-label]=\"'Drop file or click to browse' | translate\"\n      (dropped)=\"onFileDropped($event)\"\n      [maxAllowedFiles]=\"maxAllowedFiles\"\n      [files]=\"droppedFiles\"\n    ></c8y-drop-area>\n  </c8y-form-group>\n</div>\n\n<div [hidden]=\"uploadChoice !== 'uploadUrl'\">\n  <c8y-form-group class=\"m-0\">\n    <div class=\"m-b-4 p-b-8\">\n      <div class=\"input-group\">\n        <span class=\"input-group-addon\">\n          <i c8yIcon=\"globe\"></i>\n        </span>\n        <input\n          class=\"form-control\"\n          placeholder=\"{{ 'e.g.' | translate }} http://example.com/binary.zip\"\n          name=\"fileUrl\"\n          type=\"text\"\n          required\n          data-cy=\"file-picker--fileUrl\"\n          [(ngModel)]=\"fileUrl\"\n          (ngModelChange)=\"onFileUrlChange($event)\"\n          maxlength=\"{{ config.maxlength }}\"\n          [pattern]=\"ValidationPattern.rules.noWhiteSpaceOnly.pattern\"\n        />\n      </div>\n    </div>\n  </c8y-form-group>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule as C8yCommonModule } from '../common/common.module';\nimport { FilePickerComponent } from './file-picker.component';\nimport { DropAreaModule } from '../drop-area/drop-area.module';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule as C8yFormsModule } from '../forms/forms.module';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\n/**\n * The angular module definition for a drop-area.\n * @exports FilePickerComponent\n */\n@NgModule({\n  imports: [\n    C8yFormsModule,\n    CommonModule,\n    DropAreaModule,\n    FormsModule,\n    C8yCommonModule,\n    PopoverModule,\n    FilePickerComponent\n  ],\n  exports: [FilePickerComponent]\n})\nexport class FilePickerModule {}\n","import { BytesPipe, FilesService } from '../common';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport abstract class FilePickerValidators {\n  static fileMaxSize(maxSizeBytes: number, filesService: FilesService): ValidatorFn {\n    const msg = gettext('The selected file is too large. The size limit is {{ limit }}.');\n\n    return (control: AbstractControl) => {\n      if (control.value instanceof File) {\n        const file: File = control.value;\n        return filesService.size(file) > maxSizeBytes\n          ? { [msg]: { limit: BytesPipe.bytes(maxSizeBytes, 1) } }\n          : null;\n      }\n      return null;\n    };\n  }\n\n  static fileNonEmpty(filesService: FilesService): ValidatorFn {\n    const msg = gettext('File must not be empty, select another one.');\n\n    return (control: AbstractControl) => {\n      if (control.value instanceof File) {\n        const file: File = control.value;\n        return filesService.size(file) === 0 ? { [msg]: true } : null;\n      }\n      return null;\n    };\n  }\n\n  static fileNameMaxLength(filesService: FilesService): ValidatorFn {\n    const msg = gettext('The filename exceeds limit of {{ limit }} characters.');\n    const filenameLengthLimit = filesService.FILENAME_MAX_LENGTH;\n\n    return (control: AbstractControl) => {\n      if (control.value instanceof File) {\n        const file: File = control.value;\n        return file.name.length > filenameLengthLimit\n          ? { [msg]: { limit: filenameLengthLimit } }\n          : null;\n      }\n      return null;\n    };\n  }\n\n  static haveValidExtensions(filesService: FilesService, accept: string): ValidatorFn {\n    const msg = gettext(\n      'The selected file is not of a supported type. Supported file types are: {{ accept }}.'\n    );\n\n    return (control: AbstractControl) => {\n      if (control.value instanceof File) {\n        const file: File = control.value;\n        return !filesService.haveValidExtensions([file], accept) ? { [msg]: { accept } } : null;\n      }\n      return null;\n    };\n  }\n\n  static fileCountMax(fileCountMax: number): ValidatorFn {\n    const msg = gettext('Too many files selected. Limit: {{ fileCountMax }}.');\n\n    return (control: AbstractControl) => {\n      if (Array.isArray(control.value)) {\n        return control.value.length > fileCountMax ? { [msg]: { fileCountMax } } : null;\n      }\n      return null;\n    };\n  }\n\n  static fileCountMin(fileCountMin: number): ValidatorFn {\n    const msg = gettext('Requires min. {{ fileCountMin }} file(s).');\n\n    return (control: AbstractControl) => {\n      if (Array.isArray(control.value)) {\n        return control.value.length < fileCountMin ? { [msg]: { fileCountMin } } : null;\n      }\n      return null;\n    };\n  }\n}\n","import { AbstractControl, FormArray, ValidationErrors, ValidatorFn } from '@angular/forms';\nimport { DatapointLibraryValidationErrors } from './validation-pattern';\nimport { get } from 'lodash-es';\n\n// @dynamic\nexport class C8yValidators {\n  static integerValidator(): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      if (control.value == null || control.value === '') {\n        return null;\n      }\n      return Number.isInteger(control.value) ? null : { integer: true };\n    };\n  }\n\n  static minMaxValidator(): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const min = control.get(`min`);\n      const max = control.get(`max`);\n\n      const minDefined = min && min.value !== undefined && min.value !== null;\n      const maxDefined = max && max.value !== undefined && max.value !== null;\n\n      // remove previous errors\n      this.removeErrors(min, [DatapointLibraryValidationErrors.GREATER_THAN_RANGE_MAX]);\n      this.removeErrors(max, [DatapointLibraryValidationErrors.LESS_THAN_RANGE_MIN]);\n\n      if (!minDefined || !maxDefined) {\n        return null;\n      }\n\n      // sets errors\n      if (min.value >= max.value) {\n        const minError = { [DatapointLibraryValidationErrors.GREATER_THAN_RANGE_MAX]: true };\n        const maxError = { [DatapointLibraryValidationErrors.LESS_THAN_RANGE_MIN]: true };\n        const errors = Object.assign({}, minError, maxError);\n        min.setErrors(Object.assign(minError, min.errors || {}));\n        max.setErrors(Object.assign(maxError, max.errors || {}));\n        return errors;\n      }\n\n      return null;\n    };\n  }\n\n  static requireBothMinAndMax(): ValidatorFn {\n    const errorAttribute = DatapointLibraryValidationErrors.SHOULD_BE_DEFINED;\n    return (control: AbstractControl): ValidationErrors | null => {\n      const min = control.get(`min`);\n      const max = control.get(`max`);\n\n      const minDefined = min && min.value !== undefined && min.value !== null;\n      const maxDefined = max && max.value !== undefined && max.value !== null;\n\n      const errors = {};\n      if (minDefined && !maxDefined && max) {\n        // sets error\n        const error = { [errorAttribute]: true };\n        max.setErrors(Object.assign({}, max.errors || {}, error));\n        Object.assign(errors, error);\n      } else {\n        // remove previous error\n        this.removeErrors(max, [errorAttribute]);\n      }\n\n      if (maxDefined && !minDefined && min) {\n        // sets error\n        const error = { [errorAttribute]: true };\n        min.setErrors(Object.assign({}, min.errors || {}, error));\n        Object.assign(errors, error);\n      } else {\n        // remove previous error\n        this.removeErrors(min, [errorAttribute]);\n      }\n\n      return Object.keys(errors).length ? errors : null;\n    };\n  }\n\n  static withinScale(field: string): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      if (!field) {\n        return null;\n      }\n      const min = control.get(`range.min`);\n      const max = control.get(`range.max`);\n      const fieldControl = control.get(field);\n\n      const minDefined = min && min.value !== undefined && min.value !== null;\n      const maxDefined = max && max.value !== undefined && max.value !== null;\n      const fieldDefined =\n        fieldControl && fieldControl.value !== undefined && fieldControl.value !== null;\n\n      // remove previous errors\n      this.removeErrors(fieldControl, [\n        DatapointLibraryValidationErrors.GREATER_THAN_SCALE_MAX,\n        DatapointLibraryValidationErrors.LESS_THAN_SCALE_MIN\n      ]);\n\n      if (!minDefined || !maxDefined || !fieldDefined) {\n        return null;\n      }\n\n      const errors = {};\n\n      // sets errors\n      if (fieldControl.value < min.value) {\n        const error = { [DatapointLibraryValidationErrors.LESS_THAN_SCALE_MIN]: true };\n        fieldControl.setErrors(Object.assign({}, fieldControl.errors || {}, error));\n        Object.assign(errors, error);\n      }\n\n      if (fieldControl.value > max.value) {\n        const error = { [DatapointLibraryValidationErrors.GREATER_THAN_SCALE_MAX]: true };\n        fieldControl.setErrors(Object.assign({}, fieldControl.errors || {}, error));\n        Object.assign(errors, error);\n      }\n\n      return Object.keys(errors).length ? errors : null;\n    };\n  }\n\n  static maxActiveCount(maxActive: number, activeAttribute = 'details.__active'): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      if (!Number.isInteger(maxActive) || Number.isNaN(maxActive)) {\n        return null;\n      }\n\n      if (!(control instanceof FormArray)) {\n        return null;\n      }\n      const formArray = control as FormArray;\n      const value: any[] = formArray.value;\n      if (!Array.isArray(value)) {\n        return null;\n      }\n\n      const filteredActiveEntries = value.filter(tmp => tmp && !!get(tmp, activeAttribute));\n      if (filteredActiveEntries.length <= maxActive) {\n        return null;\n      }\n\n      return {\n        [DatapointLibraryValidationErrors.MAX_ACTIVE_COUNT]: {\n          maxActive,\n          actualLength: filteredActiveEntries.length\n        }\n      };\n    };\n  }\n\n  static minActiveCount(minActive: number, activeAttribute = 'details.__active'): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      if (!Number.isInteger(minActive) || Number.isNaN(minActive)) {\n        return null;\n      }\n\n      if (!(control instanceof FormArray)) {\n        return null;\n      }\n      const formArray = control as FormArray;\n      const value: any[] = formArray.value;\n      if (!Array.isArray(value)) {\n        return null;\n      }\n\n      const filteredActiveEntries = value.filter(tmp => tmp && !!get(tmp, activeAttribute));\n      if (filteredActiveEntries.length >= minActive) {\n        return null;\n      }\n\n      return {\n        [DatapointLibraryValidationErrors.MIN_ACTIVE_COUNT]: {\n          minActive,\n          actualLength: filteredActiveEntries.length\n        }\n      };\n    };\n  }\n\n  static filesValidator(options: {\n    maximumFileSizeInKb?: number;\n    typePrefix?: string;\n    allowedFileEndings?: string[];\n  }): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const files: { file: File }[] | null = control.value;\n      if (!files) {\n        return null;\n      }\n      for (const fileObj of files) {\n        const file = fileObj.file;\n        if (options.typePrefix && !file.type.startsWith(options.typePrefix)) {\n          return {\n            wrongFileType: {\n              wrongFileType: file.type\n            }\n          };\n        }\n\n        if (\n          options.allowedFileEndings?.length &&\n          !options.allowedFileEndings.some(ending => file.name.endsWith(ending))\n        ) {\n          return {\n            wrongFileEnding: {\n              allowedFileEndings: options.allowedFileEndings\n            }\n          };\n        }\n\n        if (file.size > options.maximumFileSizeInKb * 1024) {\n          const actualFileSize = file.size / 1024;\n          return {\n            maxFileSizeReached: {\n              maxFileSize: options.maximumFileSizeInKb,\n              actualFileSize: `~${actualFileSize.toFixed(0)}`\n            }\n          };\n        }\n      }\n      return null;\n    };\n  }\n\n  private static removeErrors(control: AbstractControl, errors: string[]): boolean {\n    if (!control || !control.errors) {\n      return false;\n    }\n    let removedError = false;\n    for (const error of errors) {\n      if (control.errors[error]) {\n        removedError = true;\n        delete control.errors[error];\n      }\n    }\n    if (removedError) {\n      control.setErrors(\n        Object.keys(control.errors).length ? Object.assign({}, control.errors) : null\n      );\n    }\n    return removedError;\n  }\n}\n","import {\n  AbstractControl,\n  AsyncValidatorFn,\n  FormControl,\n  ValidationErrors,\n  ValidatorFn\n} from '@angular/forms';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport const ARRAY_VALIDATION_PREFIX = 'INNER_ARRAY_ERROR_';\n\nexport type ArrayValidationErrors = {\n  [key: string]: ArrayValidationErrorValue;\n};\n\nexport type ArrayValidationErrorValue = {\n  isArrayError: true;\n  originalKey: string;\n  entries: Array<{ index: number; errorData: unknown }>;\n};\n\n/**\n * This method can alter how validators work. It can be used in cases where there is need to validate FormControl\n * that as value, takes array of elements. This allows to reuse validators, that works for such elements.\n * For example if  Validators.minLength(3) is used on control that takes string as value, validator will return error\n * if string is less than 3 characters. If same is done on array of strings, validator will return error if array\n * has less than 3 elements.\n *\n * validateArrayElements(Validators.minLength(3)) method makes it possible to check every member of array if it has minimum 3 characters.\n * If there are elements that raise error, it will be possible to extract these errors using item index.\n *\n * As a example, this can be used for custom form elements, which manipulates array of elements,\n * and there is need to display corresponding error messages for every array member that is displayed, while still using\n * Angular's Validation approach.\n *\n * Errors that are generated by this helper are prefixed with 'INNER_ARRAY_ERROR_'. Reason for this is to prevent overwriting normal validation\n * errors that could have same key\n *\n * @Example\n *\n * let control = new FormControl(['1234', '123456', '123', [Validators.minLength(5), validateArrayElements(Validators.minLength(5))] ])\n *\n * this FormControl has validation errors:\n *\n * {\n *   \"INNER_ARRAY_ERROR_minlength\": {\n *      isArrayError: true,\n *      originalKey: \"minlength\",\n *      entries: [\n *        {\n *          index: 0,\n *          errorData: {\n *            requiredLength: 5,\n *            actualLength: 4\n *          }\n *        },\n *        {\n *          index: 2,\n *          errorData: {\n *            requiredLength: 5,\n *            actualLength: 3\n *          }\n *        },\n *      ]\n *    },\n *   \"minlength\": {\n *     requiredLength: 5,\n *     actualLength: 3\n *   }\n * }\n *\n * @param validator A standard Angular synchronous validator function.\n */\nexport function validateArrayElements(validator: ValidatorFn): ValidatorFn {\n  return (control: AbstractControl): { valueNotArray } | ArrayValidationErrors => {\n    const values = control.value;\n    if (!Array.isArray(values)) {\n      return { valueNotArray: true };\n    }\n    const validationErrors: ValidationErrors[] = values.map(value =>\n      validator(new FormControl(value))\n    );\n    const convertedErrors: ArrayValidationErrors = generateArrayRelatedErrors(validationErrors);\n    return convertedErrors;\n  };\n}\n\n/**\n * Async version of validateArrayElements.\n *\n * Note that Angular by design doesn't execute async validators if synchronous validators returns any error.\n * @param validator A standard Angular asynchronous validator function.\n */\nexport function asyncValidateArrayElements(validator: AsyncValidatorFn): AsyncValidatorFn {\n  return (control: AbstractControl): Observable<ValidationErrors> => {\n    const values = control.value;\n    if (!Array.isArray(values)) {\n      return of({ valueNotArray: true });\n    }\n    const observables: Array<\n      Promise<ValidationErrors | null> | Observable<ValidationErrors | null>\n    > = values.map(value => validator(new FormControl(value)));\n\n    return forkJoin(observables).pipe(map(errors => generateArrayRelatedErrors(errors)));\n  };\n}\n\nfunction generateArrayRelatedErrors(errors: Array<ValidationErrors | null>): ArrayValidationErrors {\n  const errorObject: ArrayValidationErrors = {};\n\n  errors.forEach((error, index) => {\n    if (!error) {\n      return;\n    }\n    const errorKeys = Object.keys(error);\n    if (errorKeys.length) {\n      errorKeys.forEach(key => {\n        const prefixedKey = ARRAY_VALIDATION_PREFIX + key;\n        if (!errorObject[prefixedKey]) {\n          errorObject[prefixedKey] = { isArrayError: true, originalKey: key, entries: [] };\n        }\n        errorObject[prefixedKey].entries.push({ index, errorData: error[key] });\n      });\n    }\n  });\n  return Object.keys(errorObject).length ? errorObject : null;\n}\n","import {\n  Component,\n  Input,\n  ViewChild,\n  ElementRef,\n  AfterViewInit,\n  HostListener,\n  OnInit,\n  forwardRef,\n  Inject,\n  Injector,\n  Output,\n  EventEmitter\n} from '@angular/core';\nimport { fromEvent, merge, Observable, of } from 'rxjs';\nimport {\n  distinctUntilChanged,\n  filter,\n  map,\n  sample,\n  switchMap,\n  tap,\n  withLatestFrom\n} from 'rxjs/operators';\nimport * as mimeDB from 'mime-db';\nimport { FilesService, IFetchWithProgress } from '../common';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormControl,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport { FilePickerValidators } from './file-picker-validators';\nimport { validateArrayElements } from '../forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { NgIf, NgFor, AsyncPipe, KeyValuePipe } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { MessagesComponent } from '../forms/messages.component';\nimport { MessageDirective } from '../forms/message.directive';\nimport { LoadingComponent } from '../common/loading.component';\nimport { ExtractArrayValidationErrorsPipe } from '../forms/extract-array-validation-errors.pipe';\nimport { FilterNonArrayValidationErrorsPipe } from '../forms/filter-non-array-validation-errors.pipe';\nimport { HumanizeValidationMessagePipe } from '../forms/humanize-validation-message.pipe';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { BytesPipe } from '../common/bytes.pipe';\nimport { GenericFileIconPipe } from '../common/generic-file-icon.pipe';\n\ninterface IAvailableValidators {\n  fileMaxSize?: boolean;\n  fileNonEmpty?: boolean;\n  fileNameMaxLength?: boolean;\n}\n\n/**\n File uploader\n */\n\n@Component({\n  selector: 'c8y-file-picker-form-control',\n  templateUrl: './file-picker-form-control.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => FilePickerFormControlComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      multi: true,\n      useExisting: forwardRef(() => FilePickerFormControlComponent)\n    }\n  ],\n  standalone: true,\n  imports: [\n    FormGroupComponent,\n    NgIf,\n    IconDirective,\n    MessagesComponent,\n    NgFor,\n    MessageDirective,\n    LoadingComponent,\n    ExtractArrayValidationErrorsPipe,\n    FilterNonArrayValidationErrorsPipe,\n    HumanizeValidationMessagePipe,\n    AsyncPipe,\n    KeyValuePipe,\n    C8yTranslatePipe,\n    BytesPipe,\n    GenericFileIconPipe\n  ]\n})\nexport class FilePickerFormControlComponent\n  implements OnInit, AfterViewInit, ControlValueAccessor, Validator\n{\n  @ViewChild('filePlaceholder', { static: true })\n  filePlaceholder: ElementRef<HTMLElement>;\n\n  /** Specifies a filter for what file types the user can pick from the file input dialog box.\n   * By default all types are accepted.\n   *\n   * Specify file types by extensions:\n   * ```html\n   *  ...\n   *  [accept]=\"'.zip,.7z'\"\n   *  ...\n   * ```\n   *\n   * Specify file types by extensions and generic types [GENERIC_FILE_TYPE]{@link GENERIC_FILE_TYPE}:\n   * ```html\n   *  ...\n   *  [accept]=\"'.pdf,archive'\"\n   *  ...\n   * ```\n   *\n   * Specify file types by generic types [GENERIC_FILE_TYPE]{@link GENERIC_FILE_TYPE}:\n   *  ```html\n   *  ...\n   *  [accept]=\"'archive,video'\"\n   *  ...\n   *\n   * ```\n   */\n  @Input()\n  accept?: string;\n  /**\n   * Sets how many files can be submitted, accepts only numbers.\n   */\n  @Input()\n  maxAllowedFiles?: number = Infinity;\n  /**\n   * Sets the minimum number of files to be uploaded, accepts only numbers.\n   */\n  @Input()\n  minRequiredFiles?: number = 1;\n  /**\n   * Allows to disable default validators. Accepts object with following optional properties: \n    - fileMaxSize - Providing `true` disables default validation for file size, accepts only boolean\n    - fileNonEmpty - Providing `true` disables default validation for empty files, accepts only boolean\n    - fileNameMaxLength - Providing `true` disables default validation for file name length, accepts only boolean\n   */\n  @Input()\n  disableValidators: IAvailableValidators = {};\n  /**\n   * Displays upload progress bar, accepts only boolean.\n   */\n  @Input()\n  uploadInProgress = false;\n  /** The array of progress state objects for each selected file (matched by index). */\n  @Input()\n  uploadProgress: IFetchWithProgress[];\n  /** Display warning if any file dragged over the drop area has unsupported extension. */\n  @Input()\n  validateExtensionOnDrag = false;\n  /** Emits an event with the array of File objects representing the dropped files. */\n  @Output()\n  dropped: EventEmitter<File[]> = new EventEmitter();\n\n  droppedFiles: File[] = [];\n\n  isDraggingFiles$: Observable<boolean>;\n  isDraggingOverFilePlaceholder$: Observable<boolean>;\n  isExtensionAllowed$: Observable<boolean>;\n  isDropAreaEnlarged$: Observable<boolean>;\n  isDraggedFileUnsupported$: Observable<boolean>;\n  acceptedExts: string[];\n  valid: boolean;\n  errors: ValidationErrors;\n  controlInstance: AbstractControl;\n  // TODO handle control disabled state\n  disabled: boolean;\n  disabledValidators: IAvailableValidators = {\n    fileMaxSize: false,\n    fileNonEmpty: false,\n    fileNameMaxLength: false\n  };\n  loadingMessage = gettext('Upload in progress');\n  private isExtensionAllowed: boolean;\n  private fileSizeLimit: number;\n\n  constructor(\n    private filesService: FilesService,\n    @Inject(Injector) private injector: Injector\n  ) {}\n\n  ngOnInit(): void {\n    const ngControl = this.injector.get<NgControl | false>(NgControl, false);\n\n    if (ngControl && ngControl.control) {\n      this.controlInstance = ngControl.control;\n    } else {\n      /**\n       * In case if component is used without utilizing ControlValueAccessor, internal control\n       * instance is created, so it can still benefit from built in validators.\n       * (dropped) @Output event can be used to get list of files.\n       */\n      this.controlInstance = new FormControl([], this.validate.bind(this));\n      this.onChange = () => {\n        this.controlInstance.setValue(this.droppedFiles);\n      };\n      this.onValidatorChange = () => {\n        this.controlInstance.updateValueAndValidity();\n      };\n      this.onTouched = () => {\n        this.controlInstance.markAsTouched();\n      };\n    }\n\n    this.acceptedExts = this.filesService.extractFileExtensions(this.accept).map(t => `.${t}`);\n\n    this.disabledValidators = { ...this.disabledValidators, ...this.disableValidators };\n\n    this.filesService.loadBytesSizeLimit().then(sizeLimit => {\n      this.fileSizeLimit = sizeLimit;\n      this.onValidatorChange();\n    });\n  }\n\n  ngAfterViewInit() {\n    /**\n     * Emits DragEvent when user drag file inside or outside viewport. Only works when type of dragged elements is 'Files'.\n     */\n    const draggingFilesGlobally$ = merge(\n      fromEvent(document, 'dragenter'),\n      fromEvent(document, 'dragleave').pipe(\n        // TODO review why this specific filter is needed\n        filter((e: DragEvent) => e.pageX === 0 && e.pageY === 0)\n      )\n    ).pipe(\n      filter((ev: DragEvent) => ev.dataTransfer?.types.toString() === 'Files'),\n      filter(() => !this.uploadInProgress)\n    );\n\n    /**\n     * Emits boolean value when file is dragged inside or outside of viewport, or file is not dragged anymore.\n     */\n    this.isDraggingFiles$ = merge(\n      draggingFilesGlobally$.pipe(map(ev => ev.type === 'dragenter')),\n      fromEvent(document, 'mouseenter').pipe(map(() => false)),\n      fromEvent(document, 'drop').pipe(map(() => false))\n    ).pipe(distinctUntilChanged());\n\n    /**\n     * Emits boolean value after checking if dragged files match configured extensions list,\n     * When dragging of file starts, get mimetypes of each file, convert them to possible extensions list\n     * that may be associated with given mimetype, and then check if any of these extensions match configured\n     * extensions accept list.\n     */\n    this.isExtensionAllowed$ = draggingFilesGlobally$.pipe(\n      sample(this.isDraggingFiles$.pipe(filter(enlarged => enlarged))),\n      switchMap(ev => {\n        if (!this.accept) {\n          return of(true);\n        }\n\n        return of(ev).pipe(\n          map(ev => [...(ev.dataTransfer.items as unknown as DataTransferItem[])]),\n          map(files =>\n            files.map(file => (mimeDB[file.type].extensions as string[] | undefined) || ['unknown'])\n          ),\n          map(extensionsForFiles =>\n            extensionsForFiles.every(extensionsForFile =>\n              extensionsForFile.some(ext =>\n                this.filesService.extractFileExtensions(this.accept).includes(ext)\n              )\n            )\n          )\n        );\n      }),\n      tap(allowed => {\n        this.isExtensionAllowed = allowed;\n      })\n    );\n\n    /**\n     * If File is being dragged and extensions meets requirements, then drop-area can be enlarged.\n     */\n    this.isDropAreaEnlarged$ = this.isDraggingFiles$;\n    this.isDraggedFileUnsupported$ = this.isDraggingFiles$.pipe(\n      withLatestFrom(this.isExtensionAllowed$),\n      map(([fileDragged, extAllowed]) => fileDragged && !extAllowed)\n    );\n\n    /**\n     * Emits true when file is hovering above drop-area. Only works when isDropAreaEnlarged$ also emits true.\n     * This is workaround for CSS :hover pseudo-class not triggering when dragging file.\n     */\n    this.isDraggingOverFilePlaceholder$ = merge(\n      fromEvent(this.filePlaceholder.nativeElement, 'dragenter'),\n      fromEvent(this.filePlaceholder.nativeElement, 'dragleave'),\n      fromEvent(this.filePlaceholder.nativeElement, 'drop')\n    ).pipe(\n      filter((ev: DragEvent) => ev.dataTransfer?.types.toString() === 'Files'),\n      map(ev => ev.type === 'dragenter'),\n      withLatestFrom(this.isDropAreaEnlarged$),\n      map(([draggingOver, dropAreaEnlarged]) => draggingOver && dropAreaEnlarged)\n    );\n  }\n\n  afterValueChanged() {\n    this.onChange([...this.droppedFiles]);\n    this.onTouched();\n    this.dropped.emit([...this.droppedFiles]);\n    this.valid = this.controlInstance.valid;\n    this.errors = this.controlInstance.errors;\n  }\n\n  onDrop(e: DragEvent) {\n    if (this.uploadInProgress) {\n      return;\n    }\n\n    if (e.dataTransfer.types.toString() !== 'Files') {\n      return;\n    }\n    const files = e.dataTransfer.files;\n    if (!files?.length) {\n      return;\n    }\n\n    for (let i = 0; i < files.length; i++) {\n      this.droppedFiles.push(files.item(i));\n    }\n    this.afterValueChanged();\n  }\n\n  filesSelected(ev: Event): void {\n    const inputElement = ev.target as HTMLInputElement;\n    const files: File[] = Array.from(inputElement.files);\n    this.droppedFiles.push(...files);\n    inputElement.value = null;\n    this.afterValueChanged();\n  }\n\n  deleteAt(index: number) {\n    this.droppedFiles.splice(index, 1);\n    this.afterValueChanged();\n  }\n\n  registerOnChange(fn: never): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: never): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onValidatorChange = fn;\n  }\n\n  writeValue(files: File[] | null): void {\n    if (!files) {\n      files = [];\n    }\n    this.droppedFiles = [...files];\n    this.onValidatorChange();\n  }\n\n  @HostListener('window:dragover', ['$event'])\n  onDragOver(e) {\n    e.preventDefault();\n  }\n\n  @HostListener('window:drop', ['$event'])\n  onWindowDrop(e) {\n    e.preventDefault();\n  }\n\n  validate(control: AbstractControl): ValidationErrors | null {\n    let errors = {};\n\n    if (!this.disableValidators.fileMaxSize) {\n      errors = appendErrors(\n        errors,\n        validateArrayElements(\n          FilePickerValidators.fileMaxSize(this.fileSizeLimit, this.filesService)\n        )(control)\n      );\n    }\n    if (!this.disableValidators.fileNonEmpty) {\n      errors = appendErrors(\n        errors,\n        validateArrayElements(FilePickerValidators.fileNonEmpty(this.filesService))(control)\n      );\n    }\n    if (!this.disableValidators.fileNameMaxLength) {\n      errors = appendErrors(\n        errors,\n        validateArrayElements(FilePickerValidators.fileNameMaxLength(this.filesService))(control)\n      );\n    }\n    if (this.accept) {\n      errors = appendErrors(\n        errors,\n        validateArrayElements(\n          FilePickerValidators.haveValidExtensions(this.filesService, this.accept)\n        )(control)\n      );\n    }\n    if (this.maxAllowedFiles) {\n      errors = appendErrors(\n        errors,\n        FilePickerValidators.fileCountMax(this.maxAllowedFiles)(control)\n      );\n    }\n    if (this.minRequiredFiles) {\n      errors = appendErrors(\n        errors,\n        FilePickerValidators.fileCountMin(this.minRequiredFiles)(control)\n      );\n    }\n\n    return Object.keys(errors).length ? errors : null;\n  }\n\n  private onChange: (files: File[]) => void = () => undefined;\n  private onTouched: () => void = () => undefined;\n  private onValidatorChange: () => void = () => undefined;\n}\n\nfunction appendErrors(\n  errors: ValidationErrors,\n  newErrors: ValidationErrors | null\n): ValidationErrors {\n  return newErrors ? { ...errors, ...newErrors } : errors;\n}\n","<c8y-form-group class=\"m-0\">\n  <div\n    class=\"file-picker-drop-zone\"\n    [class.dragging]=\"isDropAreaEnlarged$ | async\"\n    tabindex=\"0\"\n  >\n    <div\n      class=\"file-placeholder pointer\"\n      [class.drag-over]=\"isDraggingOverFilePlaceholder$ | async\"\n      #filePlaceholder\n      (drop)=\"onDrop($event)\"\n      (click)=\"!uploadInProgress && picker.click()\"\n    >\n      <div *ngIf=\"validateExtensionOnDrag && (isDraggedFileUnsupported$ | async); else defaultHint\">\n        <p class=\"form-control-static text-truncate\">\n          <i\n            class=\"text-warning m-r-4\"\n            c8yIcon=\"exclamation-triangle\"\n          ></i>\n          <span>{{ 'At least one file is of an unsupported type.' | translate }}</span>\n        </p>\n      </div>\n      <ng-template #defaultHint>\n        <div\n          class=\"hint-placeholder\"\n          *ngIf=\"!uploadInProgress\"\n        >\n          <i c8yIcon=\"upload\"></i>\n          <p>\n            <b>{{ 'Drop files here or click to browse' | translate }}</b>\n          </p>\n          <p\n            class=\"m-t-8 text-12 text-muted\"\n            *ngIf=\"accept\"\n          >\n            {{ 'Supported file types:' | translate }} {{ accept }}\n          </p>\n          <c8y-form-group>\n            <c8y-messages\n              class=\"has-error\"\n              *ngIf=\"\n                controlInstance.touched && controlInstance.errors && controlInstance.errors\n                  | filterNonArrayValidationErrors\n              \"\n            >\n              <c8y-message\n                *ngFor=\"\n                  let error of controlInstance.errors | filterNonArrayValidationErrors | keyvalue\n                \"\n              >\n                {{ error.key | humanizeValidationMessage | translate: error.value }}\n              </c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n        </div>\n        <div\n          class=\"d-flex d-col p-4 flex-center\"\n          *ngIf=\"uploadInProgress\"\n        >\n          <c8y-loading></c8y-loading>\n          <p class=\"m-t-auto m-b-auto m-r-8 text-center\">\n            {{ loadingMessage | translate }}\n          </p>\n        </div>\n      </ng-template>\n    </div>\n  </div>\n  <div class=\"file-container\">\n    <ul class=\"list-group\">\n      <ng-container *ngFor=\"let file of droppedFiles; let i = index\">\n        <li class=\"list-group-item p-4 a-i-center\">\n          <div class=\"d-flex a-i-center\">\n            <i\n              class=\"icon-20 m-r-8\"\n              [c8yIcon]=\"file | fileIcon\"\n            ></i>\n            <div\n              class=\"m-r-16 text-truncate\"\n              [title]=\"file.name\"\n            >\n              {{ file.name }}\n            </div>\n            <div class=\"m-r-16 text-nowrap\">({{ file.size | bytes }})</div>\n            <div class=\"m-l-auto\">\n              <button\n                class=\"btn btn-dot btn-dot--danger\"\n                title=\"{{ 'Remove' | translate }}\"\n                [attr.aria-label]=\"'Remove' | translate\"\n                type=\"button\"\n                *ngIf=\"!uploadInProgress\"\n                (click)=\"deleteAt(i)\"\n              >\n                <i c8yIcon=\"minus-circle\"></i>\n              </button>\n            </div>\n          </div>\n          <c8y-form-group>\n            <c8y-messages class=\"has-error\">\n              <c8y-message\n                *ngFor=\"\n                  let error of controlInstance.errors | extractArrayValidationErrors: i | keyvalue\n                \"\n              >\n                {{ error.key | humanizeValidationMessage | translate: error.value }}\n              </c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n\n          <div\n            class=\"d-block\"\n            data-cy=\"c8y-file-picker-form-control--upload-progress-bar\"\n            *ngIf=\"uploadInProgress\"\n          >\n            <div\n              class=\"progress progress-striped active\"\n              *ngIf=\"uploadProgress\"\n            >\n              <div\n                class=\"progress-bar progress-bar-info\"\n                [style.width]=\"uploadProgress[i].percentage + '%'\"\n                aria-valuenow=\"0\"\n                aria-valuemin=\"0\"\n                aria-valuemax=\"100\"\n                role=\"progressbar\"\n              >\n                {{ uploadProgress[i].percentage }}%\n              </div>\n            </div>\n          </div>\n        </li>\n      </ng-container>\n    </ul>\n  </div>\n  <input\n    class=\"hidden\"\n    id=\"file\"\n    type=\"file\"\n    #picker\n    (change)=\"filesSelected($event)\"\n    [accept]=\"acceptedExts\"\n    [multiple]=\"maxAllowedFiles > 1\"\n  />\n</c8y-form-group>\n","import { NgModule } from '@angular/core';\nimport { CommonModule as C8yCommonModule } from '../common/common.module';\nimport { FilePickerFormControlComponent } from './file-picker-form-control.component';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule as C8yFormsModule } from '../forms/forms.module';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n/**\n * The angular module definition for a drop-area.\n * @exports FilePickerFormControlComponent\n */\n@NgModule({\n  imports: [\n    C8yFormsModule,\n    CommonModule,\n    FormsModule,\n    C8yCommonModule,\n    TooltipModule,\n    FilePickerFormControlComponent\n  ],\n  exports: [FilePickerFormControlComponent]\n})\nexport class FilePickerFormControlModule {}\n","import { Component, EventEmitter, OnInit, Input, Output, inject } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PickedDates } from './date-picker.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { IconDirective } from '../common/icon.directive';\nimport { NgIf } from '@angular/common';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { RequiredInputPlaceholderDirective } from '../forms/required-input-placeholder.directive';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { DateFormatService } from '../common/date-format.service';\nimport { DatePipe } from '../common/date.pipe';\n\n@Component({\n  selector: 'c8y-date-picker',\n  templateUrl: './date-picker.component.html',\n  standalone: true,\n  imports: [\n    BsDropdownModule,\n    CdkTrapFocus,\n    IconDirective,\n    NgIf,\n    FormsModule,\n    ReactiveFormsModule,\n    FormGroupComponent,\n    C8yTranslateDirective,\n    RequiredInputPlaceholderDirective,\n    BsDatepickerModule,\n    DatePipe,\n    C8yTranslatePipe\n  ]\n})\nexport class DatePickerComponent implements OnInit {\n  @Output() onDateSelected: EventEmitter<PickedDates> = new EventEmitter();\n  @Input()\n  placeholder = gettext('Filter by date…');\n  @Input()\n  dateInputFormat: string;\n\n  dateFrom: string;\n  dateTo: string;\n  fgDatePicker: FormGroup;\n\n  private dateFormatService = inject(DateFormatService);\n\n  ngOnInit() {\n    if (!this.dateInputFormat) {\n      this.dateInputFormat = this.dateFormatService.getDateFormat();\n    }\n    this.fgDatePicker = new FormGroup({\n      dateFrom: new FormControl(),\n      dateTo: new FormControl()\n    });\n  }\n\n  filter() {\n    this.onDateSelected.emit(this.fgDatePicker.value);\n    this.dateFrom = this.fgDatePicker.get('dateFrom').value;\n    this.dateTo = this.fgDatePicker.get('dateTo').value;\n  }\n\n  clearFilter() {\n    this.fgDatePicker.setValue({\n      dateFrom: null,\n      dateTo: null\n    });\n    this.onDateSelected.emit(null);\n    this.dateFrom = null;\n    this.dateTo = null;\n  }\n}\n","<div\n  dropdown\n  class=\"c8y-child-assets-selector dropdown\"\n  #datefilter=\"bs-dropdown\"\n  [insideClick]=\"true\"\n  placement=\"bottom left\"\n  [cdkTrapFocus]=\"datefilter.isOpen\"\n  >\n  <button\n    id=\"date-range\"\n    dropdownToggle\n    title=\"{{ 'Date filter' | translate }}\"\n    type=\"button\"\n    class=\"btn dropdown-toggle d-flex a-i-center c8y-dropdown\"\n  >\n    <i c8yIcon=\"calendar-o\" class=\"m-r-4 text-primary\"></i>\n    <span class=\"text-truncate\">\n      <span *ngIf=\"dateFrom\">\n        <span class=\"text-label-small\">{{ 'From`date`' | translate }}</span>\n        {{ dateFrom | c8yDate }}\n      </span>\n      <span *ngIf=\"dateTo\">\n        <span class=\"text-label-small\">{{ 'To`date`' | translate }}</span>\n        {{ dateTo | c8yDate }}\n      </span>\n      <em *ngIf=\"!dateFrom && !dateTo\" class=\"text-muted\">\n        {{ placeholder }}\n      </em>\n    </span>\n  </button>\n\n  <form [formGroup]=\"fgDatePicker\"\n    id=\"dropdown-date-range\"\n    *dropdownMenu\n    class=\"dropdown-menu\">\n    <div class=\"dropdown-form p-b-0\">\n      <c8y-form-group class=\"form-group-sm\">\n        <label for=\"dateFrom\" class=\"text-medium m-b-4\" translate>Date from</label>\n        <div class=\"form-group datepicker d-block m-b-0\">\n          <input\n            id=\"dateFrom\"\n            formControlName=\"dateFrom\"\n            class=\"form-control fit-w text-left\"\n            placeholder=\"{{ 'Date from' | translate }}\"\n            bsDatepicker\n            [maxDate]=\"dateTo\"\n            (bsValueChange)=\"dateFrom = $event\"\n            [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true, dateInputFormat: dateInputFormat }\"\n          />\n        </div>\n      </c8y-form-group>\n      <c8y-form-group class=\"form-group form-group-sm \">\n        <label for=\"dateTo\" translate>Date to</label>\n        <div class=\"form-group datepicker m-l-0 d-block m-b-0 \">\n          <input\n            name=\"dateTo\"\n            id=\"dateTo\"\n            formControlName=\"dateTo\"\n            class=\"form-control fit-w text-left\"\n            placeholder=\"{{ 'Date to' | translate }}\"\n            bsDatepicker\n            [minDate]=\"dateFrom\"\n            (bsValueChange)=\"dateTo = $event\"\n            [bsConfig]=\"{ customTodayClass: 'today', returnFocusToInput: true, dateInputFormat: dateInputFormat }\"\n          />\n        </div>\n      </c8y-form-group>\n    </div>\n    <div class=\"p-16 d-flex separator-top gap-8\">\n      <button\n        title=\"{{ 'Clear selection' | translate }}\"\n        type=\"button\"\n        class=\"btn btn-default btn-sm flex-grow\"\n        (click)=\"clearFilter(); datefilter.isOpen = !datefilter.isOpen\"\n      >\n        {{ 'Clear`selection`' | translate }}\n      </button>\n      <button\n        [disabled]=\"!fgDatePicker.get('dateFrom').value && !fgDatePicker.get('dateTo').value\"\n        title=\"{{ 'Apply selection' | translate }}\"\n        type=\"submit\"\n        class=\"btn btn-primary btn-sm flex-grow\"\n        (click)=\"filter(); datefilter.isOpen = !datefilter.isOpen\"\n      >\n        {{ 'Apply`selection`' | translate }}\n      </button>\n    </div>\n  </form>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule as C8yCommonModule } from '../common/common.module';\nimport { DatePickerComponent } from './date-picker.component';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule as C8yFormsModule } from '../forms/index';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { A11yModule } from '@angular/cdk/a11y';\n\n/**\n * The angular module definition for a date picker - it allows you to pick either one date or a range of two.\n * @exports DatePickerComponent\n */\n@NgModule({\n  imports: [\n    C8yFormsModule,\n    CommonModule,\n    FormsModule,\n    A11yModule,\n    ReactiveFormsModule,\n    BsDropdownModule.forRoot(),\n    BsDatepickerModule.forRoot(),\n    C8yCommonModule,\n    DatePickerComponent\n  ],\n  exports: [DatePickerComponent]\n})\nexport class DatePickerModule {}\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { UserEditModalComponent } from '../user/user-edit-modal.component';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ChangeCurrentUserPasswordService {\n  constructor(private modalService: BsModalService) {}\n\n  async changeCurrentUserPassword() {\n    this.modalService.show(UserEditModalComponent, {\n      initialState: { passwordChange: true },\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title'\n    });\n  }\n}\n","import { Route as ngRoute } from '@angular/router';\nimport { IIdentified, IResult, IResultList } from '@c8y/client';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { Tab, TabWithTemplate } from '../tabs/tab.model';\nimport { Injector, Type } from '@angular/core';\n\nexport interface ContextData {\n  /**\n   * The data of this route. E.g. on ViewContext.Device an managed object\n   * of the device.\n   */\n  contextData: IIdentified;\n  /**\n   * The current ViewContext used.\n   */\n  context: ViewContext;\n}\n\n/**\n * The context routes that are supported by the application.\n */\nexport enum ViewContext {\n  Device = 'device/:id',\n  Group = 'group/:id',\n  User = 'users/:id',\n  Application = 'ecosystem/application/applications/:id',\n  Extension = 'ecosystem/extension/extensions/:id',\n  Feature = 'ecosystem/application/features/:id',\n  Microservice = 'ecosystem/microservice/microservices/:id',\n  SubscribedApplications = 'subscribedApplications/:id',\n  Tenant = 'tenants/:id',\n  Report = 'reports/:id',\n  Service = 'service/:id',\n  DatapointLibrary = 'datapointlibrary/:id',\n  Simulators = 'simulators/:id',\n  Alarms = 'alarms/:id',\n  GroupAlarms = 'group/:id/alarms/:id',\n  DeviceAlarms = 'device/:id/alarms/:id',\n  ServiceAlarms = 'service/:id/alarms/:id',\n  SimulatorsAlarms = 'simulators/:id/alarms/:id',\n  Dashboard = 'dashboard/:dashboardId'\n}\n\nexport interface ViewContexServiceConfig {\n  [key: string]: {\n    /**\n     * Defines if the route is automatically generated by the router service or\n     * if the route is somewhere defined by the developer.\n     */\n    autoRoute: boolean;\n    /**\n     * The path used to route.\n     */\n    path: string;\n    /**\n     * The @c8y/client service to use for this context.\n     */\n    service: Type<{\n      detail(\n        entityOrId: string | number | IIdentified,\n        filter?: object\n      ): Promise<IResult<IIdentified>>;\n      list(filter?: object): Promise<IResultList<IIdentified>>;\n    }>;\n  };\n}\n\n/**\n * A ViewContext base route.\n */\nexport type ViewContextRootRoute = Route & { rootContext: ViewContext };\n\n/**\n * A route that can be added via the HOOK_ROUTE.\n */\nexport type Route = RouteDefault | RouteWithTab | RouteWithComponent;\n\n/**\n * A usual route\n */\nexport interface RouteDefault extends ngRoute {\n  context?: never;\n  label?: never;\n  tabs?: never;\n}\n\ninterface RouteBase {\n  /**\n   * Which order should be used.\n   */\n  priority?: number;\n\n  /**\n   * Id to identify specific feature.\n   */\n  featureId?: string;\n\n  /**\n   * The injector to use. If not set, the default root injector will be used.\n   */\n  _injector?: Injector;\n\n  /**\n   * An optional root context for hooks to apend children to this route.\n   */\n  rootContext?: ViewContext;\n}\n\n/**\n * A component based context route.\n */\nexport interface RouteWithComponent extends ngRoute, RouteBase {\n  /**\n   * The view context to add this route to.\n   */\n  context: ViewContext;\n  label?: never;\n}\n\n/**\n * A tab that is added to a context route and opens the associated\n * component on this context.\n */\nexport interface RouteWithTab\n  extends Omit<TabWithTemplate<string | any[]>, 'injector' | 'path' | 'component' | 'title'>,\n    ngRoute,\n    RouteBase {\n  /**\n   * The view context to add this route to.\n   */\n  context: ViewContext;\n\n  /**\n   * Allow to emit multiple tabs on one context route.\n   */\n  tabs?: Tab[];\n}\n\nexport type RouteFactory = Route | Route[] | ExtensionFactory<Route>;\n","import { Injector, Injectable, runInInjectionContext } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  Router,\n  CanActivateFn,\n  Routes,\n  UrlSegment,\n  RouterStateSnapshot,\n  MaybeAsync,\n  GuardResult\n} from '@angular/router';\nimport { from, isObservable, of, Observable } from 'rxjs';\nimport { every, filter, map, mergeMap, toArray, tap } from 'rxjs/operators';\nimport { Tab } from '../tabs/tab.model';\nimport { Route, RouteWithTab, ViewContext, ViewContextRootRoute } from './router.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class RouterTabsResolver {\n  constructor(\n    private injector: Injector,\n    private router: Router\n  ) {}\n\n  get routerStateSnapshot() {\n    return this.router.routerState.snapshot;\n  }\n\n  resolve(currentRoute: ActivatedRouteSnapshot) {\n    const routeConfig: ViewContextRootRoute = currentRoute.routeConfig as ViewContextRootRoute;\n    const latestChildren = this.getLatestChildRoutes(routeConfig.rootContext);\n    return from(latestChildren || []).pipe(\n      mergeMap((child: RouteWithTab) =>\n        from(this.getGuards(child)).pipe(\n          map(canActivate => canActivate(currentRoute, this.routerStateSnapshot)),\n          mergeMap((result: MaybeAsync<GuardResult>) => {\n            if (isObservable(result)) {\n              return result;\n            }\n\n            const resultAsPromise = result as Promise<GuardResult>;\n            if (resultAsPromise && typeof resultAsPromise.then === 'function') {\n              return from(resultAsPromise);\n            }\n            return of(result as GuardResult);\n          }),\n          tap(result => {\n            if (Array.isArray(result)) {\n              child.tabs = result;\n            }\n          }),\n          every(result => !!result),\n          filter(result => result),\n          mergeMap(() => (Array.isArray(child.tabs) ? from(child.tabs) : of(child))),\n          map(result => {\n            const url = this.getBaselUrl(currentRoute).join('/');\n            return result.label || result.path\n              ? ({\n                  label: result.label,\n                  icon: result.icon,\n                  path: `/${decodeURIComponent(url)}/${result.path}`,\n                  priority: result.priority,\n                  hide: result.hide,\n                  badge: result.badge,\n                  tooltipText: result.tooltipText,\n                  featureId: result.featureId,\n                  tabsOutlet: result.tabsOutlet,\n                  showAlways: result.showAlways,\n                  skipLabelTranslation: result.skipLabelTranslation\n                } as Tab)\n              : undefined;\n          })\n        )\n      ),\n      filter(tabs => !!tabs),\n      toArray()\n    ) as Observable<Tab[]>;\n  }\n\n  private getBaselUrl(currentRoute: ActivatedRouteSnapshot) {\n    let prefix: UrlSegment[] = [];\n    if (currentRoute.parent?.url.length > 0) {\n      prefix = this.getBaselUrl(currentRoute.parent);\n    }\n\n    return [...prefix, ...currentRoute.url];\n  }\n\n  private getLatestChildRoutes(context: ViewContext) {\n    const thisContextRoute = this.findRootContextRoutes(this.router.config, context);\n    return thisContextRoute?.children || [];\n  }\n\n  private findRootContextRoutes(routes: Routes, context: ViewContext) {\n    for (const route of routes) {\n      if ((route as ViewContextRootRoute).rootContext === context) {\n        return route;\n      }\n      if (route.children) {\n        const childResult = this.findRootContextRoutes(route.children, context);\n        if (childResult) {\n          return childResult;\n        }\n      }\n    }\n    return null;\n  }\n\n  private getGuards(child: Route): CanActivateFn[] {\n    const injector: Injector = ((<any>child)._injector as any) || this.injector;\n    const canActivates = child.canActivate || [];\n    const guards = canActivates.map(guard => {\n      return ((route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n        // for legacy CanActivate guards\n        const instance = this.injector.get(guard, null);\n        if (instance) {\n          return instance.canActivate(route, state);\n        }\n\n        // for current CanActivateFn guards\n        const canActivate = guard as CanActivateFn;\n        return runInInjectionContext(injector, () => {\n          return canActivate(route, state);\n        });\n      }) as CanActivateFn;\n    });\n    if (child.data && child.data.showIf) {\n      guards.push((route: ActivatedRouteSnapshot, state: RouterStateSnapshot) =>\n        child.data.showIf(route, state)\n      );\n    }\n    return guards;\n  }\n}\n","import {\n  AlarmService,\n  ApplicationService,\n  InventoryService,\n  TenantService,\n  UserService\n} from '@c8y/client';\nimport { ViewContexServiceConfig, ViewContext } from './router.model';\n\nexport class ViewContextServices {\n  static services: ViewContexServiceConfig = {\n    [ViewContext.Device]: { service: InventoryService, path: ViewContext.Device, autoRoute: true },\n    [ViewContext.Group]: { service: InventoryService, path: ViewContext.Group, autoRoute: true },\n    [ViewContext.User]: { service: UserService, path: ViewContext.User, autoRoute: true },\n    [ViewContext.Application]: {\n      service: ApplicationService,\n      path: ViewContext.Application,\n      autoRoute: true\n    },\n    [ViewContext.Microservice]: {\n      service: ApplicationService,\n      path: ViewContext.Microservice,\n      autoRoute: true\n    },\n    [ViewContext.Extension]: {\n      service: ApplicationService,\n      path: ViewContext.Extension,\n      autoRoute: true\n    },\n    [ViewContext.Feature]: {\n      service: ApplicationService,\n      path: ViewContext.Feature,\n      autoRoute: true\n    },\n    [ViewContext.SubscribedApplications]: {\n      service: ApplicationService,\n      path: ViewContext.SubscribedApplications,\n      autoRoute: true\n    },\n    [ViewContext.Tenant]: { service: TenantService, path: ViewContext.Tenant, autoRoute: true },\n    [ViewContext.Report]: { service: InventoryService, path: ViewContext.Report, autoRoute: true },\n    [ViewContext.Service]: {\n      service: InventoryService,\n      path: ViewContext.Service,\n      autoRoute: true\n    },\n    [ViewContext.DatapointLibrary]: {\n      service: InventoryService,\n      path: ViewContext.DatapointLibrary,\n      autoRoute: true\n    },\n    [ViewContext.Simulators]: {\n      service: InventoryService,\n      path: ViewContext.Simulators,\n      autoRoute: true\n    },\n    [ViewContext.Alarms]: { service: AlarmService, path: ':id', autoRoute: false },\n    [ViewContext.GroupAlarms]: { service: AlarmService, path: ':id', autoRoute: false },\n    [ViewContext.DeviceAlarms]: { service: AlarmService, path: ':id', autoRoute: false },\n    [ViewContext.SimulatorsAlarms]: { service: AlarmService, path: ':id', autoRoute: false },\n    [ViewContext.ServiceAlarms]: { service: AlarmService, path: ':id', autoRoute: false },\n    [ViewContext.Dashboard]: { service: InventoryService, path: ':dashboardId', autoRoute: false }\n  } as const;\n\n  static contextToService(context: ViewContext) {\n    return ViewContextServices.services[context]?.service;\n  }\n\n  static getPath(context: ViewContext) {\n    return ViewContextServices.services[context]?.path;\n  }\n\n  static isAutoRoute(context: ViewContext) {\n    return ViewContextServices.services[context]?.autoRoute;\n  }\n}\n","import { Injectable, Injector, Type } from '@angular/core';\nimport {\n  ActivatedRoute,\n  ActivatedRouteSnapshot,\n  ActivationEnd,\n  Data,\n  NavigationEnd,\n  PRIMARY_OUTLET,\n  Router,\n  UrlSegmentGroup,\n  UrlTree\n} from '@angular/router';\nimport { IIdentified } from '@c8y/client';\nimport { ApiCall, ApiService } from '@c8y/ngx-components/api';\nimport { NEVER, Observable, Subject, Subscription } from 'rxjs';\nimport { filter, merge, switchMap } from 'rxjs/operators';\nimport { Tab, TabWithTemplate } from '../tabs/tab.model';\nimport { TabsService } from '../tabs/tabs.service';\nimport { RouterTabsResolver } from './router-tabs.resolver';\nimport { ContextData, ViewContext } from './router.model';\nimport { ViewContextServices } from './view-context.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContextRouteService {\n  private dataSubscription: Subscription;\n  private routerSubscription: Subscription;\n  private lastAddedTabs = [];\n  private ID_REGEX = /([0-9]+)/;\n\n  refreshTrigger$ = new Subject<void>();\n\n  /**\n   * Last context data snapshot\n   */\n  activatedContextData: ContextData = null;\n\n  constructor(\n    private tabsResolver: RouterTabsResolver,\n    private tabsService: TabsService,\n    private router: Router,\n    private apiService: ApiService,\n    private injector: Injector\n  ) {\n    this.router.events\n      .pipe(filter(event => event instanceof ActivationEnd))\n      .subscribe((event: ActivationEnd) => {\n        const currentContext = this.getContextDataSnapshot(event.snapshot);\n        if (currentContext) {\n          this.activatedContextData = currentContext as ContextData;\n        }\n      });\n  }\n\n  /**\n   * Resolves the current context data. If no context was found, null is returned.\n   *\n   * @param activatedRoute The current activated route.\n   */\n  getContextData(\n    activatedRoute: ActivatedRoute | ActivatedRouteSnapshot\n  ): (Data & ContextData) | null {\n    const data = this.getContextDataSnapshot(this.getSnapshot(activatedRoute));\n    if (data?.context) {\n      return data as Data & ContextData;\n    }\n    return null;\n  }\n\n  /**\n   * Returns a route for the given ContextData.\n   *\n   * @param contextData The ContextData object.\n   * @returns A route with the ids set correctly.\n   */\n  getContextRoute(contextData: ContextData): string {\n    return contextData.context.replace(/:id/g, contextData.contextData.id as string);\n  }\n\n  /**\n   * Verifies if a given url is a view context route.\n   *\n   * @param url A route url.\n   * @param contextToCheck The view context(s) to check. If not provided, all contexts are checked.\n   * @returns true if the given url is a view context route.\n   */\n  isContextRoute(url: string, contextToCheck: ViewContext[] = []): boolean {\n    const viewContexts = contextToCheck.length === 0 ? Object.values(ViewContext) : contextToCheck;\n    // replace all :id placeholders with a regex matcher for a number\n    const regexMatchers = viewContexts.map(context => `/${context.replace(/:id/g, '([0-9]+)')}`);\n    const matchingRegexContext = regexMatchers.find(context => new RegExp(context).test(url));\n    return !!matchingRegexContext;\n  }\n\n  /**\n   * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.22\n   */\n  init(route: ActivatedRoute): void {\n    this.routerSubscription = this.router.events\n      .pipe(filter(e => e instanceof NavigationEnd))\n      .subscribe(() => this.redirectToFirstTab());\n\n    this.dataSubscription = route.data\n      .pipe(\n        merge(this.updatedContext(route), this.refreshTrigger$),\n        switchMap(() => this.tabsResolver.resolve(route.snapshot))\n      )\n      .subscribe(tabs => this.updateTabs(tabs));\n  }\n\n  /**\n   * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.22\n   */\n  destroy(): void {\n    this.dataSubscription.unsubscribe();\n    this.routerSubscription.unsubscribe();\n    this.lastAddedTabs.forEach(t => this.tabsService.remove(t));\n  }\n\n  /**\n   * Reloads all ViewContexts.\n   */\n  refreshContext() {\n    this.refreshTrigger$.next();\n  }\n\n  /**\n   * Sets a new contextData in the ActivatedRoute.\n   * @param activatedRoute The current activated route.\n   * @param contextData New contextData.\n   */\n  setContext(activatedRoute: ActivatedRoute, contextData: IIdentified): void {\n    const data =\n      !activatedRoute.snapshot.parent || activatedRoute.snapshot.data.context\n        ? activatedRoute.snapshot.data\n        : activatedRoute.parent.snapshot.data;\n\n    if (!data) {\n      return;\n    }\n    data.contextData = { ...contextData };\n  }\n\n  /**\n   * @deprecated: Use ScopedContextRouteService instead. Will be removed in 10.21\n   */\n  updatedContext(route: ActivatedRoute): Observable<ApiCall> {\n    const { data } = route.snapshot;\n    const serviceInstance = ViewContextServices.contextToService(data.context);\n    if (serviceInstance) {\n      const service = this.injector.get(\n        serviceInstance as Type<InstanceType<typeof serviceInstance>>\n      );\n      const detailsUrlRegex = (service as typeof service & { getDetailUrl?: (...args) => string })\n        .getDetailUrl(data.contextData)\n        .replace(/\\d+/g, '?\\\\d*');\n      const contextRegex = new RegExp(detailsUrlRegex, 'i');\n      const childrenRegex = new RegExp(`${detailsUrlRegex}/child`, 'i');\n      const filterResponse = ({ url, method }) => {\n        const contextChanged = contextRegex.test(url) && ['POST', 'PUT'].includes(method);\n        const childrenAffected = childrenRegex.test(url) && ['POST', 'DELETE'].includes(method);\n        return contextChanged || childrenAffected;\n      };\n      return this.apiService.hookResponse(filterResponse);\n    }\n    return NEVER;\n  }\n\n  /**\n   * Gets the rootContext from the deepest child route in the hierarchy.\n   *\n   * Traverses the route tree from activatedRoute to find the furthest child route that exists.\n   * Then extracts the rootContext from that route's configuration.\n   *\n   * @returns The rootContext value from the deepest route, or undefined if not found\n   */\n  getRootContextOfChild(currentRoute: ActivatedRoute) {\n    const checkRouteForContext = (route: ActivatedRoute): any => {\n      if (!route.firstChild) {\n        return route.snapshot.routeConfig?.['rootContext'];\n      }\n      const childResult = checkRouteForContext(route.firstChild);\n      return childResult !== undefined ? childResult : route.snapshot.routeConfig?.['rootContext'];\n    };\n    return currentRoute.firstChild ? checkRouteForContext(currentRoute.firstChild) : undefined;\n  }\n\n  private updateTabs(tabs = []) {\n    this.lastAddedTabs.forEach(t => this.tabsService.remove(t));\n    this.lastAddedTabs = tabs;\n    tabs.forEach(t => this.tabsService.add(t));\n    this.redirectToFirstTab();\n  }\n\n  private redirectToFirstTab() {\n    const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();\n    if (this.needsRedirect()) {\n      this.tabsService.firstTab$\n        .pipe(filter((tab: Tab) => typeof tab?.path === 'string'))\n        .subscribe((tab: TabWithTemplate<string>) => {\n          const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();\n          if (currentContextId === tabPathId) {\n            this.router.navigateByUrl(tab.path, { replaceUrl: true });\n          }\n        });\n    }\n  }\n\n  private needsRedirect() {\n    const tree: UrlTree = this.router.parseUrl(this.router.url);\n    const groups: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n\n    const context = this.getMatchingContextRoute(this.router.url);\n    if (!context) {\n      return groups.segments.length === 2;\n    } else {\n      return context.split('/').length === groups.segments.length;\n    }\n  }\n\n  private getMatchingContextRoute(url) {\n    const viewContexts = Object.values(ViewContext);\n\n    const urlWithoutId = url.replace(/\\d(.*)/g, '');\n    const id = viewContexts.findIndex(context => `/${context.replace(':id', '')}` === urlWithoutId);\n    return viewContexts[id];\n  }\n\n  private getSnapshot(\n    activatedRoute: ActivatedRoute | ActivatedRouteSnapshot\n  ): ActivatedRouteSnapshot {\n    return activatedRoute instanceof ActivatedRoute ||\n      !!(activatedRoute as unknown as { snapshot: ActivatedRouteSnapshot })?.snapshot\n      ? (activatedRoute as unknown as { snapshot: ActivatedRouteSnapshot }).snapshot\n      : activatedRoute;\n  }\n\n  private getContextDataSnapshot(\n    activatedRoute: ActivatedRouteSnapshot\n  ): Data & Partial<ContextData> {\n    let route = activatedRoute;\n    while (route) {\n      if (route.data.context) {\n        return route.data;\n      }\n      route = route.parent;\n    }\n    return {};\n  }\n}\n","import { DestroyRef, Injectable, Injector, OnDestroy, Type } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  ActivatedRoute,\n  ActivationEnd,\n  ActivationStart,\n  ChildActivationEnd,\n  PRIMARY_OUTLET,\n  Router,\n  UrlSegmentGroup,\n  UrlTree\n} from '@angular/router';\nimport { ApiCall, ApiService } from '@c8y/ngx-components/api';\nimport { NEVER, Observable, Subject, merge } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { Tab, TabWithTemplate } from '../tabs/tab.model';\nimport { TabsService } from '../tabs/tabs.service';\nimport { RouterTabsResolver } from './router-tabs.resolver';\nimport { ViewContext, ViewContextRootRoute } from './router.model';\nimport { ViewContextServices } from './view-context.service';\n\n/**\n * A service which is injected into the context route component to handle the context data.\n */\n@Injectable()\nexport class ScopedContextRouteService implements OnDestroy {\n  private lastAddedTabs = [];\n  private refreshTrigger$ = new Subject<void>();\n  private ID_REGEX = /([0-9]+)/;\n\n  /**\n   * The context used by this service.\n   */\n  private currentContext: ViewContext;\n\n  constructor(\n    private tabsResolver: RouterTabsResolver,\n    private tabsService: TabsService,\n    private router: Router,\n    private apiService: ApiService,\n    private injector: Injector,\n    private destroyRef: DestroyRef\n  ) {}\n\n  /**\n   * Indicates that the data is loading\n   * @returns An boolean observable which indicates if the data is loading.\n   */\n  isLoading$(): Observable<boolean> {\n    return this.router.events.pipe(\n      filter(\n        e =>\n          (e instanceof ActivationStart || e instanceof ChildActivationEnd) &&\n          (e.snapshot.routeConfig as ViewContextRootRoute)?.rootContext === this.currentContext\n      ),\n      map(e => e instanceof ActivationStart),\n      takeUntilDestroyed(this.destroyRef)\n    );\n  }\n\n  /**\n   * Initializes the context route.\n   * @param route The current activated route.\n   */\n  init(route: ActivatedRoute): void {\n    this.currentContext = (route.routeConfig as ViewContextRootRoute).rootContext;\n    if (!this.currentContext) {\n      throw new Error(\n        `${ScopedContextRouteService.name} should not be used on a route without a rootContext`\n      );\n    }\n\n    this.router.events\n      .pipe(\n        filter(event => event instanceof ActivationEnd && this.needsRedirect(event)),\n        switchMap((event: ActivationEnd) => this.tabsResolver.resolve(event.snapshot)),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((tabs: Tab[]) => this.redirectToFirstTabOnActivationEnd(tabs));\n\n    merge(this.updatedContext(route), this.refreshTrigger$, route.data)\n      .pipe(\n        switchMap(() => this.tabsResolver.resolve(route.snapshot)),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(tabs => this.updateTabs(tabs));\n  }\n\n  /**\n   * Destroys the service.\n   */\n  ngOnDestroy(): void {\n    this.lastAddedTabs.forEach(t => this.tabsService.remove(t));\n  }\n\n  /**\n   * Refreshes the context.\n   */\n  refreshContext() {\n    this.refreshTrigger$.next();\n  }\n\n  private redirectToFirstTabOnActivationEnd(tabs: Tab[]) {\n    if (!tabs.length) {\n      return;\n    }\n    const tab = this.tabsService.sortTabs(tabs)[0];\n    const currentQueryParams = this.router.routerState.snapshot.root.queryParams;\n    const queryParamsString = new URLSearchParams(currentQueryParams).toString();\n    const queryParamsSuffix = queryParamsString ? `?${queryParamsString}` : '';\n    const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();\n    const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();\n    if (currentContextId === tabPathId) {\n      this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, {\n        replaceUrl: true\n      });\n    }\n  }\n\n  /**\n   * Sets an API hook to refresh the contextData on changes.\n   * @param activatedRoute The current activated route.\n   */\n  private updatedContext(route: ActivatedRoute): Observable<ApiCall> {\n    const { data } = route.snapshot;\n    const serviceInstance = ViewContextServices.contextToService(data.context);\n    if (serviceInstance) {\n      const service = this.injector.get(\n        serviceInstance as Type<InstanceType<typeof serviceInstance>>\n      );\n      const detailsUrlRegex = (service as typeof service & { getDetailUrl?: (...args) => string })\n        .getDetailUrl(data.contextData)\n        .replace(/\\d+/g, '?\\\\d*');\n      const contextRegex = new RegExp(detailsUrlRegex, 'i');\n      const childrenRegex = new RegExp(`${detailsUrlRegex}/child`, 'i');\n      const filterResponse = ({ url, method }) => {\n        const contextChanged = contextRegex.test(url) && ['POST', 'PUT'].includes(method);\n        const childrenAffected = childrenRegex.test(url) && ['POST', 'DELETE'].includes(method);\n        return contextChanged || childrenAffected;\n      };\n      return this.apiService.hookResponse(filterResponse);\n    }\n    return NEVER;\n  }\n\n  private updateTabs(tabs = []) {\n    this.lastAddedTabs.forEach(t => this.tabsService.remove(t));\n    this.lastAddedTabs = tabs;\n    tabs.forEach(t => this.tabsService.add(t));\n    this.redirectToFirstTabOnUpdateTabs();\n  }\n\n  private redirectToFirstTabOnUpdateTabs() {\n    const currentQueryParams = this.router.routerState.snapshot.root.queryParams;\n    const queryParamsString = new URLSearchParams(currentQueryParams).toString();\n    const queryParamsSuffix = queryParamsString ? `?${queryParamsString}` : '';\n    const currentContextId = (this.router.url.match(this.ID_REGEX) || []).shift();\n    if (this.needsRedirectLegacy()) {\n      this.tabsService.firstTab$\n        .pipe(filter((tab: Tab) => typeof tab?.path === 'string'))\n        .subscribe((tab: TabWithTemplate<string>) => {\n          const tabPathId = (tab.path.match(this.ID_REGEX) || []).shift();\n          if (currentContextId === tabPathId) {\n            this.router.navigateByUrl(`${tab.path}${queryParamsSuffix}`, { replaceUrl: true });\n          }\n        });\n    }\n  }\n\n  private needsRedirectLegacy(): boolean {\n    const tree: UrlTree = this.router.parseUrl(this.router.url);\n    const groups: UrlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n\n    const context = this.getMatchingContextRoute(this.router.url);\n    if (!context) {\n      return groups.segments.length === 2;\n    }\n    return context.split('/').length === groups.segments.length;\n  }\n\n  private needsRedirect(event: ActivationEnd): boolean {\n    const contextRoute: ViewContextRootRoute = event.snapshot.routeConfig as ViewContextRootRoute;\n    if (!contextRoute.rootContext) {\n      return false;\n    }\n    const contextRouteFromUrl = this.getMatchingContextRoute(this.router.url);\n    return contextRoute.rootContext === contextRouteFromUrl;\n  }\n\n  private getMatchingContextRoute(url: string): ViewContext {\n    const viewContexts = Object.values(ViewContext);\n    // replace all :id placeholders with a regex matcher for a number\n    const regexMatchers = viewContexts.map(\n      context => `^/${context.replace(/:id/g, '([0-9]+)')}(\\\\?.*)?$`\n    );\n    const matchingRegexContext = regexMatchers.find(context => new RegExp(context).test(url));\n    return matchingRegexContext ? viewContexts[regexMatchers.indexOf(matchingRegexContext)] : null;\n  }\n}\n","import { Component, DestroyRef, OnInit } from '@angular/core';\nimport { ActivatedRoute, RouterOutlet } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { ScopedContextRouteService } from './scoped-context-route.service';\nimport { ContextRouteService } from './context-route.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { LoadingComponent } from '../common/loading.component';\n\n@Component({\n  selector: 'c8y-context-route',\n  templateUrl: './context-route.component.html',\n  providers: [ScopedContextRouteService],\n  standalone: true,\n  imports: [RouterOutlet, NgIf, AsyncPipe, LoadingComponent]\n})\nexport class ContextRouteComponent implements OnInit {\n  isLoading$: Observable<boolean>;\n\n  constructor(\n    private route: ActivatedRoute,\n    private scopedContextRouteService: ScopedContextRouteService,\n    private contextRouteService: ContextRouteService,\n    private destroyRef: DestroyRef\n  ) {\n    this.isLoading$ = this.scopedContextRouteService.isLoading$();\n  }\n\n  ngOnInit(): void {\n    this.contextRouteService.refreshTrigger$\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this.refreshTabs();\n      });\n    this.scopedContextRouteService.init(this.route);\n  }\n\n  refreshTabs() {\n    this.scopedContextRouteService.refreshContext();\n  }\n}\n","<router-outlet *ngIf=\"!(isLoading$ | async); else loading\"></router-outlet>\n\n<ng-template #loading>\n  <div class=\"d-flex d-col a-i-center j-c-center fit-h\">\n    <c8y-loading></c8y-loading>\n  </div>\n</ng-template>\n","import { Injectable, Injector, Type } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { from, Observable, of } from 'rxjs';\nimport { catchError, map, shareReplay, tap } from 'rxjs/operators';\nimport { ViewContextServices } from './view-context.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ContextRouteGuard {\n  private caches = new Map();\n  constructor(private injector: Injector) {}\n\n  canActivate(route: ActivatedRouteSnapshot): Observable<boolean> {\n    const id = route.paramMap.get('id');\n    const service = this.service(route);\n    this.clearDetailCached(service, id);\n    return this.detailCached(service, id).pipe(\n      tap(contextData => {\n        Object.keys(route.data.contextData).forEach(key => delete route.data.contextData[key]);\n        Object.assign(route.data.contextData, contextData);\n      }),\n      map(() => true),\n      catchError(() => of(false))\n    );\n  }\n\n  private service(route: ActivatedRouteSnapshot) {\n    const serviceInstance = ViewContextServices.contextToService(route.data.context);\n    return this.injector.get(serviceInstance as Type<InstanceType<typeof serviceInstance>>);\n  }\n\n  private detailCached(\n    service: ReturnType<ContextRouteGuard['service']>,\n    id: string | number\n  ): Observable<Awaited<ReturnType<ReturnType<ContextRouteGuard['service']>['detail']>>['data']> {\n    if (id === 'new') {\n      return of(undefined);\n    }\n    const cache = this.getCache(service);\n    let cached = cache[id];\n    if (!cached) {\n      const params = service instanceof InventoryService ? { withChildren: false } : undefined;\n      cached = from(service.detail(id, params)).pipe(\n        map(({ data }) => data),\n        shareReplay(1)\n      );\n      cache[id] = cached;\n    }\n    return cached;\n  }\n\n  private clearDetailCached(\n    service: ReturnType<ContextRouteGuard['service']>,\n    id: string | number\n  ) {\n    const cache = this.getCache(service);\n    delete cache[id];\n  }\n\n  private getCache(service: ReturnType<ContextRouteGuard['service']>) {\n    let cache = this.caches.get(service);\n    if (!cache) {\n      cache = {};\n      this.caches.set(service, cache);\n    }\n    return cache;\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'empty',\n  template: '',\n  standalone: true\n})\nexport class EmptyComponent {}\n","import {\n  importProvidersFrom,\n  Injectable,\n  InjectionToken,\n  Injector,\n  NgModuleRef\n} from '@angular/core';\nimport { Router, Routes, ROUTES } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { filter as _filter, flatten, forEach, map } from 'lodash-es';\nimport { combineLatest, Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, shareReplay, take, map as rxjsMap } from 'rxjs/operators';\nimport {\n  ExtensionFactory,\n  ExtensionPointWithoutStateForPlugins,\n  fromTriggerOnce,\n  GenericHookOptions,\n  GenericHookType,\n  getInjectedHooks,\n  hookGeneric,\n  InjectionType\n} from '../common/extension-hooks';\nimport { OptionsService } from '../common/options.service';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { ContextRouteService } from './context-route.service';\nimport { Route, RouteFactory, ViewContext, ViewContextRootRoute } from './router.model';\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type RouteExtension = Route | Route[] | ExtensionFactory<Route>;\n\n/**\n * A hook to use for Multi Provider extension.\n * @deprecated Consider using the `hookRoute` function instead.\n */\nexport const HOOK_ROUTE = new InjectionToken<RouteFactory>('HOOK_ROUTE');\n\n/**\n * You can either provide a single `Route` as parameter:\n * ```typescript\n *  hookRoute(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookRoute([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<Route>`\n * ```typescript\n *  export class MyRouteFactory implements ExtensionFactory<Route> {...}\n *  ...\n *  hookRoute(MyRouteFactory)\n * ```\n * A typed alternative to `HOOK_ROUTE`.\n * @param route The `Route`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookRoute(route: GenericHookType<Route>, options?: Partial<GenericHookOptions>) {\n  return hookGeneric<Route>(route, HOOK_ROUTE, options);\n}\n\n/**\n * A service which defines routes for the application. You can use\n * HOOK_ROUTES or pass\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class RouterService extends ExtensionPointWithoutStateForPlugins<Route> {\n  readonly state = new Map<string, Route>();\n  readonly readyForInitialNavigation$: Observable<void>;\n\n  constructor(\n    rootInjector: Injector,\n    public router: Router,\n    private contextRouteService: ContextRouteService,\n    plugins: PluginsResolveService,\n    options: OptionsService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n\n    this.readyForInitialNavigation$ = combineLatest([\n      plugins.allPluginsLoaded$.pipe(filter(tmp => !!tmp)),\n      this.items$\n    ]).pipe(\n      take(1),\n      rxjsMap(() => {\n        return;\n      })\n    );\n\n    // We are doing a self subscription to add the new routes\n    // to the router configuration.\n    this.items$.subscribe((routes: Route[]) => {\n      const toAddRoutes = routes.filter((route: Route) => {\n        const path = `${route.context || ''}${route.path}`;\n        const isAlreadyAdded = this.state.has(path);\n        if (!isAlreadyAdded) {\n          this.state.set(path, route);\n        }\n        return !isAlreadyAdded;\n      });\n      this.addRoute(toAddRoutes);\n    });\n\n    plugins.pluginDetails$.subscribe(({ moduleRef, remoteNgModule }) => {\n      this.resolveRouterForChildRoutes(moduleRef, remoteNgModule);\n    });\n\n    // only needed in case of pure angular application\n    // otherwise handled by bridge service\n    if (!options.upgrade) {\n      this.readyForInitialNavigation$.subscribe(() => {\n        this.router.initialNavigation();\n      });\n    }\n  }\n\n  /**\n   * Refresh the current context\n   */\n  refresh() {\n    super.refresh();\n    this.contextRouteService.refreshContext();\n  }\n\n  /**\n   * Add a new route to the router configuration or a context.\n   * @param route The route to add\n   */\n  addRoute(route: Route | Route[]) {\n    this.addRoutes(Array.isArray(route) ? route : [route]);\n  }\n\n  /**\n   * Determines if the given MO is an group or an device and returns\n   * the correct href to link correctly to that MO.\n   * @param groupOrDevice The MO of a group or the device.\n   * @param prefix How should the link be prefixed.\n   */\n  getHref(groupOrDevice: IManagedObject, prefix = '#/'): string {\n    if (groupOrDevice.c8y_IsDeviceGroup || groupOrDevice.c8y_IsDynamicGroup) {\n      return `${prefix}${ViewContext.Group.replace(':id', groupOrDevice.id)}`;\n    }\n    return `${prefix}${ViewContext.Device.replace(':id', groupOrDevice.id)}`;\n  }\n\n  protected setupItemsObservable(): Observable<Route[]> {\n    return fromTriggerOnce<Route>(\n      this.router,\n      this.refresh$,\n      [\n        getInjectedHooks<Route>(HOOK_ROUTE, this.injectors, InjectionType.ROUTE),\n        () => this.factories\n      ],\n      false\n    ).pipe(distinctUntilChanged(), shareReplay(1));\n  }\n\n  private addRoutes(routes) {\n    if (this.router.routerState?.snapshot?.url) {\n      console.warn('Adding routes too late. This might cause issues.', routes);\n      return;\n    }\n    // Empty route needs to be last as of navigation to angularjs routes\n    // if ** route hit, the angularjs routes are loaded.\n    const emptyRoute = this.router.config.find(r => r.path === '**');\n    const rootContextRoutes = this.findAllRootContextRoutes([...this.router.config, ...routes]);\n    this.attachExistingChildRoutes(this.router.config, routes);\n\n    this.router.resetConfig(\n      [\n        ...this.router.config.filter(r => r.path !== '**'),\n        ...routes.map((r: Route) => this.convertRoute(rootContextRoutes, r)),\n        emptyRoute\n      ].filter(Boolean)\n    );\n  }\n\n  private attachExistingChildRoutes(existing: Routes, toAdd: Routes) {\n    const existingRootRoutes = this.findAllRootContextRoutes(existing || []);\n    const toAddRootRoutes = this.findAllRootContextRoutes(toAdd || []);\n    forEach(toAddRootRoutes, (r: ViewContextRootRoute) => {\n      map(\n        _filter(existingRootRoutes, { rootContext: r.rootContext }),\n        (er: ViewContextRootRoute) => {\n          r.children = [...(er.children || []), ...(r.children || [])];\n        }\n      );\n    });\n  }\n\n  private convertRoute(rootContextRoutes: Routes, route: Route) {\n    if (route.context) {\n      rootContextRoutes.forEach((r: ViewContextRootRoute) => {\n        if (r.rootContext === route.context) {\n          r.children = [route, ...(r.children || [])];\n        }\n      });\n      return;\n    }\n    return route;\n  }\n\n  private findAllRootContextRoutes(routes: Routes): ViewContextRootRoute[] {\n    const result: ViewContextRootRoute[] = [];\n    routes.forEach(route => {\n      if ((route as ViewContextRootRoute).rootContext) {\n        result.push(route as ViewContextRootRoute);\n      }\n      if (route.children) {\n        const childRoutes = this.findAllRootContextRoutes(route.children);\n        result.push(...childRoutes);\n      }\n    });\n    return result;\n  }\n\n  private resolveRouterForChildRoutes(moduleRef: NgModuleRef<any>, remoteNgModule: any) {\n    // NOTE: stolen from lazy loaded routes from Angular itself.\n    // https://github.com/angular/angular/blob/da58801f95c66c201e332189af25702bdd722f3f/packages/router/src/router_config_loader.ts#L103-L108\n    const rawRoutes = flatten(moduleRef.injector.get(ROUTES, [], { self: true, optional: true }));\n\n    if (rawRoutes.length > 0) {\n      const routeWithInjector = rawRoutes.map(route => {\n        route.providers = [importProvidersFrom(remoteNgModule)];\n        return route;\n      });\n      this.addRoute(routeWithInjector);\n    }\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ExtraOptions, RouterModule as NgRouterModule, Routes } from '@angular/router';\nimport { CommonModule } from '../common/common.module';\nimport { HeaderModule } from '../header/header.module';\nimport { ContextRouteComponent } from './context-route.component';\nimport { ContextRouteGuard } from './context-route.guard';\nimport { EmptyComponent } from './empty.component';\nimport { RouterTabsResolver } from './router-tabs.resolver';\nimport { Route, ViewContext, ViewContextRootRoute } from './router.model';\nimport { RouterService } from './router.service';\nimport { ScopedContextRouteService } from './scoped-context-route.service';\nimport { ViewContextServices } from './view-context.service';\n\nexport const extraRoutes: Route[] = [\n  {\n    path: 'users/new',\n    component: EmptyComponent\n  }\n];\n\nexport const viewContextRoutes: ViewContextRootRoute[] = [];\n// tslint:disable-next-line: forin\nfor (const key in ViewContext) {\n  const context = ViewContext[key];\n  if (!ViewContextServices.isAutoRoute(context)) {\n    continue;\n  }\n  viewContextRoutes.push({\n    path: ViewContextServices.getPath(context),\n    rootContext: context,\n    component: ContextRouteComponent,\n    canActivate: [ContextRouteGuard],\n    data: { context, contextData: {} },\n    resolve: {\n      tabs: RouterTabsResolver\n    }\n  });\n}\n\n/**\n * A C8Y router implementation. It implements some default routes needed\n * as well as context routes. Context routes are useful, if you want to\n * use context data on a certain view (e.g. a device), then this routes\n * automatically resolve the associated managed object.\n *\n * You can use this in combination of the Angular default RouterModule\n * or use only this module. Context routes can only be added via the\n * HOOK_ROUTES hook.\n */\n@NgModule({\n  imports: [NgRouterModule, HeaderModule, CommonModule, ContextRouteComponent, EmptyComponent],\n  providers: [ScopedContextRouteService]\n})\nexport class RouterModule {\n  /**\n   * Same interface as @angular/router module.\n   * Sets `initialNavigation` always to `disabled` and `useHash` always to `true`.\n   * @param routes The configured routes.\n   * @param config The router default configuration.\n   * @returns The module and providers.\n   */\n  static forRoot(routes: Routes = [], config?: ExtraOptions): ModuleWithProviders<RouterModule> {\n    if (!config) {\n      config = {};\n    }\n    // initialNavigation disabled by default because of MTM-44047 (routes triggered before the actual login)\n    config.initialNavigation = config.initialNavigation ?? 'disabled';\n    config.useHash = config.useHash ?? true;\n\n    const ngRouterModule = NgRouterModule.forRoot(\n      [...routes, ...extraRoutes, ...viewContextRoutes],\n      config\n    );\n\n    return {\n      ngModule: RouterModule,\n      providers: [...ngRouterModule.providers, ScopedContextRouteService]\n    };\n  }\n\n  constructor(\n    // Declared but never used is intended: to always have a instance of RouterService.\n    private routerService: RouterService\n  ) {}\n}\n","import { Directive, Input, ElementRef } from '@angular/core';\n\n@Directive({\n  selector: '[c8y-guide-href]',\n  standalone: true\n})\nexport class GuideHrefDirective {\n  @Input('c8y-guide-href')\n  c8yGuideHref;\n\n  private htmlAnchor: HTMLAnchorElement;\n\n  set baseHref(href) {\n    this.htmlAnchor.href = `${href}/${this.c8yGuideHref}`;\n  }\n\n  constructor(private elementRef: ElementRef) {\n    this.htmlAnchor = this.elementRef.nativeElement as HTMLAnchorElement;\n    if (!this.htmlAnchor.hasAttribute('target')) {\n      this.htmlAnchor.setAttribute('target', '_blank');\n      this.htmlAnchor.setAttribute('rel', 'noopener noreferrer');\n    }\n  }\n}\n","import {\n  Component,\n  OnInit,\n  ContentChildren,\n  QueryList,\n  ContentChild,\n  ElementRef,\n  Renderer2,\n  OnDestroy,\n  AfterContentInit,\n  Optional\n} from '@angular/core';\nimport { GuideHrefDirective } from './guide-href.directive';\nimport { DocsService } from './docs.service';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { ReplaySubject } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\n\n@Component({\n  selector: '[c8y-guide-docs]',\n  templateUrl: './guide-docs.component.html',\n  standalone: true\n})\nexport class GuideDocsComponent implements OnInit, AfterContentInit, OnDestroy {\n  baseUrl: string;\n  @ContentChildren(GuideHrefDirective, { descendants: true }) links: QueryList<GuideHrefDirective>;\n\n  /**\n   * Provides access to translate directive, so it is possible to adjust anchor html tags, after\n   * content is translated.\n   */\n  private _translateDirective: C8yTranslateDirective;\n  @ContentChild(C8yTranslateDirective, { static: true })\n  get translateDirective(): C8yTranslateDirective {\n    return this._translateDirective;\n  }\n  set translateDirective(value: C8yTranslateDirective) {\n    if (!value) {\n      return;\n    }\n    this._translateDirective = value;\n  }\n\n  private destroyed$: ReplaySubject<boolean> = new ReplaySubject(1);\n\n  constructor(\n    private docs: DocsService,\n    private el: ElementRef,\n    private renderer: Renderer2,\n    @Optional() translateDirective: C8yTranslateDirective\n  ) {\n    this.translateDirective = translateDirective;\n  }\n\n  ngOnInit(): void {\n    this.baseUrl = this.docs.getBaseUrl();\n  }\n\n  /**\n   * After content is initialized we subscribe for translation events, then we are able to modify\n   * anchor just as C8yGuideHrefDirective does.\n   */\n  ngAfterContentInit() {\n    if (this.translateDirective) {\n      this.translateDirective.htmlUpdateEvent\n        .pipe(startWith(null), takeUntil(this.destroyed$))\n        .subscribe(() => {\n          queueMicrotask(() => {\n            this.replaceAnchorAttributes();\n          });\n        });\n    } else {\n      this.replaceAnchorAttributes();\n    }\n    this.links.forEach(guide => {\n      guide.baseHref = this.baseUrl;\n    });\n  }\n\n  /**\n   * Find and modify anchor elements\n   */\n  replaceAnchorAttributes() {\n    const anchors = this.findGuideAnchors(this.el.nativeElement);\n    anchors.forEach(a => {\n      const guideHref = `${this.baseUrl}/${a.getAttribute('c8y-guide-href')}`;\n      this.renderer.setAttribute(a, 'href', guideHref);\n      if (!a.hasAttribute('target')) {\n        this.renderer.setAttribute(a, 'target', '_blank');\n        this.renderer.setAttribute(a, 'rel', 'noopener noreferrer');\n      }\n    });\n  }\n\n  /**\n   * Recursive function, returns array of Anchor elements inside HTMLElement.\n   */\n  findGuideAnchors(el: HTMLElement): HTMLElement[] {\n    const isAnchor = () => el.nodeName === 'A';\n    const hasGuideHrefAttr = () => !!el.attributes.getNamedItem('c8y-guide-href');\n    const hasChildren = () => el.childNodes && el.childNodes.length > 0;\n\n    let result = [];\n\n    if (isAnchor() && hasGuideHrefAttr()) {\n      result.push(el);\n    } else if (hasChildren()) {\n      el.childNodes.forEach((node: HTMLElement) => {\n        const searchResult = this.findGuideAnchors(node);\n        if (searchResult) {\n          result = [...result, ...searchResult];\n        }\n      });\n    }\n    return result;\n  }\n\n  ngOnDestroy() {\n    this.destroyed$.next(true);\n    this.destroyed$.complete();\n  }\n}\n","@if (!!baseUrl) {\n  <ng-content></ng-content>\n}\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { AppStateService } from '../../common/ui-state.service';\nimport { HeaderService } from '../../header/header.service';\nimport { PRODUCT_EXPERIENCE_CORE_SHARED } from '../../shared/core.model';\nimport { legalNoticesItem } from '../defaults.items';\nimport { DocLink } from '../docs.models';\nimport { DocsService } from '../docs.service';\nimport { NgIf, NgClass, NgFor, AsyncPipe } from '@angular/common';\nimport { IconDirective } from '../../common/icon.directive';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { C8yComponentOutlet } from '../../common/component-outlet.directive';\nimport { ProductExperienceDirective } from '../../product-experience/product-experience.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-help-and-support-outlet',\n  templateUrl: './help-and-support-outlet.component.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    IconDirective,\n    NgClass,\n    CollapseModule,\n    NgFor,\n    C8yComponentOutlet,\n    ProductExperienceDirective,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class HelpAndSupportOutletComponent {\n  PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_CORE_SHARED;\n  helpAndSupport$: Observable<DocLink[]>;\n  documentationOpen = false;\n  appState$: Observable<any>;\n  drawerOpen$: Observable<boolean>;\n\n  constructor(\n    private docsService: DocsService,\n    private appState: AppStateService,\n    private headerService: HeaderService\n  ) {\n    this.helpAndSupport$ = this.docsService.items$.pipe(\n      map(items =>\n        items.filter(item => item.type === 'doc' && item.label !== legalNoticesItem.label)\n      )\n    );\n    this.appState$ = this.appState.state$;\n    this.drawerOpen$ = this.headerService.rightDrawerOpen$;\n  }\n}\n","<ng-container *ngIf=\"helpAndSupport$ | async as helpAndSupport\">\n  <div\n    class=\"separator-top p-t-8 p-b-8\"\n    *ngIf=\"(appState$ | async).showRightDrawer && helpAndSupport.length\"\n  >\n    <button\n      class=\"c8y-right-drawer__link sticky-top\"\n      [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n      [attr.aria-expanded]=\"documentationOpen\"\n      [attr.aria-controls]=\"'collapseDocs'\"\n      type=\"button\"\n      (click)=\"documentationOpen = !documentationOpen\"\n    >\n      <i c8yIcon=\"book-shelf\"></i>\n      <span class=\"text-bold\">{{ 'Documentation' | translate }}</span>\n      <i\n        class=\"m-l-auto\"\n        c8yIcon=\"angle-down\"\n        [ngClass]=\"{ 'icon-rotate-180': documentationOpen }\"\n      ></i>\n    </button>\n    <div\n      class=\"collapse\"\n      id=\"collapseDocs\"\n      [collapse]=\"!documentationOpen\"\n      [isAnimated]=\"true\"\n      #documentationCol=\"bs-collapse\"\n    >\n      <ng-container *ngFor=\"let link of helpAndSupport\">\n        <ng-container *ngIf=\"link.component\">\n          <ng-container *c8yComponentOutlet=\"link.component; environmentInjector: link.injector\"></ng-container>\n        </ng-container>\n        <a\n          class=\"c8y-right-drawer__link\"\n          title=\"{{ link.label | translate }}\"\n          [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n          type=\"button\"\n          target=\"_blank\"\n          *ngIf=\"!link.component\"\n          rel=\"noopener noreferrer\"\n          [href]=\"link.url\"\n          c8yProductExperience\n          [actionName]=\"PRODUCT_EXPERIENCE.QUICK_LINKS.EVENTS.QUICK_LINK_RIGHT_DRAWER\"\n          [actionData]=\"{\n            component: PRODUCT_EXPERIENCE.QUICK_LINKS.COMPONENTS.RIGHT_DRAWER_COMPONENT,\n            action: link.label\n          }\"\n        >\n          <span\n            class=\"text-truncate text-12\"\n            title=\"{{ link.label | translate }}\"\n          >\n            {{ link.label | translate }}\n          </span>\n        </a>\n      </ng-container>\n    </div>\n  </div>\n</ng-container>\n","import { Component, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { AppStateService } from '../../common/ui-state.service';\nimport { OptionsService } from '../../common/options.service';\nimport { Status } from '../../common/status.model';\nimport { PRODUCT_EXPERIENCE_CORE_SHARED } from '../../shared/core.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ModalService } from '../../modal/modal.service';\nimport { TenantService, UserService } from '@c8y/client';\nimport { AlertService } from '../../alert/alert.service';\nimport { HeaderService } from '../../header/header.service';\nimport { Permissions } from '../../common/permissions.service';\nimport { map } from 'rxjs/operators';\nimport { NgIf, NgClass, AsyncPipe } from '@angular/common';\nimport { IconDirective } from '../../common/icon.directive';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { ProductExperienceDirective } from '../../product-experience/product-experience.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-support-outlet',\n  templateUrl: './support-outlet.component.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    IconDirective,\n    NgClass,\n    CollapseModule,\n    ProductExperienceDirective,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class SupportOutletComponent implements OnInit {\n  isCollapsed: boolean;\n  drawerOpen$: Observable<boolean>;\n  userSupportAvailable: boolean;\n  supportUrl: string | boolean;\n  isCollapsible: boolean;\n  supportUserEnabled$: Observable<boolean>;\n  textClass: string;\n  tabIndex$: Observable<'0' | '-1'>;\n  PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_CORE_SHARED;\n\n  constructor(\n    public ui: AppStateService,\n    private optionsService: OptionsService,\n    private modalService: ModalService,\n    private translateService: TranslateService,\n    private tenantService: TenantService,\n    private alertService: AlertService,\n    private userService: UserService,\n    private headerService: HeaderService\n  ) {}\n\n  async activateSupportAccess() {\n    const title = gettext('Activate support user access');\n\n    const companyName = this.optionsService.get('companyName', 'Cumulocity');\n    const textWithCompany = gettext(\n      'You are about to allow a support user from {{companyName}} to access your tenant to help you with your issue.'\n    );\n    const textWithoutCompany = gettext(\n      'You are about to allow a support user to access your tenant to help you with your issue.'\n    );\n    const finalQuestion = gettext('Do you want to proceed?');\n    const body = [\n      this.translateService.instant(companyName ? textWithCompany : textWithoutCompany, {\n        companyName\n      }),\n      this.translateService.instant(finalQuestion)\n    ].join(' ');\n\n    const labels = {\n      ok: gettext('Activate access'),\n      cancel: gettext('Cancel')\n    };\n\n    const successMsg = gettext('Support user access activated.');\n\n    try {\n      await this.modalService.confirm(title, body, Status.DANGER, labels);\n      await this.tenantService.enableSupportUser();\n      await this.refreshCurrentUser();\n      this.alertService.success(successMsg);\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  async deactivateSupportAccess() {\n    const title = gettext('Deactivate support user access');\n\n    const companyName = this.optionsService.get('companyName', 'Cumulocity');\n    const textWithCompany = gettext(\n      'You are about to block a support user from {{companyName}} from accessing your tenant to help you with your issue.'\n    );\n    const textWithoutCompany = gettext(\n      'You are about to block a support user from accessing your tenant to help you with your issue.'\n    );\n    const { data: currentUser } = await this.userService.current();\n    const isTenantAdmin = this.userService.hasRole(currentUser, Permissions.ROLE_TENANT_ADMIN);\n    const tenantAdminNote = gettext(\n      'Deactivating support access as tenant admin will disable all other support requests on your tenant.'\n    );\n    const finalQuestion = gettext('Do you want to proceed?');\n    const body = [\n      this.translateService.instant(companyName ? textWithCompany : textWithoutCompany, {\n        companyName\n      }),\n      isTenantAdmin ? this.translateService.instant(tenantAdminNote) : '',\n      this.translateService.instant(finalQuestion)\n    ]\n      .filter(Boolean)\n      .join(' ');\n\n    const labels = {\n      ok: gettext('Deactivate access'),\n      cancel: gettext('Cancel')\n    };\n\n    const successMsg = gettext('Support user access deactivated.');\n\n    try {\n      await this.modalService.confirm(title, body, Status.DANGER, labels);\n      await this.tenantService.disableSupportUser();\n      await this.refreshCurrentUser();\n      this.alertService.success(successMsg);\n    } catch (ex) {\n      // intended empty\n    }\n  }\n\n  ngOnInit(): void {\n    const state = this.ui.state$.getValue();\n    this.isCollapsed = state.activateSupportUserAvailable && state.supportUrl;\n    this.userSupportAvailable = this.ui.state$.getValue().activateSupportUserAvailable;\n    this.supportUrl = this.ui.state$.getValue().supportUrl;\n    this.supportUserEnabled$ = this.ui.currentUser.pipe(map(user => !!user?.supportUserEnabled));\n    this.isCollapsible = this.userSupportAvailable && !!this.supportUrl;\n    this.textClass = this.isCollapsible ? 'text-truncate text-12' : 'text-medium';\n    this.drawerOpen$ = this.headerService.rightDrawerOpen$;\n    this.tabIndex$ = this.drawerOpen$.pipe(map(drawerOpen => (drawerOpen ? '0' : '-1')));\n  }\n\n  private async refreshCurrentUser() {\n    const currentUserResult = await this.userService.current();\n    this.ui.currentUser.next(currentUserResult.data);\n  }\n}\n","<button\n  class=\"c8y-right-drawer__link sticky-top\"\n  [tabindex]=\"tabIndex$ | async\"\n  type=\"button\"\n  (click)=\"isCollapsed = !isCollapsed\"\n  *ngIf=\"isCollapsible\"\n>\n  <i c8yIcon=\"c8y-c8y-support\"></i>\n  <span class=\"text-bold\">{{ 'Support' | translate }}</span>\n  <i\n    class=\"m-l-auto\"\n    c8yIcon=\"angle-up\"\n    [ngClass]=\"{ 'icon-rotate-180': isCollapsed }\"\n  ></i>\n</button>\n<div\n  class=\"collapse\"\n  id=\"collapseSupport\"\n  [collapse]=\"isCollapsed\"\n  [isAnimated]=\"true\"\n>\n  <button\n    class=\"c8y-right-drawer__link\"\n    title=\"{{ 'Activate support access' | translate }}\"\n    [tabindex]=\"tabIndex$ | async\"\n    *ngIf=\"!(supportUserEnabled$ | async) && userSupportAvailable\"\n    (click)=\"activateSupportAccess()\"\n    c8yProductExperience\n    [actionName]=\"PRODUCT_EXPERIENCE.QUICK_LINKS.EVENTS.QUICK_LINK_RIGHT_DRAWER\"\n    [actionData]=\"{ action: PRODUCT_EXPERIENCE.QUICK_LINKS.ACTIONS.ACTIVATE_SUPPORT_ACCESS }\"\n  >\n    <i\n      c8yIcon=\"c8y-c8y-support\"\n      *ngIf=\"!isCollapsible\"\n    ></i>\n    <span\n      [class]=\"textClass\"\n      title=\"{{ 'Activate support access' | translate }}\"\n    >\n      {{ 'Activate support access' | translate }}\n    </span>\n  </button>\n  <button\n    class=\"c8y-right-drawer__link\"\n    title=\"{{ 'Deactivate support access' | translate }}\"\n    [tabindex]=\"tabIndex$ | async\"\n    *ngIf=\"(supportUserEnabled$ | async) && userSupportAvailable\"\n    (click)=\"deactivateSupportAccess()\"\n    c8yProductExperience\n    [actionName]=\"PRODUCT_EXPERIENCE.QUICK_LINKS.EVENTS.QUICK_LINK_RIGHT_DRAWER\"\n    [actionData]=\"{ action: PRODUCT_EXPERIENCE.QUICK_LINKS.ACTIONS.DEACTIVATE_SUPPORT_ACCESS }\"\n  >\n    <i\n      c8yIcon=\"c8y-c8y-support\"\n      *ngIf=\"!isCollapsible\"\n    ></i>\n    <span\n      [class]=\"textClass\"\n      title=\"{{ 'Deactivate support access' | translate }}\"\n    >\n      {{ 'Deactivate support access' | translate }}\n    </span>\n  </button>\n  <a\n    class=\"c8y-right-drawer__link\"\n    title=\"{{ 'Request support' | translate }}\"\n    [tabindex]=\"tabIndex$ | async\"\n    role=\"button\"\n    target=\"_blank\"\n    [ngClass]=\"{ 'separator-top': !isCollapsible }\"\n    *ngIf=\"supportUrl\"\n    rel=\"noopener noreferrer\"\n    [href]=\"supportUrl\"\n    c8yProductExperience\n    [actionName]=\"PRODUCT_EXPERIENCE.QUICK_LINKS.EVENTS.QUICK_LINK_RIGHT_DRAWER\"\n    [actionData]=\"{ action: PRODUCT_EXPERIENCE.QUICK_LINKS.ACTIONS.OPEN_SUPPORT_LINK }\"\n  >\n    <i\n      c8yIcon=\"c8y-c8y-support\"\n      *ngIf=\"!isCollapsible\"\n    ></i>\n    <span\n      [class]=\"textClass\"\n      title=\"{{ 'Request support' | translate }}\"\n    >\n      {{ 'Request support' | translate }}\n    </span>\n  </a>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../../common';\nimport { ProductExperienceModule } from '../../product-experience';\nimport { hookDrawer } from '../../drawer';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { SupportOutletComponent } from './support-outlet.component';\nimport { UserModule } from '../../user';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    CollapseModule,\n    ProductExperienceModule,\n    UserModule,\n    SupportOutletComponent\n  ],\n  exports: [SupportOutletComponent]\n})\nexport class SupportOutletModule {\n  static providers() {\n    return [\n      hookDrawer({\n        component: SupportOutletComponent,\n        position: 'right',\n        priority: 40,\n        id: 'support'\n      })\n    ];\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../../common/common.module';\nimport { HelpAndSupportOutletComponent } from './help-and-support-outlet.component';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { ProductExperienceModule } from '../../product-experience/product-experience.module';\nimport { hookDrawer } from '../../drawer/drawer.service';\nimport { SupportOutletModule } from '../support-outlet/support-outlet.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    CollapseModule,\n    ProductExperienceModule,\n    SupportOutletModule,\n    HelpAndSupportOutletComponent\n  ]\n})\nexport class HelpAndSupportOutletModule {\n  static providers() {\n    return [\n      ...SupportOutletModule.providers(),\n      hookDrawer({\n        component: HelpAndSupportOutletComponent,\n        position: 'right',\n        priority: 40,\n        id: 'helpAndSupport'\n      })\n    ];\n  }\n}\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { HeaderService } from '../../header/header.service';\nimport { PRODUCT_EXPERIENCE_CORE_SHARED } from '../../shared/core.model';\nimport { legalNoticesItem } from '../defaults.items';\nimport { DocLink } from '../docs.models';\nimport { DocsService } from '../docs.service';\nimport { NgIf, AsyncPipe } from '@angular/common';\nimport { C8yComponentOutlet } from '../../common/component-outlet.directive';\nimport { ProductExperienceDirective } from '../../product-experience/product-experience.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-legal-notices-outlet',\n  host: { class: 'd-contents' },\n  templateUrl: './legal-notices-outlet.component.html',\n  standalone: true,\n  imports: [NgIf, C8yComponentOutlet, ProductExperienceDirective, C8yTranslatePipe, AsyncPipe]\n})\nexport class LegalNoticesOutletComponent {\n  PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_CORE_SHARED;\n  legalNotices$: Observable<DocLink>;\n  drawerOpen$: Observable<boolean>;\n\n  constructor(\n    private docsService: DocsService,\n    private headerService: HeaderService\n  ) {\n    this.legalNotices$ = this.docsService.items$.pipe(\n      map(items => items.find(item => item.type === 'doc' && item.label === legalNoticesItem.label))\n    );\n    this.drawerOpen$ = this.headerService.rightDrawerOpen$;\n  }\n}\n","<div class=\"separator-top p-t-4 m-t-auto p-b-4\" *ngIf=\"legalNotices$ | async as legalNotices\">\n  <ng-container *ngIf=\"legalNotices.component\">\n    <ng-container *c8yComponentOutlet=\"legalNotices.component; environmentInjector: legalNotices.injector\"></ng-container>\n  </ng-container>\n  <a\n    *ngIf=\"!legalNotices.component\"\n    title=\"{{ legalNotices.label | translate }}\"\n    type=\"button\"\n    class=\"c8y-right-drawer__link\"\n    target=\"_blank\"\n    rel=\"noopener noreferrer\"\n    [href]=\"legalNotices.url\"\n    c8yProductExperience\n    [actionName]=\"PRODUCT_EXPERIENCE.QUICK_LINKS.EVENTS.QUICK_LINK_RIGHT_DRAWER\"\n    [actionData]=\"{\n      component: PRODUCT_EXPERIENCE.QUICK_LINKS.COMPONENTS.RIGHT_DRAWER_COMPONENT,\n      action: legalNotices.label\n    }\"\n    [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n  >\n    <span title=\"{{ legalNotices.label | translate }}\" class=\"text-truncate text-12\">\n      {{ legalNotices.label | translate }}\n    </span>\n  </a>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../../common/common.module';\nimport { LegalNoticesOutletComponent } from './legal-notices-outlet.component';\nimport { hookDrawer } from '../../drawer/drawer.service';\nimport { ProductExperienceModule } from '../../product-experience/product-experience.module';\n\n@NgModule({\n  imports: [CommonModule, ProductExperienceModule, LegalNoticesOutletComponent]\n})\nexport class LegalNoticesOutletModule {\n  static providers() {\n    return [\n      hookDrawer({\n        component: LegalNoticesOutletComponent,\n        position: 'right',\n        priority: 35,\n        id: 'legalNotices'\n      })\n    ];\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GuideHrefDirective } from './guide-href.directive';\nimport { GuideDocsComponent } from './guide-docs.component';\nimport { HelpAndSupportOutletModule } from './help-and-support-outlet/help-and-support-outlet.module';\nimport { LegalNoticesOutletModule } from './legal-notices-outlet/legal-notices-outlet.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    HelpAndSupportOutletModule,\n    LegalNoticesOutletModule,\n    GuideHrefDirective,\n    GuideDocsComponent\n  ],\n  exports: [GuideHrefDirective, GuideDocsComponent]\n})\nexport class DocsModule {\n  static providers() {\n    return [...HelpAndSupportOutletModule.providers(), ...LegalNoticesOutletModule.providers()];\n  }\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\nimport { Subject, fromEvent, merge } from 'rxjs';\nimport { filter, map, takeUntil } from 'rxjs/operators';\nimport { BsDatepickerDirective } from 'ngx-bootstrap/datepicker';\n\n@Directive({\n  selector: '[closeDatepicker]',\n  standalone: true\n})\nexport class CloseDatePickerDirective {\n  protected destroy$: Subject<void> = new Subject();\n\n  @Input()\n  closeDatepicker: BsDatepickerDirective;\n\n  constructor(private el: ElementRef) {}\n\n  ngOnInit() {\n    const element = this.el.nativeElement.closest('.dropdown-menu');\n    const clickEvent$ = element\n      ? merge(fromEvent(element, 'click'), fromEvent(document, 'click'))\n      : fromEvent(document, 'click');\n    clickEvent$\n      .pipe(\n        map((event: PointerEvent) => event.target as Element),\n        filter(target => !this.el.nativeElement.contains(target)), // i.e. anything which is not inside this `c8y-date-time-picker`\n        takeUntil(this.destroy$)\n      )\n      .subscribe(() => this.closeDatepicker.hide());\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormControl,\n  FormGroup,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator,\n  FormsModule,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BsDatepickerDirective, BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { PickedDates } from '../date-picker';\nimport { CloseDatePickerDirective } from './close-date-picker.directive';\nimport { TimepickerModule } from 'ngx-bootstrap/timepicker';\nimport { DatePickerComponent } from '../date-picker/date-picker.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { DateFormatService } from '../common/date-format.service';\n\ninterface DateAndTime {\n  date: Date;\n  time: Date;\n}\n\nexport interface DateAndTimeOptions {\n  showSpinners?: boolean;\n  showMeridian?: boolean;\n  showMinutes?: boolean;\n  showSeconds?: boolean;\n}\n\nexport type DateType = 'DateAndTime' | 'Date' | 'DateRange' | 'SingleDateRequired' | 'Time';\n\n@Component({\n  selector: 'c8y-date-time-picker',\n  templateUrl: './date-time-picker.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DateTimePickerComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DateTimePickerComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [\n    CloseDatePickerDirective,\n    BsDatepickerModule,\n    FormsModule,\n    ReactiveFormsModule,\n    TimepickerModule,\n    DatePickerComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class DateTimePickerComponent\n  implements ControlValueAccessor, Validator, OnInit, AfterViewInit, OnDestroy\n{\n  /**\n   * The minimum date that can be selected in the date-time picker.\n   * This property is used to restrict the selection of dates before this value.\n   */\n  minDate: Date;\n\n  @Input('minDate')\n  set _minDate(value: string) {\n    this.minDate = value ? new Date(value) : undefined;\n  }\n\n  /**\n   * The maximum date that can be selected in the date-time picker.\n   * This property is used to restrict the selection of dates beyond this value.\n   */\n  maxDate: Date;\n\n  @Input('maxDate')\n  set _maxDate(value: string) {\n    this.maxDate = value ? new Date(value) : undefined;\n  }\n\n  @Input()\n  placeholder: string;\n\n  /**\n   * The format in which the date input should be displayed.\n   * E.g. 'dd/MM/yyyy' or 'MM/dd/yyyy'.\n   * This format is used to parse and display the date in the input field.\n   */\n  @Input()\n  dateInputFormat: string;\n\n  /**\n   * If true, the datepicker will adapt its position based on available space.\n   * This is useful for responsive designs where the datepicker should not overflow the viewport.\n   */\n  @Input()\n  adaptivePosition = false;\n\n  /**\n   * Specifies the size of the date-time picker.\n   */\n  @Input()\n  size: string;\n\n  /**\n   * Specifies the type of date input.\n   *\n   * @param DateAndTime - Display both date and time.\n   * @param Date - Display only the date without the time.\n   * @param DateRange - Specify a range of dates.\n   * @param SingleDateRequired - Require the selection of a single date.\n   * @param Time - Display only the time without the date.\n   *\n   * @defaultValue 'DateAndTime'\n   */\n  @Input()\n  dateType: DateType = 'DateAndTime';\n\n  @Input()\n  config: DateAndTimeOptions = {\n    showMinutes: true,\n    showSeconds: false,\n    showSpinners: false\n  };\n\n  @Output()\n  onDateSelected: EventEmitter<PickedDates> = new EventEmitter();\n\n  date: Date;\n  time: Date | null;\n  form: FormGroup;\n\n  defaultPlaceholder = gettext('Select a date…');\n\n  @ViewChild(BsDatepickerDirective) datepicker: BsDatepickerDirective;\n\n  private previousValue: DateAndTime;\n  private previousTimePickerValues: { hours?: number; minutes?: number } = {};\n  private destroy$: Subject<void> = new Subject();\n\n  constructor(\n    private cd: ChangeDetectorRef,\n    private dateFormatService: DateFormatService\n  ) {\n    this.form = new FormGroup({});\n    this.form.addControl('date', new FormControl(undefined));\n    this.form.addControl('time', new FormControl(undefined));\n\n    this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value: DateAndTime) => {\n      this.setDatetime(value);\n      this.previousValue = value;\n    });\n\n    this.form.statusChanges\n      .pipe(first())\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => {\n        this.onTouched();\n      });\n  }\n\n  // this method is only used for workaround for ngx-bootstrap issue (preventing the datepicker from closing dropdown when clicking inside the datepicker container)\n  // TODO: remove this method when the issue is resolved https://github.com/valor-software/ngx-bootstrap/issues/6736\n  datepickerShown({ _element }: { _element: ElementRef }) {\n    const datepickerContainerElement = _element.nativeElement;\n    datepickerContainerElement.addEventListener('click', (e: MouseEvent) => {\n      e.stopPropagation();\n    });\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange: (value: string) => void = () => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched: () => void = () => {};\n\n  ngOnInit(): void {\n    if (!this.dateInputFormat) {\n      this.dateInputFormat = this.dateFormatService.getDateFormat();\n    }\n    if (!('showMeridian' in this.config)) {\n      this.config.showMeridian = this.dateFormatService.shouldUseMeridianFormat();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  ngAfterViewInit(): void {\n    this.cd.detectChanges();\n  }\n\n  onTimeChange(time: Date): void {\n    this.form.get('time').setValue(time, { emitEvent: true });\n  }\n\n  get dateControl(): FormControl {\n    return this.form.get('date') as FormControl;\n  }\n\n  /**\n   * Control Value Accessor - If form value changes by external factor, update date property and internal form with new value.\n   */\n  writeValue(value: string): void {\n    if (typeof value === 'string' && value.length) {\n      this.date = new Date(value);\n      this.time = this.date;\n      this.form.setValue(\n        {\n          date: new Date(value),\n          time: this.date\n        },\n        { emitEvent: false }\n      );\n    } else {\n      return;\n    }\n    this.previousValue = this.form.value;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: any) {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState(disabled: boolean) {\n    if (disabled === this.form?.disabled) {\n      return;\n    }\n    disabled ? this.form.disable() : this.form.enable();\n  }\n\n  validate(_control: AbstractControl): ValidationErrors | null {\n    if (this.date?.getTime() < new Date(this.minDate).getTime()) {\n      return { dateBeforeRangeMin: true };\n    } else if (this.date?.getTime() > new Date(this.maxDate).getTime()) {\n      return { dateAfterRangeMax: true };\n    } else if (this.form.invalid) {\n      return { invalidDateTime: true };\n    } else {\n      return null;\n    }\n  }\n\n  previousDay() {\n    const isOpen = this.datepicker.isOpen;\n    this.date.setDate(this.date.getDate() - 1);\n    this.setDatetime({ date: this.date, time: this.form.get('time').value });\n    if (isOpen) {\n      this.datepicker.show();\n    }\n  }\n\n  nextDay() {\n    const isOpen = this.datepicker.isOpen;\n    this.date.setDate(this.date.getDate() + 1);\n    this.setDatetime({ date: this.date, time: this.form.get('time').value });\n    if (isOpen) {\n      this.datepicker.show();\n    }\n  }\n\n  hide(): void {\n    this.datepicker.hide();\n  }\n\n  handleMouseWheel(event: WheelEvent): void {\n    const hours = this.form.get('time').value.getHours();\n    const minutes = this.form.get('time').value.getMinutes();\n    // down\n    event.preventDefault();\n    if (event.deltaY > 0) {\n      if (Number(hours) === 23 && this.previousTimePickerValues.hours !== 23) {\n        this.previousDay();\n      }\n    }\n\n    // up\n    if (event.deltaY < 0) {\n      if (this.previousTimePickerValues.hours === undefined) {\n        // scrolling up on empty form should not result in increasing day.\n      } else if (Number(hours) === 0 && this.previousTimePickerValues.hours !== 0) {\n        this.nextDay();\n      }\n    }\n    this.previousTimePickerValues = { hours, minutes };\n  }\n\n  /**\n   * If internal form changes its value, then combine date and time into one Date and pass its ISO string value to onChange method\n   * @param dateTime\n   * @private\n   */\n  private setDatetime(dateTime: DateAndTime) {\n    // if date input is cleared from a previous correct value, clear form value:\n    if (this.isInputCleared(dateTime)) {\n      this.form.get('date').setValue(undefined, { emitEvent: false });\n      this.time = undefined;\n      this.form.get('time').setValue(undefined, { emitEvent: false });\n      this.onChange(null);\n      return;\n    }\n\n    const validTime = this.verifyDate(dateTime.time);\n    const validExistingTime = this.verifyDate(this.time);\n    const validDate = this.verifyDate(dateTime.date);\n\n    if (!validTime && !validExistingTime) {\n      // Ensure dateTime.date exists before using getFullYear:\n      if (dateTime.date) {\n        dateTime.time = new Date(\n          dateTime.date.getFullYear(),\n          dateTime.date.getMonth(),\n          dateTime.date.getDate(),\n          0,\n          0,\n          0\n        );\n        this.time = dateTime.time;\n      }\n    }\n\n    // if both date and time is invalid, do set form value to null and stop:\n    if (!validDate && !validTime) {\n      this.onChange(null);\n      return;\n    }\n\n    // If only time is provided, set Date to today:\n    if (!validDate && validTime) {\n      dateTime.date = new Date(dateTime.time);\n    }\n\n    // Merge date and time, and emit as new form value:\n    this.date = new Date(dateTime.date);\n    this.date.setHours(\n      this.time.getHours(),\n      this.time.getMinutes(),\n      this.config.showSeconds ? this.time.getSeconds() : 0\n    );\n    this.form.get('date').setValue(dateTime.date, { emitEvent: false });\n    this.onChange(this.date.toISOString());\n  }\n\n  private verifyDate(value: Date): boolean {\n    const date = value;\n    return date instanceof Date && !isNaN(date.getTime());\n  }\n\n  private isInputCleared(value: DateAndTime): boolean {\n    return this.previousValue?.date && value.date === undefined;\n  }\n}\n","<div class=\"datetime-picker\">\n  @switch (dateType) {\n    @case ('DateAndTime') {\n      <div\n        class=\"d-contents\"\n        [closeDatepicker]=\"datepicker\"\n      >\n        <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n          <input\n            class=\"form-control\"\n            data-cy=\"bootstrap-date-input\"\n            [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n            bsDatepicker\n            [outsideClick]=\"false\"\n            [bsConfig]=\"{\n              customTodayClass: 'today',\n              dateInputFormat: dateInputFormat,\n              adaptivePosition: adaptivePosition\n            }\"\n            [formControl]=\"dateControl\"\n            (blur)=\"onTouched()\"\n            [minDate]=\"minDate\"\n            [maxDate]=\"maxDate\"\n            (onShown)=\"datepickerShown($event)\"\n          />\n        </div>\n        <timepicker\n          class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n          [(ngModel)]=\"time\"\n          (ngModelChange)=\"onTimeChange($event)\"\n          [showSeconds]=\"config.showSeconds\"\n          [showSpinners]=\"config.showSpinners\"\n          [showMeridian]=\"config.showMeridian\"\n          (wheel)=\"handleMouseWheel($event)\"\n        ></timepicker>\n      </div>\n    }\n\n    @case ('Date') {\n      <div\n        class=\"d-contents\"\n        [closeDatepicker]=\"datepicker\"\n      >\n        <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n          <input\n            class=\"form-control\"\n            [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n            bsDatepicker\n            [outsideClick]=\"false\"\n            [bsConfig]=\"{\n              customTodayClass: 'today',\n              dateInputFormat: dateInputFormat,\n              adaptivePosition: adaptivePosition\n            }\"\n            [formControl]=\"dateControl\"\n            (blur)=\"onTouched()\"\n            [minDate]=\"minDate\"\n            [maxDate]=\"maxDate\"\n            (onShown)=\"datepickerShown($event)\"\n          />\n        </div>\n      </div>\n    }\n\n    @case ('DateRange') {\n      <div class=\"d-contents\">\n        <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n          <input\n            class=\"form-control\"\n            placeholder=\"{{ 'Select a date range' | translate }}\"\n            [formControl]=\"dateControl\"\n            [bsConfig]=\"{\n              customTodayClass: 'today',\n              adaptivePosition: true,\n              rangeInputFormat: dateInputFormat\n            }\"\n            bsDaterangepicker\n          />\n        </div>\n      </div>\n    }\n\n    @case ('Time') {\n      <div class=\"d-contents\">\n        <timepicker\n          class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n          [(ngModel)]=\"time\"\n          (ngModelChange)=\"onTimeChange($event)\"\n          [showSeconds]=\"config.showSeconds\"\n          [showSpinners]=\"config.showSpinners\"\n          [showMeridian]=\"config.showMeridian\"\n          [minutesPlaceholder]=\"'MM`MINUTES`' | translate\"\n          [hoursPlaceholder]=\"'HH`HOURS`' | translate\"\n          [secondsPlaceholder]=\"'SS`SECONDS`' | translate\"\n          (wheel)=\"handleMouseWheel($event)\"\n        ></timepicker>\n      </div>\n    }\n\n    @case ('SingleDateRequired') {\n      <div class=\"d-contents\">\n        <div class=\"form-group {{ size ? 'form-group-' + size : '' }}\">\n          <c8y-date-picker (onDateSelected)=\"onDateSelected.emit($event)\"></c8y-date-picker>\n        </div>\n      </div>\n    }\n  }\n</div>\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnDestroy,\n  Output\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor, FormsModule } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-time-picker',\n  templateUrl: './time-picker.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => TimePickerComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [FormsModule, C8yTranslatePipe]\n})\nexport class TimePickerComponent implements ControlValueAccessor, OnDestroy {\n  hours: string;\n  minutes: string;\n\n  lastValidHours = '00';\n  lastValidMinutes = '00';\n\n  @Input()\n  minDate: string;\n\n  @Input()\n  maxDate: string;\n\n  @Input()\n  placeholder: string;\n\n  @Output()\n  dayForward = new EventEmitter();\n\n  @Output()\n  dayBackward = new EventEmitter();\n\n  disabled = false;\n  date: Date = new Date();\n\n  onChange: (value: { hour: number; minute: number }) => void;\n  onTouched: () => void;\n  private touched = false;\n  private destroy$: Subject<void> = new Subject();\n\n  private simulatedWheelUpEvent = { wheelDeltaY: 1, preventDefault: () => null };\n  private simulatedWheelDownEvent = { wheelDeltaY: -1, preventDefault: () => null };\n\n  constructor(private cdRef: ChangeDetectorRef) {}\n\n  parseValue(target, lastValid, limit) {\n    this.cdRef.detectChanges();\n\n    if (this[target].length > 0 && !/^\\d+$/.test(this[target])) {\n      this[target] = this[lastValid];\n      return;\n    }\n\n    if (this[target].length <= 1) {\n      this[target] = this[target].padStart(2, '0');\n    }\n\n    if (this[target].length > 2 && this[target].startsWith('0')) {\n      this[target] = this[target].slice(1, 3);\n    }\n\n    if (this[target].length > 2) {\n      this[target] = this[lastValid];\n      return;\n    }\n\n    if (Number(this[target]) > limit) {\n      this[target] = limit;\n    }\n\n    this[lastValid] = this[target];\n  }\n\n  initializeMinutes() {\n    if (!this.hasValue(this.minutes)) {\n      this.minutes = '00';\n    }\n  }\n\n  initializeHours() {\n    if (!this.hasValue(this.hours)) {\n      this.hours = '00';\n    }\n  }\n\n  handleHourScroll(ev) {\n    // up\n    ev.preventDefault();\n    if (ev.wheelDeltaY > 0) {\n      if (Number(this.hours) === 23) {\n        this.writeValue({ hour: 0, minute: Number(this.minutes) });\n        this.dayForward.emit();\n      } else {\n        this.writeValue({ hour: Number(this.hours) + 1, minute: Number(this.minutes) });\n      }\n      this.emitValue();\n    }\n\n    // down\n    if (ev.wheelDeltaY < 0) {\n      if (Number(this.hours) === 0) {\n        this.writeValue({ hour: 23, minute: Number(this.minutes) });\n        this.dayBackward.emit();\n      } else {\n        this.writeValue({ hour: Number(this.hours) - 1, minute: Number(this.minutes) });\n      }\n      this.emitValue();\n    }\n  }\n\n  handleMinuteScroll(ev) {\n    // up\n    ev.preventDefault();\n    if (ev.wheelDeltaY > 0) {\n      if (Number(this.minutes) === 59) {\n        this.writeValue({ hour: Number(this.hours), minute: 0 });\n        this.handleHourScroll(this.simulatedWheelUpEvent);\n      } else {\n        this.writeValue({ hour: Number(this.hours), minute: Number(this.minutes) + 1 });\n      }\n    }\n\n    // down\n    if (ev.wheelDeltaY < 0) {\n      if (Number(this.minutes) === 0) {\n        this.writeValue({ hour: Number(this.hours), minute: 59 });\n        this.handleHourScroll(this.simulatedWheelDownEvent);\n      } else {\n        this.writeValue({ hour: Number(this.hours), minute: Number(this.minutes) - 1 });\n      }\n    }\n\n    this.emitValue();\n  }\n\n  emitValue() {\n    if (this.hasValue(this.hours) && this.hasValue(this.minutes)) {\n      this.onChange({\n        hour: Number(this.hours),\n        minute: Number(this.minutes)\n      });\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  /**\n   * Control Value Accessor - If form value changes by external factor, update date property and internal form with new value.\n   */\n  writeValue(value: { hour: number; minute: number }): void {\n    if (this.hasValue(value?.hour) && this.hasValue(value?.minute)) {\n      this.hours = value.hour.toString();\n      this.minutes = value.minute.toString();\n\n      this.parseValue('hours', 'lastValidHours', 23);\n      this.parseValue('minutes', 'lastValidMinutes', 59);\n    } else {\n      this.hours = undefined;\n      this.minutes = undefined;\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: any) {\n    this.onTouched = onTouched;\n  }\n\n  markAsTouched() {\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  setDisabledState(disabled: boolean) {\n    this.disabled = disabled;\n  }\n\n  private hasValue(value: any) {\n    return typeof value !== 'undefined';\n  }\n}\n","<table>\n  <tbody>\n    <tr>\n      <td class=\"form-group\">\n        <input\n          type=\"text\"\n          class=\"form-control text-center bs-timepicker-field\"\n          [disabled]=\"disabled\"\n          [placeholder]=\"'HH`HOURS`' | translate\"\n          [(ngModel)]=\"hours\"\n          (input)=\"parseValue('hours', 'lastValidHours', 23); initializeMinutes()\"\n          (change)=\"emitValue()\"\n          (wheel)=\"handleHourScroll($event)\"\n          (focus)=\"markAsTouched()\"\n        />\n      </td>\n      <td>&nbsp;:&nbsp;</td>\n      <td class=\"form-group\">\n        <input\n          type=\"text\"\n          class=\"form-control text-center bs-timepicker-field\"\n          [disabled]=\"disabled\"\n          [placeholder]=\"'MM`MINUTES`' | translate\"\n          [(ngModel)]=\"minutes\"\n          (input)=\"parseValue('minutes', 'lastValidMinutes', 59); initializeHours()\"\n          (change)=\"emitValue()\"\n          (wheel)=\"handleMinuteScroll($event)\"\n          (focus)=\"markAsTouched()\"\n        />\n      </td>\n    </tr>\n  </tbody>\n</table>\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule as C8yCommonModule } from '../common/common.module';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule as C8yFormsModule } from '../forms/index';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { TimePickerComponent } from './time-picker.component';\n\n/**\n * The angular module definition for a time picker - it provides FormControl that handles time.\n */\n@NgModule({\n  imports: [\n    C8yFormsModule,\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    BsDatepickerModule.forRoot(),\n    C8yCommonModule,\n    TimePickerComponent\n  ],\n  exports: [TimePickerComponent]\n})\nexport class TimePickerModule {}\n","import { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule as C8yCommonModule } from '../common/common.module';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule as C8yFormsModule } from '../forms/index';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { DateTimePickerComponent } from './date-time-picker.component';\nimport { TimepickerModule as TimePicker } from 'ngx-bootstrap/timepicker';\nimport { TimePickerModule } from '../time-picker/time-picker.module';\nimport { CloseDatePickerDirective } from './close-date-picker.directive';\nimport { DatePickerModule } from '../date-picker';\n\n/**\n * The angular module definition for a date-time picker - it provides FormControl that handles date and time.\n * @exports DateTimePickerComponent\n */\n@NgModule({\n  imports: [\n    C8yFormsModule,\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    BsDatepickerModule.forRoot(),\n    TimePicker.forRoot(),\n    C8yCommonModule,\n    TimePickerModule,\n    DatePickerModule,\n    DateTimePickerComponent,\n    CloseDatePickerDirective\n  ],\n  exports: [DateTimePickerComponent]\n})\nexport class DateTimePickerModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\n\nexport function addonsExtension(field: FormlyFieldConfig) {\n  if (!field.props || (field.wrappers && field.wrappers.indexOf('addons') !== -1)) {\n    return;\n  }\n\n  if (field.props.addonLeft || field.props.addonRight) {\n    field.wrappers = [...(field.wrappers || []), 'addons'];\n  }\n}\n","import { NgIf } from '@angular/common';\nimport {\n  Component,\n  EnvironmentProviders,\n  importProvidersFrom,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\nimport {\n  FieldTypeConfig,\n  FieldWrapper,\n  FormlyFieldConfig,\n  FormlyFieldProps,\n  FormlyModule\n} from '@ngx-formly/core';\nimport { addonsExtension } from './addon.extension';\n\ninterface AddonsProps extends FormlyFieldProps {\n  addonRight?: {\n    onClick?: (field: FormlyFieldConfig, event?: Event) => void;\n    class?: string;\n    text?: string;\n  };\n  addonLeft?: {\n    onClick?: (field: FormlyFieldConfig, event?: Event) => void;\n    class?: string;\n    text?: string;\n  };\n}\n\nexport const wrapperAddonsConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      wrappers: [{ name: 'addons', component: C8yWrapperAddons }],\n      extensions: [{ name: 'addons', extension: { postPopulate: addonsExtension } }]\n    })\n  );\n\n@Component({\n  standalone: true,\n  selector: 'c8y-wrapper-addons',\n  templateUrl: './addons.component.html',\n  imports: [NgIf]\n})\nexport class C8yWrapperAddons extends FieldWrapper<FieldTypeConfig<AddonsProps>> {\n  @ViewChild('fieldTypeTemplate', { static: true }) set content(templateRef: TemplateRef<unknown>) {\n    if (templateRef && this.hostContainerRef) {\n      this.hostContainerRef.createEmbeddedView(templateRef);\n    }\n  }\n\n  constructor(private hostContainerRef?: ViewContainerRef) {\n    super();\n  }\n\n  addonRightClick($event: Event) {\n    this.props.addonRight.onClick?.(this.field, $event);\n  }\n\n  addonLeftClick($event: Event) {\n    this.props.addonLeft.onClick?.(this.field, $event);\n  }\n}\n","<ng-template #fieldTypeTemplate>\n  <div\n    class=\"input-group\"\n    [class.has-validation]=\"showError\"\n  >\n    <div\n      class=\"input-group-addon\"\n      [class.input-group-btn]=\"props.addonLeft.onClick\"\n      *ngIf=\"props.addonLeft\"\n      (click)=\"addonLeftClick($event)\"\n    >\n      <i\n        [ngClass]=\"props.addonLeft.class\"\n        *ngIf=\"props.addonLeft.class\"\n      ></i>\n      <span *ngIf=\"props.addonLeft.text\">{{ props.addonLeft.text }}</span>\n    </div>\n    <div class=\"flex-grow\">\n      <ng-container #fieldComponent></ng-container>\n    </div>\n    <div\n      class=\"input-group-addon\"\n      [class.input-group-btn]=\"props.addonRight.onClick\"\n      *ngIf=\"props.addonRight\"\n      (click)=\"addonRightClick($event)\"\n    >\n      <i\n        [ngClass]=\"props.addonRight.class\"\n        *ngIf=\"props.addonRight.class\"\n      ></i>\n      <span *ngIf=\"props.addonRight.text\">{{ props.addonRight.text }}</span>\n    </div>\n  </div>\n</ng-template>\n","import { Pipe, PipeTransform, TemplateRef } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\n\n/**\n * Injects custom template to field config, so it can be rendered inside form-field-wrapper along an input.\n */\n@Pipe({\n  name: 'c8yArrayTypeInjectTemplate',\n  standalone: true\n})\nexport class C8yArrayTypeInjectTemplatePipe implements PipeTransform {\n  transform(field: FormlyFieldConfig, customTemplateRef: TemplateRef<any>): FormlyFieldConfig {\n    field.templateOptions.customTemplateRef = customTemplateRef;\n    return field;\n  }\n}\n","import { Component, EnvironmentProviders, OnInit, importProvidersFrom } from '@angular/core';\nimport {\n  FieldArrayType,\n  FormlyFieldConfig,\n  FormlyFieldProps,\n  FormlyModule\n} from '@ngx-formly/core';\nimport { NgIf, NgFor, NgTemplateOutlet } from '@angular/common';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconDirective } from '../../common/icon.directive';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { HumanizePipe } from '../../common/humanize.pipe';\nimport { C8yArrayTypeInjectTemplatePipe } from './array-type-inject-template.pipe';\n\nexport const arrayTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({ types: [{ name: 'array', component: ArrayTypeComponent }] })\n  );\n\n@Component({\n  selector: 'c8y-array-type',\n  templateUrl: './array.type.component.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    PopoverModule,\n    FormlyModule,\n    NgFor,\n    NgTemplateOutlet,\n    TooltipModule,\n    IconDirective,\n    C8yTranslateDirective,\n    C8yTranslatePipe,\n    HumanizePipe,\n    C8yArrayTypeInjectTemplatePipe\n  ]\n})\nexport class ArrayTypeComponent extends FieldArrayType implements OnInit {\n  fieldArrayProps: FormlyFieldProps;\n\n  add() {\n    this.formControl.markAsTouched();\n    super.add();\n  }\n\n  remove(i: number) {\n    this.formControl.markAsTouched();\n    super.remove(i);\n  }\n\n  ngOnInit(): void {\n    this.fieldArrayProps =\n      typeof this.field?.fieldArray === 'function'\n        ? (this.field.fieldArray as (field: FormlyFieldConfig) => FormlyFieldConfig)(this.field)\n            ?.props\n        : this.field?.fieldArray?.props;\n    if (this.props.required && !this.field.fieldGroup.length) {\n      this.add();\n    }\n  }\n}\n","<div role=\"group\" [attr.aria-labelledby]=\"id + '-fieldset'\">\n  <div id=\"{{ id + '-fieldset' }}\" class=\"legend form-block\" *ngIf=\"to.label || to.description\">\n    {{ to.label | humanize }}\n    <button\n      class=\"btn-help btn-help--sm m-t-auto m-b-auto\"\n      type=\"button\"\n      [attr.aria-label]=\"'Help' | translate\"\n      [popover]=\"to.description\"\n      placement=\"right\"\n      triggers=\"focus\"\n      *ngIf=\"to.description\"\n    ></button>\n  </div>\n\n  <div\n    class=\"form-control-feedback-message has-error\"\n    role=\"alert\"\n    *ngIf=\"showError && formControl.errors\"\n  >\n    <formly-validation-message [field]=\"field\"></formly-validation-message>\n  </div>\n\n  <div *ngFor=\"let ifield of field.fieldGroup; let i = index\" class=\"input-group-array\">\n    <formly-field [field]=\"ifield | c8yArrayTypeInjectTemplate: customTemplate\"></formly-field>\n    <ng-container\n      *ngIf=\"ifield.type === 'formly-group' || ifield.type === 'object' || ifield.type === 'array'\"\n      [ngTemplateOutlet]=\"customTemplate\"\n    ></ng-container>\n    <ng-template #customTemplate>\n      <div class=\"input-group-btn delete-row\">\n        <button\n          class=\"btn btn-dot btn-dot--danger flex-item-right\"\n          type=\"button\"\n          [attr.aria-label]=\"'Delete' | translate\"\n          tooltip=\"{{ 'Delete' | translate }}\"\n          [delay]=\"500\"\n          placement=\"right\"\n          [disabled]=\"to.disabled || (field.fieldGroup.length === 1 && to.required)\"\n          [attr.data-cy]=\"'array-type-component--remove-array-item-' + i\"\n          (click)=\"remove(i)\"\n        >\n          <i c8yIcon=\"minus-circle\"></i>\n        </button>\n      </div>\n    </ng-template>\n  </div>\n\n  <div class=\"p-t-8\">\n    <button\n      class=\"btn btn-sm btn-default\"\n      type=\"button\"\n      title=\"{{\n        (field.templateOptions?.addText | translate) || 'Add \\{\\{ label \\}\\}'\n          | translate: fieldArrayProps\n      }}\"\n      [disabled]=\"to.disabled\"\n      (click)=\"add()\"\n      [attr.data-cy]=\"field.templateOptions?.addTextDataCy || 'add-array-item'\"\n    >\n      <i c8yIcon=\"plus-circle\" class=\"m-r-4\"></i>\n      <span\n        *ngIf=\"!field.templateOptions?.addText\"\n        ngNonBindable\n        translate\n        [translateParams]=\"fieldArrayProps\"\n      >\n        Add {{ label }}\n      </span>\n      <span *ngIf=\"field.templateOptions?.addText\">\n        {{ field.templateOptions?.addText | translate }}\n      </span>\n    </button>\n  </div>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  importProvidersFrom\n} from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgIf } from '@angular/common';\nimport { IconDirective } from '../../common/icon.directive';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { HumanizePipe } from '../../common/humanize.pipe';\n\nexport const fieldCheckboxTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'checkbox',\n          component: FieldCheckbox\n        },\n        {\n          name: 'boolean',\n          extends: 'checkbox'\n        },\n        {\n          name: 'switch',\n          extends: 'checkbox',\n          defaultOptions: {\n            templateOptions: {\n              switchMode: false,\n              indeterminate: false\n            }\n          }\n        }\n      ]\n    })\n  );\n\n@Component({\n  selector: 'c8y-field-checkbox',\n  templateUrl: './checkbox.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    FormlyModule,\n    NgIf,\n    IconDirective,\n    C8yTranslateDirective,\n    PopoverModule,\n    C8yTranslatePipe,\n    HumanizePipe\n  ]\n})\nexport class FieldCheckbox extends FieldType {\n  defaultOptions = {\n    templateOptions: {\n      indeterminate: true,\n      formCheck: 'custom' // 'custom' | 'custom-inline' | 'custom-switch' | 'stacked' | 'inline' | 'nolabel'\n    }\n  };\n}\n","<div class=\"d-flex\">\n  <label\n    [class.c8y-checkbox]=\"!to.switchMode\"\n    [class.c8y-switch]=\"to.switchMode\"\n    [class.has-error]=\"showError\"\n  >\n    <input\n      [class.is-invalid]=\"showError\"\n      [class.form-check-input]=\"to.formCheck.indexOf('custom') === -1\"\n      [class.position-static]=\"to.formCheck === 'nolabel'\"\n      [class.custom-control-input]=\"to.formCheck.indexOf('custom') === 0\"\n      type=\"checkbox\"\n      [indeterminate]=\"to.indeterminate && formControl.value == null\"\n      [formControl]=\"formControl\"\n      [formlyAttributes]=\"field\"\n      [attr.data-cy]=\"'c8y-field-checkbox--' + (field.templateOptions?.optionDataCy || to.label)\"\n    />\n    <span></span>\n    <i\n      *ngIf=\"to.icon\"\n      c8yIcon=\"{{to.icon}}\"\n      class=\"icon-flex icon-20 m-r-4\"\n    ></i>\n    <span\n      class=\"text-truncate\"\n      title=\"{{ to.label | humanize }}\"\n    >\n      {{ to.label | humanize }}\n    </span>\n    <span *ngIf=\"to.required && to.hideRequiredMarker !== true\">\n      <em\n        class=\"m-l-4\"\n        translate\n      >\n        (required)\n      </em>\n    </span>\n  </label>\n  <button\n    class=\"btn-help btn-help--sm m-t-auto m-b-auto\"\n    [attr.aria-label]=\"'Help' | translate\"\n    [popover]=\"to.description\"\n    placement=\"right\"\n    triggers=\"focus\"\n    type=\"button\"\n    *ngIf=\"!!to.description\"\n  ></button>\n</div>","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  importProvidersFrom\n} from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { DateTimePickerComponent } from '../../date-time-picker/date-time-picker.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\nexport const fieldDateTimeTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'date-time',\n          component: FieldDateTime,\n          wrappers: ['c8y-form-field']\n        }\n      ]\n    })\n  );\n\n@Component({\n  selector: 'c8y-field-date-time',\n  templateUrl: './date-time.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [DateTimePickerComponent, FormsModule, ReactiveFormsModule, C8yTranslatePipe]\n})\nexport class FieldDateTime extends FieldType {}\n","<c8y-date-time-picker\n  [minDate]=\"to.minDate\"\n  [maxDate]=\"to.maxDate\"\n  [placeholder]=\"(to.placeholder | translate)\"\n  [formControl]=\"formControl\"\n></c8y-date-time-picker>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  importProvidersFrom,\n  inject\n} from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { NgIf } from '@angular/common';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RequiredInputPlaceholderDirective } from '../../forms/required-input-placeholder.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { HumanizePipe } from '../../common/humanize.pipe';\nimport { DateFormatService } from '../../common/date-format.service';\n\nexport const fieldDateTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'date',\n          component: FieldDate\n        }\n      ]\n    })\n  );\n\n@Component({\n  selector: 'c8y-field-date',\n  templateUrl: './date.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    PopoverModule,\n    BsDatepickerModule,\n    FormsModule,\n    RequiredInputPlaceholderDirective,\n    ReactiveFormsModule,\n    FormlyModule,\n    C8yTranslatePipe,\n    HumanizePipe\n  ]\n})\nexport class FieldDate extends FieldType {\n  dateInputFormat: string;\n  private dateFormatService = inject(DateFormatService);\n\n  ngOnInit(): void {\n    this.dateInputFormat = this.dateFormatService.getDateFormat();\n  }\n}\n","<div class=\"form-group\" [attr.aria-labelledby]=\"id + '-fieldset'\">\n  <label id=\"{{ id + '-fieldset' }}\" *ngIf=\"to.label || to.description\">\n    {{ to.label | humanize }}\n    <button\n      class=\"btn-help btn-help--sm\"\n      type=\"button\"\n      [attr.aria-label]=\"'Help' | translate\"\n      [popover]=\"to.description\"\n      placement=\"right\"\n      triggers=\"focus\"\n      *ngIf=\"to.description\"\n    ></button>\n  </label>\n  <div class=\"form-group datepicker\">\n    <input\n      [formControl]=\"formControl\"\n      [formlyAttributes]=\"field\"\n      class=\"form-control\"\n      placeholder=\"Date\"\n      [bsConfig]=\"{ customTodayClass: 'today', dateInputFormat: dateInputFormat }\"\n      [placeholder]=\"'Select a date…' | translate\"\n      placement=\"top\"\n      bsDatepicker\n      [required]=\"to.required\"\n    />\n  </div>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  OnInit,\n  ViewChild,\n  importProvidersFrom\n} from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { get } from 'lodash';\nimport { DropAreaComponent, DroppedFile } from '../../drop-area';\nimport { NgIf } from '@angular/common';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { HumanizePipe } from '../../common/humanize.pipe';\n\nexport const fieldFileTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'file',\n          component: FieldFile\n        }\n      ]\n    })\n  );\n\n@Component({\n  selector: 'c8y-field-file',\n  templateUrl: './file.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    PopoverModule,\n    DropAreaComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    C8yTranslatePipe,\n    HumanizePipe\n  ]\n})\nexport class FieldFile extends FieldType implements OnInit {\n  readonly dropAreaInputs: string[] = [\n    'title',\n    'message',\n    'icon',\n    'loadingMessage',\n    'alwaysShow',\n    'clickToOpen',\n    'loading',\n    'progress',\n    'maxAllowedFiles',\n    'files',\n    'accept',\n    'maxFileSizeInMegaBytes',\n    'forceHideList'\n  ];\n\n  @ViewChild('dropArea', { static: true }) dropArea: DropAreaComponent;\n\n  ngOnInit(): void {\n    const keys = Array.isArray(this.key) ? this.key : [this.key];\n    const path = keys.join('.');\n    this.dropArea.files = get(this.model, path);\n\n    this.dropAreaInputs\n      .filter(input => this.to[input] !== undefined)\n      .forEach(input => (this.dropArea[input] = this.to[input]));\n  }\n\n  droppedEvent(files: DroppedFile[]) {\n    if (this.props.dropped instanceof Function) {\n      this.props.dropped(files);\n    }\n  }\n}\n","<div\n  class=\"form-group\"\n  [attr.aria-labelledby]=\"id + '-fieldset'\"\n  role=\"group\"\n>\n  <label\n    id=\"{{ id + '-fieldset' }}\"\n    *ngIf=\"to.label || to.description\"\n  >\n    {{ to.label | humanize }}\n    <button\n      class=\"btn-help btn-help--sm\"\n      [attr.aria-label]=\"'Help' | translate\"\n      [popover]=\"to.description\"\n      placement=\"right\"\n      triggers=\"focus\"\n      type=\"button\"\n      *ngIf=\"to.description\"\n    ></button>\n  </label>\n  <c8y-drop-area\n    class=\"drop-area-sm\"\n    #dropArea\n    [formControl]=\"formControl\"\n    (dropped)=\"droppedEvent($event)\"\n  ></c8y-drop-area>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  OnInit,\n  importProvidersFrom\n} from '@angular/core';\nimport { FieldWrapper, FormlyModule } from '@ngx-formly/core';\nimport { NgIf, NgTemplateOutlet } from '@angular/common';\nimport { IconDirective } from '../../common/icon.directive';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { HumanizePipe } from '../../common/humanize.pipe';\n\nexport const wrapperFormFieldConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      wrappers: [{ name: 'c8y-form-field', component: WrapperFormField }]\n    })\n  );\n@Component({\n  selector: 'c8y-wrapper-form-field',\n  templateUrl: './form-field.wrapper.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgIf,\n    IconDirective,\n    PopoverModule,\n    NgTemplateOutlet,\n    FormlyModule,\n    C8yTranslatePipe,\n    HumanizePipe\n  ]\n})\nexport class WrapperFormField extends FieldWrapper implements OnInit {\n  maxHelpBlockLength = 64;\n  showDescriptionAsPopup: boolean;\n  smallFormGroup = false;\n\n  ngOnInit() {\n    this.showDescriptionAsPopup =\n      this.field.type === 'radio' ||\n      this.field.type === 'typeahead' ||\n      (this.to.description && this.to.description.length > this.maxHelpBlockLength);\n\n    this.smallFormGroup = this.props?.smallFormGroup || false;\n  }\n}\n","<div\n  class=\"form-group\"\n  [class.has-error]=\"showError\"\n  [class.form-group-sm]=\"smallFormGroup\"\n>\n  <label\n    class=\"text-pre-wrap\"\n    *ngIf=\"to.label && to.hideLabel !== true\"\n    [attr.for]=\"id\"\n  >\n    {{ to.humanizeLabel === false ? to.label : (to.label | humanize) }}\n    <i\n      class=\"text-info\"\n      c8yIcon=\"info-circle\"\n      title=\"{{ to.tooltip | translate }}\"\n      *ngIf=\"to.tooltip\"\n    ></i>\n    <ng-template #description><div [innerHTML]=\"to.description | translate\"></div></ng-template>\n    <button\n      class=\"btn-help btn-help--sm m-t-auto m-b-auto\"\n      [attr.aria-label]=\"'Help' | translate\"\n      [popover]=\"description\"\n      placement=\"right\"\n      type=\"button\"\n      [outsideClick]=\"true\"\n      *ngIf=\"to.description && showDescriptionAsPopup\"\n    ></button>\n  </label>\n  <div class=\"d-flex\">\n    <div class=\"flex-grow\">\n      <ng-template #fieldComponent></ng-template>\n    </div>\n    <ng-container *ngIf=\"to.customTemplateRef\">\n      <ng-container *ngTemplateOutlet=\"to.customTemplateRef\"></ng-container>\n    </ng-container>\n  </div>\n\n  <div\n    class=\"c8y-messages\"\n    *ngIf=\"showError\"\n  >\n    <formly-validation-message\n      class=\"form-control-feedback-message\"\n      [field]=\"field\"\n    ></formly-validation-message>\n  </div>\n\n  <div\n    class=\"help-block has-info text-muted\"\n    *ngIf=\"!showError && to.description && !showDescriptionAsPopup\"\n    [innerHTML]=\"to.description | translate\"\n  ></div>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  importProvidersFrom\n} from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RequiredInputPlaceholderDirective } from '../../forms/required-input-placeholder.directive';\nimport { PasswordInputComponent } from '../../authentication/password-input.component';\n\nexport const fieldInputTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'input',\n          component: FieldInput,\n          wrappers: ['c8y-form-field']\n        },\n        { name: 'string', extends: 'input' },\n        { name: 'typeahead', extends: 'input' },\n        {\n          name: 'number',\n          extends: 'input',\n          defaultOptions: {\n            templateOptions: {\n              type: 'number'\n            }\n          }\n        },\n        {\n          name: 'integer',\n          extends: 'input',\n          defaultOptions: {\n            templateOptions: {\n              type: 'number'\n            }\n          }\n        },\n        {\n          name: 'password',\n          extends: 'input',\n          defaultOptions: {\n            templateOptions: {\n              type: 'password'\n            }\n          }\n        }\n      ]\n    })\n  );\n\n@Component({\n  selector: 'c8y-field-input',\n  templateUrl: './input.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    FormsModule,\n    RequiredInputPlaceholderDirective,\n    ReactiveFormsModule,\n    FormlyModule,\n    PasswordInputComponent\n  ]\n})\nexport class FieldInput extends FieldType {\n  get type() {\n    return this.to.type || 'text';\n  }\n}\n","@switch (type) {\n  @case ('number') {\n    <input\n      class=\"form-control\"\n      [class.is-invalid]=\"showError\"\n      type=\"number\"\n      [formControl]=\"formControl\"\n      [formlyAttributes]=\"field\"\n      [required]=\"to.required\"\n      [attr.autocomplete]=\"to.autocomplete ? to.autocomplete : null\"\n    />\n  }\n  @case ('password') {\n    <c8y-password-input\n      [class.is-invalid]=\"showError\"\n      [formlyAttributes]=\"field\"\n      [formControl]=\"formControl\"\n      [required]=\"to.required\"\n      [large]=\"false\"\n    ></c8y-password-input>\n  }\n  @default {\n    <input\n      class=\"form-control\"\n      [class.is-invalid]=\"showError\"\n      [type]=\"type\"\n      [formControl]=\"formControl\"\n      [formlyAttributes]=\"field\"\n      [required]=\"to.required\"\n      [attr.autocomplete]=\"to.autocomplete ? to.autocomplete : null\"\n    />\n  }\n}\n","import { Component, EnvironmentProviders, importProvidersFrom } from '@angular/core';\nimport { FieldWrapper, FormlyModule } from '@ngx-formly/core';\nimport { UpperCasePipe } from '@angular/common';\n\nexport const wrapperLegendFieldConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      wrappers: [{ name: 'c8y-legend-wrapper', component: LegendFieldWrapper }]\n    })\n  );\n\n@Component({\n  selector: 'c8y-legend-wrapper',\n  templateUrl: './legend.wrapper.component.html',\n  standalone: true,\n  imports: [UpperCasePipe]\n})\nexport class LegendFieldWrapper extends FieldWrapper {}\n","<div\n  [attr.aria-labelledby]=\"id + '-fieldset'\"\n  role=\"group\"\n>\n  <p\n    class=\"legend form-block m-t-auto\"\n    id=\"{{ id + '-fieldset' }}\"\n  >\n    {{ props?.label || 'Missing Label' | uppercase }}\n  </p>\n  <ng-container #fieldComponent></ng-container>\n</div>","import { Component, EnvironmentProviders, importProvidersFrom } from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { NgIf, NgFor } from '@angular/common';\nimport { HumanizePipe } from '../../common/humanize.pipe';\n\nexport const objectTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [{ name: 'object', component: ObjectTypeComponent }]\n    })\n  );\n@Component({\n  selector: 'c8y-object-type',\n  templateUrl: './object.type.component.html',\n  standalone: true,\n  imports: [NgIf, FormlyModule, NgFor, HumanizePipe]\n})\nexport class ObjectTypeComponent extends FieldType {}\n","<div role=\"group\" [attr.aria-labelledby]=\"id + '-fieldset'\">\n  <p *ngIf=\"to.label\" class=\"text-medium\" id=\"{{ id + '-fieldset' }}\">\n    {{ to.label | humanize }}\n  </p>\n  <p *ngIf=\"to.description\" class=\"m-b-8 small\">\n    {{ to.description }}\n  </p>\n  <div\n    class=\"form-control-feedback-message has-error\"\n    role=\"alert\"\n    *ngIf=\"showError && formControl.errors\"\n  >\n    <formly-validation-message [field]=\"field\"></formly-validation-message>\n  </div>\n  <formly-field *ngFor=\"let f of field.fieldGroup\" [field]=\"f\"></formly-field>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  importProvidersFrom\n} from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { NgFor, AsyncPipe } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { HumanizePipe } from '../../common/humanize.pipe';\nimport { FormlySelectModule } from '@ngx-formly/core/select';\n\nexport const fieldRadioTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'radio',\n          component: FieldRadio,\n          wrappers: ['c8y-form-field']\n        }\n      ]\n    })\n  );\n\n@Component({\n  selector: 'c8y-field-radio',\n  templateUrl: './radio.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    NgFor,\n    FormsModule,\n    ReactiveFormsModule,\n    FormlyModule,\n    AsyncPipe,\n    HumanizePipe,\n    FormlySelectModule\n  ]\n})\nexport class FieldRadio extends FieldType {\n  defaultOptions = {\n    templateOptions: {\n      options: [],\n      formCheck: 'custom' // 'custom' | 'custom-inline' | 'stacked' | 'inline'\n    }\n  };\n}\n","<label\n  *ngFor=\"let option of to.options | formlySelectOptions: field | async; let i = index\"\n  [title]=\"option.label\"\n  class=\"c8y-radio\"\n>\n  <input\n    type=\"radio\"\n    [id]=\"id + '_' + i\"\n    [name]=\"field.name || id\"\n    [attr.value]=\"option.value\"\n    [value]=\"option.value\"\n    [formControl]=\"formControl\"\n    [formlyAttributes]=\"field\"\n    [attr.disabled]=\"option.disabled || formControl.disabled ? true : null\"\n  />\n  <span></span>\n  <span>{{ field.props.humanizeLabel === false ? option.label : (option.label | humanize) }}</span>\n</label>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  OnInit,\n  importProvidersFrom\n} from '@angular/core';\nimport { FieldType, FormlyFieldProps, FormlyModule } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get } from 'lodash-es';\nimport { defer, isObservable, of } from 'rxjs';\nimport { map, startWith, switchMap } from 'rxjs/operators';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgFor, AsyncPipe } from '@angular/common';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\nexport const selectTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [\n        { name: 'select', component: SelectTypeComponent, wrappers: ['c8y-form-field'] },\n        { name: 'enum', extends: 'select' }\n      ]\n    })\n  );\n@Component({\n  selector: 'c8y-select-type',\n  templateUrl: './select.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [FormsModule, ReactiveFormsModule, FormlyModule, NgFor, AsyncPipe, C8yTranslatePipe]\n})\nexport class SelectTypeComponent extends FieldType implements OnInit {\n  labelProp = 'label';\n  valueProp = 'value';\n\n  properties: FormlyFieldProps & { [additionalProperties: string]: unknown };\n\n  placeholder$ = defer(() => of(this.properties?.placeholder)).pipe(\n    switchMap(placeholder =>\n      placeholder\n        ? of(placeholder)\n        : this.defaultPlaceholder$.pipe(\n            startWith(this.translateService.instant(gettext('Select your option')))\n          )\n    )\n  );\n\n  defaultPlaceholder$ = defer(() =>\n    isObservable(this.properties?.options) ? this.properties?.options : of(this.properties?.options)\n  ).pipe(\n    map(data => get(data[0], this.labelProp)),\n    map(example =>\n      this.translateService.instant(\n        !example ? gettext('No items') : gettext('Select your option, for example, {{ example }}'),\n        { example }\n      )\n    )\n  );\n\n  options$ = defer(() =>\n    isObservable(this.properties?.options) ? this.properties?.options : of(this.properties?.options)\n  );\n\n  constructor(private translateService: TranslateService) {\n    super();\n  }\n\n  ngOnInit() {\n    this.properties = this.props || this.to;\n    if ((this.properties?.labelProp as string)?.length > 0) {\n      this.labelProp = this.properties.labelProp as string;\n    }\n\n    if ((this.properties?.valueProp as string)?.length > 0) {\n      this.valueProp = this.properties.valueProp as string;\n    }\n  }\n}\n","<div class=\"c8y-select-wrapper\">\n  <select\n    class=\"form-control\"\n    [class.is-invalid]=\"showError\"\n    [formControl]=\"formControl\"\n    [formlyAttributes]=\"field\"\n    [required]=\"properties.required\"\n  >\n    <option\n      [disabled]=\"\n        properties.required ||\n        (properties.acceptUndefined != null ? !properties.acceptUndefined : true)\n      \"\n      [ngValue]=\"undefined\"\n      selected\n    >\n      {{ placeholder$ | async | translate }}\n    </option>\n    <ng-container *ngFor=\"let opt of options$ | async\">\n      <option\n        [ngValue]=\"opt[valueProp]\"\n        [disabled]=\"opt.disabled || false\"\n      >\n        {{ opt[labelProp] | translate }}\n      </option>\n    </ng-container>\n  </select>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  importProvidersFrom,\n  OnInit\n} from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nexport const fieldTextareaTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [\n        {\n          name: 'textarea',\n          component: FieldTextArea,\n          wrappers: ['c8y-form-field']\n        }\n      ]\n    })\n  );\n\n@Component({\n  selector: 'c8y-field-textarea',\n  template: `\n    <textarea\n      [readonly]=\"props.readonly\"\n      [required]=\"props.required\"\n      [formControl]=\"formControl\"\n      [cols]=\"props.cols\"\n      [rows]=\"props.rows\"\n      [formlyAttributes]=\"field\"\n      [placeholder]=\"props.placeholder\"\n    ></textarea>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [FormsModule, ReactiveFormsModule, FormlyModule]\n})\nexport class FieldTextArea extends FieldType implements OnInit {\n  override defaultOptions = {\n    props: {\n      rows: 5,\n      cols: 68\n    }\n  };\n\n  ngOnInit(): void {\n    const { required, placeholder } = this.props;\n\n    if (required) {\n      this.props.placeholder =\n        placeholder.length > 0\n          ? placeholder.concat(' ').concat(gettext('(required)'))\n          : gettext('(required)');\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EnvironmentProviders,\n  OnInit,\n  importProvidersFrom\n} from '@angular/core';\nimport { IIdentified } from '@c8y/client';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { get, pick } from 'lodash-es';\nimport { defer, isObservable, of, pipe } from 'rxjs';\nimport { map, startWith, switchMap, tap } from 'rxjs/operators';\nimport { ForOfFilterPipe } from '../../common';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TypeaheadComponent } from '../../select/typeahead.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { ForOfDirective } from '../../common/forOf.directive';\nimport { ListItemComponent } from '../../list-group/list-item.component';\nimport { HighlightComponent } from '../../search/highlight.component';\nimport { NgIf, AsyncPipe } from '@angular/common';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { LoadingComponent } from '../../common/loading.component';\n\nexport const typeaheadTypeConfig = (): EnvironmentProviders =>\n  importProvidersFrom(\n    FormlyModule.forChild({\n      types: [{ name: 'typeahead', component: TypeaheadTypeComponent }]\n    })\n  );\n\n@Component({\n  selector: 'c8y-typeahead-type',\n  templateUrl: './typeahead.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [\n    TypeaheadComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    FormlyModule,\n    ForOfDirective,\n    ListItemComponent,\n    HighlightComponent,\n    NgIf,\n    C8yTranslateDirective,\n    LoadingComponent,\n    AsyncPipe\n  ]\n})\nexport class TypeaheadTypeComponent extends FieldType implements OnInit {\n  filterPipe: ForOfFilterPipe;\n  pattern: string;\n  selected: IIdentified;\n  labelProp: string;\n  match = false;\n\n  placeholder$ = defer(() => of(this.to?.placeholder)).pipe(\n    switchMap(placeholder =>\n      placeholder\n        ? of(placeholder)\n        : this.defaultPlaceholder$.pipe(\n            startWith(this.translateService.instant(gettext('Start typing to search')))\n          )\n    )\n  );\n\n  defaultPlaceholder$ = defer(() =>\n    isObservable(this.to?.c8yForOptions) ? this.to?.c8yForOptions : of(this.to?.c8yForOptions)\n  ).pipe(\n    map(({ data }) => get(data[0], this.labelProp || 'name')),\n    map(example => {\n      return !!example\n        ? this.translateService.instant(\n            gettext('Start typing to search, for example, {{ example }}'),\n            { example }\n          )\n        : this.translateService.instant(gettext('No items'));\n    })\n  );\n\n  private valueProps: string[];\n  private excludeLabelProp = false;\n\n  constructor(\n    private cdRef: ChangeDetectorRef,\n    private translateService: TranslateService\n  ) {\n    super();\n  }\n\n  ngOnInit() {\n    if (this.to) {\n      if (this.to.excludeDisplayProperty) {\n        this.excludeLabelProp = this.to.excludeDisplayProperty;\n      }\n\n      if (this.to.displayProperty) {\n        this.setPipe('');\n        this.labelProp = this.to.displayProperty;\n        this.valueProps = this.to.valueProperties;\n      } else {\n        console.error(\n          'To correctly use the typeahead select you need to specify displayProperty: string within templateOptions!'\n        );\n      }\n    }\n  }\n\n  selectOption(opt) {\n    if (this.valueProps && this.valueProps.length > 0) {\n      const pickList: string[] = this.excludeLabelProp\n        ? this.valueProps\n        : [...this.valueProps, this.labelProp];\n      this.formControl.setValue(pick(opt, pickList));\n    } else {\n      this.formControl.setValue(opt);\n    }\n  }\n\n  setPipe(filterStr: string) {\n    this.pattern = filterStr;\n    this.filterPipe = pipe(\n      map(data => {\n        return data.filter(\n          el =>\n            el[this.labelProp] &&\n            el[this.labelProp].toLowerCase().indexOf(filterStr.toLowerCase()) > -1\n        );\n      }),\n      tap(data => {\n        this.match = data.length > 0;\n        this.cdRef.detectChanges();\n      })\n    );\n  }\n}\n","<c8y-typeahead\n  [required]=\"to?.required || false\"\n  [placeholder]=\"placeholder$ | async\"\n  [displayProperty]=\"to?.displayProperty\"\n  [selected]=\"selected\"\n  [allowFreeEntries]=\"to?.allowFreeEntries || false\"\n  [container]=\"to?.container || ''\"\n  [disabled]=\"to?.disabled\"\n  (onSearch)=\"setPipe($event)\"\n  [formControl]=\"formControl\"\n  [class.is-invalid]=\"showError\"\n  [formlyAttributes]=\"field\">\n    <c8y-li *c8yFor=\"let opt of to?.c8yForOptions; loadMore: to?.loadMore || 'auto'; pipe: filterPipe; notFound: notFoundTemplate; loadingTemplate: loading;\"\n          (click)=\"selectOption(opt); setPipe('')\"\n          class=\"p-l-8 p-r-8 c8y-list__item--link\"\n          [attr.role]=\"'menuitem'\">\n    <c8y-highlight [text]=\"opt[labelProp]\" [pattern]=\"pattern\"></c8y-highlight>\n  </c8y-li>\n  <ng-template #notFoundTemplate>\n    <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0 && !match\">\n      <p><strong translate>No match found.</strong></p>\n    </c8y-li>\n  </ng-template>\n  <ng-template #loading>\n    <c8y-li class=\"text-center p-t-8 p-relative\">\n      <c8y-loading></c8y-loading>\n    </c8y-li>\n  </ng-template>\n</c8y-typeahead>\n","import { TextFieldModule } from '@angular/cdk/text-field';\nimport { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\nimport { FormlySelectModule } from '@ngx-formly/core/select';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { CommonModule as C8YCommonModule } from '../common/common.module';\nimport { DateTimePickerModule } from '../date-time-picker/date-time-picker.module';\nimport { DropAreaModule } from '../drop-area/drop-area.module';\nimport { FormsModule } from '../forms/index';\nimport { C8yTranslateModule } from '../i18n/c8y-translate.module';\nimport { ListGroupModule } from '../list-group/list-group.module';\nimport { CoreSearchModule } from '../search/search.module';\nimport { SelectModule } from '../select/select.module';\nimport { C8yWrapperAddons, wrapperAddonsConfig } from './addons/addons.component';\nimport { C8yArrayTypeInjectTemplatePipe } from './array/array-type-inject-template.pipe';\nimport { ArrayTypeComponent, arrayTypeConfig } from './array/array.type.component';\nimport { FieldCheckbox, fieldCheckboxTypeConfig } from './checkbox/checkbox.type.component';\nimport { FieldDateTime, fieldDateTimeTypeConfig } from './date-time/date-time.type.component';\nimport { FieldDate, fieldDateTypeConfig } from './date/date.type.component';\nimport { FieldFile, fieldFileTypeConfig } from './file/file.type.component';\nimport {\n  WrapperFormField,\n  wrapperFormFieldConfig\n} from './form-field/form-field.wrapper.component';\nimport { FieldInput, fieldInputTypeConfig } from './input/input.type.component';\nimport {\n  LegendFieldWrapper,\n  wrapperLegendFieldConfig\n} from './legend-wrapper/legend.wrapper.component';\nimport { ObjectTypeComponent, objectTypeConfig } from './object/object.type.component';\nimport { FieldRadio, fieldRadioTypeConfig } from './radio/radio.type.component';\nimport { SelectTypeComponent, selectTypeConfig } from './select/select.type.component';\nimport { FieldTextArea, fieldTextareaTypeConfig } from './textarea/textarea.type.component';\nimport { TypeaheadTypeComponent, typeaheadTypeConfig } from './typeahead/typeahead.type.component';\n\nexport const FIELD_TYPES: Array<Type<FieldType>> = [\n  ArrayTypeComponent,\n  FieldCheckbox,\n  WrapperFormField,\n  FieldFile,\n  FieldInput,\n  FieldRadio,\n  ObjectTypeComponent,\n  FieldDate,\n  FieldDateTime,\n  TypeaheadTypeComponent,\n  SelectTypeComponent,\n  FieldTextArea,\n  LegendFieldWrapper,\n  C8yWrapperAddons\n];\n\n/**\n * This module declares field type components for dynamic forms that match C8Y styleguide.\n *\n * @dynamic\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    C8YCommonModule,\n    PopoverModule,\n    TooltipModule.forRoot(),\n    ReactiveFormsModule,\n    C8yTranslateModule,\n    DropAreaModule,\n    FormsModule,\n    FormlyModule,\n    FormlySelectModule,\n    DateTimePickerModule,\n    SelectModule,\n    ListGroupModule,\n    CoreSearchModule,\n    BsDatepickerModule,\n    TextFieldModule,\n    ...FIELD_TYPES,\n    C8yArrayTypeInjectTemplatePipe\n  ],\n  providers: [\n    arrayTypeConfig(),\n    fieldCheckboxTypeConfig(),\n    fieldDateTypeConfig(),\n    fieldDateTimeTypeConfig(),\n    fieldFileTypeConfig(),\n    wrapperFormFieldConfig(),\n    fieldInputTypeConfig(),\n    objectTypeConfig(),\n    fieldRadioTypeConfig(),\n    selectTypeConfig(),\n    typeaheadTypeConfig(),\n    fieldTextareaTypeConfig(),\n    wrapperLegendFieldConfig(),\n    wrapperAddonsConfig()\n  ]\n})\nexport class DynamicFormsUIThemeModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateParser, TranslateService } from '@ngx-translate/core';\nimport { combineLatest, isObservable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport class TranslateExtension {\n  constructor(\n    private translate: TranslateService,\n    private parser: TranslateParser\n  ) {}\n  prePopulate(field: FormlyFieldConfig) {\n    const to = field.props || {};\n    if (!to.label || to._translated) {\n      return;\n    }\n\n    to._translated = true;\n    field.expressions = {\n      ...(field.expressions || {}),\n      'props.label': to.label ? this.translate.stream(to.label) : to.label,\n      'props.description': to.description ? this.translate.stream(to.description) : to.description,\n      'props.placeholder': to.placeholder\n        ? combineLatest([\n            this.translate.stream(to.placeholder),\n            this.translate.stream(gettext('e.g. {{ example }}')),\n            of(Boolean(to.removeExempliGratia))\n          ]).pipe(\n            map(([placeholder, expression, exempliGratia]) =>\n              !exempliGratia\n                ? this.parser.interpolate(expression, { example: placeholder })\n                : placeholder\n            )\n          )\n        : to.placeholder,\n      'props.options': (isObservable(to.options) ? to.options : of(to.options)).pipe(\n        map((options: Array<{ label: string }>) =>\n          (options || []).map(option => ({\n            ...option,\n            label: this.translate.instant(option.label)\n          }))\n        )\n      )\n    };\n  }\n}\n\nexport function registerTranslateExtension(translate: TranslateService, parser: TranslateParser) {\n  return {\n    extensions: [\n      {\n        name: 'translate',\n        extension: new TranslateExtension(translate, parser)\n      }\n    ]\n  };\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule, FORMLY_CONFIG } from '@ngx-formly/core';\nimport { TranslateParser, TranslateService } from '@ngx-translate/core';\nimport { registerTranslateExtension } from './translate.extension';\nimport { C8yTranslateModule } from './../../i18n/c8y-translate.module';\n\n@NgModule({\n  imports: [FormlyModule, C8yTranslateModule],\n  providers: [\n    {\n      provide: FORMLY_CONFIG,\n      multi: true,\n      useFactory: registerTranslateExtension,\n      deps: [TranslateService, TranslateParser]\n    }\n  ]\n})\nexport class DynamicFormsI18nModule {}\n","import { Injectable } from '@angular/core';\nimport { FormlyFieldConfig, FormlyTemplateOptions } from '@ngx-formly/core';\nimport { FormlyJsonschema } from '@ngx-formly/core/json-schema';\nimport { JSONSchema7 } from 'json-schema';\nimport { omit, has, get } from 'lodash-es';\n\ninterface CustomFormlyFieldConfig extends FormlyFieldConfig {\n  order?: number;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class C8yJSONSchema extends FormlyJsonschema {\n  toFieldConfig(schema: JSONSchema7, options?: any): FormlyFieldConfig {\n    const config: FormlyFieldConfig = super.toFieldConfig(\n      schema,\n      this.c8yOptions((options || {}).map)\n    );\n    return config;\n  }\n\n  private c8yOptions(\n    map: (mappedField: CustomFormlyFieldConfig, mapSource: JSONSchema7) => FormlyFieldConfig\n  ) {\n    return {\n      map(\n        mappedField: CustomFormlyFieldConfig,\n        mapSource: JSONSchema7 & {\n          allowedFileTypes: string[];\n          templateOptions: FormlyTemplateOptions;\n        }\n      ) {\n        let result: CustomFormlyFieldConfig = mappedField;\n\n        if (has(mapSource, 'order')) {\n          result = {\n            ...result,\n            order: get(mapSource, 'order')\n          };\n        }\n\n        if (mapSource.type === 'number') {\n          // TODO: remove validators and parser overrides when ngx-formly issue is fixed https://github.com/ngx-formly/ngx-formly/issues/3757\n          // validator override is needed so empty value can be saved if field is not required\n          result.validators.type.expression = ({ value }) => {\n            if (value == null) {\n              return true;\n            }\n            return typeof value === 'number';\n          };\n          // parsers override is needed to make it possible to type e.g. '2e3' character by character\n          result.parsers = [val => val];\n        }\n\n        /** `const` type is represented as hidden input */\n        if (mapSource.const) {\n          result = {\n            ...result,\n            defaultValue: mapSource.const,\n            type: 'input',\n            props: {\n              ...result.props,\n              type: 'hidden'\n            }\n          };\n        }\n\n        /** `writeOnly` field represented as password input */\n        if (mapSource.writeOnly) {\n          result = {\n            ...result,\n            props: {\n              ...(result.props || {}),\n              attributes: { ...result.props?.attributes, type: 'password', autocomplete: 'off' }\n            }\n          };\n        }\n\n        /** `examples` values used as placeholder */\n        if (mapSource.examples) {\n          result = {\n            ...result,\n            props: {\n              ...(result.props || {}),\n              placeholder: (mapSource.examples as string[]).join(', ')\n            }\n          };\n        }\n\n        /** `enum` field represented as radio button group */\n        if (mapSource.enum) {\n          result = {\n            ...result,\n            type: 'radio'\n          };\n        }\n\n        /** fields with `contentMediaType` or `contentEncoding` are represented as file inputs */\n        if (mapSource.contentMediaType || mapSource.contentEncoding) {\n          result = {\n            ...result,\n            type: 'file',\n            props: {\n              ...(result.props || {}),\n              accept: mapSource.contentMediaType,\n              maxAllowedFiles: 1,\n              contentEncoding: mapSource.contentEncoding\n            }\n          };\n\n          // TODO: Remove this line when base64 encoding is done by file.type.component\n          // and control's value would pass 'string' type validator.\n          if (mapSource.contentEncoding === 'base64') {\n            result.validators = omit(result.validators, ['type']);\n          }\n        }\n\n        /** file extension validation for fields with `allowedFileTypes` */\n        if ((mapSource as any).allowedFileTypes) {\n          result = {\n            ...result,\n            type: 'file',\n            props: {\n              ...(result.props || {}),\n              ...(mapSource.allowedFileTypes && {\n                accept: mapSource.allowedFileTypes.join(',')\n              })\n            }\n          };\n        }\n        /** max size file validation` */\n        if ((mapSource as any).maxSize) {\n          result = {\n            ...result,\n            type: 'file',\n            props: {\n              ...(result.props || {}),\n              maxFileSizeInMegaBytes: (mapSource as any).maxSize\n            }\n          };\n        }\n\n        /** Provides a way to use templateOptions in JSONSchema forms */\n        if (mapSource.templateOptions) {\n          result = {\n            ...result,\n            props: {\n              ...mapSource.templateOptions,\n              ...result.props\n            }\n          };\n        }\n\n        return map ? map(result, mapSource) : result;\n      }\n    };\n  }\n}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ValidationPattern } from '../../forms/validation-pattern';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport function c8yValidationConfigFactory(translate: TranslateService) {\n  return {\n    validationMessages: [\n      {\n        name: 'required',\n        message() {\n          return translate.stream(ValidationPattern.messages.required);\n        }\n      },\n      {\n        name: 'notExisting',\n        message() {\n          return translate.stream(gettext('No selection'));\n        }\n      },\n      {\n        name: 'pattern',\n        message(error: any, _field: FormlyFieldConfig) {\n          return translate.stream(ValidationPattern.messages.pattern, error);\n        }\n      },\n      {\n        name: 'minLength',\n        message(_error: any, field: FormlyFieldConfig) {\n          return translate.stream(ValidationPattern.messages.minLength, field.templateOptions);\n        }\n      },\n      {\n        name: 'min',\n        message(_error: any, field: FormlyFieldConfig) {\n          return translate.stream(ValidationPattern.messages.min, field.templateOptions);\n        }\n      },\n      {\n        name: 'max',\n        message(_error: any, field: FormlyFieldConfig) {\n          return translate.stream(ValidationPattern.messages.max, field.templateOptions);\n        }\n      },\n      {\n        name: 'invalidDateTime',\n        message() {\n          return translate.stream(gettext('This date is invalid.'));\n        }\n      },\n      {\n        name: 'dateBeforeRangeMin',\n        message() {\n          return translate.stream(gettext('This date is before the earliest allowed date.'));\n        }\n      },\n      {\n        name: 'dateAfterRangeMax',\n        message() {\n          return translate.stream(gettext('This date is after the latest allowed date.'));\n        }\n      }\n    ]\n  };\n}\n","import { NgModule } from '@angular/core';\nimport { FormlyModule, FORMLY_CONFIG } from '@ngx-formly/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { C8yTranslateModule } from '../../i18n/c8y-translate.module';\nimport { c8yValidationConfigFactory } from './validation-config.factory';\n\n@NgModule({\n  imports: [C8yTranslateModule, FormlyModule],\n  providers: [\n    {\n      provide: FORMLY_CONFIG,\n      multi: true,\n      useFactory: c8yValidationConfigFactory,\n      deps: [TranslateService]\n    }\n  ]\n})\nexport class ValidationModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { DynamicFormsUIThemeModule } from './dynamic-forms-ui-theme.module';\nimport { DynamicFormsI18nModule } from './i18n/i18n.module';\nimport { C8yJSONSchema } from './json-schema/c8y-json-schema.service';\nimport { ValidationModule } from './validation/validation.module';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    DynamicFormsI18nModule,\n    ValidationModule,\n    DynamicFormsUIThemeModule,\n    FormlyModule\n  ],\n  providers: [C8yJSONSchema],\n  exports: [FormlyModule, ReactiveFormsModule]\n})\nexport class DynamicFormsModule {}\n","import { FormlyFieldConfig } from '@ngx-formly/core';\n\ninterface BasicInputArrayFormConfigInterface {\n  /**\n   * sets form's key\n   */\n  key: string;\n\n  /**\n   * text inside button that adds additional fields\n   */\n  addText: string;\n\n  /**\n   * label displayed above fields\n   */\n  label: string;\n\n  /**\n   * placeholder attribute value\n   */\n  placeholder: string;\n\n  /**\n   * if provided, blue information icon will be rendered with onHover tooltip\n   */\n  tooltip?: string;\n\n  /**\n   * If provided with true value, generated field will not be required.\n   */\n  optional?: boolean;\n}\n\n/**\n *  Generates simple array formFieldConfig\n *   @returns FormlyFieldConfig[]\n */\nexport function getBasicInputArrayFormFieldConfig(\n  config: BasicInputArrayFormConfigInterface\n): FormlyFieldConfig[] {\n  return [\n    {\n      key: config.key,\n      type: 'array',\n      defaultValue: [''],\n      templateOptions: {\n        required: !config.optional,\n        addText: config.addText\n      },\n      fieldArray: {\n        type: 'string',\n        templateOptions: {\n          required: !config.optional,\n          label: config.label,\n          tooltip: config.tooltip,\n          placeholder: config.placeholder\n        }\n      }\n    }\n  ];\n}\n","import { InjectionToken, Injector, Type } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport {\n  ExtensionFactory,\n  GenericHookOptions,\n  GenericHookType,\n  hookGeneric\n} from '../common/extension-hooks';\nimport { DynamicComponentAlertAggregator } from './dynamic-component-alert-aggregator';\nimport { DynamicDetailsResolver } from './dynamic-details-resolver';\nimport { JSONSchema7 } from 'json-schema';\nimport type {\n  PresetName,\n  PresetDefinition\n} from '../../global-context/integration/presets/control-presets';\n\n/**\n * Time the hook waits until it emits an undefined value.\n * Used for not defined widgets -> by default after 5s we\n * show an error that the widget could not be loaded.\n */\nexport const RESOLVING_COMPONENT_WAIT_TIME = new InjectionToken<number>(\n  'RESOLVING_COMPONENT_WAIT_TIME'\n);\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n * Or an ExtensionFactory which allows to define a get() function. This function\n * gets called on each navigation with the current route and can return values\n * async (observable or promise).\n * ```typescript\n *  { provide: HOOK_X, useFactory: { get: (route) => doSomethingAsync(route) }, multi: true }\n * ```\n */\nexport type DynamicComponentExtension =\n  | DynamicComponentDefinition\n  | DynamicComponentDefinition[]\n  | ExtensionFactory<DynamicComponentDefinition>;\n\n/**\n * A hook to add dynamic components to the UI (e.g. widgets).\n * @deprecated Consider using the `hookComponent` function instead.\n */\nexport const HOOK_COMPONENTS = new InjectionToken<DynamicComponentExtension[]>('HOOK_COMPONENTS');\n\n/**\n * A hook to add dynamic components to the UI (e.g. widgets).\n *\n * You can either provide a single `DynamicComponentDefinition` as parameter:\n * ```typescript\n *  hookComponent(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookComponent([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<DynamicComponentDefinition>`\n * ```typescript\n *  export class MyDynamicComponentDefinitionFactory implements ExtensionFactory<DynamicComponentDefinition> {...}\n *  ...\n *  hookComponent(MyDynamicComponentDefinitionFactory)\n * ```\n * A typed alternative to `HOOK_COMPONENTS`.\n * @param components The `DynamicComponentDefinition`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookComponent(\n  components: GenericHookType<DynamicComponentDefinition>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<DynamicComponentDefinition>(components, HOOK_COMPONENTS, options);\n}\n\n/**\n * Hook to add dynamic widget components to the UI.\n *\n * You can either provide a single `DynamicWidgetDefinition` as parameter:\n * ```typescript\n *  hookWidget(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookWidget([...])\n * ```\n *\n *  * Or you provide a Service that implements `ExtensionFactory<DynamicWidgetDefinition>`\n * ```typescript\n *  export class MyDynamicWidgetDefinitionFactory implements ExtensionFactory<DynamicWidgetDefinition> {...}\n *  ...\n *  hookWidget(MyDynamicWidgetDefinitionFactory)\n * ```\n * A widget specific alternative to `hookComponent`..\n * @param components The `DynamicWidgetDefinition`'s or `ExtensionFactory` to be provided.\n * @param options Options to configure the hook.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookWidget(\n  components: GenericHookType<DynamicWidgetDefinition>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookComponent(components, options);\n}\n\n/**\n * A dynamic component can be defined in a the HOOK_COMPONENTS to display any kind\n * of component dynamically just by referencing it's id. The most common use case is on dashboards,\n * where the `configComponent` is used to define what is displayed on the `component`\n * on the dashboard.\n *\n * To use the component you can use the c8y-dynamic-component.\n *\n * ```\n *   <c8y-dynamic-component\n *     componentId=\"angular.widget.demo\"\n *     [config]=\"{ text: 'Hello world' }\"\n *     [mode]=\"editComponent ? 'config' : 'component'\"\n *   ></c8y-dynamic-component>\n *   ```\n */\nexport type DynamicComponentDefinition = DynamicComponentDefinitionBase & DynamicComponents;\n\nexport type DynamicWidgetDefinition = DynamicWidgetDefinitionBase & DynamicComponents;\n\nexport interface DynamicComponentDefinitionBase extends DefinitionBase {\n  /**\n   * Add any random data, specially to angular.js dashboards.\n   * Should be serializable to allow to save it to the API.\n   */\n  data?: any;\n}\n\nexport interface DynamicWidgetDefinitionBase extends DefinitionBase {\n  /**\n   * Add any random data, specially to angular.js dashboards.\n   * Should be serializable to allow to save it to the API.\n   */\n  data?: WidgetDataType;\n}\n\nexport interface DefinitionBase {\n  /**\n   * Unique serializable id\n   */\n  id: string;\n  /**\n   * The label shown for this dynamic component on add widgets\n   */\n  label: string;\n  /**\n   * The description shown on add widget\n   */\n  description: string;\n  /**\n   * Add any random data, specially to angular.js dashboards.\n   * Should be searilzabled to allow to save it to the API.\n   */\n  data?: any;\n  /**\n   * An url to an preview image.\n   */\n  previewImage?: string;\n  /**\n   * The injector to use to inject this component. If used in a module federation\n   * plugin, the injector of the plugin should be used. Defaults to the root injector.\n   */\n  injector?: Injector;\n  /**\n   * Attributes of the dynamic components configuration to be resolved.\n   */\n  resolve?: { [key: string]: Type<DynamicDetailsResolver> };\n  /**\n   * Determines if dynamic component or widget itself should render alerts.\n   */\n  errorStrategy?: DynamicComponentErrorStrategy;\n  /**\n   * Ordering of the components\n   */\n  priority?: number;\n}\n\ntype WidgetDisplaySettingsCore = {\n  /**\n   * If enabled the widget is bound to the global time context. You can listen to ngOnChanges() change detection\n   * to react to changes on the context. When a more detailed configuration is needed, use the <c8y-widget-time-context>\n   * component instead.\n   */\n  globalTimeContext?: boolean;\n  /**\n   * If enabled the widget is bound to the global realtime context. You can listen to ngOnChanges() change detection\n   * to react to changes on the context.\n   */\n  globalRealtimeContext?: boolean;\n  /**\n   * If enabled the widget is bound to the global aggregation context. You can listen to ngOnChanges() change detection\n   * to react to changes on the context.\n   */\n  globalAggregationContext?: boolean;\n  globalAutoRefreshContext?: boolean;\n};\n\nexport interface WidgetImportExportInjectorOptions {\n  /**\n   * The injector where the import/export is happening (e.g. dashboarding).\n   */\n  injector: Injector;\n  /**\n   * The injector where the widget is coming from (e.g. module federation plugin).\n   */\n  pluginInjector: Injector;\n}\n\nexport interface WidgetDataType {\n  /**\n   * Settings that define the context to which the widget is bound.\n   * E.g. global time context, global realtime context, global aggregation context.\n   */\n  displaySettings?: WidgetDisplaySettingsCore;\n  /**\n   * Settings that are used to configure the widget.\n   * They are static and will not be saved.\n   */\n  settings?: WidgetSettings;\n  /**\n   * Callback to get the schema for the widget e.g. for widget config JSON validation purposes in runtime.\n   * In order to use this feature, schema should contain `c8y-schema-loader` prefix, interface name as param\n   * and path to file where interface is defined to match \"c8y-schema-loader?interfaceName=<interface name>!<path to file>\".\n   * ```ts\n   * // schema: () => import('c8y-schema-loader?interfaceName=KpiWidgetConfig!@c8y/ngx-components/widgets/implementations/kpi')\n   * ```\n   * Schema will be generated in build process and will be available in runtime.\n   */\n  schema?: () => Promise<{ schema: JSONSchema7 }>;\n\n  /**\n   * Widget controls configuration for global context integration.\n   * Defines how the widget interacts with global context features like\n   * time filters, aggregation, and auto-refresh settings.\n   * @deprecated Use `controls` instead.\n   */\n  widgetControls?: any;\n  /**\n   * Widget controls configuration for global context integration.\n   * Defines how the widget interacts with global context features like\n   * time filters, aggregation, and auto-refresh settings.\n   */\n  controls?: PresetName | PresetDefinition;\n  /**\n   * Method to export the widget configuration during dashboard export to a json file. It enhances the configuration with\n   * additional data that can be used later by the `import` method to restore the widget configuration in a new context.\n   * @param config Widget configuration\n   * @param dashboardMetaData Metadata of the current dashboard\n   * @param options Options with injectors that can be used to export the configuration\n   * @return Enhanced widget configuration\n   */\n  export?: (\n    config: any,\n    dashboardMetaData: any,\n    options: WidgetImportExportInjectorOptions\n  ) => any | Promise<any>;\n  /**\n   * Method to import the widget configuration during dashboard import from a json file. It restores the widget configuration\n   * with data exported by the `export` method.\n   * @param config Widget configuration enhanced with export method\n   * @param dashboardMetaData Metadata of the current dashboard\n   * @param options Options with injectors that can be used to import the configuration\n   * @return Restored widget configuration\n   */\n  import?: (\n    config: any,\n    dashboardMetaData: any,\n    options: WidgetImportExportInjectorOptions\n  ) => any | Promise<any>;\n}\n\n/**\n * The configuration size view is divided into configuration and preview.\n * The configuration can be collapsed, half or full (preview hidden).\n */\nexport enum WIDGET_CONFIGURATION_GRID_SIZE {\n  COLLAPSED = '0px',\n  HALF = '560px',\n  FULL = '100%'\n}\n\nexport interface WidgetSettings {\n  /**\n   * Avoids to show the widget in the \"add widget\" modal\n   */\n  noNewWidgets?: boolean;\n  /**\n   * Indicates that the widget was upgraded from an angularjs widget.\n   */\n  upgrade?: boolean;\n\n  /**\n   * The size of the configuration view. If provided as string, it needs to be a valid CSS size (e.g. '400px' or '50%').\n   * If not provided, the default size is '560px' (WidgetConfigurationGridSize.HALF).\n   */\n  configurationViewGridSize?: WIDGET_CONFIGURATION_GRID_SIZE | string;\n\n  /**\n   * The default settings when the widget is added to a dashboard.\n   */\n  widgetDefaults?: {\n    /**\n     * The grid width of the widget when added to a dashboard.\n     */\n    _width?: number;\n    /**\n     * The grid height of the widget when added to a dashboard.\n     */\n    _height?: number;\n    [key: string]: any;\n  };\n  ng1?: {\n    options?: {\n      /**\n       * Set this to false, to hide the device/group selector\n       * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n       */\n      noDeviceTarget?: boolean;\n      /**\n       * Set this to false to only select devices\n       * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n       */\n      groupsSelectable?: boolean;\n      /**\n       * Set this to false to make the device target not required.\n       * @deprecated: This is currently only implemented in angularjs and will be exported to a separate component.\n       */\n      deviceTargetNotRequired?: boolean;\n      [key: string]: any;\n    };\n    /**\n     * The context from the device selector.\n     */\n    context?: {\n      id?: string;\n      name?: string;\n      [key: string]: any;\n    };\n    [key: string]: any;\n  };\n  /**\n   * Additional settings for the widget.\n   */\n  [key: string]: any;\n}\n\nexport interface AngularJSWidgetSettings extends WidgetSettings {\n  /**\n   * The config component name.\n   * @deprecated: Only used for angularjs plugins.\n   */\n  configComponent?: string;\n  /**\n   * The widget component name.\n   * @deprecated: Only used for angularjs plugins.\n   */\n  widgetComponent?: string;\n  /**\n   * The config template URL for legacy plugins.\n   * @deprecated: Only used for angularjs plugins.\n   */\n  configTemplateUrl?: string;\n  /**\n   * Transforms widget's config by executing transform function.\n   * The transform function can take injectable arguments\n   * @deprecated: Only used for angularjs plugins.\n   */\n  transformConfigWithContext?: () => void;\n  /**\n   * Avoids to show the widget in the \"add widget\" modal\n   */\n}\n\nexport type DynamicComponents = EagerDynamicComponents | LazyDynamicComponents;\n\nexport interface EagerDynamicComponents {\n  /**\n   * The component which is used when the component should be displayed (e.g. on a dashboard)\n   */\n  component: Type<any>;\n  loadComponent?: never;\n  /**\n   * The configuration component used when a widget is added or edited.\n   * @deprecated: Use a hookWidgetConfig instead.\n   */\n  configComponent?: Type<any>;\n  loadConfigComponent?: never;\n}\n\nexport interface LazyDynamicComponents {\n  /**\n   * A function returning a promise of the component which is used when the component should be displayed (e.g. on a dashboard)\n   *\n   * A sample function to be provided could look like this:\n   * ```\n   * async function loadViewComponent() {\n   *  const { LazyWidgetViewComponent } = await import('./lazy-widget-view');\n   *  return LazyWidgetViewComponent;\n   * }\n   * ```\n   */\n  loadComponent: () => Promise<Type<any>>;\n  component?: never;\n  /**\n   * A function returning a promise of the configuration component used when a widget is added or edited.\n   *\n   * A sample function to be provided could look like this:\n   * ```\n   * async function loadConfigComponent() {\n   *  const { LazyWidgetConfigComponent } = await import('./lazy-widget-config');\n   *  return LazyWidgetConfigComponent;\n   * }\n   * ```\n   * @deprecated: Use a hookWidgetConfig instead.\n   */\n  loadConfigComponent?: () => Promise<Type<any>>;\n  configComponent?: never;\n}\n\nexport function isLazyDynamicComponents(\n  componentDefinition: DynamicComponents\n): componentDefinition is LazyDynamicComponents {\n  return !!componentDefinition?.loadComponent;\n}\n\nexport function isEagerDynamicComponents(\n  componentDefinition: DynamicComponents\n): componentDefinition is EagerDynamicComponents {\n  return !!componentDefinition?.component;\n}\n\nexport enum DynamicComponentErrorStrategy {\n  /**\n   * Will not render/initialize the Widget in case an error was detected.\n   */\n  NOT_RENDER = 'NOT_RENDER',\n  /**\n   * Will add an overlay over the Widget, displaying the error message.\n   */\n  OVERLAY_ERROR = 'OVERLAY_ERROR',\n  /**\n   * The widget implements error handling on its own.\n   */\n  CUSTOM = 'CUSTOM'\n}\n\n/**\n * Use this interface on any component to define the interchange between\n * config and display component.\n */\nexport interface DynamicComponent {\n  /**\n   * The configuration which is shared between configuration component and display component.\n   * Should be searilzabled to allow to save it to the API.\n   */\n  config: any;\n  /**\n   * Alerts related to the dynamic component.\n   * Can either be set by the dynamic component it self or via it's resolvers.\n   */\n  alerts?: DynamicComponentAlertAggregator;\n  /**\n   * A reference to the ng1Form on angularjs dashboards to disable/enable the save button.\n   * @deprecated: Will not work on Angular-Dashboards (1.6.1.0). Use `ContextServiceDashboard.formDisabled` instead.\n   */\n  ng1FormRef?: any;\n}\n\n/**\n * An lifecycle hook which is called before an configuration is saved.\n * @deprecated Use widgetConfigService.addOnBeforeSave() instead.\n */\nexport interface OnBeforeSave {\n  /**\n   * Called before a configuration object is saved. The function can be used to manipulate the\n   * passed config object or to cancel the saving (return false or Observable<boolean>).\n   * @deprecated Use widgetConfigService.addOnBeforeSave() instead.\n   */\n  onBeforeSave(config?: any): boolean | Promise<boolean> | Observable<boolean>;\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { set } from 'lodash';\nimport { Observable, Subject } from 'rxjs';\nimport { DynamicComponentDefinition } from './dynamic-component.model';\nimport { DynamicDetailsResolver } from './dynamic-details-resolver';\n\n@Injectable({ providedIn: 'root' })\nexport class DynamicResolverService {\n  bulkResolvingTrigger$: Observable<number>;\n  private _triggerBulkResolving = new Subject<number>();\n  private requestId = 0;\n\n  constructor(private injector: Injector) {\n    this.bulkResolvingTrigger$ = this._triggerBulkResolving.asObservable();\n  }\n\n  async executeResolvers(\n    details: Array<{ componentId: string; config: any }>,\n    dynamicDef: DynamicComponentDefinition[]\n  ): Promise<unknown[]> {\n    const requestId = this.getRequestId();\n    const res = dynamicDef.map((def, index) =>\n      this.executeResolversForSingleComponent<any>(def, details[index].config, requestId)\n    );\n\n    const promise = this.waitForResults(res);\n    this.triggerResolving(requestId);\n\n    return await promise;\n  }\n\n  serialize(\n    details: Array<{ componentId: string; config: any }>,\n    dynamicDef: DynamicComponentDefinition[]\n  ) {\n    return dynamicDef.map((def, index) => {\n      return this.serializeSingleComponent<any>(def, details[index].config);\n    });\n  }\n\n  private serializeSingleComponent<T>(dynamicDef: DynamicComponentDefinition, config: any) {\n    const res: { [key: string]: Partial<T> | Array<Partial<T>> } = {};\n    if (!dynamicDef?.resolve) {\n      return res;\n    }\n    Object.entries(dynamicDef.resolve).forEach(([key, value]) => {\n      try {\n        const resolver = this.injector.get<DynamicDetailsResolver<T>>(value, null);\n        if (resolver && resolver.serialize) {\n          res[key] = resolver.serialize(config, key);\n        } else {\n          console.warn(\n            `DynamicDetailsResolver: \"${value}\" not found or does not implement serialize method.`\n          );\n        }\n      } catch {\n        console.warn(`Failed to serialize key: \"${key}\" for dynamic component: \"${dynamicDef.id}\"`);\n      }\n    });\n    return res;\n  }\n\n  private triggerResolving(requestId: number) {\n    this._triggerBulkResolving.next(requestId);\n  }\n\n  private executeResolversForSingleComponent<T>(\n    dynamicDef: DynamicComponentDefinition,\n    config: any,\n    requestId: number\n  ) {\n    const res: { [key: string]: T | Promise<T> | Observable<T> } = {};\n    if (!dynamicDef?.resolve) {\n      return res;\n    }\n    Object.entries(dynamicDef.resolve).forEach(([key, value]) => {\n      try {\n        const resolver = this.injector.get<DynamicDetailsResolver<any>>(value, null);\n        if (resolver && resolver.resolve) {\n          res[key] = resolver.resolve(config, key, requestId);\n        } else {\n          console.warn(\n            `DynamicDetailsResolver: \"${value}\" not found or does not implement resolve method.`\n          );\n        }\n      } catch {\n        console.warn(`Failed to resolve key: \"${key}\" for dynamic component: \"${dynamicDef.id}\"`);\n      }\n    });\n    return res;\n  }\n\n  private async waitForResults(\n    data: Array<{ [key: string]: unknown | Promise<unknown> | Observable<unknown> }>\n  ): Promise<any[]> {\n    return Promise.all(data.map(tmp => this.waitForResultsOfSingleEntry(tmp)));\n  }\n\n  private async waitForResultsOfSingleEntry(data: {\n    [key: string]: unknown | Promise<unknown> | Observable<unknown>;\n  }): Promise<any> {\n    const res = {};\n    try {\n      const arr = await Promise.all(Object.values(data).map(tmp => this.awaitResult(tmp)));\n      Object.keys(data).forEach((key, index) => set(res, key, arr[index]));\n    } catch {\n      console.warn(`Failed to to resolve data using dynamic component resolver.`);\n    }\n\n    return res;\n  }\n\n  private async awaitResult(\n    data: unknown | Promise<unknown> | Observable<unknown>\n  ): Promise<unknown> {\n    try {\n      if (data instanceof Promise) {\n        return await data;\n      }\n      if (data instanceof Observable) {\n        return await data.toPromise();\n      }\n\n      return data;\n    } catch {\n      console.warn(`Failed to to resolve data using dynamic component resolver.`);\n      return;\n    }\n  }\n\n  private getRequestId(): number {\n    return this.requestId++;\n  }\n}\n","import { Inject, Injectable, Injector, Optional } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { combineLatest, Observable, timer } from 'rxjs';\nimport {\n  distinctUntilChanged,\n  filter,\n  mergeMap,\n  shareReplay,\n  take,\n  takeUntil\n} from 'rxjs/operators';\nimport {\n  ExtensionPointForPlugins,\n  fromTriggerOnce,\n  getInjectedHooks,\n  stateToFactory\n} from '../common/extension-hooks';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport {\n  DynamicComponentDefinition,\n  HOOK_COMPONENTS,\n  RESOLVING_COMPONENT_WAIT_TIME\n} from './dynamic-component.model';\nimport { DynamicResolverService } from './dynamic-resolver.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DynamicComponentService extends ExtensionPointForPlugins<DynamicComponentDefinition> {\n  private DEFAULT_WAIT_TIMEOUT = 5000;\n\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    @Optional() @Inject(RESOLVING_COMPONENT_WAIT_TIME) private waitTimeout: number,\n    private dynamicResolver: DynamicResolverService,\n    private plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  get state() {\n    return this.state$.value;\n  }\n\n  /**\n   * Returns a component by it's id as an observable.\n   * @param id The id of the component.\n   */\n  getById(id): Promise<DynamicComponentDefinition> {\n    if (!id) {\n      return Promise.resolve(undefined);\n    }\n    return this.items$\n      .pipe(\n        mergeMap((cmps: DynamicComponentDefinition[]) => cmps),\n        filter((cmp: DynamicComponentDefinition) => cmp.id === id),\n        take(1)\n      )\n      .toPromise();\n  }\n\n  add(component: DynamicComponentDefinition) {\n    this.state.add(component);\n    this.emitNewState();\n  }\n\n  remove(component: DynamicComponentDefinition) {\n    this.state.delete(component);\n    this.emitNewState();\n  }\n\n  async executeResolvers(componentIdAndConfig: Array<{ componentId: string; config: any }>) {\n    const dynamicDef = await Promise.all(\n      componentIdAndConfig.map(({ componentId }) => this.getById(componentId))\n    );\n    const result = await this.dynamicResolver.executeResolvers(componentIdAndConfig, dynamicDef);\n    return result;\n  }\n\n  async serializeConfigs(componentIdAndConfig: Array<{ componentId: string; config: any }>) {\n    const dynamicDef = await Promise.all(\n      componentIdAndConfig.map(({ componentId }) => this.getById(componentId))\n    );\n    return this.dynamicResolver.serialize(componentIdAndConfig, dynamicDef);\n  }\n\n  protected setupItemsObservable(): Observable<DynamicComponentDefinition[]> {\n    const remotesLoaded$ = this.plugins.allPluginsLoaded$.pipe(\n      filter(loaded => !!loaded),\n      take(1)\n    );\n\n    return fromTriggerOnce<DynamicComponentDefinition>(this.router, this.refresh$, [\n      getInjectedHooks<DynamicComponentDefinition>(HOOK_COMPONENTS, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      distinctUntilChanged(),\n      takeUntil(\n        combineLatest([timer(this.waitTimeout || this.DEFAULT_WAIT_TIMEOUT), remotesLoaded$])\n      ),\n      shareReplay(1)\n    );\n  }\n}\n","import { cloneDeep } from 'lodash-es';\nimport { Observable, BehaviorSubject } from 'rxjs';\nimport {\n  AlertGroupData,\n  DismissAlertStrategy,\n  DynamicComponentAlert\n} from './dynamic-component-alert.model';\nimport { AlertType } from '../alert';\n\n/**\n * Order of widget alerts due to alerts severity.\n */\nconst WIDGET_ALERTS_ORDER = [\n  'danger',\n  'warning',\n  'info',\n  'system',\n  'success'\n] as const satisfies ReadonlyArray<AlertType>;\n\nexport class DynamicComponentAlertAggregator {\n  anyAlertExists$: Observable<boolean>;\n  /**\n   * Array containing grouped alerts with data necessary to display alerts and whether alert group should be dismissible.\n   */\n  alertGroups: Array<{\n    type: AlertType;\n    value: AlertGroupData;\n  }>;\n  /**\n   * Private Map of alerts data.\n   */\n  private aggregatedAlertsData: Map<AlertType, AlertGroupData>;\n  private anyAlertExistsSubject = new BehaviorSubject<boolean>(false);\n\n  constructor(alerts: DynamicComponentAlert[] = []) {\n    this.anyAlertExists$ = this.anyAlertExistsSubject.asObservable();\n    this.initAlertsGroups();\n    this.setAlerts(alerts);\n  }\n\n  /**\n   * Adds alert to aggregator.\n   *\n   * @param {DynamicComponentAlert[]} alerts List of alerts that should be added to aggregator.\n   *\n   */\n  addAlerts(...alerts: DynamicComponentAlert[]) {\n    this.setAlerts(alerts);\n  }\n\n  /**\n   * Remove alerts in group by provided alert type or removes all alerts when no param is provided.\n   *\n   * @param {AlertType} type Type of alerts group that should be removed.\n   *\n   */\n  clear(type?: AlertType) {\n    if (type) {\n      this.aggregatedAlertsData.get(type).alerts = [];\n    } else {\n      this.aggregatedAlertsData.forEach(value => (value.alerts = []));\n    }\n    this.onDataChanged();\n  }\n\n  /**\n   * Sets possibility of alert to be dismissed in specific way.\n   *\n   * @param {AlertType} alertType Type of alerts for which the dismissal strategy should be set.\n   * @param {dismissStrategy} dismissStrategy Type of dismissal strategy that will be set for the alert type.\n   *\n   */\n  setAlertGroupDismissStrategy(alertType: AlertType, dismissStrategy: DismissAlertStrategy) {\n    this.aggregatedAlertsData.get(alertType).alertDismissal.dismissStrategy = dismissStrategy;\n    this.onDataChanged();\n  }\n\n  /**\n   * Removes alerts in group due to dismissal dismissStrategy and sets userDismissalChoice property.\n   * If group has dismissal strategy declared as TEMPORARY_OR_PERMANENT, its userDismissalChoice property can be set to\n   * REMIND_ALLOWED or REMIND_DISALLOWED depending on parameter.\n   *\n   * @param {AlertType} alertType Type of alerts group that should be dismissed.\n   * @param {boolean} permanent Determines whether the dismissal of alerts of a given type is permanent.\n   *\n   */\n  dismissAlertGroup(alertType: AlertType, isPermanent = false) {\n    const groupDismissStrategy =\n      this.aggregatedAlertsData.get(alertType).alertDismissal.dismissStrategy;\n\n    switch (groupDismissStrategy) {\n      case DismissAlertStrategy.NONE:\n        return;\n      case DismissAlertStrategy.TEMPORARY:\n        this.aggregatedAlertsData.get(alertType).alertDismissal.userDismissalChoice =\n          'REMIND_ALLOWED';\n        break;\n      case DismissAlertStrategy.TEMPORARY_OR_PERMANENT:\n        this.aggregatedAlertsData.get(alertType).alertDismissal.userDismissalChoice = isPermanent\n          ? 'REMIND_DISALLOWED'\n          : 'REMIND_ALLOWED';\n    }\n\n    this.clear(alertType);\n  }\n\n  /**\n   * Alert aggregator as a widget property should not be serialized and stored in database.\n   */\n  toJSON() {\n    return undefined;\n  }\n\n  private initAlertsGroups() {\n    this.aggregatedAlertsData = new Map(\n      WIDGET_ALERTS_ORDER.map(alertType => {\n        return [\n          alertType,\n          {\n            alerts: [],\n            alertDismissal: { dismissStrategy: DismissAlertStrategy.NONE }\n          } as AlertGroupData\n        ];\n      })\n    );\n  }\n\n  private setAlerts(alerts: DynamicComponentAlert[]) {\n    alerts.forEach(alert => {\n      if (\n        this.aggregatedAlertsData.get(alert.type).alertDismissal.userDismissalChoice ===\n        'REMIND_DISALLOWED'\n      ) {\n        return;\n      }\n      if (!this.aggregatedAlertsData.get(alert.type)) {\n        this.aggregatedAlertsData.get(alert.type).alerts = [];\n      }\n      // If alert specifies its own dismiss strategy, apply it to the group\n      if (alert.dismissStrategy) {\n        this.aggregatedAlertsData.get(alert.type).alertDismissal.dismissStrategy =\n          alert.dismissStrategy;\n      }\n      this.aggregatedAlertsData.get(alert.type).alerts.push(alert);\n    });\n    this.onDataChanged();\n  }\n\n  private onDataChanged() {\n    this.alertGroups = [...cloneDeep(this.aggregatedAlertsData)].map(([key, value]) => ({\n      type: key,\n      value\n    }));\n    queueMicrotask(() => {\n      this.anyAlertExistsSubject.next(this.alertGroups.some(({ value }) => !!value.alerts.length));\n    });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Input,\n  OnDestroy,\n  OnInit\n} from '@angular/core';\nimport { DismissAlertStrategy } from './dynamic-component-alert.model';\nimport { DynamicComponentAlertAggregator } from './dynamic-component-alert-aggregator';\nimport { AlertOutletBase, AlertService } from '../alert';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { NgFor, NgIf, NgClass } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-dynamic-component-alerts',\n  templateUrl: './dynamic-component-alerts.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [NgFor, NgIf, NgClass, IconDirective, C8yTranslatePipe]\n})\nexport class DynamicComponentAlertsComponent extends AlertOutletBase implements OnInit, OnDestroy {\n  dismissAlertStrategy: typeof DismissAlertStrategy = DismissAlertStrategy;\n  private destroy$: Subject<void> = new Subject<void>();\n\n  @Input() alerts: DynamicComponentAlertAggregator;\n\n  constructor(\n    public alertService: AlertService,\n    private ref: ChangeDetectorRef\n  ) {\n    super(alertService);\n  }\n\n  ngOnInit() {\n    this.alerts.anyAlertExists$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n      this.ref.markForCheck();\n    });\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","<ng-container *ngFor=\"let alertGroup of alerts.alertGroups\">\n  <div\n    *ngIf=\"alertGroup?.value?.alerts?.length\"\n    class=\"alert\"\n    role=\"alert\"\n    [ngClass]=\"'alert-' + alertGroup.type\"\n  >\n    <button\n      class=\"close\"\n      type=\"button\"\n      *ngIf=\"\n        alertGroup.value.alertDismissal.dismissStrategy === dismissAlertStrategy.TEMPORARY ||\n        alertGroup.value.alertDismissal.dismissStrategy ===\n          dismissAlertStrategy.TEMPORARY_OR_PERMANENT\n      \"\n      (click)=\"alerts.dismissAlertGroup(alertGroup.type, dismissPermanently.checked)\"\n    >\n      <span aria-hidden=\"true\">×</span>\n      <span class=\"sr-only\">Close</span>\n    </button>\n    <div *ngFor=\"let alertItem of alertGroup.value.alerts; let i = index\" class=\"m-t-8\">\n      <ng-container *ngIf=\"!isTemplateRef(alertItem.text); else template(alertItem.text)\">\n        <p\n          *ngIf=\"!alertItem.allowHtml\"\n          [textContent]=\"alertItem.text | translate\"\n          class=\"message\"\n        ></p>\n        <p *ngIf=\"alertItem.allowHtml\" [innerHTML]=\"alertItem.text | translate\" class=\"message\"></p>\n      </ng-container>\n\n      <p *ngIf=\"hasDetails(alertItem) && !isDetailsShow(alertItem)\" class=\"text-muted m-t-8\">\n        <button\n          title=\"{{ 'Show details' | translate }}\"\n          class=\"btn btn-clean\"\n          (click)=\"showDetails(alertItem)\"\n        >\n          <i c8yIcon=\"chevron-down\"></i>\n          {{ 'Show details' | translate }}\n        </button>\n      </p>\n      <p *ngIf=\"hasDetails(alertItem) && isDetailsShow(alertItem)\" class=\"text-muted m-t-8\">\n        <button\n          title=\"{{ 'Hide details' | translate }}\"\n          class=\"btn btn-clean\"\n          (click)=\"closeDetails()\"\n        >\n          <i c8yIcon=\"chevron-up\"></i>\n          {{ 'Hide details' | translate }}\n        </button>\n      </p>\n      <div *ngIf=\"isDetailsShow(alertItem)\">\n        <div\n          *ngIf=\"\n            !isTemplateRef(detailDisplayedAlert.contents);\n            else template(alertItem.detailedData)\n          \"\n        >\n          <pre><code [textContent]=\"detailDisplayedAlert.contents | translate\"></code></pre>\n        </div>\n      </div>\n      <hr *ngIf=\"i !== alertGroup.value.alerts.length - 1\" />\n    </div>\n\n    <label\n      title=\"{{ 'Don\\'t show again' | translate }}\"\n      class=\"c8y-checkbox m-t-16\"\n      [class.hidden]=\"\n        alertGroup.value.alertDismissal.dismissStrategy !==\n        dismissAlertStrategy.TEMPORARY_OR_PERMANENT\n      \"\n    >\n      <input type=\"checkbox\" #dismissPermanently />\n      <span></span>\n      <span>{{ \"Don't show again\" | translate }}</span>\n    </label>\n  </div>\n</ng-container>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  Output,\n  ViewChild,\n  ViewContainerRef,\n  ComponentRef,\n  Injector,\n  SimpleChanges,\n  OnChanges,\n  EnvironmentInjector,\n  Type,\n  SimpleChange,\n  reflectComponentType\n} from '@angular/core';\nimport {\n  DynamicComponent,\n  DynamicComponentDefinition,\n  DynamicComponentErrorStrategy,\n  isLazyDynamicComponents,\n  isEagerDynamicComponents,\n  OnBeforeSave\n} from './dynamic-component.model';\nimport { DynamicComponentService } from './dynamic-component.service';\nimport { from, isObservable, Observable, of, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { flatten, get, isUndefined, set, cloneDeep } from 'lodash-es';\nimport { DynamicComponentAlertAggregator } from './dynamic-component-alert-aggregator';\nimport { DynamicComponentAlert } from './dynamic-component-alert.model';\nimport { NgIf, AsyncPipe } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { DynamicComponentAlertsComponent } from './dynamic-component-alerts.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { isPromise } from '../common/extension-hooks';\n\n/**\n * C8y dynamic component.\n *\n * register component in HOOK in module:\n * ```typescript\n *  import { hookComponent } from '@c8y/ngx-components';\n *\n * @NgModule({\n *  ...,\n *  providers: [\n *    hookComponent({\n *      id: 'test-component',\n *      label: 'My test component',\n *      description: 'this is test component',\n *      component: TestComponent\n *    })\n *  ...\n *  ]\n *\n * ```\n * Showing dynamic component:\n * ```html\n * <c8y-dynamic-component [componentId]=\"'test-component'\" [config]=\"config\"></c8y-dynamic-component>\n * ```\n */\n@Component({\n  selector: 'c8y-dynamic-component',\n  templateUrl: './dynamic-component.component.html',\n  standalone: true,\n  imports: [\n    NgIf,\n    IconDirective,\n    C8yTranslateDirective,\n    CollapseModule,\n    DynamicComponentAlertsComponent,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class DynamicComponentComponent implements OnDestroy {\n  /**\n   * The ID of the registered component. It needs to be a component that is hooked\n   * with the HOOK_COMPONENTS extension hook.\n   */\n  @Input() componentId: string;\n  /**\n   * The configuration to pass.\n   */\n  @Input() config: unknown;\n  /**\n   * DynamicComponents can have two modes, an edit (config) and an view (component) mode.\n   * By default it is shown in the component mode.\n   */\n  @Input() mode: 'config' | 'component' = 'component';\n  /**\n   * Disable this to hide the error that is shown if the component was not found.\n   */\n  @Input() notFoundError = true;\n  /**\n   * If set to true, it will execute the components resolvers before initializing the component.\n   * Defaults to false.\n   */\n  @Input() executeResolvers = false;\n  /**\n   * Allows to set additional classes for widget styling.\n   */\n  @Output() updateWidgetClasses = new EventEmitter<Record<string, boolean>>();\n  /**\n   * @ignore\n   */\n  @ViewChild('host', { read: ViewContainerRef, static: true }) host: ViewContainerRef;\n  /**\n   * @ignore\n   */\n  error: any;\n  /**\n   * @ignore\n   */\n  expandErrorDetails = false;\n  componentInstance: DynamicComponent;\n  errorStrategy: DynamicComponentErrorStrategy;\n  dynamicComponentErrorStrategy: typeof DynamicComponentErrorStrategy =\n    DynamicComponentErrorStrategy;\n  private destroy$: Subject<void> = new Subject<void>();\n  private componentRef: ComponentRef<Component>;\n\n  /**\n   * @ignore only DI\n   */\n  constructor(\n    private dynamicComponentService: DynamicComponentService,\n    private injector: Injector\n  ) {}\n\n  /**\n   * Calls the dynamic component life cycle hook. Currently only\n   * supporting onBeforeSave, a hook which is called before a config component\n   * is saved.\n   */\n  callLifeCycleHooks() {\n    return this.callOnBeforeSaveHook();\n  }\n\n  /**\n   * @ignore\n   */\n  async ngOnChanges(changes: SimpleChanges) {\n    const cmp = await this.dynamicComponentService.getById(this.componentId);\n    let errors = new Array<DynamicComponentAlert>();\n    if (cmp) {\n      this.errorStrategy = cmp.errorStrategy || DynamicComponentErrorStrategy.CUSTOM;\n      if (this.executeResolvers) {\n        const [resolvedConfig] = await this.dynamicComponentService.executeResolvers([\n          { componentId: this.componentId, config: this.config }\n        ]);\n        Object.entries(resolvedConfig).forEach(([key, value]) => set(this.config, key, value));\n      }\n\n      const resolvedValuesOfConfiguration: Array<DynamicComponentAlert | DynamicComponentAlert[]> =\n        cmp.resolve\n          ? Object.keys(cmp.resolve).map(resolvedKey => get(this.config, resolvedKey))\n          : [];\n      const flattenedResolvedValuesOfConfiguration = flatten(resolvedValuesOfConfiguration);\n      errors = flattenedResolvedValuesOfConfiguration.filter(\n        potentialError => potentialError && potentialError instanceof DynamicComponentAlert\n      );\n      if (errors.length && cmp.errorStrategy === DynamicComponentErrorStrategy.NOT_RENDER) {\n        return;\n      }\n      if (this.mode == 'config' && !cmp.loadConfigComponent && !cmp.configComponent) {\n        this.host.clear();\n        return;\n      }\n    }\n\n    await this.loadComponent(cmp, errors);\n    this.emitChangeOnComponent(changes);\n  }\n\n  /**\n   * If an outside component changes the configuration, this function triggers ngOnChange on the dynamic component.\n   * @param newConfigValues The new configuration value.\n   */\n  emitConfigChange(newConfigValues: unknown) {\n    if (!this.componentInstance) {\n      return;\n    }\n    const oldConfig = cloneDeep(this.config);\n    Object.assign(this.config, newConfigValues);\n    this.componentInstance.config = this.config;\n    this.emitChangeOnComponent({ config: new SimpleChange(oldConfig, this.config, false) });\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  private emitChangeOnComponent(changes: SimpleChanges) {\n    const ngOnChanges = (this.componentRef?.instance as OnChanges)?.ngOnChanges;\n    if (ngOnChanges) {\n      ngOnChanges.call(this.componentRef.instance, changes);\n    }\n  }\n\n  private async loadComponent(\n    dynamicComponent: DynamicComponentDefinition,\n    errors: DynamicComponentAlert[] = []\n  ) {\n    try {\n      this.error = undefined;\n      const componentType = await this.getComponentType(dynamicComponent);\n\n      this.host.clear();\n      this.componentRef = this.host.createComponent(componentType, {\n        environmentInjector: (dynamicComponent.injector || this.injector) as EnvironmentInjector\n      });\n      this.componentInstance = this.componentRef.instance as DynamicComponent;\n\n      const componentMetadata = this.safeReflectComponentType(componentType);\n      const hasConfigInput = componentMetadata?.inputs.some(input => input.propName === 'config');\n      if (hasConfigInput) {\n        this.componentRef.setInput('config', this.config);\n      } else {\n        this.componentInstance.config = this.config;\n      }\n\n      this.componentInstance.alerts = new DynamicComponentAlertAggregator(errors);\n      this.subscribeForOverlayChange();\n    } catch (ex) {\n      this.error = ex;\n      console.warn(ex);\n    }\n  }\n\n  /**\n   * Safely reflects the component metadata.\n   * If reflection fails, it returns a default object with an empty inputs array.\n   */\n  private safeReflectComponentType(componentType: Type<any>) {\n    try {\n      return reflectComponentType(componentType);\n    } catch (error) {\n      console.warn('Failed to reflect component metadata:', error);\n      return { inputs: [] };\n    }\n  }\n\n  private async getComponentType(dynamicComponent: DynamicComponentDefinition): Promise<Type<any>> {\n    if (isLazyDynamicComponents(dynamicComponent)) {\n      const componentPromiseFunction =\n        this.mode === 'component'\n          ? dynamicComponent.loadComponent\n          : dynamicComponent.loadConfigComponent;\n      if (!componentPromiseFunction) {\n        return;\n      }\n      return await componentPromiseFunction();\n    } else if (isEagerDynamicComponents(dynamicComponent)) {\n      return this.mode === 'component'\n        ? dynamicComponent.component\n        : dynamicComponent.configComponent;\n    }\n  }\n\n  private subscribeForOverlayChange() {\n    this.componentInstance.alerts.anyAlertExists$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(anyAlertsExists =>\n        this.updateWidgetClasses.emit({ 'alerts-overlay': anyAlertsExists })\n      );\n  }\n\n  private callOnBeforeSaveHook(): Observable<boolean> {\n    if (!this.componentRef) {\n      return of(true);\n    }\n    const hook = (this.componentRef.instance as OnBeforeSave).onBeforeSave;\n    if (hook) {\n      const result = hook.call(this.componentRef.instance, this.config);\n      if (isUndefined(result)) {\n        return of(true);\n      }\n      if (isPromise(result)) {\n        return from(result) as Observable<boolean>;\n      }\n      return (isObservable(result) ? result : of(result)) as Observable<boolean>;\n    }\n    return of(true);\n  }\n}\n","<ng-template #host></ng-template>\n\n<div class=\"alert alert-warning m-8\" role=\"alert\" *ngIf=\"error && notFoundError\">\n  <strong class=\"message\">\n    {{\n      'This widget cannot be rendered because the current application does not support the following component:'\n        | translate\n    }}\n    {{ componentId }}.\n  </strong>\n  <p class=\"text-muted m-t-8\">\n    <button class=\"btn btn-clean\" (click)=\"expandErrorDetails = !expandErrorDetails\">\n      <i c8yIcon=\"chevron-down\"></i>\n      <span *ngIf=\"!expandErrorDetails\" translate>Show details</span>\n      <span *ngIf=\"expandErrorDetails\" translate>Hide details</span>\n    </button>\n  </p>\n  <div [collapse]=\"!expandErrorDetails\" [isAnimated]=\"true\">\n    <pre>\n      {{ error }}\n    </pre>\n  </div>\n</div>\n\n<div\n  class=\"overlay-center-vertically d-flex d-col a-i-stretch j-c-start p-16 p-r-24 p-l-24\"\n  *ngIf=\"\n    errorStrategy === dynamicComponentErrorStrategy.OVERLAY_ERROR &&\n      componentInstance?.alerts?.anyAlertExists$ | async\n  \"\n>\n  <c8y-dynamic-component-alerts [alerts]=\"componentInstance.alerts\"></c8y-dynamic-component-alerts>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { DynamicComponentComponent } from './dynamic-component.component';\nimport { I18nModule } from '../i18n/i18n.module';\nimport { DynamicComponentAlertsComponent } from './dynamic-component-alerts.component';\nimport { CommonModule } from '../common';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    CollapseModule,\n    RouterModule.forChild([]),\n    I18nModule,\n    DynamicComponentComponent,\n    DynamicComponentAlertsComponent\n  ],\n  exports: [DynamicComponentComponent, DynamicComponentAlertsComponent]\n})\nexport class DynamicComponentModule {}\n","import { cloneDeep, get, uniq } from 'lodash-es';\nimport { Observable } from 'rxjs';\nimport { filter, map, mergeMap, share, take, tap } from 'rxjs/operators';\nimport { DynamicBulkRetrievalError } from './dynamic-bulk-retrieval-error.model';\nimport { DynamicComponentAlert } from './dynamic-component-alert.model';\nimport { DynamicResolverService } from './dynamic-resolver.service';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * A DynamicDetailsResolver is responsible to resolve items of a dynamic components configuration.\n * Ideally the resolve method is implemented in a way that causes not a request per component instance.\n * Instead it should collect the requests it would like to perform within the resolve method,\n * and returns a Promise/Observable that takes care that duplicate objects are just retrieved a single time.\n * The bulkResolvingTrigger$ of the DynamicResolverService can be utilized to know when bulk resolving should be triggered.\n *\n * The serialize method is used for storing the configuration within the backend.\n * It should be implemented in a way, that will reduce it's output to only the required attributes\n * of the entity that are needed for retrieving it afterwards again via the resolve method.\n */\nexport interface DynamicDetailsResolver<T = any> {\n  /**\n   * Used to resolve/refresh a certain attribute of a widgets configuration.\n   * @param  {any} config The dynamic components configuration.\n   * @param  {string} attribute The attribute of the dynamic components configuration to be resolved.\n   * @returns T\n   */\n  resolve(\n    config: any,\n    attribute: string,\n    bulkRequestId: number\n  ):\n    | T\n    | Array<DynamicComponentAlert<T> | T>\n    | DynamicComponentAlert<T>\n    | Promise<T | Array<DynamicComponentAlert<T> | T> | DynamicComponentAlert<T>>\n    | Observable<T | Array<DynamicComponentAlert<T> | T> | DynamicComponentAlert<T>>;\n\n  /**\n   * Used to serialize a certain attribute of a dynamic components configuration.\n   * This is e.g. used when storing the configuration of a widget on a dashboard to the backend.\n   * Usually you should be able to reduce the stored configuration to only e.g. the id of the entity instead of storing the complete entity.\n   * @param  {any} config The dynamic components configuration.\n   * @param  {string} attribute  The attribute of the dynamic components configuration to be serialized.\n   * @returns any The serialized value behind the attribute.\n   */\n  serialize(config: any, attribute: string): Partial<T> | Array<Partial<T>>;\n}\n\n/**\n * An abstract class to simplify implementing the DynamicDetailsResolver interface for performing bulk resolving.\n */\nexport abstract class DynamicBulkDetailsResolver<T extends { [key: string]: any }>\n  implements DynamicDetailsResolver<T>\n{\n  /**\n   * Provides an Observable of the results of all bulk requests.\n   */\n  resultsOfBulkLoad: Observable<{\n    result: T[];\n    bulkRequestId: number;\n    errors: DynamicBulkRetrievalError[];\n  }>;\n  /**\n   * Map containing the ids to be retrieved per bulk request.\n   */\n  protected idsGroupedByBulkId = new Map<number, string[]>();\n\n  constructor(\n    protected dynamicResolver: DynamicResolverService,\n    protected translateService: TranslateService\n  ) {\n    this.resultsOfBulkLoad = this.dynamicResolver.bulkResolvingTrigger$.pipe(\n      map(bulkRequestId => ({\n        uniqIds: uniq(this.idsGroupedByBulkId.get(bulkRequestId) || []),\n        bulkRequestId\n      })),\n      tap(({ bulkRequestId }) => this.idsGroupedByBulkId.delete(bulkRequestId)),\n      mergeMap(({ uniqIds, bulkRequestId }) => this.performBulkRequest(uniqIds, bulkRequestId)),\n      share()\n    );\n  }\n\n  resolve(\n    config: any,\n    attribute: string,\n    bulkRequestId: number\n  ):\n    | T\n    | Array<DynamicComponentAlert<T> | T>\n    | DynamicComponentAlert<T>\n    | Promise<T | Array<DynamicComponentAlert<T> | T> | DynamicComponentAlert<T>>\n    | Observable<T | Array<DynamicComponentAlert<T> | T> | DynamicComponentAlert<T>> {\n    const valueBehindAttribute: Partial<T> | Array<Partial<T>> = get(config, attribute);\n    const idOrIds = this.extractIdsToBeRetrieved(valueBehindAttribute);\n    if (!idOrIds) {\n      return;\n    }\n    if (Array.isArray(idOrIds) && !idOrIds.length) {\n      return [];\n    }\n    const idsArray = Array.isArray(idOrIds) ? idOrIds : [idOrIds];\n    this.addIdsToBeLoaded(bulkRequestId, ...idsArray);\n\n    return this.getResult$(bulkRequestId).pipe(\n      map(({ result: retrievedEntities, errors }) => {\n        if (Array.isArray(idOrIds)) {\n          return idOrIds.map(\n            (id, index) =>\n              retrievedEntities.find(tmp => this.isEntityOfId(tmp, id)) ||\n              this.buildRetrievalAlert(valueBehindAttribute[index], errors)\n          );\n        }\n        return (\n          retrievedEntities.find(tmp => this.isEntityOfId(tmp, idOrIds)) ||\n          this.buildRetrievalAlert(valueBehindAttribute as Partial<T>, errors)\n        );\n      })\n    );\n  }\n\n  /**\n   * Provides an Observable of the results of the given bulkRequestId.\n   */\n  getResult$(\n    bulkRequestId: number\n  ): Observable<{ result: T[]; errors: DynamicBulkRetrievalError[] }> {\n    return this.resultsOfBulkLoad.pipe(\n      filter(({ bulkRequestId: bId }) => bulkRequestId === bId),\n      map(({ result, errors }) => ({ result, errors })),\n      take(1),\n      map(result => cloneDeep(result))\n    );\n  }\n\n  /**\n   * Adds a single id or an array of ids to the idsGroupedByBulkId Map for the provided bulkRequestId.\n   */\n  addIdsToBeLoaded(bulkRequestId: number, ...ids: string[]): void {\n    let groupedIds = this.idsGroupedByBulkId.get(bulkRequestId);\n    if (!groupedIds) {\n      groupedIds = [];\n      this.idsGroupedByBulkId.set(bulkRequestId, groupedIds);\n    }\n    groupedIds.push(...ids);\n  }\n\n  /**\n   * Default implementation compatible with serializing an object or an Array of objects.\n   * Calls serializeSingleObject for an object and for every entry within the array.\n   */\n  serialize(config: any, attribute: string): Partial<T> | Array<Partial<T>> {\n    const valueBehindAttribute: T | T[] = get(config, attribute);\n    if (Array.isArray(valueBehindAttribute)) {\n      return valueBehindAttribute.map(entry => this.serializeSingleObject(entry));\n    }\n    return this.serializeSingleObject(valueBehindAttribute);\n  }\n\n  /**\n   * Called in case a specific id wasn't found as part of the returned dataset.\n   */\n  abstract buildRetrievalAlert(\n    entity: Partial<T>,\n    errors?: Array<{ id: string; status: number; statusText: string }>\n  ): DynamicComponentAlert;\n\n  /**\n   * Used to perform the request(s) to retrieve the provided ids.\n   */\n  protected abstract performBulkRequest(\n    uniqIds: string[],\n    bulkRequestId: number\n  ):\n    | Promise<{ result: T[]; bulkRequestId: number; errors: DynamicBulkRetrievalError[] }>\n    | Observable<{ result: T[]; bulkRequestId: number; errors: DynamicBulkRetrievalError[] }>;\n\n  /**\n   * Used to extract the ids to be provided to the performBulkRequest method from the configuration.\n   */\n  protected abstract extractIdsToBeRetrieved(\n    valueBehindAttribute: Partial<T> | Array<Partial<T>>\n  ): string | string[];\n\n  /**\n   * Responsible for serializing a single object. The returned value will be e.g. stored in the widgets configuration to the backend.\n   * It should reduce the provided object to it's essentials attributes to find it via API, so e.g. the id.\n   * It is basically reversing the thing performed as part of the resolve method.\n   */\n  protected abstract serializeSingleObject(obj: T): Partial<T>;\n\n  /**\n   * Checks wether an object is of given id.\n   * Will by default compare the id attribute with the given id.\n   */\n  protected isEntityOfId(obj: T, id: string): boolean {\n    return obj?.id === id;\n  }\n}\n","import { IResult, Service } from '@c8y/client';\nimport { pick } from 'lodash-es';\nimport { Observable } from 'rxjs';\nimport { DynamicBulkRetrievalError } from './dynamic-bulk-retrieval-error.model';\nimport { DynamicComponentAlert, ResolverServerError } from './dynamic-component-alert.model';\nimport { DynamicBulkDetailsResolver } from './dynamic-details-resolver';\nimport { DynamicResolverService } from './dynamic-resolver.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport abstract class DynamicBulkIIdentifiedResolver<\n  T extends { id: string | number; [key: string]: any }\n> extends DynamicBulkDetailsResolver<T> {\n  /**\n   * Used within the buildRetrievalAlert method to generate the alert text.\n   * For ManagedObjects this would be e.g. 'Unable to retrieve the following managed object: {{requestedEntity}}'\n   */\n  protected abstract readonly errorMessage: `${string}: \"{{entityName}}\" ({{entityId}}).`;\n\n  constructor(\n    protected dynamicResolver: DynamicResolverService,\n    protected translateService: TranslateService,\n    /**\n     * You either have to provide the service or implement the performBulkRequest method on your own.\n     */\n    protected service?: Service<T> & { detail(entityOrId: string | number): Promise<IResult<T>> }\n  ) {\n    super(dynamicResolver, translateService);\n  }\n\n  buildRetrievalAlert(\n    entity: Partial<T>,\n    errors: DynamicBulkRetrievalError[]\n  ): DynamicComponentAlert {\n    let title = '';\n    let foundErrorForId: DynamicBulkRetrievalError;\n    if (errors?.length) {\n      foundErrorForId = errors.find(tmp => tmp.id === entity.id);\n      if (foundErrorForId) {\n        title = ResolverServerError[foundErrorForId.status]\n          ? `${foundErrorForId.status}: ${this.translateService.instant(ResolverServerError[foundErrorForId.status])}`\n          : `${foundErrorForId.status}: ${foundErrorForId.statusText}`;\n      }\n    } else {\n      title = this.translateService.instant(gettext('An error occurred'));\n    }\n    const errorDetails = this.translateService.instant(this.errorMessage, {\n      entityName: entity.name || entity.text || '-',\n      entityId: entity.id\n    });\n\n    const text = `<strong>${title}</strong>\n        <p>${errorDetails}</p>`;\n\n    const alert = new DynamicComponentAlert({\n      text,\n      allowHtml: true,\n      type: 'danger',\n      unresolvedData: entity\n    });\n    alert.retrievalError = foundErrorForId;\n    return alert;\n  }\n\n  protected performBulkRequest(\n    uniqIds: string[],\n    bulkRequestId: number\n  ):\n    | Promise<{ result: T[]; bulkRequestId: number; errors: DynamicBulkRetrievalError[] }>\n    | Observable<{ result: T[]; bulkRequestId: number; errors: DynamicBulkRetrievalError[] }> {\n    if (!this.service) {\n      console.error(\n        `Either provide a service to the DynamicBulkIIdentifiedResolver constructor or implement performBulkRequest yourself.`\n      );\n      return Promise.resolve({ bulkRequestId, errors: [], result: [] });\n    }\n\n    const promArray: Array<Promise<IResult<T> | DynamicBulkRetrievalError>> = uniqIds.map(id =>\n      this.service.detail(id).catch(res => ({ id, ...pick(res?.res, ['status', 'statusText']) }))\n    );\n    return Promise.all(promArray).then(result => {\n      const successfulResults = result\n        .map((tmp: IResult<T>) => tmp.data)\n        .filter(tmp => !!tmp) as T[];\n      const errors = result.filter(\n        (tmp: DynamicBulkRetrievalError) => !!tmp.id\n      ) as DynamicBulkRetrievalError[];\n      return { bulkRequestId, errors, result: successfulResults };\n    });\n  }\n\n  protected extractIdsToBeRetrieved(\n    valueBehindAttribute: Partial<T> | Array<Partial<T>>\n  ): string | string[] {\n    if (Array.isArray(valueBehindAttribute)) {\n      return valueBehindAttribute\n        .map(entry => entry?.id)\n        .filter(tmp => !!tmp)\n        .map(tmp => `${tmp}`);\n    }\n\n    const id = valueBehindAttribute?.id;\n    if (id) {\n      return `${id}`;\n    }\n    return null;\n  }\n\n  protected serializeSingleObject(obj: T): Partial<T> {\n    if (!obj) {\n      return obj;\n    }\n    return pick(obj, ['id', 'name', 'text']) as Partial<T>;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport { DynamicBulkRetrievalError } from './dynamic-bulk-retrieval-error.model';\nimport { DynamicBulkIIdentifiedResolver } from './abstract-id-resolver';\nimport { DynamicResolverService } from './dynamic-resolver.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { MOChunkLoaderService } from '../common/mo-chunk-loader.service';\n\n/**\n * A DynamicDetailsResolver responsible to resolve managedObjects for dynamic components.\n * This service implements bulk resolving. This reduces the number of requests made to\n * the backend by querying multiple managedObjectIds in a single request.\n */\n@Injectable({ providedIn: 'root' })\nexport class DynamicManagedObjectResolver extends DynamicBulkIIdentifiedResolver<IManagedObject> {\n  protected errorMessage = gettext(\n    'Unable to retrieve the following managed object: \"{{entityName}}\" ({{entityId}}).'\n  );\n  protected readonly maxNumberOfManagedObjectsPerRequest = 50;\n  protected queryFilter: any = {};\n\n  constructor(\n    protected dynamicResolver: DynamicResolverService,\n    protected translateService: TranslateService,\n    protected inventory: InventoryService,\n    protected moChunkLoader: MOChunkLoaderService\n  ) {\n    super(dynamicResolver, translateService);\n  }\n\n  protected performBulkRequest(\n    uniqIds: string[],\n    bulkRequestId: number\n  ):\n    | Promise<{\n        result: IManagedObject[];\n        bulkRequestId: number;\n        errors: DynamicBulkRetrievalError[];\n      }>\n    | Observable<{\n        result: IManagedObject[];\n        bulkRequestId: number;\n        errors: DynamicBulkRetrievalError[];\n      }> {\n    return this.loadManagedObjectsInChunks(uniqIds, bulkRequestId);\n  }\n\n  protected async loadManagedObjectsInChunks(uniqIds: string[], bulkRequestId: number) {\n    const { results, errors } = await this.moChunkLoader.processInChunks(\n      uniqIds,\n      this.maxNumberOfManagedObjectsPerRequest,\n      ids => this.loadAChunkOfManagedObjects(ids)\n    );\n\n    return { result: results, bulkRequestId, errors };\n  }\n\n  protected loadAChunkOfManagedObjects(uniqIds: string[]) {\n    return this.moChunkLoader.loadAChunkOfManagedObjectsBase(\n      uniqIds,\n      this.inventory,\n      this.maxNumberOfManagedObjectsPerRequest,\n      id => this.moChunkLoader.getStatusDetails(id),\n      this.queryFilter\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { pick } from 'lodash-es';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DynamicDetailsResolver } from './dynamic-details-resolver';\nimport { DynamicManagedObjectResolver } from './managedObject-resolver';\nimport { DatapointSyncService } from '../common/datapoints-sync.service';\n\n/**\n * A DynamicDetailsResolver responsible to resolve configured datapoints for dynamic components.\n * This service implements bulk resolving and uses the DynamicManagedObjectResolver in the background.\n * It will update the datapoint details with the current values from the datapoint library and\n * also updates the target of the datapoint in case e.g. the name changed.\n */\n@Injectable({ providedIn: 'root' })\nexport class DynamicDatapointsResolver implements DynamicDetailsResolver {\n  constructor(\n    protected moResolver: DynamicManagedObjectResolver,\n    protected datapointSyncService: DatapointSyncService\n  ) {}\n\n  resolve(\n    config: any,\n    attribute: string,\n    bulkRequestId: number\n  ): any[] | Promise<any[]> | Observable<any[]> {\n    const datapoints: any[] = config[attribute];\n    if (!datapoints || !Array.isArray(datapoints) || !datapoints.length) {\n      return [];\n    }\n\n    const moIds = this.datapointSyncService.getManagedObjectIds(datapoints);\n\n    this.moResolver.addIdsToBeLoaded(bulkRequestId, ...moIds);\n\n    return this.moResolver\n      .getResult$(bulkRequestId)\n      .pipe(\n        map(({ result: updatedMos, errors }) =>\n          this.datapointSyncService.assignUpdatedValues(datapoints, updatedMos, errors)\n        )\n      );\n  }\n\n  serialize(config: any, attribute: string) {\n    const valueBehindAttribute: any[] = config[attribute];\n    if (!Array.isArray(valueBehindAttribute)) {\n      return config[attribute];\n    }\n    valueBehindAttribute.forEach(value => {\n      if (value.__target) {\n        value.__target = pick(value.__target, ['id', 'name']);\n      }\n    });\n    return valueBehindAttribute;\n  }\n}\n","import { Component, ViewChild } from '@angular/core';\n\n@Component({\n  selector: 'c8y-dashboard-child-action',\n  templateUrl: './dashboard-child-action.component.html',\n  standalone: true\n})\nexport class DashboardChildActionComponent {\n  @ViewChild('template', { static: false }) template: any;\n}\n","<ng-template #template>\n  <li>\n    <ng-content></ng-content>\n  </li>\n</ng-template>\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'c8y-dashboard-child-title',\n  templateUrl: './dashboard-child-title.component.html',\n  standalone: true\n})\nexport class DashboardChildTitleComponent {}\n","<div class=\"card-title\">\n  <ng-content></ng-content>\n</div>\n","import { CdkDragMove } from '@angular/cdk/drag-drop';\nimport { sortBy } from 'lodash-es';\nimport { pipe } from 'rxjs';\nimport { distinctUntilChanged, expand, filter, map, tap } from 'rxjs/operators';\nimport { DashboardComponent } from './dashboard.component';\nimport {\n  DashboardChildDimension,\n  DashboardChildResizeDimension,\n  DashboardChildArrangement\n} from './dashboard.model';\nimport { DashboardChildComponent } from './dashboard-child.component';\n\nexport class DashboardChildChange {\n  child: DashboardChildComponent;\n  children: DashboardChildComponent[];\n  private dashboard: DashboardComponent;\n\n  private readonly MIN_WIDTH = 2;\n  private MIN_HEIGHT = 1;\n  private readonly PIXEL_SIZE_THRESHOLD = 10;\n\n  private diffX = 0;\n  private diffY = 0;\n\n  constructor(childToChange: DashboardChildComponent) {\n    this.dashboard = childToChange.dashboard;\n    this.children = childToChange.dashboard.children\n      ? childToChange.dashboard.children.filter(child => childToChange !== child)\n      : [];\n    this.child = childToChange;\n  }\n\n  get resize$() {\n    return this.child.dragSource.moved.pipe(\n      map(move => this.getPixelSize(move)),\n      tap(resizeDimension => this.setPixelSize(resizeDimension)),\n      map(resizeDimension => this.getDimensionSize(resizeDimension)),\n      distinctUntilChanged(\n        (prev, next) => prev.width === next.width && prev.height === next.height\n      ),\n      map(dimension => this.setDimension(dimension)),\n      this.arrangePipe()\n    );\n  }\n\n  get drag$() {\n    return this.child.dragSource.moved.pipe(\n      map(move => this.getDimensionPosition(move)),\n      filter(\n        dimension =>\n          dimension.x >= 0 &&\n          dimension.x <= this.dashboard.columns - this.child.width &&\n          dimension.y >= 0\n      ),\n      distinctUntilChanged((prev, next) => prev.x === next.x && prev.y === next.y),\n      this.arrangePipe()\n    );\n  }\n\n  findFreeDimension() {\n    let y = -1;\n    let x = 0;\n    let found = false;\n    const { width, height } = this.child;\n    if (width > this.dashboard.columns) {\n      throw new Error('The child does not fit on the current dashboard.');\n    }\n    do {\n      x = 0;\n      y++;\n      while (x + width <= this.dashboard.columns) {\n        if (this.getCollided({ x, y, width, height }).length === 0) {\n          found = true;\n          break;\n        }\n        x++;\n      }\n    } while (!found);\n    return { x, y, width, height } as DashboardChildDimension;\n  }\n\n  collapseUpAll(): void {\n    return sortBy([this.child, ...this.children], ['y']).forEach(w => {\n      const ds = new DashboardChildChange(w);\n      const newPosition = ds.collapseUp(w);\n      ds.setDimension(newPosition);\n    });\n  }\n\n  arrangeAll(arrange: DashboardChildArrangement) {\n    const { current, scan, spacing, origin } = arrange;\n    const collided = this.getCollided(current, sortBy(scan, ['y']));\n    return collided.map(child => {\n      const ds = new DashboardChildChange(child);\n      ds.setDimension({ ...child, y: spacing });\n      return {\n        current: child,\n        scan: scan.filter(w => w !== child),\n        spacing: child.y + child.height,\n        origin\n      };\n    });\n  }\n\n  private arrangePipe() {\n    return pipe(\n      map(\n        (dimension: DashboardChildDimension) =>\n          ({\n            current: dimension,\n            scan: this.children,\n            spacing: dimension.y + dimension.height,\n            origin: { ...dimension }\n          }) as DashboardChildArrangement\n      ),\n      expand((dimensions: DashboardChildArrangement) => this.arrangeAll(dimensions)),\n      map(({ origin }) => origin),\n      map(dimension => this.setDimension(dimension, true)),\n      tap(() => this.collapseUpAll())\n    );\n  }\n\n  private collapseUp(dimension: DashboardChildDimension) {\n    let { y } = dimension;\n    while (y > 0) {\n      if (this.getCollided({ ...dimension, y: y - 1 }).length !== 0) {\n        break;\n      }\n      y--;\n    }\n    return { ...dimension, y };\n  }\n\n  private setDimension(dimension: DashboardChildDimension, notIfColliding = false) {\n    if (notIfColliding && this.getCollided(dimension).length > 0) {\n      return;\n    }\n\n    this.child.x = dimension.x;\n    this.child.y = dimension.y;\n    if (\n      dimension.width >= this.MIN_WIDTH &&\n      dimension.x + dimension.width <= this.dashboard.columns\n    ) {\n      this.child.width = dimension.width;\n    } else if (dimension.width < this.MIN_WIDTH) {\n      dimension.width = this.MIN_WIDTH;\n    } else {\n      dimension.width = this.dashboard.columns - dimension.x;\n    }\n    if (dimension.height >= this.MIN_HEIGHT) {\n      this.child.height = dimension.height;\n    } else {\n      dimension.height = this.MIN_WIDTH;\n    }\n    return dimension;\n  }\n\n  private setPixelSize({ width, height }) {\n    if (width >= this.dashboard.columnSize * this.MIN_WIDTH - this.dashboard.gap) {\n      this.child.pxWidth = width + this.PIXEL_SIZE_THRESHOLD;\n    }\n    if (height >= this.dashboard.rowSize * this.MIN_HEIGHT - this.dashboard.gap) {\n      this.child.pxHeight = height + this.PIXEL_SIZE_THRESHOLD;\n    }\n  }\n\n  private getPixelSize(moveEvent: CdkDragMove) {\n    const draggedElement = this.child.element.nativeElement;\n    if (!this.diffX) {\n      const rect = draggedElement.getBoundingClientRect();\n      this.diffX = rect.left;\n      this.diffY = rect.top;\n    }\n    const { x, y } = moveEvent.pointerPosition;\n    const width = Math.round(x - this.diffX);\n    const height = Math.round(y - this.diffY);\n    return { width, height, pointer: { x, y } } as DashboardChildResizeDimension;\n  }\n\n  private getDimensionSize(resizePosition: DashboardChildResizeDimension) {\n    const { x, y } = this.child;\n    const ds = this.dashboard.dashboardRect;\n    const column = this.dashboard.columnSize;\n    const row = this.dashboard.rowSize + this.dashboard.gap;\n    const width =\n      Math.round((resizePosition.pointer.x - ds.left + this.dashboard.gap) / column) - x;\n    const height = Math.round((resizePosition.pointer.y - ds.top + this.dashboard.gap) / row) - y;\n    return { x, y, width, height } as DashboardChildDimension;\n  }\n\n  private getDimensionPosition(moveEvent: CdkDragMove) {\n    const draggedElement = moveEvent.source.element.nativeElement.previousElementSibling;\n    if (!this.diffX) {\n      const rect = draggedElement.getBoundingClientRect();\n      this.diffX = moveEvent.pointerPosition.x - rect.left;\n      this.diffY = moveEvent.pointerPosition.y - rect.top;\n    }\n\n    const left = moveEvent.pointerPosition.x - this.diffX;\n    const top = moveEvent.pointerPosition.y - this.diffY;\n    const { width, height } = this.child;\n    const ds = this.dashboard.dashboardRect;\n    const column = this.dashboard.columnSize;\n    const row = this.dashboard.rowSize + this.dashboard.gap / 2;\n    const x = Math.round((left - ds.left) / column);\n    const y = Math.round((top - ds.top) / row);\n    return { x, y, width, height } as DashboardChildDimension;\n  }\n\n  private doesCollide(a: DashboardChildDimension, b: DashboardChildDimension) {\n    if (b.x === undefined) {\n      return false;\n    }\n    return !(\n      a.y + a.height - 1 < b.y ||\n      a.y > b.y + b.height - 1 ||\n      a.x + a.width - 1 < b.x ||\n      a.x > b.x + b.width - 1\n    );\n  }\n\n  private getCollided(currentDimension: DashboardChildDimension, dimensions = this.children) {\n    const collided = dimensions.filter(dimension => this.doesCollide(currentDimension, dimension));\n    return collided;\n  }\n}\n","import {\n  AfterContentInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  HostListener,\n  Input,\n  Output\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DashboardChildComponent } from './dashboard-child.component';\nimport { DashboardChange } from './dashboard.model';\n\n/**\n * Displays a CSS grid which is customizable by the customer. You can set\n * `c8y-dashboard-child`-components on it or position any element on it by\n * setting the grid CSS properties. On change (resize, or rearrange) the\n * component emits an change event.\n *\n * ```html\n * <c8y-title>Hello from outlet</c8y-title>\n *\n * <c8y-action-bar-item [placement]=\"'right'\">\n *   <button class=\"btn btn-link\" (click)=\"addRandom()\"><i c8yIcon=\"plus-circle\"></i> Add random</button>\n * </c8y-action-bar-item>\n * <c8y-action-bar-item [placement]=\"'right'\">\n *   <button class=\"btn btn-link\" (click)=\"isFrozen = !isFrozen\">\n *     <i [c8yIcon]=\"isFrozen ? 'lock' : 'unlock'\"></i> Toggle freeze\n *   </button>\n * </c8y-action-bar-item>\n *\n * <c8y-dashboard (dashboardChange)=\"dashboardChange($event)\">\n *   <c8y-dashboard-child\n *     [isFrozen]=\"isFrozen\"\n *     title=\"dynamic\"\n *     *ngFor=\"let widget of widgets\"\n *     #current\n *   >\n *     x: {{ current.x }}<br />\n *     y: {{ current.y }}<br />\n *     width: {{ current.width }}<br />\n *     height: {{ current.height }}<br />\n *   </c8y-dashboard-child>\n *   <c8y-dashboard-child\n *     #cpWidget\n *     [isFrozen]=\"isFrozen\"\n *     [x]=\"0\"\n *     [y]=\"1\"\n *     [width]=\"3\"\n *     [height]=\"2\"\n *     [data]=\"widget\"\n *     [class]=\"'card card-dashboard panel-title-regular panel-content-branded panel-title-overlay'\"\n *   >\n *     <c8y-dashboard-child-title>\n *       <span>World!</span>\n *     </c8y-dashboard-child-title>\n *     x: {{ cpWidget.x }}<br />\n *     y: {{ cpWidget.y }}<br />\n *     width: {{ cpWidget.width }}<br />\n *     height: {{ cpWidget.height }}<br />\n *   </c8y-dashboard-child>\n *   <c8y-dashboard-child\n *     #cpWidget2\n *     [isFrozen]=\"isFrozen\"\n *     [x]=\"8\"\n *     [y]=\"1\"\n *     [width]=\"4\"\n *     [height]=\"4\"\n *     [class]=\"'card card-dashboard panel-content-dark'\"\n *   >\n *     <c8y-dashboard-child-title>\n *       <span>Hello!</span>\n *     </c8y-dashboard-child-title>\n *     <c8y-dashboard-child-action>\n *       <a href=\"\" (click)=\"cpWidget2.isFrozen = !cpWidget2.isFrozen; (false)\">\n *         <i [c8yIcon]=\"cpWidget2.isFrozen ? 'lock' : 'unlock'\"></i> Toggle freeze\n *       </a>\n *     </c8y-dashboard-child-action>\n *     x: {{ cpWidget2.x }}<br />\n *     y: {{ cpWidget2.y }}<br />\n *     width: {{ cpWidget2.width }}<br />\n *     height: {{ cpWidget2.height }}<br />\n *   </c8y-dashboard-child>\n *\n *   <c8y-dashboard-child\n *     #cpWidget3\n *     [isFrozen]=\"isFrozen\"\n *     [x]=\"0\"\n *     [y]=\"3\"\n *     [width]=\"4\"\n *     [height]=\"4\"\n *     [class]=\"'card-dashboard panel-content-transparent'\"\n *   >\n *     <c8y-dashboard-child-title *ngIf=\"showTitle\">\n *       <span>Transparent!</span>\n *     </c8y-dashboard-child-title>\n *     <c8y-dashboard-child-action>\n *       <a href=\"\" (click)=\"showTitle = !showTitle; (false)\">\n *         <i [c8yIcon]=\"'heading'\"></i> Hide/show title\n *       </a>\n *     </c8y-dashboard-child-action>\n *     <c8y-dashboard-child-action>\n *       <a href=\"\" (click)=\"cpWidget3.isFrozen = !cpWidget3.isFrozen; (false)\">\n *         <i [c8yIcon]=\"cpWidget3.isFrozen ? 'lock' : 'unlock'\"></i> Toggle freeze\n *       </a>\n *     </c8y-dashboard-child-action>\n *     x: {{ cpWidget3.x }}<br />\n *     y: {{ cpWidget3.y }}<br />\n *     width: {{ cpWidget3.width }}<br />\n *     height: {{ cpWidget3.height }}<br />\n *   </c8y-dashboard-child>\n * </c8y-dashboard>\n * ```\n */\n@Component({\n  selector: 'c8y-dashboard',\n  templateUrl: './dashboard.component.html',\n  host: {\n    class: 'c8y-grid-dashboard dashboard-grid'\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true\n})\nexport class DashboardComponent implements AfterContentInit {\n  /**\n   * All children in that dashboard.\n   */\n  children: DashboardChildComponent[] = [];\n\n  /**\n   * The amount of columns on that dashboard.\n   */\n  @Input() columns = 12;\n\n  /**\n   * The spacing between each children in pixel.\n   */\n  @Input() gap = 12;\n\n  /**\n   * The amount of rows to dusplay. Set to auto to\n   * auto extend the rows.\n   */\n  @Input() rows: number | 'auto' = 'auto';\n\n  /**\n   * An event fired if the dashboard was changed.\n   */\n  @Output() dashboardChange = new EventEmitter<DashboardChange>();\n\n  dashboardRect: DOMRect;\n  private lastRow = 1;\n  private readonly DEFAULT_ROW_SIZE = 68;\n\n  /**\n   * The current column size.\n   */\n  get columnSize() {\n    return this.dashboardRect.width / this.columns;\n  }\n\n  /**\n   * The current row size.\n   */\n  get rowSize() {\n    return this.rows === 'auto' ? this.DEFAULT_ROW_SIZE : this.calculateRowSize();\n  }\n\n  /**\n   * Returns all positioning styles. Nasty workaround for that issue:\n   * https://github.com/angular/angular/issues/9343\n   */\n  @HostBinding('attr.style')\n  get inlineStyle() {\n    return this.sanitizer.bypassSecurityTrustStyle(\n      `\n        -ms-grid-columns: (1fr)[${this.columns}];\n        grid-template-columns: repeat(${this.columns}, 1fr);\n        ${this.rows !== 'auto' ? `grid-template-rows: repeat(${this.rows}, 1fr);` : ''}\n        grid-auto-rows: ${this.rowSize + this.gap}px;\n        -ms-grid-rows: (${this.rowSize + this.gap}px)[${\n          this.rows === 'auto' ? this.lastRow : this.rows\n        }];\n        margin: -${this.gap}px -${this.gap}px 0;\n      `\n    );\n  }\n\n  constructor(\n    private element: ElementRef,\n    private sanitizer: DomSanitizer\n  ) {}\n\n  ngAfterContentInit(): void {\n    this.onResize();\n  }\n\n  @HostListener('window:resize')\n  onResize() {\n    this.updateRectSize();\n  }\n\n  /**\n   * Updates the current rect size of the dashboard.\n   */\n  updateRectSize() {\n    const ele = this.element.nativeElement as HTMLElement;\n    this.dashboardRect = ele.getBoundingClientRect();\n  }\n\n  emitChange(widget: DashboardChildComponent) {\n    this.dashboardChange.emit({ source: widget, children: this.children });\n  }\n\n  private calculateRowSize() {\n    return this.dashboardRect.height / (this.rows as number);\n  }\n}\n","<ng-content></ng-content>\n","import {\n  CdkDrag,\n  CdkDragEnd,\n  CdkDragStart,\n  CdkDropList,\n  CdkDragHandle,\n  CdkDragPlaceholder\n} from '@angular/cdk/drag-drop';\nimport {\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  Output\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { BehaviorSubject, Observable, Subscription, fromEvent } from 'rxjs';\nimport { DashboardChildActionComponent } from './dashboard-child-action.component';\nimport { DashboardChildChange } from './dashboard-child-change';\nimport { DashboardComponent } from './dashboard.component';\nimport { DashboardChildDimension, HeaderTemplates, Widget } from './dashboard.model';\nimport { debounceTime, map, shareReplay, startWith } from 'rxjs/operators';\nimport { NgStyle, NgClass, NgTemplateOutlet, AsyncPipe } from '@angular/common';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconDirective } from '../common/icon.directive';\nimport { DropdownFocusTrapDirective } from '../common/dropdown-focus-trap.directive';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * A dashboard child allows to position elements\n * correctly on a grid.\n *\n * By setting `c8y-dashboard-child-actions` and\n * `c8y-dashboard-child-title` on the element you can add\n * custom actions or a custom title to the current child.\n *\n * By adding the correct branded classes, you can define\n * the look and feel of the child. By default it is displayed\n * as a card.\n *\n * ```html\n *   <c8y-dashboard-child\n *     #cpWidget3\n *     [x]=\"0\"\n *     [y]=\"3\"\n *     [width]=\"4\"\n *     [height]=\"4\"\n *     [class]=\"'card-dashboard panel-content-transparent'\"\n *   >\n *     <c8y-dashboard-child-title *ngIf=\"showTitle\">\n *       <span>Transparent!</span>\n *     </c8y-dashboard-child-title>\n *     <c8y-dashboard-child-action>\n *       <a href=\"\" (click)=\"showTitle = !showTitle; (false)\">\n *         <i [c8yIcon]=\"'heading'\"></i> Hide/show title\n *       </a>\n *     </c8y-dashboard-child-action>\n *     x: {{ cpWidget3.x }}<br />\n *     y: {{ cpWidget3.y }}<br />\n *     width: {{ cpWidget3.width }}<br />\n *     height: {{ cpWidget3.height }}<br />\n *   </c8y-dashboard-child>\n * ```\n */\n@Component({\n  selector: 'c8y-dashboard-child',\n  templateUrl: './dashboard-child.component.html',\n  host: {\n    class: 'dashboard-grid-child'\n  },\n  standalone: true,\n  imports: [\n    CdkDropList,\n    CdkDrag,\n    NgStyle,\n    NgClass,\n    CdkDragHandle,\n    TooltipModule,\n    IconDirective,\n    BsDropdownModule,\n    NgTemplateOutlet,\n    CdkDragPlaceholder,\n    C8yTranslatePipe,\n    DropdownFocusTrapDirective,\n    AsyncPipe\n  ]\n})\nexport class DashboardChildComponent implements DashboardChildDimension {\n  actions: DashboardChildActionComponent[] = [];\n  @ContentChildren(DashboardChildActionComponent) set templateActions(\n    actions: DashboardChildActionComponent[]\n  ) {\n    this.addActions(actions, true);\n  }\n\n  dragSource: CdkDrag;\n  isResize = false;\n  isDragging = false;\n  klasses = {};\n  _additionalHeaderTemplates = new BehaviorSubject<HeaderTemplates[]>([]);\n\n  additionalHeaderTemplates$ = this._additionalHeaderTemplates.asObservable().pipe(\n    map(templates => this.sortByPriority(templates)),\n    shareReplay(1)\n  );\n\n  _pxWidth = '100%';\n  _pxHeight = '100%';\n\n  @HostBinding('class.fullscreen')\n  fullscreen = false;\n  readonly MD_BOOTSTRAP_BREAKPOINT_READONLY_CLASS_PROPERTY = 768;\n\n  /**\n   * The x position of the child.\n   */\n  @Input() x;\n\n  /**\n   * The y position of the child.\n   */\n  @Input() y;\n\n  /**\n   * The width of the component in grid-columns.\n   */\n  @Input() width = 1;\n\n  /**\n   * The height of the component in grid-rows.\n   */\n  @Input() height = 1;\n\n  /**\n   * The data object can be used as a dataTransfer object for events of the child.\n   */\n  @Input() data: Widget | any;\n\n  /**\n   * The margin of the child in pixel.\n   */\n  @Input() margin = 12;\n\n  /**\n   * The child content is initialized, as soon it is scrolled into viewport\n   */\n  @Input() useIntersection = false;\n\n  /**\n   * If a dashboard is frozen, all children cannot be moved\n   * or resized.\n   * @deprecated use editMode.\n   */\n  @Input()\n  set isFrozen(value: boolean) {\n    this.editMode = !value;\n  }\n\n  @Input()\n  canToggleFullscreen = true;\n\n  /**\n   * If a dashboard editing is disabled no widgets can be moved, edited, removed\n   * or added.\n   */\n  @Input() editMode = false;\n\n  /**\n   * An event fired if a child change is started (dragging or resizing)\n   */\n  @Output() changeStart = new EventEmitter<DashboardChildComponent>();\n\n  /**\n   * An event fired if a child change is ended\n   */\n  @Output() changeEnd = new EventEmitter<DashboardChildComponent>();\n\n  /**\n   * An event fired if the fullscreen toggle button was pressed.\n   */\n  @Output() toggleFullscreen = new EventEmitter<void>();\n\n  /**\n   * All classes added to this child\n   */\n  @Input()\n  class: string[] | { [key: string]: boolean } = {};\n\n  /**\n   * Updates the pixel width of the child (used for resizing)\n   */\n  set pxWidth(value) {\n    this._pxWidth = `${value}px`;\n  }\n\n  /**\n   * Updates the pixel height of the child (used for resizing)\n   */\n  set pxHeight(value) {\n    this._pxHeight = `${value}px`;\n  }\n\n  /**\n   * Triggers on every resize and returns true if in one column view (mobile view)\n   */\n  isOneColumnView$: Observable<boolean> = fromEvent(window, 'resize').pipe(\n    map(_ => {\n      return (\n        document.documentElement.clientWidth <= this.MD_BOOTSTRAP_BREAKPOINT_READONLY_CLASS_PROPERTY\n      );\n    }),\n    debounceTime(200),\n    startWith(\n      document.documentElement.clientWidth <= this.MD_BOOTSTRAP_BREAKPOINT_READONLY_CLASS_PROPERTY\n    )\n  );\n\n  /**\n   * An indicator if the child is intersected (that mean visible for the user)\n   */\n  intersected = false;\n\n  /**\n   * Tells if the last change was a dragging or resizing event;\n   */\n  lastChange: 'drag' | 'resize' = null;\n\n  /**\n   * nasty workaround for that issue:\n   * https://github.com/angular/angular/issues/9343\n   */\n  @HostBinding('attr.style')\n  get inlineStyle() {\n    return this.sanitizer.bypassSecurityTrustStyle(`\n    grid-column-start: ${this.x + 1};\n    grid-row-start: ${this.y + 1};\n    grid-column-end: span ${this.width};\n    grid-row-end: span ${this.height};\n    display: block;\n    margin: ${this.margin || 12}px;\n    order: ${this.getOrder()};\n    `);\n  }\n\n  /**\n   * The observable subscription which is listen to\n   * on changes (drag or resize).\n   */\n  changeSubscription: Subscription;\n\n  constructor(\n    public dashboard: DashboardComponent,\n    private sanitizer: DomSanitizer,\n    public element: ElementRef\n  ) {}\n\n  ngOnChanges(): void {\n    this.klasses = {\n      card: true,\n      'card-dashboard': true,\n      'on-resize': this.isResize,\n      ...this.class\n    };\n  }\n\n  ngOnInit(): void {\n    if (this.x === undefined || this.y === undefined) {\n      setTimeout(() => this.setDynamicDimension());\n    }\n    if (this.useIntersection && 'IntersectionObserver' in window) {\n      const intersectionObserver = new IntersectionObserver(\n        events => (this.intersected = this.childInView(events, intersectionObserver))\n      );\n      intersectionObserver.observe(this.element.nativeElement);\n    } else {\n      this.intersected = true;\n    }\n  }\n\n  ngAfterViewInit() {\n    this.dashboard.children.push(this);\n  }\n\n  setDynamicDimension() {\n    const ds = new DashboardChildChange(this);\n    const { x, y } = ds.findFreeDimension();\n    this.x = x;\n    this.y = y;\n\n    this.dashboard.emitChange(this);\n  }\n\n  resizeStarted($event: CdkDragStart) {\n    this.isResize = true;\n    this.dashboard.updateRectSize();\n    this.dragSource = $event.source;\n    const positioning = new DashboardChildChange(this);\n    this.changeSubscription = positioning.resize$.subscribe();\n    this.changeStart.emit(this);\n    this.ngOnChanges();\n  }\n\n  dragStarted($event: CdkDragStart) {\n    this.isDragging = true;\n    this.dashboard.updateRectSize();\n    this.dragSource = $event.source;\n    const positioning = new DashboardChildChange(this);\n    this.changeSubscription = positioning.drag$.subscribe();\n    this.changeStart.emit(this);\n  }\n\n  reset($event?: CdkDragEnd) {\n    this.lastChange = this.isResize ? 'resize' : 'drag';\n    this.isResize = false;\n    this.isDragging = false;\n    this._pxWidth = '100%';\n    this._pxHeight = '100%';\n    this.ngOnChanges();\n    if ($event) {\n      $event.source.reset();\n    }\n    if (this.changeSubscription) {\n      this.changeSubscription.unsubscribe();\n      this.dashboard.emitChange(this);\n      this.changeEnd.emit(this);\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.changeSubscription) {\n      this.changeSubscription.unsubscribe();\n    }\n    this._additionalHeaderTemplates.complete();\n    this.removeSelfFromDashboard();\n  }\n\n  addActions(actions: DashboardChildActionComponent[], prepend = false) {\n    if (prepend) {\n      this.actions = [...actions, ...this.actions];\n    } else {\n      this.actions = [...this.actions, ...actions];\n    }\n  }\n\n  private removeSelfFromDashboard() {\n    const i = this.dashboard.children.indexOf(this);\n\n    if (i >= 0) {\n      this.dashboard.children.splice(i, 1);\n    }\n  }\n\n  private sortByPriority<T extends { priority?: number }>(items: T[]): T[] {\n    return [...items].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n  }\n\n  private getOrder() {\n    return `${Math.round((this.y + (this.x + 1) / 100) * 100)}`;\n  }\n\n  private childInView(events, observer) {\n    const intersectingEvent = events.find(event => event.isIntersecting);\n    if (intersectingEvent) {\n      observer.unobserve(intersectingEvent.target);\n      return true;\n    }\n    return false;\n  }\n}\n","<div cdkDropList>\n  @if (isResize) {\n    <div class=\"card-placeholder\"></div>\n  }\n\n  <div\n    [ngStyle]=\"{ width: _pxWidth, height: _pxHeight }\"\n    [ngClass]=\"klasses\"\n    cdkDrag\n    (cdkDragStarted)=\"dragStarted($event)\"\n    (cdkDragEnded)=\"reset($event)\"\n    [cdkDragDisabled]=\"(isOneColumnView$ | async) || !editMode || fullscreen\"\n  >\n    <div\n      class=\"card-header-actions card-header-grid\"\n      [ngClass]=\"{\n        'drag-handle': editMode && !fullscreen,\n        draggableCursor: editMode && !fullscreen\n      }\"\n      cdkDragHandle\n    >\n      <ng-content select=\"c8y-dashboard-child-title\"></ng-content>\n\n      @if (actions.length > 0) {\n        <div class=\"header-actions d-flex a-i-center\">\n          @for (headerTemplate of additionalHeaderTemplates$ | async; track headerTemplate) {\n            <ng-container *ngTemplateOutlet=\"headerTemplate.template\"></ng-container>\n          }\n\n          <button\n            class=\"btn btn-icon\"\n            [attr.aria-label]=\"'Full screen' | translate\"\n            [tooltip]=\"fullscreen ? ('Exit full screen' | translate) : ('Full screen' | translate)\"\n            container=\"body\"\n            [delay]=\"500\"\n            [disabled]=\"editMode || !canToggleFullscreen\"\n            (click)=\"toggleFullscreen.next()\"\n            data-cy=\"c8y-dashboard-child--settings-fullscreen\"\n          >\n            <i [c8yIcon]=\"fullscreen ? 'compress' : 'expand'\"></i>\n          </button>\n\n          <div\n            class=\"optionsBtn dropdown\"\n            placement=\"bottom right\"\n            dropdown\n            c8yDropdownFocusTrap\n            [container]=\"'body'\"\n            #cardDashboardActions=\"bs-dropdown\"\n          >\n            @if (editMode) {\n              <button\n                class=\"btn btn-icon dropdown-toggle c8y-dropdown\"\n                title=\"{{ 'Settings' | translate }}\"\n                [attr.aria-label]=\"'Settings' | translate\"\n                aria-haspopup=\"true\"\n                [attr.aria-expanded]=\"cardDashboardActions.isOpen\"\n                data-cy=\"c8y-dashboard-child--settings\"\n                (click)=\"(false)\"\n                dropdownToggle\n              >\n                <i [c8yIcon]=\"'cog'\"></i>\n              </button>\n            } @else {\n              <button\n                class=\"btn btn-icon\"\n                [attr.aria-label]=\"'Click &quot;Edit widgets&quot; to unlock' | translate\"\n                tooltip=\"{{ 'Click &quot;Edit widgets&quot; to unlock' | translate }}\"\n                container=\"body\"\n                (click)=\"(false)\"\n                data-cy=\"c8y-dashboard-child--settings-locked\"\n              >\n                <i [c8yIcon]=\"'lock'\"></i>\n              </button>\n            }\n\n            <ul\n              class=\"dropdown-menu dropdown-menu-right\"\n              style=\"right: -1px\"\n              data-cy=\"c8y-dashboard-child--actions-dropdown\"\n              *dropdownMenu\n            >\n              @for (action of actions; track action) {\n                <ng-container *ngTemplateOutlet=\"action.template\"></ng-container>\n              }\n            </ul>\n          </div>\n        </div>\n      }\n    </div>\n\n    <div class=\"card-inner-scroll\">\n      <ng-content></ng-content>\n    </div>\n\n    @if (editMode && !isDragging && !fullscreen) {\n      <div\n        class=\"resize-handle hidden-xs\"\n        cdkDrag\n        [cdkDragDisabled]=\"!editMode || fullscreen\"\n        (cdkDragStarted)=\"resizeStarted($event)\"\n        (cdkDragEnded)=\"reset($event)\"\n      ></div>\n      <div class=\"resize-icon hidden-xs\"></div>\n    }\n\n    <div\n      class=\"card-placeholder\"\n      *cdkDragPlaceholder\n    ></div>\n  </div>\n</div>\n","import { aggregationType } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TimeSpanInMs } from '@c8y/ngx-components/interval-picker';\n\nexport type Aggregation = {\n  id: aggregationType | null;\n  title: string;\n};\n\nexport const AGGREGATIONS: Aggregation[] = [\n  { id: null, title: gettext('None') },\n  { id: aggregationType.MINUTELY, title: gettext('Minutely') },\n  { id: aggregationType.HOURLY, title: gettext('Hourly') },\n  { id: aggregationType.DAILY, title: gettext('Daily') }\n];\n\nexport const AGGREGATION_LIMITS = {\n  MINUTELY_LIMIT: TimeSpanInMs.MINUTE * 10,\n  HOURLY_LIMIT: TimeSpanInMs.DAY * 1,\n  DAILY_LIMIT: TimeSpanInMs.DAY * 4\n};\n\nexport const AGGREGATION_ICONS: Record<aggregationType | 'undefined', string> = {\n  undefined: 'line-chart',\n  MINUTELY: 'hourglass',\n  HOURLY: 'clock-o',\n  DAILY: 'calendar-o'\n};\n\nexport const AGGREGATION_TEXTS: Record<aggregationType | 'undefined' | 'disabled', string> = {\n  disabled: gettext('No aggregation with real-time or auto-refresh enabled'),\n  undefined: gettext('No aggregation'),\n  MINUTELY: gettext('Minutely aggregation'),\n  HOURLY: gettext('Hourly aggregation'),\n  DAILY: gettext('Daily aggregation')\n};\n\nexport const AGGREGATION_VALUES = {\n  none: 'NONE',\n  minutely: aggregationType.MINUTELY,\n  hourly: aggregationType.HOURLY,\n  daily: aggregationType.DAILY\n} as const;\n\nexport const AGGREGATION_VALUES_ARR = [\n  AGGREGATION_VALUES.none,\n  AGGREGATION_VALUES.minutely,\n  AGGREGATION_VALUES.hourly,\n  AGGREGATION_VALUES.daily\n] as const;\n\nexport const AGGREGATION_LABELS = {\n  NONE: AGGREGATIONS[0].title,\n  [aggregationType.MINUTELY]: AGGREGATIONS[1].title,\n  [aggregationType.HOURLY]: AGGREGATIONS[2].title,\n  [aggregationType.DAILY]: AGGREGATIONS[3].title\n} as const;\n\n/**\n * Represents the available aggregation options.\n * Aggregation 'none' is not handled by our backend.\n */\nexport type AggregationOption = typeof AGGREGATION_VALUES.none | `${aggregationType}`;\n/**\n * Represents the status of aggregation options.\n * Used to determine which aggregation options should be disabled.\n */\nexport type AggregationOptionStatus = {\n  [key in AggregationOption]?: boolean;\n};\n","import { Injectable } from '@angular/core';\nimport { Interval, INTERVAL_VALUES, TimeSpanInMs } from '@c8y/ngx-components/interval-picker';\nimport {\n  AGGREGATION_VALUES,\n  AggregationOption,\n  AggregationOptionStatus\n} from './aggregation.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AggregationService {\n  readonly AGGREGATION_MAP = {\n    [INTERVAL_VALUES.minutes]: AGGREGATION_VALUES.none,\n    [INTERVAL_VALUES.hours]: AGGREGATION_VALUES.minutely,\n    [INTERVAL_VALUES.days]: AGGREGATION_VALUES.hourly\n  };\n\n  /**\n   * Determines which aggregation options should be disabled based on the time range between two dates.\n   * It calculates the time difference and checks against predefined time spans to decide if daily,\n   * hourly, or minutely aggregations should be disabled.\n   *\n   * @param dateFrom - The start date of the time range, as a `Date` object or an ISO date string.\n   * @param dateTo - The end date of the time range, as a `Date` object or an ISO date string.\n   * @returns An `AggregationOptionStatus` object indicating the disabled state of each aggregation option.\n   */\n  getDisabledAggregationOptions(\n    dateFrom: Date | string,\n    dateTo: Date | string\n  ): AggregationOptionStatus {\n    const fromDate = typeof dateFrom === 'string' ? new Date(dateFrom) : dateFrom;\n    const toDate = typeof dateTo === 'string' ? new Date(dateTo) : dateTo;\n    const timeRangeInMs = toDate.valueOf() - fromDate.valueOf();\n\n    const disabledAggregationOptions: AggregationOptionStatus = {};\n    disabledAggregationOptions[AGGREGATION_VALUES.daily] = timeRangeInMs <= TimeSpanInMs.DAY;\n    disabledAggregationOptions[AGGREGATION_VALUES.hourly] = timeRangeInMs <= TimeSpanInMs.HOUR;\n    disabledAggregationOptions[AGGREGATION_VALUES.minutely] = timeRangeInMs <= TimeSpanInMs.MINUTE;\n\n    return disabledAggregationOptions;\n  }\n\n  /**\n   * Determines the new aggregation value based on the current value and disabled options.\n   *\n   * Goal is to switch to the next available aggregation option if the current one is disabled.\n   * - If the current option is disabled, sets the control to the first available (non-disabled) option based on the following order:\n   *   - If the current value is `DAILY`, it switches to `HOURLY` if it's not disabled, otherwise to `MINUTELY` if `HOURLY` is also disabled.\n   *   - If the current value is `HOURLY`, it switches to `MINUTELY` if it's not disabled.\n   *   - If all options are disabled, it sets the value to `NONE`.\n   *\n   * @param currentValue - The current aggregation option.\n   * @param disabledOptions - An object containing disabled options.\n   * @returns The new aggregation option.\n   */\n  determineFirstNewAvailableAggregationValue(\n    currentValue: AggregationOption,\n    disabledOptions: AggregationOptionStatus\n  ): AggregationOption {\n    const { daily, hourly, minutely, none } = AGGREGATION_VALUES;\n\n    if (!disabledOptions[currentValue]) {\n      return currentValue; // Return the current value if it's not disabled\n    }\n\n    if (currentValue === daily) {\n      return !disabledOptions[hourly] ? hourly : !disabledOptions[minutely] ? minutely : none;\n    }\n\n    if (currentValue === hourly) {\n      return !disabledOptions[minutely] ? minutely : none;\n    }\n\n    return none; // Fallback to 'none' if all else fails\n  }\n\n  /**\n   * Determines the aggregation value based on the provided interval.\n   *\n   * @param interval - The time range interval.\n   * @returns The corresponding aggregation value.\n   */\n  determineAggregationValue(interval: Interval['id']): AggregationOption {\n    return this.AGGREGATION_MAP[interval] || AGGREGATION_VALUES.daily;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport { WidgetChangeEvent, WidgetChangeEventType } from './widget-change-event.model';\n\n/**\n * A service which can be used, to emit data on a dashboard level.\n * Each Widget Dashboard gets an own instance of this service provided\n * and you can then update all or only one.\n */\n@Injectable()\nexport class WidgetsDashboardEventService {\n  /**\n   * All events sent on the current dashboard.\n   */\n  private events$ = new Subject<WidgetChangeEvent>();\n  private lastValueByEvent: Partial<Record<WidgetChangeEventType, WidgetChangeEvent['data']>> = {};\n\n  /**\n   * Returns a subscribable event observable of specific event type if eventType is passed, or observable of\n   * all the events if no param is passed to method.\n   * @param eventType The event you want an observable for.\n   * @returns An observable of event.\n   */\n  getObservable<T extends WidgetChangeEvent>(\n    eventType?: WidgetChangeEventType\n  ): Observable<T['data']> {\n    return this.events$.pipe(\n      filter(({ type }) => (eventType ? type === eventType : true)),\n      map(({ data }) => data as T['data'])\n    );\n  }\n\n  /**\n   * Returns the last value of the event.\n   * @param eventType The change event type you want the last value from.\n   * @returns The last value used by this event, undefined if non was sent so far.\n   */\n  getLastValue(eventType: WidgetChangeEventType) {\n    return this.lastValueByEvent[eventType];\n  }\n\n  /**\n   * Emits a new event.\n   * @param event The WidgetChangeEvent to emit.\n   */\n  emit(event: WidgetChangeEvent): void {\n    this.lastValueByEvent[event.type] = event.data;\n    this.events$.next(event);\n  }\n\n  // When a dashboard has a multiple tabs, and not all of them has a realtime global context control\n  // we need to set the realtime to false when switching between tabs to make aggregation selector not to be always disabled\n  // while global auto-refresh context control is available.\n  setRealtimeTimeContextSetting(value = false): void {\n    this.lastValueByEvent.TIME_CONTEXT = {\n      ...this.lastValueByEvent.TIME_CONTEXT,\n      realtime: value\n    };\n  }\n\n  /**\n   * @ignore\n   */\n  ngOnDestroy(): void {\n    this.events$.complete();\n  }\n}\n","import { Interval } from '@c8y/ngx-components/interval-picker';\nimport { DateTimeContext } from '../widget-change-event.model';\nimport { aggregationType } from '@c8y/client';\n\nexport type WidgetDisplaySettings = {\n  /**\n   * If enabled the widget is bound to the global time context. You can listen to ngOnChanges() change detection\n   * to react to changes on the context. When a more detailed configuration is needed, use the <c8y-widget-time-context>\n   * component instead.\n   */\n  globalTimeContext?: boolean;\n  /**\n   * If enabled the widget is bound to the global realtime context. You can listen to ngOnChanges() change detection\n   * to react to changes on the context.\n   */\n  globalRealtimeContext?: boolean;\n  /**\n   * If enabled the widget is bound to the global aggregation context. You can listen to ngOnChanges() change detection\n   * to react to changes on the context.\n   */\n  globalAggregationContext?: boolean;\n  /**\n   * If enabled the widget is bound to the global auto refresh context. You can listen to ngOnChanges() change detection\n   * to react to changes on the context. When a more detailed configuration is needed, use the WidgetGlobalAutoRefreshService\n   * service instead.\n   */\n  globalAutoRefreshContext?: boolean;\n};\n\nexport interface GlobalTimeContextWidgetConfig {\n  /**\n   * Indicates if instance of widget is bound to global date context. It can be only used with widgets which\n   * dynamic component definition contains displaySettings allowing to use it with global date context.\n   */\n  widgetInstanceGlobalTimeContext?: boolean;\n  /**\n   * Indicates if widget that is bound to global date context can decouple from it. If that widget is decoupled, it is\n   * unsubscribed from global date context updates and date context related controls are displayed on widget view.\n   */\n  canDecoupleGlobalTimeContext?: boolean;\n}\n\nexport type WidgetTimeContextState = {\n  date: DateTimeContext;\n  interval: Interval['id'];\n  realtime: boolean;\n  aggregation: aggregationType;\n};\n\nexport enum DateContextQueryParamNames {\n  DATE_CONTEXT_FROM = 'dateContextFrom',\n  DATE_CONTEXT_TO = 'dateContextTo',\n  DATE_CONTEXT_INTERVAL = 'dateContextInterval',\n  DATE_CONTEXT_REALTIME = 'dateContextRealtime',\n  DATE_CONTEXT_AGGREGATION = 'dateContextAggregation'\n}\n\ntype DateContextFromToQueryParams = {\n  [DateContextQueryParamNames.DATE_CONTEXT_FROM]: string;\n  [DateContextQueryParamNames.DATE_CONTEXT_TO]: string;\n  [DateContextQueryParamNames.DATE_CONTEXT_INTERVAL]?: never;\n};\n\ntype DateContextIntervalQueryParams = {\n  [DateContextQueryParamNames.DATE_CONTEXT_FROM]?: never;\n  [DateContextQueryParamNames.DATE_CONTEXT_TO]?: never;\n  [DateContextQueryParamNames.DATE_CONTEXT_INTERVAL]: Interval['id'];\n};\n\n/**\n * Input query params is an object representing all possible query params related to widget time context.\n * It can be provided by user typing them in browser URL address bar, so all of them should be considered.\n */\nexport type InputDateContextQueryParams = {\n  [DateContextQueryParamNames.DATE_CONTEXT_FROM]?: string;\n  [DateContextQueryParamNames.DATE_CONTEXT_TO]?: string;\n  [DateContextQueryParamNames.DATE_CONTEXT_INTERVAL]?: Interval['id'];\n  [DateContextQueryParamNames.DATE_CONTEXT_REALTIME]?: boolean;\n  [DateContextQueryParamNames.DATE_CONTEXT_AGGREGATION]?: aggregationType;\n};\n\n/**\n * Output query params is an object representing params that are applied to current URL in browser address bar.\n * These params are set programmatically.\n * Time context interval and time range described by date \"from\" and date \"to\" exclude each other.\n */\nexport type OutputDateContextQueryParams = (\n  | DateContextFromToQueryParams\n  | DateContextIntervalQueryParams\n) & {\n  [DateContextQueryParamNames.DATE_CONTEXT_REALTIME]: boolean;\n  [DateContextQueryParamNames.DATE_CONTEXT_AGGREGATION]: aggregationType;\n};\n\nexport enum WidgetTimeContextActionBarPriority {\n  NONE = 0,\n  LOW = 1,\n  MEDIUM = 2,\n  HIGH = 3\n}\n","import { Injectable } from '@angular/core';\nimport {\n  WidgetTimeContextActionBarPriority,\n  WidgetDisplaySettings\n} from './widget-time-context.model';\nimport { DateTimeContext } from '../widget-change-event.model';\nimport { aggregationType } from '@c8y/client';\nimport { Interval, INTERVALS } from '@c8y/ngx-components/interval-picker';\n\n@Injectable({ providedIn: 'root' })\nexport class WidgetTimeContextHelperService {\n  /**\n   * Validates provided param for being selectable Interval id.\n   * @param intervalId Interval id to be validated.\n   * @returns True if provided id is valid, selectable Interval id and false if it's not.\n   */\n  isSelectableInterval(intervalId: Interval['id']) {\n    if (intervalId === 'custom') {\n      return false;\n    }\n    return INTERVALS.some(({ id }) => id === intervalId);\n  }\n\n  /**\n   * Validates provided date \"from\" and date \"to\":\n   * - if both dates are proper date strings\n   * - if provided date from is earlier than date to.\n   * @param stringifiedDateFrom Date \"from\" that should be validated.\n   * @param stringifiedDateTo Date \"to\" that should be validated.\n   * @returns Result of validation of dates range.\n   */\n  isValidDateRange(stringifiedDateFrom: string, stringifiedDateTo: string): boolean {\n    const dateFrom = new Date(stringifiedDateFrom);\n    const dateTo = new Date(stringifiedDateTo);\n    if (\n      dateFrom instanceof Date &&\n      !isNaN(dateFrom?.getTime()) &&\n      dateTo instanceof Date &&\n      !isNaN(dateTo?.getTime())\n    ) {\n      return dateFrom < dateTo;\n    }\n    return false;\n  }\n\n  /**\n   * Validates provided aggregation:\n   * @param aggregation Date \"from\" that should be validated.\n   * @returns Result of validation of aggregation.\n   */\n  isValidAggregation(aggregation: aggregationType): boolean {\n    const possibleAggregations = [null, ...Object.keys(aggregationType)] as aggregationType[];\n    return possibleAggregations.includes(aggregation);\n  }\n\n  /**\n   * Calculates date time context according to provided interval.\n   * @param intervalId Interval id indicating time range.\n   * @returns Tuple of dates- the first one is date \"from\" according to selected interval, second one is date \"to\" (now).\n   */\n  getDateTimeContextByInterval(intervalId: Interval['id']): DateTimeContext {\n    const interval = INTERVALS.find(({ id }) => id === intervalId);\n    const dateTo = new Date();\n    const dateFrom = new Date(dateTo.valueOf() - interval.timespanInMs);\n    return [dateFrom, dateTo];\n  }\n\n  /**\n   * Defines priority for single action bar item of bar items that has the 'timecontext' groupId.\n   * Widgets that uses WidgetTimeContextComponent can be assigned to three levels of priority:\n   * HIGH priority means that widget is using time range pickers, realtime and aggregation features.\n   * Widgets: Data points graph, Data points graph 2.0, Data points table.\n   * MEDIUM priority means that widget is using time range pickers and realtime features.\n   * Widgets: Event list.\n   * LOW priority means that widget is using realtime feature only.\n   * Widgets: Map\n   * @param displaySettings Settings indicating which features of WidgetTimeContextComponent are used by widget.\n   * @returns priority of widget action bar item.\n   */\n  getActionBarPriority(displaySettings: WidgetDisplaySettings): WidgetTimeContextActionBarPriority {\n    const { globalTimeContext, globalRealtimeContext, globalAggregationContext } = displaySettings;\n    if (globalTimeContext && globalRealtimeContext && globalAggregationContext) {\n      return WidgetTimeContextActionBarPriority.HIGH;\n    }\n    if (globalTimeContext && globalRealtimeContext) {\n      return WidgetTimeContextActionBarPriority.MEDIUM;\n    }\n    if (globalRealtimeContext) {\n      return WidgetTimeContextActionBarPriority.LOW;\n    }\n    return WidgetTimeContextActionBarPriority.NONE;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\nimport {\n  DateContextQueryParamNames,\n  InputDateContextQueryParams,\n  WidgetTimeContextState\n} from './widget-time-context.model';\nimport { WidgetTimeContextHelperService } from './widget-time-context-helper.service';\nimport { DateTimeContext } from '../widget-change-event.model';\nimport { aggregationType } from '@c8y/client';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\n\n@Injectable({ providedIn: 'root' })\nexport class WidgetTimeContextQueryService {\n  constructor(\n    private activatedRoute: ActivatedRoute,\n    private helperService: WidgetTimeContextHelperService,\n    private router: Router\n  ) {}\n\n  /**\n   * Returns observable that emits date context query params every time query params change.\n   * Invalid values are filtered out.\n   *\n   * @returns Observable of date context query params.\n   */\n  queryParamsChange$(): Observable<InputDateContextQueryParams> {\n    return this.activatedRoute.queryParams.pipe(\n      map((params: Record<DateContextQueryParamNames, string>) => this.processQueryParams(params)),\n      filter((params: InputDateContextQueryParams) => this.queryParamsContainsTimeRange(params))\n    );\n  }\n\n  /**\n   * Creates widget time context from query parameters.\n   * Interval data takes precedence over date time context described by date \"from\" and date \"to\",\n   * so if valid interval is provided, date \"from\" and date \"to\" are ignored, and they are recalculated\n   * with interval.\n   *\n   * @returns Widget time context state based on current query params or null if query params provide no valid context.\n   */\n  dateTimeContextFromQueryParams(): WidgetTimeContextState | null {\n    const realtime = this.parseRealtime(\n      this.activatedRoute.snapshot.queryParams[DateContextQueryParamNames.DATE_CONTEXT_REALTIME]\n    );\n    // trying to get date context from query params by interval first\n    const dateContextInterval =\n      this.activatedRoute.snapshot.queryParams[DateContextQueryParamNames.DATE_CONTEXT_INTERVAL];\n    const aggregation =\n      this.activatedRoute.snapshot.queryParams[DateContextQueryParamNames.DATE_CONTEXT_AGGREGATION];\n    const isValidInterval = this.helperService.isSelectableInterval(dateContextInterval);\n    if (isValidInterval) {\n      return {\n        date: this.helperService.getDateTimeContextByInterval(dateContextInterval),\n        interval: dateContextInterval,\n        realtime,\n        aggregation\n      };\n    }\n\n    // if date context by interval is not provided, try getting date \"from\" and date \"to\" from query params\n    const dateTimeContextFromQueryParams = this.getDateContextFromQueryParams();\n    if (dateTimeContextFromQueryParams) {\n      return {\n        date: dateTimeContextFromQueryParams,\n        interval: 'custom',\n        realtime,\n        aggregation\n      };\n    }\n    return null;\n  }\n\n  /**\n   * Sets query parameters related to date time context.\n   * Valid interval (and other than 'custom') takes precedence over context described by date \"from\" and date \"to\".\n   * Interval and context described by date \"from\" and date \"to\" exclude each other.\n   *\n   * @param widgetTimeContextState Widget time context state.\n   */\n  setDateContextQueryParams({\n    interval,\n    date,\n    realtime,\n    aggregation\n  }: WidgetTimeContextState): void {\n    let queryParams: Record<DateContextQueryParamNames, null | string | boolean>;\n    if (interval && interval !== 'custom') {\n      queryParams = {\n        dateContextInterval: interval,\n        dateContextRealtime: realtime,\n        dateContextAggregation: aggregation,\n        dateContextTo: null,\n        dateContextFrom: null\n      };\n    } else {\n      queryParams = {\n        dateContextFrom: date[0].toISOString(),\n        dateContextTo: date[1].toISOString(),\n        dateContextRealtime: realtime,\n        dateContextAggregation: aggregation,\n        dateContextInterval: null\n      };\n    }\n    this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams,\n      queryParamsHandling: 'merge'\n    });\n  }\n\n  /**\n   * Clears all date time context related query parameters.\n   */\n  clearQueryParams(): void {\n    const clearingQueryParams: Record<DateContextQueryParamNames, null> = {\n      dateContextFrom: null,\n      dateContextTo: null,\n      dateContextInterval: null,\n      dateContextRealtime: null,\n      dateContextAggregation: null\n    };\n    this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams: clearingQueryParams,\n      replaceUrl: true\n    });\n  }\n\n  /**\n   * Parses and validates date context from query params described by date \"from\" and date \"to\".\n   *\n   * @returns Date context as tuple of date \"from\" and date \"to\", or null if date context is invalid.\n   */\n  private getDateContextFromQueryParams(): DateTimeContext | null {\n    const dateContextFrom =\n      this.activatedRoute.snapshot.queryParams[DateContextQueryParamNames.DATE_CONTEXT_FROM];\n    const dateContextTo =\n      this.activatedRoute.snapshot.queryParams[DateContextQueryParamNames.DATE_CONTEXT_TO];\n\n    if (this.helperService.isValidDateRange(dateContextFrom, dateContextTo)) {\n      return [new Date(dateContextFrom), new Date(dateContextTo)];\n    }\n    return null;\n  }\n\n  /**\n   * Parses realtime query param.\n   *\n   * @returns Parsed realtime value or null.\n   */\n  private parseRealtime(realtime: string): boolean | null {\n    return realtime === 'false' ? false : realtime === 'true' ? true : null;\n  }\n\n  /**\n   * Maps query params object to proper type.\n   *\n   * @param params Query parameters object with string values only.\n   *\n   * @returns Query params object of proper type.\n   */\n  private processQueryParams(\n    params: Record<DateContextQueryParamNames, string>\n  ): InputDateContextQueryParams {\n    const dateContextRealtime = this.parseRealtime(params.dateContextRealtime);\n    const dateContextInterval = this.helperService.isSelectableInterval(\n      params.dateContextInterval as Interval['id']\n    )\n      ? (params.dateContextInterval as Interval['id'])\n      : null;\n    const dateContextAggregation = this.helperService.isValidAggregation(\n      params.dateContextAggregation as aggregationType\n    )\n      ? (params.dateContextAggregation as aggregationType)\n      : null;\n    return { ...params, dateContextRealtime, dateContextInterval, dateContextAggregation };\n  }\n\n  /**\n   * Determines if provided query params contains valid time range.\n   *\n   * @param params Query parameters object.\n   *\n   * @returns True if query params contains valid time range, otherwise false.\n   */\n  private queryParamsContainsTimeRange(params: InputDateContextQueryParams): boolean {\n    if (!params.dateContextInterval && !params.dateContextFrom && !params.dateContextTo) {\n      return false;\n    }\n    const intervalProvided = !!params.dateContextInterval;\n    const dateRangeValid = this.helperService.isValidDateRange(\n      params.dateContextFrom,\n      params.dateContextTo\n    );\n    return intervalProvided || dateRangeValid;\n  }\n}\n","import { Component, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { NgClass } from '@angular/common';\nimport { C8yTranslatePipe } from '../../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-realtime-control',\n  templateUrl: './realtime-control.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RealtimeControlComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [TooltipModule, NgClass, C8yTranslatePipe]\n})\nexport class RealtimeControlComponent implements ControlValueAccessor {\n  readonly disableRealtimeLabel = gettext('Disable realtime');\n  readonly enableRealtimeLabel = gettext('Enable realtime');\n\n  value: boolean;\n  touched = false;\n  disabled = false;\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange = _ => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  writeValue(value: boolean): void {\n    this.value = value;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  markAsTouched(): void {\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n}\n"," <button\n  class=\"btn btn-icon c8y-realtime\"\n  [attr.aria-label]=\"(value ? disableRealtimeLabel : enableRealtimeLabel) | translate\"\n  tooltip=\"{{ (value ? disableRealtimeLabel : enableRealtimeLabel) | translate }}\"\n  placement=\"top\"\n  container=\"body\"\n  type=\"button\"\n  (click)=\"onChange(!value)\"\n  [adaptivePosition]=\"false\"\n  [delay]=\"500\"\n  [disabled]=\"disabled\"\n>\n  <span\n    class=\"c8y-pulse m-0\"\n    [ngClass]=\"{ active: value, inactive: !value }\"\n  ></span>\n</button>\n","import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  AGGREGATIONS,\n  AGGREGATION_ICONS,\n  AGGREGATION_TEXTS\n} from '../../../aggregation/aggregation.model';\nimport { aggregationType } from '@c8y/client';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconDirective } from '../../../common/icon.directive';\nimport { NgFor, NgClass } from '@angular/common';\nimport { C8yTranslatePipe } from '../../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-aggregation-picker',\n  templateUrl: './aggregation-picker.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AggregationPickerComponent),\n      multi: true\n    }\n  ],\n  standalone: true,\n  imports: [BsDropdownModule, TooltipModule, IconDirective, NgFor, NgClass, C8yTranslatePipe]\n})\nexport class AggregationPickerComponent implements ControlValueAccessor {\n  /**\n   * Configuration for disabling specific types of aggregation.\n   * By default no aggregation type is disabled.\n   */\n  @Input() disabledAggregations: Partial<Record<aggregationType, boolean>> = {};\n\n  readonly AGGREGATIONS = AGGREGATIONS;\n  readonly AGGREGATION_ICONS = AGGREGATION_ICONS;\n  readonly AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n\n  value: aggregationType;\n  touched = false;\n  disabled = false;\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange = _ => {};\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  writeValue(value: aggregationType): void {\n    this.value = value;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  markAsTouched() {\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  setDisabledState(disabled: boolean) {\n    this.disabled = disabled;\n  }\n}\n","<div\n  class=\"dropdown\"\n  style=\"border: 0; margin-left: -1px\"\n  container=\"body\"\n  #dropdown=\"bs-dropdown\"\n  dropdown\n  [insideClick]=\"true\"\n  [isDisabled]=\"disabled\"\n>\n  <button\n    class=\"dropdown-toggle form-control p-t-0 p-b-0 l-h-1 d-flex a-i-center\"\n    [attr.aria-label]=\"(value ? AGGREGATION_TEXTS[value] : AGGREGATION_TEXTS.undefined) | translate\"\n    tooltip=\"{{\n      (value\n        ? AGGREGATION_TEXTS[value]\n        : disabled\n          ? AGGREGATION_TEXTS.disabled\n          : AGGREGATION_TEXTS.undefined\n      ) | translate\n    }}\"\n    placement=\"top\"\n    container=\"body\"\n    type=\"button\"\n    [adaptivePosition]=\"false\"\n    [delay]=\"500\"\n    dropdownToggle\n  >\n    <i\n      class=\"icon-14\"\n      [c8yIcon]=\"value ? AGGREGATION_ICONS[value] : AGGREGATION_ICONS.undefined\"\n    ></i>\n    <span class=\"caret m-r-8 m-l-4\"></span>\n  </button>\n\n  <ul\n    class=\"dropdown-menu dropdown-menu-right--xs\"\n    *dropdownMenu\n  >\n    <li\n      *ngFor=\"let aggregation of AGGREGATIONS\"\n      [ngClass]=\"{\n        active: aggregation.id === value,\n        disabled: disabledAggregations[aggregation.id]\n      }\"\n    >\n      <button\n        class=\"\"\n        (click)=\"onChange(aggregation.id); dropdown.isOpen = false\"\n        [disabled]=\"disabledAggregations[aggregation.id]\"\n      >\n        <i\n          class=\"icon-14\"\n          [c8yIcon]=\"\n            aggregation.id ? AGGREGATION_ICONS[aggregation.id] : AGGREGATION_ICONS.undefined\n          \"\n        ></i>\n        <span>{{ aggregation.title | translate }}</span>\n      </button>\n    </li>\n  </ul>\n</div>\n","import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport {\n  ActivatedRoute,\n  ActivationEnd,\n  NavigationEnd,\n  NavigationStart,\n  Router\n} from '@angular/router';\nimport { aggregationType } from '@c8y/client';\nimport { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { interval, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\nimport { ActionBarService } from '../../action-bar';\nimport { AGGREGATION_LIMITS } from '../../aggregation/aggregation.model';\nimport { AggregationService } from '../../aggregation/aggregation.service';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DashboardChildActionComponent } from '../dashboard-child-action.component';\nimport { DashboardChildComponent } from '../dashboard-child.component';\nimport { DateTimeContext, TimeContextEvent, WidgetTimeContext } from '../widget-change-event.model';\nimport { WidgetsDashboardEventService } from '../widgets-dashboard-event.service';\nimport { WidgetTimeContextHelperService } from './widget-time-context-helper.service';\nimport { WidgetTimeContextQueryService } from './widget-time-context-query.service';\nimport {\n  InputDateContextQueryParams,\n  WidgetDisplaySettings,\n  WidgetTimeContextState\n} from './widget-time-context.model';\nimport {\n  Interval,\n  INTERVAL_TITLES,\n  IntervalPickerComponent\n} from '@c8y/ngx-components/interval-picker';\nimport { NgIf, NgTemplateOutlet, NgClass } from '@angular/common';\nimport { ActionBarItemComponent } from '../../action-bar/action-bar-item.component';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconDirective } from '../../common/icon.directive';\nimport { FormGroupComponent } from '../../forms/form-group.component';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { DateTimePickerComponent } from '../../date-time-picker/date-time-picker.component';\nimport { MessagesComponent } from '../../forms/messages.component';\nimport { MessageDirective } from '../../forms/message.directive';\nimport { RealtimeControlComponent } from './realtime-control/realtime-control.component';\nimport { AggregationPickerComponent } from './aggregation-picker/aggregation-picker.component';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { DatePipe } from '../../common/date.pipe';\n\n@Component({\n  selector: 'c8y-widget-time-context',\n  templateUrl: './widget-time-context.component.html',\n  host: { class: 'd-flex a-i-center gap-4' },\n  standalone: true,\n  imports: [\n    NgIf,\n    ActionBarItemComponent,\n    NgTemplateOutlet,\n    FormsModule,\n    ReactiveFormsModule,\n    BsDropdownModule,\n    TooltipModule,\n    IconDirective,\n    IntervalPickerComponent,\n    FormGroupComponent,\n    NgClass,\n    C8yTranslateDirective,\n    DateTimePickerComponent,\n    MessagesComponent,\n    MessageDirective,\n    RealtimeControlComponent,\n    AggregationPickerComponent,\n    DashboardChildActionComponent,\n    C8yTranslatePipe,\n    DatePipe\n  ]\n})\nexport class WidgetTimeContextComponent implements OnInit, OnDestroy, AfterViewInit {\n  readonly INTERVAL_TITLES = INTERVAL_TITLES;\n  readonly DATE_FORMAT = 'short';\n  /**\n   * Indicates if the component can decouple or not.\n   */\n  @Input()\n  canDecouple = true;\n\n  @Input() displaySettings: WidgetDisplaySettings;\n\n  @Input() hidden = false;\n\n  /**\n   * Emits each change as an array of dates [from, to].\n   */\n  @Output()\n  dateContextChange = new EventEmitter<any>();\n  /**\n   * @ignore\n   */\n  @ViewChild(DashboardChildActionComponent) action: DashboardChildActionComponent;\n  @ViewChild(BsDropdownDirective) dropdown: BsDropdownDirective;\n  /**\n   * Indicates if the time context is bound to the global scope.\n   */\n  isCoupled = true;\n  decoupleTimeContextLabel = gettext('Decouple time context');\n  coupleTimeContextLabel = gettext('Couple time context');\n  form: ReturnType<WidgetTimeContextComponent['createForm']>;\n  actionBarInGroupPriority: number;\n  disabledAggregations: Partial<Record<aggregationType, boolean>> = {};\n  isAutoRefreshEnabled: boolean;\n  readonly DEFAULT_INTERVAL: Interval['id'] = 'days';\n  readonly ACTION_BAR_PRIORITY = 7;\n  readonly ACTION_BAR_GROUP_ID = 'timecontext';\n  readonly REALTIME_INTERVAL = 1000;\n  private subscription: Subscription;\n  private destroy$: Subject<void> = new Subject();\n  private navigationInProgress: boolean;\n  private realtimeSubscription: Subscription;\n\n  /**\n   * @ignore only DI.\n   */\n  constructor(\n    private widgetEventService: WidgetsDashboardEventService,\n    private dashboardChild: DashboardChildComponent,\n    private formBuilder: FormBuilder,\n    private queryService: WidgetTimeContextQueryService,\n    private helperService: WidgetTimeContextHelperService,\n    private router: Router,\n    private actionBarService: ActionBarService,\n    private aggregationService: AggregationService,\n    private route: ActivatedRoute\n  ) {}\n\n  /**\n   * @ignore Subscribing to the global context.\n   */\n  ngOnInit(): void {\n    this.actionBarInGroupPriority = this.helperService.getActionBarPriority(this.displaySettings);\n    const initialContext: WidgetTimeContextState =\n      this.getInitialContext() || this.getDefaultContext();\n    initialContext.aggregation = this.calculateAggregation(\n      initialContext.date,\n      initialContext.aggregation\n    );\n    this.form = this.createForm(initialContext);\n\n    this.dateContextChange.emit({\n      date: initialContext.date,\n      realtime: initialContext.realtime,\n      aggregation: initialContext.aggregation\n    });\n    if (this.isCoupled) {\n      this.queryService.setDateContextQueryParams(initialContext);\n    }\n    this.subscribeToGlobalContext();\n    this.subscribeToQueryParamsChange();\n    this.subscribeToRouterEvents();\n    this.subscribeToIntervalChange();\n    this.subscribeToRealtimeChange();\n    this.subscribeToAggregationChange();\n\n    if (initialContext.realtime) {\n      this.onRealtimeValueChange(initialContext.realtime);\n      this.startRealtime();\n    }\n  }\n\n  /**\n   * @ignore Adding custom actions.\n   */\n  ngAfterViewInit(): void {\n    if (this.canDecouple) {\n      this.dashboardChild.addActions([this.action]);\n    }\n\n    this.route.queryParams\n      .pipe(\n        distinctUntilChanged(),\n        map(params => params['globalContextAutoRefresh'] === 'true'),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(this.handleAutoRefreshChange.bind(this));\n  }\n\n  /**\n   * Toggles the coupling on or off.\n   */\n  toggleDecoupling(): void {\n    this.isCoupled = !this.isCoupled;\n    const lastEventValue = this.widgetEventService.getLastValue('TIME_CONTEXT');\n    const { realtime, aggregation, interval } = lastEventValue;\n    let date: DateTimeContext;\n    if (interval) {\n      date = this.helperService.getDateTimeContextByInterval(interval);\n    } else {\n      date = lastEventValue.dateTimeContext;\n    }\n    this.updateFormValues({ date, interval, realtime, aggregation });\n\n    if (this.isCoupled) {\n      this.subscribeToGlobalContext();\n      this.dateContextChange.emit({ date, realtime, aggregation });\n    } else {\n      this.unsubscribeFromGlobalContext();\n    }\n  }\n\n  /**\n   * Applies form value to global or local date context.\n   */\n  applyDatetimeContext(): void {\n    this.update({\n      date: [\n        new Date(this.form.value.temporaryUserSelectedFromDate),\n        new Date(this.form.value.temporaryUserSelectedToDate)\n      ],\n      interval: null,\n      realtime: this.form.value.realtime,\n      aggregation: this.form.value.aggregation\n    });\n  }\n\n  /**\n   * Resets form to initial value and update context.\n   */\n  reset(): void {\n    this.stopRealtime();\n    this.update(this.getDefaultContext());\n  }\n\n  /**\n   * @ignore unsubscribing.\n   */\n  ngOnDestroy(): void {\n    this.unsubscribeFromGlobalContext();\n    this.clearQueryParamsIfNeeded();\n    this.widgetEventService.setRealtimeTimeContextSetting();\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  private subscribeToIntervalChange(): void {\n    this.form.controls.currentDateContextInterval.valueChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(interval => {\n        let date: DateTimeContext;\n        if (interval === 'custom') {\n          date = [\n            new Date(this.form.controls.currentDateContextFromDate.value),\n            new Date(this.form.controls.currentDateContextToDate.value)\n          ];\n        } else {\n          date = this.helperService.getDateTimeContextByInterval(interval);\n          this.dropdown.isOpen = false;\n        }\n        this.update({\n          date,\n          interval,\n          realtime: this.form.value.realtime,\n          aggregation: this.form.value.aggregation\n        });\n      });\n  }\n\n  private subscribeToRealtimeChange(): void {\n    this.form.controls.realtime.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(realtime => {\n      this.onRealtimeValueChange(realtime);\n\n      if (realtime) {\n        this.startRealtime();\n      } else {\n        this.stopRealtime();\n      }\n    });\n  }\n\n  private subscribeToAggregationChange() {\n    this.form.controls.aggregation.valueChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(aggregation => {\n        this.update({\n          date: [\n            new Date(this.form.value.currentDateContextFromDate),\n            new Date(this.form.value.currentDateContextToDate)\n          ],\n          interval: this.form.value.currentDateContextInterval,\n          realtime: this.form.value.realtime,\n          aggregation\n        });\n      });\n  }\n\n  private createForm(context: WidgetTimeContextState) {\n    return this.formBuilder.group({\n      temporaryUserSelectedFromDate: context.date[0].toISOString(),\n      temporaryUserSelectedToDate: context.date[1].toISOString(),\n      currentDateContextFromDate: context.date[0].toISOString(),\n      currentDateContextToDate: context.date[1].toISOString(),\n      currentDateContextInterval: context.interval || 'custom',\n      realtime: context.realtime,\n      aggregation: context.aggregation\n    });\n  }\n\n  /**\n   * Fires a new WidgetChangeEvent either on the local change emitter or on the global one.\n   * @param widgetTimeContextState New widget time context value.*/\n  private update({ date, interval, realtime, aggregation }: WidgetTimeContextState): void {\n    const validAggregation = this.calculateAggregation(date, aggregation);\n    if (this.isCoupled) {\n      const eventData: WidgetTimeContext =\n        interval && interval !== 'custom'\n          ? { interval, realtime, aggregation: validAggregation }\n          : { dateTimeContext: date, realtime, aggregation: validAggregation };\n      this.widgetEventService.emit({ type: 'TIME_CONTEXT', data: eventData });\n    } else {\n      this.updateFormValues({ date, interval, realtime, aggregation: validAggregation });\n      this.dateContextChange.emit({ date, realtime, aggregation: validAggregation });\n    }\n  }\n\n  private subscribeToGlobalContext(): void {\n    const event$ = this.widgetEventService.getObservable<TimeContextEvent>('TIME_CONTEXT');\n    this.subscription = event$.subscribe((context: WidgetTimeContext) => {\n      let date: DateTimeContext;\n      const { realtime, interval, aggregation } = context;\n      if (interval) {\n        date = this.helperService.getDateTimeContextByInterval(context.interval);\n      } else {\n        date = context.dateTimeContext;\n      }\n\n      this.dateContextChange.emit({\n        date,\n        sliderChange: false,\n        interval,\n        realtime,\n        aggregation\n      });\n      this.updateFormValues({ date, interval, realtime, aggregation });\n      this.queryService.setDateContextQueryParams({ interval, date, realtime, aggregation });\n    });\n  }\n\n  private updateFormValues({\n    date,\n    interval,\n    realtime,\n    aggregation\n  }: WidgetTimeContextState): void {\n    this.form.patchValue(\n      {\n        temporaryUserSelectedFromDate: date[0].toISOString(),\n        temporaryUserSelectedToDate: date[1].toISOString(),\n        currentDateContextFromDate: date[0].toISOString(),\n        currentDateContextToDate: date[1].toISOString(),\n        realtime,\n        currentDateContextInterval: interval || 'custom',\n        aggregation: aggregation || null\n      },\n      {\n        emitEvent: false\n      }\n    );\n  }\n\n  private unsubscribeFromGlobalContext(): void {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  private getInitialContext(): WidgetTimeContextState | null {\n    const dateTimeContextFromQueryParams = this.queryService.dateTimeContextFromQueryParams();\n    if (dateTimeContextFromQueryParams) {\n      return {\n        ...dateTimeContextFromQueryParams,\n        realtime: dateTimeContextFromQueryParams.realtime ?? false,\n        aggregation: dateTimeContextFromQueryParams.realtime\n          ? null\n          : dateTimeContextFromQueryParams.aggregation || null\n      };\n    }\n    // get value from last value of events service\n    const lastEventValue = this.widgetEventService.getLastValue('TIME_CONTEXT');\n    const realtime = lastEventValue?.realtime ?? false;\n    if (lastEventValue && lastEventValue.dateTimeContext) {\n      return {\n        date: lastEventValue.dateTimeContext,\n        interval: 'custom',\n        realtime,\n        aggregation: realtime ? null : lastEventValue.aggregation\n      };\n    }\n    if (lastEventValue && lastEventValue.interval) {\n      return {\n        date: this.helperService.getDateTimeContextByInterval(lastEventValue.interval),\n        interval: lastEventValue.interval,\n        realtime,\n        aggregation: realtime ? null : lastEventValue.aggregation\n      };\n    }\n\n    return null;\n  }\n\n  private subscribeToQueryParamsChange(): void {\n    this.queryService\n      .queryParamsChange$()\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(\n        ({\n          dateContextFrom,\n          dateContextTo,\n          dateContextInterval,\n          dateContextRealtime,\n          dateContextAggregation\n        }: InputDateContextQueryParams) => {\n          const realtime = dateContextRealtime ?? this.form.value.realtime;\n          if (dateContextInterval) {\n            this.widgetEventService.emit({\n              type: 'TIME_CONTEXT',\n              data: {\n                interval: dateContextInterval,\n                realtime,\n                aggregation: dateContextAggregation\n              }\n            });\n          } else {\n            const dateContext: DateTimeContext = [\n              new Date(dateContextFrom),\n              new Date(dateContextTo)\n            ];\n            this.widgetEventService.emit({\n              type: 'TIME_CONTEXT',\n              data: {\n                dateTimeContext: dateContext,\n                realtime,\n                aggregation: dateContextAggregation\n              }\n            });\n          }\n        }\n      );\n  }\n\n  private clearQueryParamsIfNeeded(): void {\n    // If navigation is in progress, router will take care of clearing query params. This way we avoid unnecessary manipulation of browser history\n    if (this.navigationInProgress) {\n      return;\n    }\n    // check if any other WidgetTimeContextComponent action in action bar exists\n    const anyWidgetTimeContextActionLeft = Array.from(this.actionBarService.state).some(\n      action => action.groupId === this.ACTION_BAR_GROUP_ID\n    );\n    if (!anyWidgetTimeContextActionLeft) {\n      this.queryService.clearQueryParams();\n    }\n  }\n\n  private subscribeToRouterEvents(): void {\n    this.router.events\n      .pipe(\n        filter(\n          e =>\n            e instanceof NavigationStart || e instanceof NavigationEnd || e instanceof ActivationEnd\n        ),\n        takeUntil(this.destroy$)\n      )\n      .subscribe(e => {\n        this.navigationInProgress = e instanceof NavigationStart;\n      });\n  }\n\n  private getDefaultContext(): WidgetTimeContextState {\n    return {\n      date: this.helperService.getDateTimeContextByInterval(this.DEFAULT_INTERVAL),\n      interval: this.DEFAULT_INTERVAL,\n      realtime: false,\n      aggregation: aggregationType.MINUTELY\n    };\n  }\n\n  private startRealtime(): void {\n    this.disableDateRangeAndAggregation();\n\n    this.realtimeSubscription = interval(this.REALTIME_INTERVAL)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => {\n        const newDateFrom = new Date(\n          new Date(this.form.value.currentDateContextFromDate).valueOf() + this.REALTIME_INTERVAL\n        );\n        const newDateTo = new Date(\n          new Date(this.form.value.currentDateContextToDate).valueOf() + this.REALTIME_INTERVAL\n        );\n        this.updateFormValues({\n          date: [newDateFrom, newDateTo],\n          interval: this.form.value.currentDateContextInterval,\n          realtime: true,\n          aggregation: null\n        });\n      });\n  }\n\n  private handleAutoRefreshChange(isEnabled: boolean): void {\n    this.isAutoRefreshEnabled = isEnabled;\n    isEnabled ? this.onDisableAutoRefresh() : this.enableDateRangeAndAggregation();\n  }\n\n  private onDisableAutoRefresh(): void {\n    this.form.controls.aggregation.setValue(null);\n    this.disableDateRangeAndAggregation();\n  }\n\n  private disableDateRangeAndAggregation(): void {\n    this.form.controls.temporaryUserSelectedFromDate.disable();\n    this.form.controls.temporaryUserSelectedToDate.disable();\n    this.form.controls.aggregation.disable();\n  }\n\n  private enableDateRangeAndAggregation(): void {\n    if (this.form.controls.realtime.value || this.isAutoRefreshEnabled) {\n      return;\n    }\n    this.form.controls.temporaryUserSelectedFromDate.enable();\n    this.form.controls.temporaryUserSelectedToDate.enable();\n    this.form.controls.aggregation.enable();\n  }\n\n  private stopRealtime(): void {\n    this.realtimeSubscription?.unsubscribe();\n    this.enableDateRangeAndAggregation();\n  }\n\n  private onRealtimeValueChange(realtime: boolean): void {\n    let dateTimeContext: DateTimeContext;\n    if (this.form.value.currentDateContextInterval !== 'custom') {\n      dateTimeContext = this.helperService.getDateTimeContextByInterval(\n        this.form.value.currentDateContextInterval\n      );\n    } else {\n      const currentTimeSpanInMs =\n        new Date(this.form.value.currentDateContextToDate).valueOf() -\n        new Date(this.form.value.currentDateContextFromDate).valueOf();\n      const dateTo = new Date();\n      const dateFrom = new Date(dateTo.valueOf() - currentTimeSpanInMs);\n      dateTimeContext = [dateFrom, dateTo];\n    }\n\n    this.update({\n      date: dateTimeContext,\n      interval: this.form.value.currentDateContextInterval,\n      realtime,\n      aggregation: null\n    });\n  }\n\n  private calculateAggregation(\n    [dateFrom, dateTo]: DateTimeContext,\n    aggregation: aggregationType\n  ): aggregationType {\n    this.disabledAggregations = this.aggregationService.getDisabledAggregationOptions(\n      dateFrom,\n      dateTo\n    );\n    const timeRangeInMs = dateTo.valueOf() - dateFrom.valueOf();\n    const isProperAggregation = !this.disabledAggregations[aggregation] || aggregation === null;\n\n    if (isProperAggregation) {\n      return aggregation;\n    }\n    if (timeRangeInMs >= AGGREGATION_LIMITS.DAILY_LIMIT) {\n      return aggregationType.DAILY;\n    } else if (timeRangeInMs >= AGGREGATION_LIMITS.HOURLY_LIMIT) {\n      return aggregationType.HOURLY;\n    } else if (timeRangeInMs >= AGGREGATION_LIMITS.MINUTELY_LIMIT) {\n      return aggregationType.MINUTELY;\n    } else {\n      return null;\n    }\n  }\n}\n","<c8y-action-bar-item\n  *ngIf=\"isCoupled && !hidden\"\n  [priority]=\"ACTION_BAR_PRIORITY\"\n  [groupId]=\"ACTION_BAR_GROUP_ID\"\n  [inGroupPriority]=\"actionBarInGroupPriority\"\n  [placement]=\"'left'\"\n>\n  <ng-container\n    [ngTemplateOutlet]=\"dateTimePicker\"\n    [ngTemplateOutletContext]=\"{\n      date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n    }\"\n  ></ng-container>\n</c8y-action-bar-item>\n\n<ng-container\n  *ngIf=\"!isCoupled\"\n  [ngTemplateOutlet]=\"dateTimePicker\"\n  [ngTemplateOutletContext]=\"{\n    date: [form.value.currentDateContextFromDate, form.value.currentDateContextToDate]\n  }\"\n></ng-container>\n\n<ng-template\n  #dateTimePicker\n  let-date=\"date\"\n>\n  <form\n    class=\"d-flex gap-16 p-l-xs-16 p-r-xs-16 m-t-xs-8 m-b-xs-8\"\n    [formGroup]=\"form\"\n  >\n    <ng-container *ngIf=\"displaySettings.globalTimeContext\">\n      <div>\n        <div\n          class=\"dropdown flex-grow\"\n          #dropdown=\"bs-dropdown\"\n          dropdown\n          [insideClick]=\"true\"\n          *ngIf=\"date\"\n        >\n          <button\n            class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n            attr.aria-label=\"{{ date[0] | c8yDate: DATE_FORMAT }} — {{\n              date[1] | c8yDate: DATE_FORMAT\n            }}\"\n            tooltip=\"{{ date[0] | c8yDate: DATE_FORMAT }} — {{ date[1] | c8yDate: DATE_FORMAT }}\"\n            placement=\"top\"\n            container=\"body\"\n            data-cy=\"widget-time-context--date-picker-dropdown-button\"\n            [adaptivePosition]=\"false\"\n            [delay]=\"500\"\n            dropdownToggle\n          >\n            <i\n              class=\"m-r-4\"\n              c8yIcon=\"schedule1\"\n            ></i>\n            <div class=\"d-col text-left fit-w\">\n              <span\n                class=\"text-12\"\n                data-cy=\"widget-time-context--selected-interval\"\n              >\n                {{ INTERVAL_TITLES[form.controls.currentDateContextInterval.value] | translate }}\n              </span>\n              <span\n                class=\"text-10 text-muted text-truncate\"\n                data-cy=\"widget-time-context--selected-time-range\"\n              >\n                {{ date[0] | c8yDate: DATE_FORMAT }} — {{ date[1] | c8yDate: DATE_FORMAT }}\n              </span>\n            </div>\n            <span class=\"caret m-r-16 m-l-4\"></span>\n          </button>\n\n          <ul\n            class=\"dropdown-menu dropdown-menu--date-range\"\n            *dropdownMenu\n          >\n            <c8y-interval-picker\n              class=\"d-contents\"\n              formControlName=\"currentDateContextInterval\"\n            ></c8y-interval-picker>\n\n            <ng-container *ngIf=\"form.controls.currentDateContextInterval.value === 'custom'\">\n              <div class=\"p-l-16 p-r-16\">\n                <c8y-form-group\n                  [ngClass]=\"form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\"\n                >\n                  <label\n                    [title]=\"'From`date`' | translate\"\n                    for=\"temporaryUserSelectedFromDate\"\n                    translate\n                  >\n                    From`date`\n                  </label>\n                  <c8y-date-time-picker\n                    id=\"temporaryUserSelectedFromDate\"\n                    [maxDate]=\"form.value.temporaryUserSelectedToDate\"\n                    [placeholder]=\"'From`date`' | translate\"\n                    [formControl]=\"form.controls.temporaryUserSelectedFromDate\"\n                    [ngClass]=\"\n                      form.controls.temporaryUserSelectedFromDate.errors ? 'has-error' : ''\n                    \"\n                  ></c8y-date-time-picker>\n                  <c8y-messages [show]=\"form.controls.temporaryUserSelectedFromDate.errors\">\n                    <c8y-message\n                      name=\"dateAfterRangeMax\"\n                      [text]=\"'This date is after the latest allowed date.' | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"invalidDateTime\"\n                      [text]=\"'This date is invalid.' | translate\"\n                    ></c8y-message>\n                  </c8y-messages>\n                </c8y-form-group>\n\n                <c8y-form-group\n                  [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n                >\n                  <label\n                    [title]=\"'To`date`' | translate\"\n                    for=\"temporaryUserSelectedToDate\"\n                    translate\n                  >\n                    To`date`\n                  </label>\n                  <c8y-date-time-picker\n                    id=\"temporaryUserSelectedToDate\"\n                    [minDate]=\"form.value.temporaryUserSelectedFromDate\"\n                    [placeholder]=\"'To`date`' | translate\"\n                    [formControl]=\"form.controls.temporaryUserSelectedToDate\"\n                    [ngClass]=\"form.controls.temporaryUserSelectedToDate.errors ? 'has-error' : ''\"\n                  ></c8y-date-time-picker>\n                  <c8y-messages [show]=\"form.controls.temporaryUserSelectedToDate.errors\">\n                    <c8y-message\n                      name=\"dateBeforeRangeMin\"\n                      [text]=\"'This date is before the earliest allowed date.' | translate\"\n                    ></c8y-message>\n                    <c8y-message\n                      name=\"invalidDateTime\"\n                      [text]=\"'This date is invalid.' | translate\"\n                    ></c8y-message>\n                  </c8y-messages>\n                </c8y-form-group>\n              </div>\n\n              <div class=\"p-16 d-flex gap-8 separator-top\">\n                <button\n                  class=\"btn btn-default btn-sm flex-grow\"\n                  title=\"{{ 'Reset' | translate }}\"\n                  type=\"button\"\n                  (click)=\"reset(); dropdown.isOpen = false\"\n                  [disabled]=\"form.value.realtime || isAutoRefreshEnabled\"\n                  translate\n                >\n                  Reset\n                </button>\n\n                <button\n                  class=\"btn btn-primary btn-sm flex-grow\"\n                  title=\"{{ 'Apply' | translate }}\"\n                  type=\"button\"\n                  (click)=\"applyDatetimeContext(); dropdown.isOpen = false\"\n                  [disabled]=\"\n                    (form.pristine && form.untouched) || form.invalid || form.value.realtime || isAutoRefreshEnabled\n                  \"\n                  translate\n                >\n                  Apply\n                </button>\n              </div>\n            </ng-container>\n          </ul>\n        </div>\n      </div>\n    </ng-container>\n\n    <div class=\"input-group w-auto\">\n      <c8y-realtime-control\n        class=\"form-control p-0 flex-no-grow w-auto\"\n        *ngIf=\"displaySettings.globalRealtimeContext\"\n        formControlName=\"realtime\"\n      ></c8y-realtime-control>\n\n      <c8y-aggregation-picker\n        *ngIf=\"displaySettings.globalAggregationContext\"\n        formControlName=\"aggregation\"\n        [disabledAggregations]=\"disabledAggregations\"\n      ></c8y-aggregation-picker>\n    </div>\n  </form>\n</ng-template>\n\n<c8y-dashboard-child-action>\n  <button\n    type=\"button\"\n    (click)=\"toggleDecoupling()\"\n  >\n    <i [c8yIcon]=\"isCoupled ? 'schedule1' : 'today'\"></i>\n    <span class=\"m-l-4\">\n      {{ (isCoupled ? decoupleTimeContextLabel : coupleTimeContextLabel) | translate }}\n    </span>\n  </button>\n</c8y-dashboard-child-action>\n","import { TemplateRef } from '@angular/core';\nimport { DashboardChildComponent } from './dashboard-child.component';\nimport { DashboardComponent } from './dashboard.component';\n\n/**\n * Describes a legacy widget. Please use\n * the proper Widget interface instead.\n */\nexport interface LegacyWidget {\n  /**\n   * The name of the widget.\n   * @deprecated Use componenId\n   */\n  name?: string;\n  /**\n   * The template URL for legacy plugins.\n   * @deprecated: Only used for angularjs plugins.\n   */\n  templateUrl?: string;\n\n  /**\n   * The config template URL for legacy plugins.\n   * @deprecated: Only used for angularjs plugins.\n   */\n  configTemplateUrl?: string;\n\n  /**\n   * The config component name.\n   * @deprecated: Only used for angularjs plugins.\n   */\n  configComponent?: string;\n\n  /**\n   * The widget component name.\n   * @deprecated: Only used for angularjs plugins.\n   */\n  widgetComponent?: string;\n  transformConfigWithContext?: () => void;\n}\n\n/**\n * A widget is a child on a dashboard which can be added and configured\n * by the user. A widget can be defined by the [[DynamicComponentDefinition]]\n * by any module of an application. Thew widget itself stores beside it's\n * link (componentId) to the DynamicComponentDefinition the information\n * about the title, layout (classes) and the configuration.\n */\nexport interface Widget extends LegacyWidget {\n  /**\n   * x dimension parameters\n   */\n  _x?: number;\n\n  /**\n   * y dimension parameters\n   */\n  _y?: number;\n\n  /**\n   * width dimension parameters\n   */\n  _width?: number;\n\n  /**\n   * height dimension parameters\n   */\n  _height?: number;\n\n  /**\n   * The unique component id to find the component in the\n   * HOOK_COMPONENTS dynamic-component implementation.\n   */\n  componentId: string;\n\n  /**\n   * A random key for saving it to the object.\n   */\n  id: string;\n\n  /**\n   * The current configuration of the widget.\n   */\n  config: any;\n\n  /**\n   * The current title of the widget.\n   */\n  title?: string;\n\n  /**\n   * Which classes should be added.\n   */\n  classes?: { [key: string]: boolean };\n}\n\n/**\n * Is used to configure a widget dashboard. It allows\n * to set certain parameter that change the behavior\n * of the dashboard.\n */\nexport interface DashboardSettings {\n  /**\n   * If the dashboard is frozen, the user can't edit it any more.\n   * However he can delete it and change the frozen state.\n   */\n  isFrozen: boolean;\n  /**\n   * If the dashboard is disabled, no changes on this dashboard are allowed.\n   * E.g. because the user doesn't have the rights.\n   */\n  isDisabled: boolean;\n  /**\n   * The gap between each widget as pixel\n   */\n  widgetMargin: number;\n  /**\n   * Should attempt translating user-defined widget's title if translation is available.\n   */\n  translateWidgetTitle: boolean;\n  /**\n   * Should attempt translating user-defined dashboard's title if translation is available.\n   */\n  translateDashboardTitle: boolean;\n  /**\n   * New added widgets get that height attached (in css grid columns units)\n   */\n  defaultHeight: number;\n  /**\n   * New added widgets get that width attached (in css grid row units)\n   */\n  defaultWidth: number;\n  /**\n   * Should the user be able to switch to fullscreen mode.\n   */\n  allowFullscreen: boolean;\n  /**\n   * A global title that is used for this dashboard.\n   */\n  title?: string;\n\n  /**\n   * If set to false, the dashboard can not be copied (default true).\n   */\n  canCopy?: boolean;\n\n  /**\n   * If set to false, the dashboard can not be removed (default true).\n   */\n  canDelete?: boolean;\n\n  /**\n   * Indicates that the dashboard is loading.\n   */\n  isLoading?: boolean;\n\n  /**\n   * The amount of columns on that dashboard.\n   * Can be freely chosen, but product uses either 12 or 24.\n   */\n  columns?: number;\n}\n\nexport interface HeaderTemplates {\n  template: TemplateRef<unknown>;\n  priority?: number;\n}\n\nexport interface DashboardChildDimension {\n  x?: number;\n  y?: number;\n  width: number;\n  height: number;\n}\n\nexport interface DashboardChildResizeDimension {\n  pointer: {\n    x: number;\n    y: number;\n  };\n  width: number;\n  height: number;\n}\n\nexport interface DashboardChildArrangement {\n  current: DashboardChildDimension;\n  scan: DashboardChildComponent[];\n  spacing: number;\n  origin: DashboardChildDimension;\n}\n\nexport interface DashboardChange {\n  source: DashboardChildComponent;\n  children: DashboardChildComponent[];\n}\n\nexport interface WidgetChange {\n  widget: Widget;\n  dashboard: DashboardComponent;\n  source: DashboardChildComponent;\n}\n\nexport const CopyDashboardDisabledReason = {\n  PERMISSIONS: 'PERMISSIONS',\n  WRONG_REFERENCE: 'WRONG_REFERENCE'\n} as const;\n\nexport type DashboardCopyPermission =\n  | {\n      state: true;\n      reason?: never;\n    }\n  | {\n      state: false;\n      reason: (typeof CopyDashboardDisabledReason)[keyof typeof CopyDashboardDisabledReason];\n    };\n\nexport const NEW_DASHBOARD_ROUTER_STATE_PROP = 'newDashboard';\n","import {\n  Component,\n  computed,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  signal\n} from '@angular/core';\nimport { BehaviorSubject, fromEvent, Observable, of, Subject, Subscription, timer } from 'rxjs';\nimport { filter, first, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { AsyncPipe } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * Component to count down specific time interval, then emit when countdown ends.\n * Next countdown is started right after previous one.\n */\n@Component({\n  selector: 'c8y-countdown-interval',\n  templateUrl: './countdown-interval.component.html',\n  standalone: true,\n  imports: [AsyncPipe, C8yTranslatePipe]\n})\nexport class CountdownIntervalComponent implements OnInit, OnDestroy {\n  /**\n   * Time in milliseconds to count down from.\n   */\n  @Input() set countdownInterval(value: number) {\n    this._countdownInterval = Math.max(value, this.MINIMUM_INTERVAL);\n\n    if (this.countdownSubscription) {\n      this.reset();\n    }\n  }\n\n  get countdownInterval(): number {\n    return this._countdownInterval || this.MINIMUM_INTERVAL;\n  }\n\n  /**\n   * Configuration object for the countdown interval component.\n   */\n  private _config = signal<{ enforcePulseIcon?: boolean }>({});\n  shouldShowPulseIcon = computed(() => this._config().enforcePulseIcon ?? false);\n\n  @Input() set config(value: { enforcePulseIcon?: boolean }) {\n    this._config.set(value);\n  }\n\n  /**\n   * Emits when countdown ends.\n   */\n  @Output() countdownEnded = new EventEmitter<void>();\n\n  runSpinner$ = new BehaviorSubject(false);\n  secondsUntilRefresh$: BehaviorSubject<string>;\n  progressPercentage$ = new BehaviorSubject<number>(0);\n  enableTransition$ = new BehaviorSubject<boolean>(false);\n\n  private _countdownInterval: number;\n  private destroy$ = new Subject<void>();\n  private readonly MINIMUM_INTERVAL = 5_000;\n  private readonly ONE_SECOND = 1000; // One second in milliseconds\n  private start$ = new Subject();\n  private countdownSubscription: Subscription;\n\n  ngOnInit(): void {\n    this.secondsUntilRefresh$ = new BehaviorSubject(`${Math.floor(this.countdownInterval / 1000)}`);\n    this.start$.pipe(takeUntil(this.destroy$)).subscribe(() => this.initializeCountdownInterval());\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  /**\n   * Starts the countdown timer.\n   */\n  start(): void {\n    this.countdownSubscription?.unsubscribe();\n    this.start$.next(null);\n  }\n\n  /**\n   * Stops the countdown timer.\n   * @param stopAtZero - If true, stops the timer when it reaches zero. Otherwise, stops it at the current countdown interval.\n   */\n  stop(stopAtZero = false): void {\n    this.countdownSubscription?.unsubscribe();\n    this.runSpinner$.next(false);\n    this.enableTransition$.next(false);\n    if (stopAtZero) {\n      this.secondsUntilRefresh$.next('0');\n      this.progressPercentage$.next(100); // Full circle when stopped at zero\n    } else {\n      this.secondsUntilRefresh$.next(`${Math.floor(this.countdownInterval / 1000)}`);\n      this.progressPercentage$.next(0); // Empty circle when stopped at interval\n    }\n  }\n\n  reset(): void {\n    this.stop();\n    // Small delay to ensure CSS animation is properly reset before starting again\n    // Needed to avoid issues with the spinner not resetting correctly when changing the countdown interval\n    setTimeout(() => {\n      this.start();\n    }, 20);\n  }\n\n  /**\n   * Initializes the countdown timer.\n   * Kicks off the timer logic and activates any associated UI elements.\n   */\n  private initializeCountdownInterval(): void {\n    const timerStart$ = new Subject<void>();\n    const documentHiddenEvent$ = this.createDocumentHiddenEventStream();\n\n    const interval$ = this.createIntervalStream(timerStart$, documentHiddenEvent$);\n\n    this.subscribeToInterval(interval$);\n\n    timerStart$.next();\n    this.runSpinner$.next(true);\n\n    // Reset progress to 0 without transition if coming from a high value\n    // This prevents the unwanted clockwise animation\n    this.setProgressWithoutTransition(0);\n\n    // Enable transition after a brief delay for smooth countdown animation\n    setTimeout(() => {\n      this.enableTransition$.next(true);\n    }, 50);\n  }\n\n  /**\n   * Creates an Observable stream that emits events when the document's visibility changes.\n   * @returns An Observable emitting `null` whenever the visibility of the document changes.\n   */\n  private createDocumentHiddenEventStream(): Observable<null> {\n    return fromEvent<null>(document, 'visibilitychange').pipe(\n      mapTo(null),\n      takeUntil(this.destroy$)\n    );\n  }\n\n  /**\n   * Creates the main interval Observable for the countdown timer.\n   * @param timerStart$ - A Subject to signal the start of the timer.\n   * @param documentHiddenEvent$ - An Observable for document visibility changes.\n   * @returns An Observable that orchestrates the timer logic.\n   */\n  private createIntervalStream(\n    timerStart$: Subject<void>,\n    documentHiddenEvent$: Observable<null>\n  ): Observable<null> {\n    return timerStart$.pipe(\n      switchMap(() => this.createTimer()),\n      switchMap(() => (document.hidden ? documentHiddenEvent$ : of(null))),\n      takeUntil(this.destroy$)\n    );\n  }\n\n  /**\n   * Creates a timer Observable that emits every second.\n   * @returns An Observable that emits a number every second, starting from 0.\n   */\n  private createTimer(): Observable<number> {\n    return timer(0, this.ONE_SECOND).pipe(\n      tap(value => this.updateRemainingTime(value)),\n      filter(value => value >= this.countdownInterval / this.ONE_SECOND),\n      first()\n    );\n  }\n\n  /**\n   * Updates the remaining time in the countdown.\n   * @param value - The current timer value in seconds.\n   */\n  private updateRemainingTime(value: number): void {\n    const totalSeconds = this.countdownInterval / this.ONE_SECOND;\n    const remainingSeconds = Math.floor(totalSeconds - value);\n    this.secondsUntilRefresh$.next(`${remainingSeconds}`);\n\n    // Calculate progress percentage (0 to 100)\n    const progressPercentage = (value / totalSeconds) * 100;\n    this.progressPercentage$.next(progressPercentage);\n  }\n\n  /**\n   * Sets progress without transition to prevent animation glitches\n   * @param value - The progress percentage to set\n   */\n  private setProgressWithoutTransition(value: number): void {\n    this.enableTransition$.next(false);\n    this.progressPercentage$.next(value);\n  }\n\n  /**\n   * Subscribes to the interval Observable and sets up the event handlers for the countdown.\n   * @param interval$ - The countdown interval Observable to subscribe to.\n   */\n  private subscribeToInterval(interval$: Observable<null>): void {\n    this.countdownSubscription = interval$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n      this.countdownEnded.emit();\n    });\n  }\n}\n","@if (!shouldShowPulseIcon()) {\n  <div\n    class=\"time-elapsed\"\n    [title]=\"\n      '{{ secondsLeft }} s / {{ interval }} s'\n        | translate\n          : { secondsLeft: secondsUntilRefresh$ | async, interval: countdownInterval / 1000 }\n    \"\n    data-cy=\"c8y-countdown-interval--countdown\"\n  >\n    <svg\n      style=\"transform: rotate(-90deg)\"\n      viewBox=\"0 0 40 40\"\n      fill=\"none\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <circle\n        [style.stroke-dashoffset]=\"100 - (progressPercentage$ | async)\"\n        [style.transition]=\"(enableTransition$ | async) ? 'stroke-dashoffset 0.2s linear' : 'none'\"\n        cx=\"20\"\n        cy=\"20\"\n        r=\"15.8\"\n        stroke=\"var(--c8y-brand-primary)\"\n        stroke-width=\"6\"\n        stroke-dasharray=\"100\"\n      />\n    </svg>\n\n    <span data-cy=\"c8y-countdown-interval--seconds\">{{ secondsUntilRefresh$ | async }}</span>\n  </div>\n} @else {\n  <div class=\"p-relative a-s-stretch no-pointer d-flex a-i-center j-c-center\">\n    <span\n      class=\"c8y-pulse active m-0\"\n      data-cy=\"global-context--pulse-icon\"\n    ></span>\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { CountdownIntervalComponent } from './countdown-interval.component';\n\n@NgModule({\n  imports: [CommonModule, CountdownIntervalComponent],\n  exports: [CountdownIntervalComponent]\n})\nexport class CountdownIntervalModule {}\n","export const DEFAULT_INTERVAL_VALUE = 30_000;\nexport const DEFAULT_INTERVAL_VALUES = [5_000, 10_000, 15_000, 30_000, 60_000];\nexport const DEFAULT_INTERVAL_STATE = true;\n\nexport const GLOBAL_CONTEXT_AUTO_REFRESH = 'globalContextAutoRefresh';\nexport type GlobalAutoRefreshQueryParam = {\n  [GLOBAL_CONTEXT_AUTO_REFRESH]: boolean;\n};\n\nexport interface GlobalAutoRefreshWidgetConfig {\n  /**\n   * Indicates if instance of widget is bound to global auto refresh context. It can be only used with widgets which\n   * dynamic component definition contains displaySettings allowing to use it with global auto refresh context.\n   */\n  widgetInstanceGlobalAutoRefreshContext?: boolean;\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { BehaviorSubject, MonoTypeOperatorFunction, Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, map, skip, switchMap, tap } from 'rxjs/operators';\nimport {\n  DEFAULT_INTERVAL_STATE,\n  DEFAULT_INTERVAL_VALUE,\n  GLOBAL_CONTEXT_AUTO_REFRESH,\n  GlobalAutoRefreshQueryParam\n} from './widget-auto-refresh-context.model';\nimport {\n  ActivatedRoute,\n  Event,\n  NavigationCancel,\n  NavigationEnd,\n  NavigationError,\n  NavigationStart,\n  Router\n} from '@angular/router';\n\n@Injectable({ providedIn: 'root' })\nexport class WidgetGlobalAutoRefreshService {\n  /**\n   * A BehaviorSubject that tracks the number of loading operations in progress.\n   * Initialized with a count of 0.\n   */\n  private loadingCount$ = new BehaviorSubject<number>(0);\n\n  /**\n   * An Observable that emits a boolean indicating whether any widgets with global refresh option are currently loading.\n   * The value is true if the loading count is non-zero, and false if the loading count is zero.\n   * Uses distinctUntilChanged() to emit only when the boolean value changes.\n   */\n  private isLoadingWidgets$: Observable<boolean> = this.loadingCount$.pipe(\n    distinctUntilChanged(),\n    map(count => count !== 0)\n  );\n\n  /**\n   * Object containing behavior subjects for managing auto-refresh settings.\n   */\n  autoRefreshSettings = {\n    /**\n     * BehaviorSubject that emits the current state of auto-refresh button.\n     * Defaults to DEFAULT_INTERVAL_STATE.\n     */\n    isEnabled$: new BehaviorSubject<boolean>(DEFAULT_INTERVAL_STATE),\n    /**\n     * BehaviorSubject that emits the current auto-refresh interval value.\n     * Defaults to DEFAULT_INTERVAL_VALUE.\n     */\n    refreshInterval$: new BehaviorSubject<number>(DEFAULT_INTERVAL_VALUE),\n    /**\n     * BehaviorSubject that emits whether auto-refresh has been manually disabled by the user.\n     * Defaults to false.\n     */\n    userDisabledManually$: new BehaviorSubject(false)\n  };\n\n  /**\n   * Object containing subjects for managing countdown actions.\n   */\n  countdownActions = {\n    /**\n     * Subject used to stop the countdown.\n     */\n    stop$: new Subject<void>(),\n    /**\n     * Subject used to reset the countdown.\n     */\n    reset$: new Subject<void>(),\n    /**\n     * Subject that emits when the countdown has ended.\n     */\n    countdownEnded$: new Subject<void>()\n  };\n\n  /**\n   * Subject that emits when a dashboard save operation is triggered.\n   */\n  onDashboardSave$ = new Subject<void>();\n\n  /**\n   * A signal representing the number of widgets with the global auto-refresh option enabled.\n   */\n  globalRefreshWidgetsCount = signal(0);\n\n  /**\n   * Tracks the navigation state.\n   *\n   * The signal returns a boolean indicating whether a navigation operation is currently in progress.\n   * It initializes with a default value of `false` and can be toggled to `true` during navigation events from `handleNavigationInProgress$`.\n   */\n  private navigationInProgress = signal(false);\n\n  private readonly router = inject(Router);\n  private readonly activatedRoute = inject(ActivatedRoute);\n\n  /**\n   * Increments the loading count by 1.\n   */\n  incrementLoading(): void {\n    this.loadingCount$.next(this.loadingCount$.value + 1);\n  }\n\n  /**\n   * Decrements the loading count by 1.\n   */\n  decrementLoading(): void {\n    this.loadingCount$.next(this.loadingCount$.value - 1);\n  }\n\n  /**\n   * Retrieves an observable that emits the value of a Global Auto Refresh query parameter\n   * whenever it changes. The query parameter being tracked is determined by\n   * `GlobalAutoRefreshName.GLOBAL_CONTEXT_AUTO_REFRESH`.\n   *\n   * @returns An observable that emits the parsed value of the `GLOBAL_CONTEXT_AUTO_REFRESH` query parameter.\n   */\n  getQueryParamChangeValue$(): Observable<boolean | null> {\n    return this.activatedRoute.queryParams.pipe(\n      map(params => params[GLOBAL_CONTEXT_AUTO_REFRESH]),\n      map(this.parseGlobalAutoRefreshParam)\n    );\n  }\n\n  /**\n   * Monitors router navigation events and updates the navigation progress state.\n   *\n   * @returns An Observable that emits router events of types NavigationStart, NavigationEnd,\n   *          NavigationCancel, and NavigationError.\n   */\n  handleNavigationInProgress$(): Observable<Event> {\n    return this.router.events.pipe(\n      filter(\n        event =>\n          event instanceof NavigationStart ||\n          event instanceof NavigationEnd ||\n          event instanceof NavigationCancel ||\n          event instanceof NavigationError\n      ),\n      tap(e => this.navigationInProgress.set(e instanceof NavigationStart))\n    );\n  }\n\n  /**\n   * Sets the global auto-refresh query parameter in the current route.\n   *\n   * @param queryParams - An object representing the query parameters to set for the global auto-refresh option.\n   *                      The existing query parameters will be merged with these.\n   */\n  async setAutoRefreshQueryParam(queryParams: GlobalAutoRefreshQueryParam): Promise<void> {\n    if (this.navigationInProgress()) {\n      return;\n    }\n\n    this.navigationInProgress.set(true);\n    await this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams,\n      queryParamsHandling: 'merge'\n    });\n    this.navigationInProgress.set(false);\n  }\n\n  /**\n   * Handles changes to the edit mode and updates the isEnabled$ variable.\n   *\n   * - If auto-refresh was manually disabled by the user (`userDisabledManually$` is `true`), auto-refresh will remain disabled regardless of the edit mode state.\n   * - If auto-refresh was not manually disabled, it will be disabled when entering edit mode and enabled when exiting edit mode.\n   *\n   * @param editMode - A boolean indicating the current state of edit mode (`true` if edit mode is active, `false` otherwise).\n   */\n  onEditModeChange(editMode: boolean): void {\n    if (this.autoRefreshSettings.userDisabledManually$.getValue()) {\n      this.autoRefreshSettings.isEnabled$.next(false);\n      return;\n    }\n    this.autoRefreshSettings.isEnabled$.next(!editMode);\n  }\n\n  /**\n   * Returns an Observable that triggers the countdown reset action when loading completes.\n   *\n   * This method creates an Observable that:\n   * - Skips a specified number of initial emissions from `isLoadingWidgets$` based on the `skipInitialBehaviorSubjectEmission$` method.\n   * - Filters out emissions where the loading state is true.\n   * - On emission where the loading state is false, it triggers a countdown reset action.\n   *\n   */\n  resetCountdownOnLoadingComplete$(): MonoTypeOperatorFunction<any> {\n    return switchMap(() =>\n      this.isLoadingWidgets$.pipe(\n        tap(isLoading => isLoading && this.countdownActions.stop$.next()),\n        filter(loading => !loading),\n        tap(() => this.resetCountdown())\n      )\n    );\n  }\n\n  /**\n   * Resets the service's settings and parameters to their default values.\n   */\n  resetServiceToDefaults(): void {\n    setTimeout(() => !this.navigationInProgress() && this.clearQueryParam());\n\n    this.autoRefreshSettings.refreshInterval$.next(DEFAULT_INTERVAL_VALUE);\n    this.autoRefreshSettings.userDisabledManually$.next(false);\n\n    setTimeout(() => {\n      this.autoRefreshSettings.isEnabled$.next(DEFAULT_INTERVAL_STATE);\n      this.resetLoadingToZero();\n      this.navigationInProgress.set(false);\n    });\n  }\n\n  /**\n   * Resets the countdown timer by emitting a reset action after a short delay.\n   */\n  resetCountdown(): void {\n    queueMicrotask(() => this.countdownActions.reset$.next());\n  }\n\n  /**\n   * Initializes the auto-refresh countdown logic based on the widget loading state and edit mode.\n   *\n   * This method returns an observable that monitors the widget loading state and triggers specific actions\n   * related to the countdown process. It performs the following steps:\n   *\n   * 1. Skips the initial loading state emitted by `isLoadingWidgets$`.\n   * 2. Stops the countdown if the widgets are currently loading.\n   * 3. Filters out cases where widgets are loading or the application is in edit mode.\n   * 4. Resets the countdown when widgets are not loading and the application is not in edit mode.\n   *\n   * @param editMode$ - A `BehaviorSubject` representing whether the application is currently in edit mode.\n   *\n   * @returns An `Observable<boolean>` that emits the loading state of the widgets after the initialization steps.\n   */\n  initializeAutoRefreshCountdownLoading$(editMode$: BehaviorSubject<boolean>): Observable<boolean> {\n    return this.isLoadingWidgets$.pipe(\n      skip(1),\n      tap(isLoading => isLoading && this.countdownActions.stop$.next()),\n      filter(isWidgetsLoading => !isWidgetsLoading && !editMode$.getValue()),\n      tap(() => this.resetCountdown())\n    );\n  }\n\n  /**\n   * Parses a string representation of global auto-refresh parameter into a boolean or null.\n   *\n   * Converts the provided `globalAutoRefresh` string into a boolean value or null based on its content:\n   * - Returns `true` if `globalAutoRefresh` is 'true'.\n   * - Returns `false` if `globalAutoRefresh` is 'false'.\n   * - Returns `null` if `globalAutoRefresh` is neither 'true' nor 'false'.\n   *\n   * @param globalAutoRefresh - The string representation of the global auto-refresh parameter.\n   *\n   * @returns A boolean value corresponding to the parsed global auto-refresh state, or null if the input is not 'true' or 'false'.\n   */\n  private parseGlobalAutoRefreshParam(globalAutoRefresh: string): boolean | null {\n    return globalAutoRefresh === 'false' ? false : globalAutoRefresh === 'true' ? true : null;\n  }\n\n  /**\n   * Resets the loading count to zero.\n   */\n  private resetLoadingToZero(): void {\n    this.loadingCount$.next(0);\n  }\n\n  /**\n   * Clears the global auto-refresh query parameter by navigating to the current route with the parameter set to null.\n   *\n   */\n  private clearQueryParam(): void {\n    const queryParams: GlobalAutoRefreshQueryParam = {\n      globalContextAutoRefresh: null\n    };\n\n    this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams,\n      queryParamsHandling: 'merge'\n    });\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  forwardRef,\n  inject,\n  OnDestroy,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { CountdownIntervalComponent } from '../../countdown-interval';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DEFAULT_INTERVAL_VALUE } from './widget-auto-refresh-context.model';\nimport { WidgetGlobalAutoRefreshService } from './widget-global-auto-refresh.service';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AsyncPipe } from '@angular/common';\nimport { IconDirective } from '../../common/icon.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-auto-refresh-control',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AutoRefreshControlComponent),\n      multi: true\n    }\n  ],\n  templateUrl: './auto-refresh-control.component.html',\n  standalone: true,\n  imports: [TooltipModule, CountdownIntervalComponent, IconDirective, C8yTranslatePipe, AsyncPipe]\n})\nexport class AutoRefreshControlComponent implements AfterViewInit, OnDestroy, ControlValueAccessor {\n  readonly DISABLE_AUTO_REFRESH = gettext('Disable auto refresh');\n  readonly ENABLE_AUTO_REFRESH = gettext('Enable auto refresh');\n  readonly DEFAULT_INTERVAL_VALUE = DEFAULT_INTERVAL_VALUE;\n\n  @ViewChild(CountdownIntervalComponent)\n  countdownIntervalComponent: CountdownIntervalComponent;\n\n  @Output()\n  loading = new EventEmitter<boolean>();\n\n  private readonly widgetGlobalAutoRefresh = inject(WidgetGlobalAutoRefreshService);\n\n  showIntervalRefresh$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(\n    this.widgetGlobalAutoRefresh.autoRefreshSettings.isEnabled$.getValue()\n  );\n  autoRefreshSeconds$: BehaviorSubject<number>;\n\n  private isBtnDisabledSubject = new BehaviorSubject<boolean>(false);\n  isBtnDisabled$ = this.isBtnDisabledSubject.asObservable();\n\n  private destroy$: Subject<void> = new Subject();\n  onChange: (value: boolean) => void;\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  ngAfterViewInit() {\n    this.subscribeOnCountdownChangeState();\n\n    this.setUpOnCountdownEndedListener();\n    this.autoRefreshSeconds$ = this.widgetGlobalAutoRefresh.autoRefreshSettings.refreshInterval$;\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  toggleIntervalRefresh() {\n    this.showIntervalRefresh$.next(!this.showIntervalRefresh$.getValue());\n    this.onChange(this.showIntervalRefresh$.getValue());\n    this.widgetGlobalAutoRefresh.autoRefreshSettings.userDisabledManually$.next(\n      !this.showIntervalRefresh$.getValue()\n    );\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  writeValue(showIntervalRefresh: boolean): void {\n    if (!this.showIntervalRefresh$) {\n      return;\n    }\n    this.showIntervalRefresh$.next(showIntervalRefresh);\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  private subscribeOnCountdownChangeState() {\n    this.widgetGlobalAutoRefresh.countdownActions.reset$\n      .pipe(\n        tap(() => {\n          this.isBtnDisabledSubject.next(false);\n          this.loading.emit(false);\n          this.countdownIntervalComponent?.reset();\n        }),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n\n    this.widgetGlobalAutoRefresh.countdownActions.stop$\n      .pipe(\n        tap(() => {\n          this.isBtnDisabledSubject.next(true);\n          this.loading.emit(true);\n          this.countdownIntervalComponent?.stop(true);\n        }),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n\n  private setUpOnCountdownEndedListener() {\n    this.countdownIntervalComponent.countdownEnded\n      .pipe(\n        filter(() => this.showIntervalRefresh$.getValue()),\n        tap(() => this.handleCountdownEnded()),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n\n  private handleCountdownEnded(): void {\n    this.widgetGlobalAutoRefresh.countdownActions.countdownEnded$.next();\n  }\n}\n","@let showIntervalRefresh = showIntervalRefresh$ | async;\n@let autoRefreshSeconds = autoRefreshSeconds$ | async;\n@let isBtnDisabled = isBtnDisabled$ | async;\n@let tooltipText = (showIntervalRefresh ? DISABLE_AUTO_REFRESH : ENABLE_AUTO_REFRESH) | translate;\n\n<button\n  class=\"toggle-countdown\"\n  [attr.aria-label]=\"tooltipText\"\n  [tooltip]=\"tooltipText\"\n  placement=\"top\"\n  container=\"body\"\n  (click)=\"toggleIntervalRefresh()\"\n  [adaptivePosition]=\"false\"\n  mode\n  [delay]=\"500\"\n  [disabled]=\"isBtnDisabled\"\n>\n  @if (showIntervalRefresh) {\n    <c8y-countdown-interval\n      [countdownInterval]=\"autoRefreshSeconds ?? DEFAULT_INTERVAL_VALUE\"\n    ></c8y-countdown-interval>\n  } @else {\n    <i c8yIcon=\"pause\"></i>\n  }\n</button>\n","import { Component, forwardRef } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport {\n  DEFAULT_INTERVAL_VALUE,\n  DEFAULT_INTERVAL_VALUES\n} from './widget-auto-refresh-context.model';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { NgFor } from '@angular/common';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-auto-refresh-select-control',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AutoRefreshSelectControlComponent),\n      multi: true\n    }\n  ],\n  templateUrl: './auto-refresh-select-control.component.html',\n  standalone: true,\n  imports: [FormsModule, TooltipModule, NgFor, C8yTranslatePipe]\n})\nexport class AutoRefreshSelectControlComponent implements ControlValueAccessor {\n  readonly DEFAULT_INTERVAL_VALUES = DEFAULT_INTERVAL_VALUES;\n  readonly START_INTERVAL_VALUE = DEFAULT_INTERVAL_VALUE;\n\n  readonly SECONDS_UNTIL_REFRESH = gettext('{{ seconds }} s`until refresh`');\n\n  autoRefreshSeconds: number;\n\n  onChange: (value: number) => void;\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {};\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  writeValue(autoRefreshSeconds: number): void {\n    this.autoRefreshSeconds = autoRefreshSeconds;\n  }\n\n  onIntervalChange(autoRefreshSeconds: number): void {\n    this.onChange(autoRefreshSeconds);\n    this.autoRefreshSeconds = autoRefreshSeconds;\n  }\n}\n","<div class=\"c8y-select-wrapper\">\n  <select\n    class=\"form-control text-12\"\n    [attr.aria-label]=\"'Refresh interval in seconds' | translate\"\n    [tooltip]=\"'Refresh interval in seconds' | translate\"\n    placement=\"bottom\"\n    [adaptivePosition]=\"false\"\n    [delay]=\"500\"\n    [container]=\"'body'\"\n    mode\n    [(ngModel)]=\"autoRefreshSeconds\"\n    (ngModelChange)=\"onIntervalChange($event)\"\n    [ngModelOptions]=\"{ standalone: true }\"\n  >\n    <option\n      *ngFor=\"let refreshInterval of DEFAULT_INTERVAL_VALUES\"\n      [ngValue]=\"refreshInterval\"\n      [attr.selected]=\"refreshInterval === START_INTERVAL_VALUE ? '' : null\"\n    >\n      {{ SECONDS_UNTIL_REFRESH | translate: { seconds: refreshInterval / 1000 } }}\n    </option>\n  </select>\n  <span></span>\n</div>\n","import { AsyncPipe, NgClass, NgIf } from '@angular/common';\nimport { AfterViewInit, Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { ActionBarItemComponent } from '../../action-bar/action-bar-item.component';\nimport { IconDirective } from '../../common/icon.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\nimport { AutoRefreshControlComponent } from './auto-refresh-control.component';\nimport { AutoRefreshSelectControlComponent } from './auto-refresh-select-control.component';\nimport {\n  GLOBAL_CONTEXT_AUTO_REFRESH,\n  GlobalAutoRefreshQueryParam\n} from './widget-auto-refresh-context.model';\nimport { WidgetGlobalAutoRefreshService } from './widget-global-auto-refresh.service';\n\n@Component({\n  selector: 'c8y-widget-auto-refresh-context',\n  templateUrl: './widget-auto-refresh-context.component.html',\n  standalone: true,\n  imports: [\n    ActionBarItemComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    AutoRefreshControlComponent,\n    AutoRefreshSelectControlComponent,\n    NgIf,\n    TooltipModule,\n    IconDirective,\n    NgClass,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class WidgetAutoRefreshContextComponent implements OnInit, OnDestroy, AfterViewInit {\n  form: ReturnType<WidgetAutoRefreshContextComponent['createForm']>;\n\n  @Input()\n  editMode$: BehaviorSubject<boolean>;\n\n  globalRefreshWidgetLoading = true;\n  readonly ACTION_BAR_GROUP_ID = 'globalrefreshcontext';\n  readonly ACTION_BAR_PRIORITY = 5;\n\n  private destroy$: Subject<void> = new Subject();\n\n  private readonly fb = inject(FormBuilder);\n  private readonly widgetGlobalAutoRefresh = inject(WidgetGlobalAutoRefreshService);\n\n  ngOnInit() {\n    this.widgetGlobalAutoRefresh.globalRefreshWidgetsCount.update(count => count + 1);\n\n    this.form = this.createForm();\n\n    this.subscribeOnAutoRefreshSecondsChange();\n    this.subscribeOnAutoRefreshChange();\n    this.subscribeOnRouterEvents();\n  }\n\n  ngAfterViewInit() {\n    this.initializeWidgetSubscriptions();\n    this.subscribeOnQueryParamChange();\n\n    this.widgetGlobalAutoRefresh.autoRefreshSettings.isEnabled$\n      .pipe(tap(() => this.setAutoRefreshQueryParam()))\n      .pipe(takeUntil(this.destroy$))\n      .subscribe();\n\n    this.widgetGlobalAutoRefresh\n      .initializeAutoRefreshCountdownLoading$(this.editMode$)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe();\n\n    this.listenOnDashboardSaveOperation();\n  }\n\n  ngOnDestroy() {\n    this.onContextDestroy();\n  }\n\n  onRefresh() {\n    this.widgetGlobalAutoRefresh.countdownActions.countdownEnded$.next();\n  }\n\n  private createForm() {\n    return this.fb.group({\n      autoRefresh: this.widgetGlobalAutoRefresh.autoRefreshSettings.isEnabled$.getValue(),\n      autoRefreshSeconds:\n        this.widgetGlobalAutoRefresh.autoRefreshSettings.refreshInterval$.getValue()\n    });\n  }\n\n  private subscribeOnAutoRefreshSecondsChange() {\n    const autoRefreshSecondsChanges$ = this.form.controls.autoRefreshSeconds.valueChanges;\n\n    autoRefreshSecondsChanges$\n      .pipe(\n        tap(value => this.widgetGlobalAutoRefresh.autoRefreshSettings.refreshInterval$.next(value)),\n        this.widgetGlobalAutoRefresh.resetCountdownOnLoadingComplete$(),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n\n  private subscribeOnAutoRefreshChange() {\n    const autoRefreshChanges$ = this.form.controls.autoRefresh.valueChanges;\n\n    autoRefreshChanges$\n      .pipe(\n        tap(value => this.widgetGlobalAutoRefresh.autoRefreshSettings.isEnabled$.next(value)),\n        filter(Boolean),\n        this.widgetGlobalAutoRefresh.resetCountdownOnLoadingComplete$(),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n\n  private initializeWidgetSubscriptions() {\n    this.editMode$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(editMode => this.widgetGlobalAutoRefresh.onEditModeChange(editMode));\n  }\n\n  private setAutoRefreshQueryParam() {\n    queueMicrotask(() => {\n      if (this.widgetGlobalAutoRefresh.globalRefreshWidgetsCount() === 0) {\n        return;\n      }\n      const queryParam: GlobalAutoRefreshQueryParam = {\n        [GLOBAL_CONTEXT_AUTO_REFRESH]:\n          this.widgetGlobalAutoRefresh.autoRefreshSettings.isEnabled$.getValue()\n      };\n      this.widgetGlobalAutoRefresh.setAutoRefreshQueryParam(queryParam);\n    });\n  }\n\n  private subscribeOnQueryParamChange() {\n    this.widgetGlobalAutoRefresh\n      .getQueryParamChangeValue$()\n      .pipe(\n        tap(paramValue => paramValue === null && this.setAutoRefreshQueryParam()),\n        filter(\n          paramValue =>\n            paramValue !== null &&\n            this.widgetGlobalAutoRefresh.autoRefreshSettings.isEnabled$.getValue() !== paramValue\n        ),\n        tap(paramValue => {\n          this.widgetGlobalAutoRefresh.autoRefreshSettings.isEnabled$.next(paramValue);\n          this.setAutoRefreshQueryParam();\n          if (paramValue) {\n            this.widgetGlobalAutoRefresh.resetCountdown();\n          }\n        }),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n\n  private subscribeOnRouterEvents() {\n    this.widgetGlobalAutoRefresh\n      .handleNavigationInProgress$()\n      .pipe(takeUntil(this.destroy$))\n      .subscribe();\n  }\n\n  private onContextDestroy() {\n    const widgetsCount = this.widgetGlobalAutoRefresh.globalRefreshWidgetsCount;\n    widgetsCount.update(count => count - 1);\n\n    if (widgetsCount() === 0) {\n      this.destroy$.next();\n      this.destroy$.complete();\n\n      this.widgetGlobalAutoRefresh.resetServiceToDefaults();\n    }\n  }\n\n  private listenOnDashboardSaveOperation() {\n    this.widgetGlobalAutoRefresh.onDashboardSave$\n      .pipe(\n        this.widgetGlobalAutoRefresh.resetCountdownOnLoadingComplete$(),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n}\n","<c8y-action-bar-item\n  [groupId]=\"ACTION_BAR_GROUP_ID\"\n  [priority]=\"ACTION_BAR_PRIORITY\"\n  [placement]=\"'left'\"\n>\n  <form\n    class=\"d-flex\"\n    [formGroup]=\"form\"\n  >\n    <c8y-auto-refresh-control\n      [hidden]=\"editMode$ | async\"\n      (loading)=\"globalRefreshWidgetLoading = $event\"\n      formControlName=\"autoRefresh\"\n    ></c8y-auto-refresh-control>\n\n    <c8y-auto-refresh-select-control\n      [hidden]=\"editMode$ | async\"\n      formControlName=\"autoRefreshSeconds\"\n    ></c8y-auto-refresh-select-control>\n  </form>\n  <div class=\"input-group-btn\">\n    <button\n      class=\"btn btn-default\"\n      style=\"border-left: 0\"\n      [attr.aria-label]=\"'Refresh' | translate\"\n      [tooltip]=\"'Refresh' | translate\"\n      placement=\"bottom\"\n      type=\"button\"\n      *ngIf=\"!(editMode$ | async)\"\n      [adaptivePosition]=\"false\"\n      [delay]=\"500\"\n      [disabled]=\"globalRefreshWidgetLoading\"\n      (click)=\"onRefresh()\"\n    >\n      <i\n        c8yIcon=\"refresh\"\n        [ngClass]=\"{ 'icon-spin': globalRefreshWidgetLoading }\"\n      ></i>\n    </button>\n  </div>\n</c8y-action-bar-item>\n","import { Component } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconDirective } from '../../common/icon.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-widget-auto-refresh-context-icon-bar',\n  templateUrl: './widget-auto-refresh-context-icon-bar.component.html',\n  standalone: true,\n  imports: [TooltipModule, IconDirective, C8yTranslatePipe]\n})\nexport class WidgetAutoRefreshContextIconBarComponent {\n  globalAutoRefreshTooltip = gettext(\n    'This widget is in sync with the dashboard auto refresh context.'\n  );\n}\n","<span class=\"m-l-auto d-flex\">\n  <button\n    class=\"btn btn-clean btn-no-focus p-l-4 p-r-0\"\n    [attr.aria-label]=\"globalAutoRefreshTooltip | translate\"\n    [tooltip]=\"globalAutoRefreshTooltip | translate\"\n    placement=\"top\"\n    container=\"body\"\n    data-cy=\"c8y-widget-auto-refresh-context-icon-bar--global-refresh-context-indicator\"\n  >\n    <span class=\"tag tag--info chip\">\n      <i c8yIcon=\"refresh\"></i>\n      {{ 'Auto refresh' | translate }}\n    </span>\n  </button>\n</span>\n","import { MonoTypeOperatorFunction, Observable } from 'rxjs';\nimport { distinctUntilChanged, tap } from 'rxjs/operators';\nimport { WidgetGlobalAutoRefreshService } from './widget-global-auto-refresh.service';\n\nexport function globalAutoRefreshLoading(\n  globalRefreshService: WidgetGlobalAutoRefreshService\n): MonoTypeOperatorFunction<boolean> {\n  return (source: Observable<boolean>) =>\n    source.pipe(\n      distinctUntilChanged(),\n      tap(isLoading =>\n        isLoading\n          ? globalRefreshService.incrementLoading()\n          : globalRefreshService.decrementLoading()\n      )\n    );\n}\n","import { Component, ElementRef, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { BreadcrumbItem } from '../breadcrumb/breadcrumb.model';\nimport { DashboardComponent } from './dashboard.component';\nimport {\n  DashboardChange,\n  DashboardSettings,\n  Widget,\n  WidgetChange,\n  DashboardCopyPermission,\n  CopyDashboardDisabledReason,\n  NEW_DASHBOARD_ROUTER_STATE_PROP\n} from './dashboard.model';\nimport { DynamicComponentService } from '../dynamic-component/dynamic-component.service';\nimport { BehaviorSubject, combineLatest, fromEvent, merge, Observable } from 'rxjs';\nimport { map, shareReplay, startWith, switchMap } from 'rxjs/operators';\nimport { set } from 'lodash-es';\nimport { WidgetsDashboardEventService } from './widgets-dashboard-event.service';\nimport { DashboardChildComponent } from './dashboard-child.component';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { RevertChangeType } from './widget-change-event.model';\nimport { ModalService } from '../modal/modal.service';\nimport { Status } from '../common/status.model';\nimport { WidgetGlobalAutoRefreshService } from './widget-auto-refresh-context';\nimport { NgStyle, NgClass, AsyncPipe } from '@angular/common';\nimport { TitleComponent } from '../header/title/title.component';\nimport { BreadcrumbComponent } from '../breadcrumb/breadcrumb.component';\nimport { BreadcrumbItemComponent } from '../breadcrumb/breadcrumb-item.component';\nimport { ActionBarItemComponent } from '../action-bar/action-bar-item.component';\nimport { IconDirective } from '../common/icon.directive';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { LoadingComponent } from '../common/loading.component';\nimport { EmptyStateComponent } from '../common/empty-state/empty-state.component';\nimport { GuideDocsComponent } from '../docs/guide-docs.component';\nimport { GuideHrefDirective } from '../docs/guide-href.directive';\nimport { DashboardChildTitleComponent } from './dashboard-child-title.component';\nimport { DashboardChildActionComponent } from './dashboard-child-action.component';\nimport { WidgetTimeContextComponent } from './wiget-time-context/widget-time-context.component';\nimport { WidgetAutoRefreshContextComponent } from './widget-auto-refresh-context/widget-auto-refresh-context.component';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { DynamicComponentComponent } from '../dynamic-component/dynamic-component.component';\n\n@Component({\n  selector: 'c8y-widgets-dashboard',\n  templateUrl: './widgets-dashboard.component.html',\n  host: {\n    style: `\n      display: block;\n    `,\n    class: 'dashboard c8y-grid-dashboard'\n  },\n  providers: [WidgetsDashboardEventService],\n  standalone: true,\n  imports: [\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    ActionBarItemComponent,\n    IconDirective,\n    TooltipModule,\n    NgStyle,\n    NgClass,\n    PopoverModule,\n    C8yTranslateDirective,\n    LoadingComponent,\n    EmptyStateComponent,\n    GuideDocsComponent,\n    GuideHrefDirective,\n    DashboardComponent,\n    DashboardChildComponent,\n    DashboardChildTitleComponent,\n    DashboardChildActionComponent,\n    WidgetTimeContextComponent,\n    WidgetAutoRefreshContextComponent,\n    DynamicComponentComponent,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class WidgetsDashboardComponent {\n  @Input()\n  set widgets(value: Widget[]) {\n    this._widgets.next(value);\n  }\n\n  get widgets(): Widget[] {\n    return this._widgets.value;\n  }\n\n  @Input()\n  context: any;\n\n  /**\n   * Indicates if device info in config should be overridden with values from context property.\n   */\n  @Input()\n  contextDashboard: any = { updateTarget: true };\n\n  @Input('settings')\n  set _settings(settings: Partial<DashboardSettings>) {\n    this.settings = { ...this.settings, ...settings };\n    this.isLoading$.next(!!this.settings.isLoading);\n  }\n\n  @Input() isCopyDisabled: DashboardCopyPermission | boolean;\n\n  @Input()\n  breadcrumb: BreadcrumbItem;\n\n  @Input()\n  editModeButtons: {\n    undoButtonDisabled: boolean;\n    changeToUndoName: string;\n    redoButtonDisabled: boolean;\n    changeToRedoName: string;\n  };\n\n  @Input() isSaveDisabled = true;\n  get isDeviceTypeDashboard(): boolean {\n    return !!this.contextDashboard?.deviceType;\n  }\n\n  settings: DashboardSettings = {\n    isFrozen: false,\n    isDisabled: false,\n    widgetMargin: 12,\n    translateWidgetTitle: false,\n    translateDashboardTitle: true,\n    defaultHeight: 4,\n    defaultWidth: 4,\n    allowFullscreen: false,\n    canCopy: true,\n    canDelete: true,\n    isLoading: false,\n    columns: 12\n  };\n\n  @Output()\n  onAddWidget: EventEmitter<DashboardComponent> = new EventEmitter();\n\n  @Output()\n  onEditWidget: EventEmitter<WidgetChange> = new EventEmitter();\n\n  @Output()\n  onDeleteWidget: EventEmitter<WidgetChange> = new EventEmitter();\n\n  @Output()\n  onChangeDashboard: EventEmitter<DashboardChange> = new EventEmitter();\n\n  @Output()\n  onResize: EventEmitter<void> = new EventEmitter();\n\n  @Output()\n  onEditDashboard: EventEmitter<DashboardComponent> = new EventEmitter();\n\n  @Output()\n  onCopyDashboard: EventEmitter<DashboardComponent> = new EventEmitter();\n\n  @Output()\n  onDeleteDashboard: EventEmitter<DashboardComponent> = new EventEmitter();\n\n  @Output()\n  onChangeStart: EventEmitter<WidgetChange> = new EventEmitter();\n\n  @Output()\n  onChangeEnd: EventEmitter<WidgetChange> = new EventEmitter();\n\n  @Output()\n  onSaveDashboard: EventEmitter<any> = new EventEmitter();\n\n  @Output()\n  onCancelDashboard: EventEmitter<any> = new EventEmitter();\n\n  @Output()\n  revertChange: EventEmitter<RevertChangeType> = new EventEmitter();\n\n  resolvedWidgets$: Observable<Widget[]>;\n\n  isLoadingWidgets$: Observable<boolean>;\n\n  copyDisabledPopoverMsg: string;\n\n  widgetInFullscreenMode = false;\n\n  inFullScreen$ = fromEvent(document, 'fullscreenchange').pipe(\n    map(() => this.fullScreen()),\n    startWith(this.fullScreen())\n  );\n  editMode$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n  get nativeElement() {\n    return this.elementRef.nativeElement;\n  }\n\n  readonly copyDashboardLabel = gettext('Copy dashboard');\n  readonly undoMessage = gettext('Undo: \"{{ changeToUndo }}\"');\n  readonly redoMessage = gettext('Redo: \"{{ changeToRedo }}\"');\n  readonly ACTION_BAR_EDIT_WIDGETS_PRIORITY = 10;\n\n  private _widgets = new BehaviorSubject<Widget[]>([]);\n  private isLoading$ = new BehaviorSubject(!!this._settings?.isLoading);\n  private isExecutingResolvers$: Observable<boolean>;\n\n  constructor(\n    private dynamic: DynamicComponentService,\n    private translateService: TranslateService,\n    private route: ActivatedRoute,\n    private modal: ModalService,\n    private widgetGlobalAutoRefresh: WidgetGlobalAutoRefreshService,\n    private router: Router,\n    private elementRef: ElementRef\n  ) {\n    const navigation = this.router.getCurrentNavigation();\n    if (navigation?.extras.state?.[NEW_DASHBOARD_ROUTER_STATE_PROP]) {\n      this.enableEditMode();\n    }\n\n    this.resolvedWidgets$ = this._widgets.pipe(\n      switchMap(widgets => this.executeResolversOfWidgets(widgets)),\n      shareReplay(1)\n    );\n    this.isExecutingResolvers$ = merge(\n      this._widgets.pipe(map(() => true)),\n      this.resolvedWidgets$.pipe(map(() => false))\n    );\n    this.isLoadingWidgets$ = combineLatest([this.isLoading$, this.isExecutingResolvers$]).pipe(\n      map(loadings => loadings.some(loading => loading)),\n      shareReplay(1)\n    );\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.isCopyDisabled) {\n      this.setCopyDisabledPopoverMsg();\n    }\n  }\n\n  async canDeactivate(omitConfirm = false): Promise<boolean> {\n    if (!this.editMode$.value || this.editModeButtons.undoButtonDisabled) {\n      return true;\n    } else {\n      if (omitConfirm) {\n        return false;\n      } else {\n        return await this.confirmClosing();\n      }\n    }\n  }\n\n  toggleFullscreen(hasWidget = false) {\n    const elem = document.body as any;\n    const doc = document as any;\n    if (hasWidget) {\n      elem.classList.add('singleWidget');\n      this.widgetInFullscreenMode = true;\n    } else {\n      elem.classList.remove('singleWidget');\n      this.widgetInFullscreenMode = false;\n    }\n    if (!this.fullScreen()) {\n      if (elem.requestFullscreen) {\n        elem.requestFullscreen();\n      } else if (elem.msRequestFullscreen) {\n        elem.msRequestFullscreen();\n      } else if (elem.mozRequestFullScreen) {\n        elem.mozRequestFullScreen();\n      } else if (elem.webkitRequestFullscreen) {\n        elem.webkitRequestFullscreen((Element as any).ALLOW_KEYBOARD_INPUT);\n      }\n    } else if (doc.exitFullscreen) {\n      doc.exitFullscreen();\n    } else if (doc.msExitFullscreen) {\n      doc.msExitFullscreen();\n    } else if (doc.mozCancelFullScreen) {\n      doc.mozCancelFullScreen();\n    } else if (doc.webkitExitFullscreen) {\n      doc.webkitExitFullscreen();\n    }\n  }\n\n  fullScreen() {\n    const doc: any = document;\n    return !!(\n      doc.fullscreenElement ||\n      doc.mozFullScreenElement ||\n      doc.webkitFullscreenElement ||\n      doc.msFullscreenElement\n    );\n  }\n\n  toggleFullscreenOnWidget(child: DashboardChildComponent) {\n    child.fullscreen = !child.fullscreen;\n    if (child.fullscreen) {\n      const onFullScreen = () => {\n        child.fullscreen = !!document.fullscreenElement;\n        if (!child.fullscreen) {\n          document.removeEventListener('fullscreenchange', onFullScreen);\n          document.body.classList.remove('singleWidget');\n          // required in case fullscreen is exited by e.g. pressing ESC\n          this.onResize.next();\n        }\n      };\n      document.addEventListener('fullscreenchange', onFullScreen);\n    }\n    this.toggleFullscreen(child.fullscreen);\n    this.onResize.next();\n  }\n\n  updateWidgetClasses(widget: Widget, classes: Record<string, boolean>) {\n    widget.classes = { ...widget.classes, ...classes };\n  }\n\n  updateWidgetConfig(data: any, widget: Widget) {\n    widget.config = { ...widget.config, ...data };\n  }\n\n  async cancelDashboardSave() {\n    if (await this.canDeactivate()) {\n      this.onCancelDashboard.emit();\n    }\n  }\n\n  saveDashboard() {\n    // Dropdown toggle (Settings) button was deleted immediately after editMode set to false.\n    // It leads to an issue with the actual hiding dropdown, so we have to add some delay in order to:\n    // 1. make dropdown close first\n    // 2. then set editMode to false and only then remove button from DOM\n    setTimeout(() => this.editMode$.next(false));\n    this.onSaveDashboard.emit();\n    this.widgetGlobalAutoRefresh.onDashboardSave$.next();\n  }\n\n  enableEditMode() {\n    this.editMode$.next(true);\n    this.contextDashboard.historyDescription = {};\n  }\n\n  private setCopyDisabledPopoverMsg() {\n    if (typeof this.isCopyDisabled === 'boolean' || this.isCopyDisabled?.state) {\n      return;\n    }\n\n    if (this.isCopyDisabled?.reason === CopyDashboardDisabledReason.PERMISSIONS) {\n      this.copyDisabledPopoverMsg = gettext(\n        'To copy this dashboard, contact your administrator to request the necessary permissions.'\n      );\n    } else if (this.isCopyDisabled?.reason === CopyDashboardDisabledReason.WRONG_REFERENCE) {\n      const viewContext = this.route.parent.snapshot.data?.context;\n\n      if (viewContext) {\n        const ctx = viewContext.split('/').shift();\n        const deviceStr = gettext(\n          'Copy not possible: Some widgets reference data from another group or device. To copy this dashboard, make sure all widgets use data from the current device only.'\n        );\n        const groupStr = gettext(\n          'Copy not possible: Some widgets reference data from another group or device. To copy this dashboard, make sure all widgets use data from the current group only.'\n        );\n        this.copyDisabledPopoverMsg = ctx === 'group' ? groupStr : deviceStr;\n      }\n    }\n  }\n\n  private async confirmClosing(): Promise<boolean> {\n    try {\n      await this.modal.confirm(\n        gettext('Exit edit mode'),\n        gettext('Are you sure you want to exit the edit mode? All unsaved changes will be lost.'),\n        Status.WARNING,\n        {\n          ok: gettext('Exit'),\n          cancel: gettext('Cancel')\n        }\n      );\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  private async executeResolversOfWidgets(widgets: Widget[]): Promise<Widget[]> {\n    if (!widgets) {\n      return widgets;\n    }\n\n    if (this.isDeviceTypeDashboard) {\n      const keysToOverride = ['device', '__target'];\n      widgets.forEach(\n        widget => (widget.config = this.replaceKeysWithContext(widget.config, keysToOverride))\n      );\n    }\n\n    const tuple = widgets.map(widget => ({\n      componentId: widget.componentId || widget.name,\n      config: widget.config\n    }));\n\n    const resolvedResults = await this.dynamic.executeResolvers(tuple);\n    widgets.forEach((widget, index) => {\n      if (resolvedResults[index]) {\n        if (!widget.config) {\n          widget.config = {};\n        }\n        Object.entries(resolvedResults[index]).forEach(([key, value]) =>\n          set(widget.config, key, value)\n        );\n      }\n    });\n    return widgets;\n  }\n\n  /**\n   * Recursively traverses an object/array and replaces specified keys with 'this.context'\n   * @param obj - The object or array to process\n   * @param keys - Array of keys to replace\n   * @returns The modified object with replaced values\n   */\n  private replaceKeysWithContext(obj: any, keys: string[]): any {\n    if (obj === null || obj === undefined) {\n      return obj;\n    }\n\n    // Handle primitive types (string, number, boolean)\n    if (typeof obj !== 'object') {\n      return obj;\n    }\n\n    // Handle arrays as replaceKeysWithContext is used recursively and config properties may be arrays (e.g. datapoints)\n    if (Array.isArray(obj)) {\n      return obj.map(item => this.replaceKeysWithContext(item, keys));\n    }\n\n    // Handle objects\n    const result: any = {};\n    for (const [key, value] of Object.entries(obj)) {\n      if (keys.includes(key)) {\n        result[key] = this.context;\n      } else {\n        result[key] = this.replaceKeysWithContext(value, keys);\n      }\n    }\n\n    return result;\n  }\n}\n","@if (!!settings.title) {\n  <c8y-title>\n    @let dashboardTitle =\n      settings.translateDashboardTitle ? (settings.title | translate) : settings.title;\n    {{ dashboardTitle }}\n  </c8y-title>\n}\n\n@if (!!breadcrumb) {\n  <c8y-breadcrumb>\n    <c8y-breadcrumb-item\n      [icon]=\"breadcrumb.icon\"\n      [label]=\"breadcrumb.label\"\n      [path]=\"breadcrumb.path\"\n    ></c8y-breadcrumb-item>\n  </c8y-breadcrumb>\n}\n\n@if (!(editMode$ | async)) {\n  <c8y-action-bar-item\n    [placement]=\"'right'\"\n    [priority]=\"ACTION_BAR_EDIT_WIDGETS_PRIORITY\"\n  >\n    <button\n      class=\"btn btn-link animated fadeIn hidden-xs\"\n      title=\"{{ 'Edit widgets' | translate }}\"\n      type=\"button\"\n      [disabled]=\"settings.isDisabled\"\n      (click)=\"enableEditMode()\"\n      data-cy=\"c8y-widget-dashboard--edit-widgets\"\n    >\n      <i c8yIcon=\"send-backward\"></i>\n      <span class=\"m-l-4\">{{ 'Edit widgets' | translate }}</span>\n    </button>\n    <button\n      class=\"btn btn-link visible-xs m-l-0\"\n      tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n      type=\"button\"\n      [disabled]=\"true\"\n    >\n      <i c8yIcon=\"send-backward\"></i>\n      <span class=\"m-l-4\">{{ 'Edit widgets' | translate }}</span>\n    </button>\n  </c8y-action-bar-item>\n}\n\n@if (editMode$ | async) {\n  <c8y-action-bar-item\n    [placement]=\"'right'\"\n    [priority]=\"ACTION_BAR_EDIT_WIDGETS_PRIORITY\"\n  >\n    <button\n      class=\"btn btn-link animated fadeIn\"\n      title=\"{{ 'Add widget' | translate }}\"\n      type=\"button\"\n      (click)=\"onAddWidget.emit()\"\n      data-cy=\"widget-dashboard--Add-widget\"\n    >\n      <i c8yIcon=\"plus-circle\"></i>\n      {{ 'Add widget' | translate }}\n    </button>\n  </c8y-action-bar-item>\n\n  <c8y-action-bar-item\n    [placement]=\"'right'\"\n    [priority]=\"ACTION_BAR_EDIT_WIDGETS_PRIORITY\"\n    itemClass=\"d-flex a-i-center gap-8\"\n  >\n    <div class=\"input-group input-group-sm animated fadeIn\">\n      <div class=\"input-group-btn\">\n        <button\n          class=\"btn btn-default btn-sm btn-icon\"\n          [attr.aria-label]=\"'Undo' | translate\"\n          [tooltip]=\"\n            editModeButtons.undoButtonDisabled\n              ? ''\n              : (undoMessage\n                | translate: { changeToUndo: editModeButtons.changeToUndoName | translate })\n          \"\n          container=\"body\"\n          (click)=\"revertChange.emit('undo')\"\n          [disabled]=\"editModeButtons.undoButtonDisabled\"\n        >\n          <i [c8yIcon]=\"'undo'\"></i>\n        </button>\n      </div>\n      <div class=\"input-group-btn\">\n        <button\n          class=\"btn btn-default btn-sm btn-icon\"\n          [attr.aria-label]=\"'Redo' | translate\"\n          [tooltip]=\"\n            editModeButtons.redoButtonDisabled\n              ? ''\n              : (redoMessage\n                | translate: { changeToRedo: editModeButtons.changeToRedoName | translate })\n          \"\n          container=\"body\"\n          (click)=\"revertChange.emit('redo')\"\n          [disabled]=\"editModeButtons.redoButtonDisabled\"\n        >\n          <i [c8yIcon]=\"'redo'\"></i>\n        </button>\n      </div>\n      <span></span>\n    </div>\n    <div class=\"btn-group animated fadeIn\">\n      <button\n        class=\"btn btn-default btn-sm\"\n        title=\"{{ 'Cancel' | translate }}\"\n        type=\"button\"\n        (click)=\"cancelDashboardSave()\"\n      >\n        {{ 'Cancel' | translate }}\n      </button>\n      <button\n        class=\"btn btn-primary btn-sm m-l-8\"\n        title=\"{{ 'Save' | translate }}\"\n        type=\"button\"\n        [disabled]=\"editModeButtons.undoButtonDisabled && isSaveDisabled\"\n        (click)=\"saveDashboard()\"\n        data-cy=\"c8y-widgets-dashboard--save\"\n      >\n        {{ 'Save' | translate }}\n      </button>\n    </div>\n  </c8y-action-bar-item>\n}\n\n@if (onEditDashboard.observers.length) {\n  <c8y-action-bar-item [placement]=\"'right'\">\n    <button\n      class=\"btn btn-link hidden-xs m-l-0\"\n      title=\"{{ 'Dashboard settings' | translate }}\"\n      type=\"button\"\n      [disabled]=\"settings.isDisabled || (editMode$ | async)\"\n      (click)=\"onEditDashboard.emit()\"\n      data-cy=\"c8y-widgets-dashboard--edit-dashboard\"\n    >\n      <i c8yIcon=\"sorting-slider\"></i>\n      <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n        {{ 'Dashboard settings' | translate }}\n      </span>\n    </button>\n    <button\n      class=\"btn btn-link visible-xs m-l-0\"\n      tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n      type=\"button\"\n      [disabled]=\"true\"\n    >\n      <i c8yIcon=\"sorting-slider\"></i>\n      <span class=\"visible-xs-inline hidden-sm visible-md-inline visible-lg-inline\">\n        {{ 'Dashboard settings' | translate }}\n      </span>\n    </button>\n  </c8y-action-bar-item>\n}\n\n@if (settings.allowFullscreen) {\n  <c8y-action-bar-item\n    [placement]=\"'right'\"\n    [priority]=\"-5000\"\n    itemClass=\"pull-right\"\n  >\n    <button\n      class=\"btn btn-link\"\n      [attr.aria-label]=\"'Full screen' | translate\"\n      tooltip=\"{{ 'Full screen' | translate }}\"\n      placement=\"left\"\n      container=\"body\"\n      type=\"button\"\n      [delay]=\"500\"\n      (click)=\"toggleFullscreen()\"\n      data-cy=\"widgets-dashboard--Full-screen\"\n    >\n      <i [c8yIcon]=\"(inFullScreen$ | async) ? 'compress' : 'expand'\"></i>\n      <span class=\"visible-xs-inline hidden-sm visible-md-inline visibile-lg-inline\">\n        {{ 'Full screen' | translate }}\n      </span>\n    </button>\n  </c8y-action-bar-item>\n}\n\n@if (settings.canCopy) {\n  <c8y-action-bar-item\n    [placement]=\"'more'\"\n    [priority]=\"-2000\"\n  >\n    <div class=\"d-flex a-i-center p-r-16\">\n      <button\n        class=\"hidden-xs\"\n        title=\"{{\n          (isCopyDisabled === true || !isCopyDisabled?.state ? 'Disabled' : copyDashboardLabel)\n            | translate\n        }}\"\n        type=\"button\"\n        [ngClass]=\"{ 'btn btn-link': !settings.canDelete }\"\n        data-cy=\"widgets-dashboard--copy-dashboard\"\n        (click)=\"onCopyDashboard.emit()\"\n        [disabled]=\"isCopyDisabled === true || !isCopyDisabled?.state || (editMode$ | async)\"\n      >\n        <i c8yIcon=\"clone\"></i>\n        <span>{{ copyDashboardLabel | translate }}</span>\n      </button>\n      @if (!isCopyDisabled?.state && copyDisabledPopoverMsg) {\n        <button\n          class=\"btn-help btn-help--sm hidden-xs flex-no-shrink\"\n          [attr.aria-label]=\"'Help' | translate\"\n          [popover]=\"copyDisabledPopoverMsg | translate\"\n          placement=\"top\"\n          triggers=\"focus\"\n          container=\"body\"\n          type=\"button\"\n          [adaptivePosition]=\"false\"\n          data-cy=\"widgets-dashboard--info-copy-dashboard\"\n          (click)=\"$event.preventDefault(); $event.stopPropagation()\"\n        ></button>\n      }\n    </div>\n    <button\n      class=\"visible-xs m-l-0\"\n      tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n      type=\"button\"\n      [ngClass]=\"{ 'btn btn-link': !settings.canDelete }\"\n      [disabled]=\"true\"\n    >\n      <i c8yIcon=\"clone\"></i>\n      <span>{{ copyDashboardLabel | translate }}</span>\n    </button>\n  </c8y-action-bar-item>\n}\n\n@if (settings.canDelete && onDeleteDashboard.observers.length) {\n  <c8y-action-bar-item\n    [placement]=\"'more'\"\n    [priority]=\"-3000\"\n  >\n    <button\n      class=\"hidden-xs\"\n      title=\"{{ 'Delete dashboard' | translate }}\"\n      type=\"button\"\n      data-cy=\"widgets-dashboard--delete-dashboard\"\n      [ngClass]=\"{ 'btn btn-link': !settings.canCopy }\"\n      (click)=\"onDeleteDashboard.emit()\"\n      [disabled]=\"settings.isDisabled || (editMode$ | async)\"\n    >\n      <i c8yIcon=\"delete\"></i>\n      <span translate>Delete dashboard</span>\n    </button>\n    <button\n      class=\"visible-xs m-l-0\"\n      tooltip=\"{{ 'Not available on mobile phone' | translate }}\"\n      type=\"button\"\n      data-cy=\"widgets-dashboard--delete-dashboard-mobile\"\n      [ngClass]=\"{ 'btn btn-link': !settings.canCopy }\"\n      [disabled]=\"true\"\n    >\n      <i c8yIcon=\"delete\"></i>\n      <span translate>Delete dashboard</span>\n    </button>\n  </c8y-action-bar-item>\n}\n\n@if (!(isLoadingWidgets$ | async)) {\n  @if (resolvedWidgets$ | async; as widgetsToDisplay) {\n    <!-- empty state -->\n    @if (widgetsToDisplay?.length === 0) {\n      <c8y-ui-empty-state\n        [icon]=\"'c8y-device'\"\n        [title]=\"'No widgets to display.' | translate\"\n      >\n        @if (onAddWidget.observers.length) {\n          <div>\n            @if (editMode$ | async) {\n              <p translate>Add widgets to this dashboard.</p>\n            }\n            @if (!(editMode$ | async)) {\n              <p translate>Click \"Edit widgets\" to unlock</p>\n            }\n            <div>\n              @if (!settings.isDisabled && (editMode$ | async)) {\n                <button\n                  class=\"btn btn-primary m-t-16\"\n                  title=\"{{ 'Add widget' | translate }}\"\n                  type=\"button\"\n                  (click)=\"onAddWidget.emit()\"\n                  data-cy=\"c8y-widgets-dashboard--add-widget\"\n                  translate\n                >\n                  Add widget\n                </button>\n              }\n            </div>\n            <p c8y-guide-docs>\n              <small\n                translate\n                ngNonBindable\n              >\n                Find out more in the\n                <a c8y-guide-href=\"/docs/cockpit/working-with-dashboards\">user documentation</a>.\n              </small>\n            </p>\n          </div>\n        }\n      </c8y-ui-empty-state>\n    }\n\n    <c8y-dashboard\n      [columns]=\"settings.columns\"\n      (dashboardChange)=\"onChangeDashboard.emit($event)\"\n      #dashboard\n    >\n      @for (widget of widgetsToDisplay; track widget.id || widget.name || $index) {\n        <c8y-dashboard-child\n          [class]=\"widget.classes\"\n          [x]=\"widget._x\"\n          [y]=\"widget._y\"\n          [width]=\"widget._width || settings.defaultWidth\"\n          [height]=\"widget._height || settings.defaultHeight\"\n          [margin]=\"settings.widgetMargin\"\n          [data]=\"widget\"\n          [useIntersection]=\"true\"\n          [editMode]=\"editMode$ | async\"\n          (changeStart)=\"\n            onChangeStart.emit({ widget: widget, source: child, dashboard: dashboard })\n          \"\n          (changeEnd)=\"onChangeEnd.emit({ widget: widget, source: child, dashboard: dashboard })\"\n          (toggleFullscreen)=\"toggleFullscreenOnWidget(child)\"\n          [canToggleFullscreen]=\"!(inFullScreen$ | async) || widgetInFullscreenMode\"\n          #child\n        >\n          <c8y-dashboard-child-title>\n            @if (settings.translateWidgetTitle) {\n              <span data-cy=\"c8y-dashboard-list--device-widget\">\n                {{ widget.title | translate }}\n              </span>\n            }\n            @if (!settings.translateWidgetTitle) {\n              <span>\n                {{ widget.title }}\n              </span>\n            }\n          </c8y-dashboard-child-title>\n          @if (onEditWidget.observers.length) {\n            <c8y-dashboard-child-action>\n              <button\n                title=\"{{ 'Edit widget' | translate }}\"\n                type=\"button\"\n                data-cy=\"widgets-dashboard--Edit-widget\"\n                (click)=\"onEditWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n              >\n                <i c8yIcon=\"pencil\"></i>\n                <span translate>Edit</span>\n              </button>\n            </c8y-dashboard-child-action>\n          }\n          @if (onDeleteWidget.observers.length) {\n            <c8y-dashboard-child-action>\n              <button\n                title=\"{{ 'Remove widget' | translate }}\"\n                type=\"button\"\n                data-cy=\"c8y-widgets-dashboard--remove-widget\"\n                (click)=\"\n                  onDeleteWidget.emit({ widget: widget, source: child, dashboard: dashboard })\n                \"\n              >\n                <i c8yIcon=\"delete\"></i>\n                <span translate>Remove</span>\n              </button>\n            </c8y-dashboard-child-action>\n          }\n\n          @if (child.intersected) {\n            <c8y-dynamic-component\n              [componentId]=\"widget.componentId || widget.name\"\n              [config]=\"\n                widget.templateUrl || widget.widgetComponent\n                  ? { child: widget, dashboard: contextDashboard, context: context }\n                  : widget.config\n              \"\n              (updateWidgetClasses)=\"updateWidgetClasses(widget, $event)\"\n            ></c8y-dynamic-component>\n          }\n        </c8y-dashboard-child>\n      }\n    </c8y-dashboard>\n  }\n} @else {\n  <c8y-loading class=\"col-xs-12 text-center\"></c8y-loading>\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { OptionsService } from '../common/options.service';\n\n@Injectable({ providedIn: 'root' })\nexport class HelpService {\n  readonly contextHelp: BehaviorSubject<boolean | string> = new BehaviorSubject(false);\n  isWarningAlertViewed = false;\n  private readonly SUPPORTED_LANGUAGES = ['en'];\n\n  constructor(private translateService: TranslateService, private options: OptionsService) {\n    this.handleContextHelp();\n  }\n\n  isSupportedLanguage(): boolean {\n    return this.SUPPORTED_LANGUAGES.indexOf(this.translateService.currentLang) > -1;\n  }\n\n  private handleContextHelp() {\n    const option = this.getContextHelpOption();\n    if (option) {\n      this.contextHelp.next(option);\n      return;\n    }\n    this.contextHelp.next(false);\n  }\n\n  private getContextHelpOption(): boolean | string {\n    return this.options.contextHelp;\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { DocsService } from '../docs/docs.service';\nimport { HelpService } from './help.service';\nimport { NgClass, AsyncPipe } from '@angular/common';\nimport { ActionBarItemComponent } from '../action-bar/action-bar-item.component';\nimport { ProductExperienceDirective } from '../product-experience/product-experience.directive';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconDirective } from '../common/icon.directive';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { LoadingComponent } from '../common/loading.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * A component which shows a context help in\n * the action bar.\n *\n * ```html\n * <c8y-help src=\"/docs/cockpit/working-with-dashboards/#working-with-dashboards\"></c8y-help>\n * ```\n */\n@Component({\n  selector: 'c8y-help',\n  templateUrl: './help.component.html',\n  standalone: true,\n  imports: [\n    ActionBarItemComponent,\n    ProductExperienceDirective,\n    TooltipModule,\n    IconDirective,\n    CollapseModule,\n    NgClass,\n    LoadingComponent,\n    C8yTranslateDirective,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class HelpComponent {\n  /**\n   * The source of the documentation. Used to link to the documentation as well as\n   * to parse the source to display.\n   */\n  @Input()\n  src = '';\n\n  /**\n   * Indicates if the help dialog is collapsed.\n   */\n  @Input()\n  isCollapsed = true;\n\n  /**\n   * The priority where the help icon should be shown in the action bar. \"-Infinity\" value means that priority\n   * of this item is the lowest possible, so it will be placed at the right edge of action bar.\n   */\n  @Input()\n  priority = -Infinity;\n\n  /**\n   * A custom icon. If not set, the navigator icon is resolved\n   */\n  @Input()\n  icon;\n\n  /**\n   * A title. Set in open by passing the source.\n   */\n  title = '';\n\n  /**\n   * The section heading in the doc which is going to be displayed.\n   */\n  sectionHeading = '';\n\n  /**\n   * The section content in the doc which is going to be displayed.\n   */\n  sectionContent = '';\n\n  /**\n   * Indicates if the component is loading.\n   */\n  isLoading = true;\n\n  /**\n   * Indicates if the component failed loading the source.\n   */\n  hasError = false;\n\n  /**\n   * Indicates if a warning should be shown.\n   */\n  showLangWarning = false;\n\n  /**\n   * @ignore\n   */\n  isInit = false;\n\n  /**\n   * @ignore Only private DI\n   */\n  constructor(\n    private docsService: DocsService,\n    public helpService: HelpService\n  ) {}\n\n  /**\n   * The component is shown by default and therefore breaks e2e test. This is\n   * to prevent the visibility on first navigation.\n   * @ignore\n   */\n  onCollapsed() {\n    this.isInit = true;\n  }\n\n  /**\n   * Builds the URL based on the src. The Base URL can be set in the application options docBaseUrl.\n   * @param src The source of the help on the guide.\n   * @param index This flag is used to call the index.json content of a guide. For example, \"https://cumulocity.com/docs/cockpit/data-explorer/index.json\".\n   */\n  getUrl(src = '', index = false): string {\n    let docsUrl: URL;\n\n    try {\n      docsUrl =\n        typeof this.helpService.contextHelp.value === 'string'\n          ? new URL(this.docsService.getUrlWithDocsVersion(this.helpService.contextHelp.value))\n          : new URL(this.docsService.getBaseUrl());\n    } catch (error) {\n      docsUrl = new URL(this.docsService.getBaseUrl());\n      console.warn(error);\n    }\n\n    const [url, hashFragment] = src.split('#');\n    this.sectionHeading = hashFragment;\n\n    if (index) {\n      src = `${url}index.json`;\n      docsUrl.pathname += src;\n    } else {\n      docsUrl.pathname += url;\n      if (hashFragment) {\n        docsUrl.hash = hashFragment;\n      }\n    }\n\n    docsUrl.pathname = docsUrl.pathname.replace(/\\/+/g, '/');\n    return docsUrl.href;\n  }\n\n  /**\n   * Toggles the visibility of the help dialog.\n   */\n  toggle() {\n    if (this.isCollapsed) {\n      this.open();\n      return;\n    }\n    this.close();\n  }\n\n  /**\n   * Closes the help dialog.\n   */\n  close() {\n    this.isCollapsed = true;\n    this.clean();\n  }\n\n  /**\n   * Opens the help dialog.\n   */\n  open() {\n    this.isCollapsed = false;\n    this.isLoading = true;\n    this.requestContent();\n    if (!this.icon) {\n      this.icon = this.resolveIcon();\n    }\n  }\n\n  private requestContent() {\n    const req = new XMLHttpRequest();\n    req.onreadystatechange = () => this.render(req);\n    req.addEventListener('load', () => this.render(req));\n    req.open('GET', this.getUrl(this.src, true));\n    req.responseType = 'json';\n    req.setRequestHeader('Accept', 'text/html');\n    req.send();\n  }\n\n  private clean() {\n    this.title = '';\n    this.hasError = false;\n    this.sectionContent = '';\n  }\n\n  private resolveIcon() {\n    try {\n      const icon = Array.from(document.querySelector('nav .active i').classList).find(\n        classes => classes.startsWith('c8y-icon-') || classes.startsWith('dlt-c8y-icon-')\n      );\n      return icon.replace('dlt-c8y-icon-', '').replace('c8y-icon-', 'c8y-');\n    } catch (ex) {\n      return 'life-saver';\n    }\n  }\n\n  private render(req: XMLHttpRequest) {\n    if (req.readyState === 4) {\n      this.isLoading = false;\n      if (req.status === 200) {\n        this.hasError = false;\n        const sectionData = req.response[this.sectionHeading];\n        if (sectionData) {\n          this.title = sectionData.title;\n          this.sectionContent = sectionData.helpcontent;\n        }\n      } else {\n        this.hasError = true;\n      }\n    }\n  }\n}\n","@if (!!(helpService.contextHelp | async)) {\n  <c8y-action-bar-item\n    [placement]=\"'right'\"\n    itemClass=\"pull-right m-l-md-8\"\n    [priority]=\"priority\"\n  >\n    <button\n      class=\"btn-help hidden-xs\"\n      [attr.aria-label]=\"'About this page' | translate\"\n      tooltip=\"{{ 'About this page' | translate }}\"\n      placement=\"left\"\n      container=\"body\"\n      aria-controls=\"collapseHelp\"\n      [attr.aria-expanded]=\"!isCollapsed\"\n      type=\"button\"\n      data-cy=\"help--help-btn\"\n      [delay]=\"750\"\n      (click)=\"toggle()\"\n      c8yProductExperience\n      [actionName]=\"isCollapsed ? 'helpOpened' : 'helpClosed'\"\n      [actionData]=\"{ src: src }\"\n    ></button>\n    <button\n      class=\"btn btn-link visible-xs\"\n      title=\"{{ 'About this page' | translate }}\"\n      aria-controls=\"collapseHelp\"\n      [attr.aria-expanded]=\"!isCollapsed\"\n      type=\"button\"\n      (click)=\"toggle()\"\n      c8yProductExperience\n      [actionName]=\"isCollapsed ? 'helpOpened' : 'helpClosed'\"\n      [actionData]=\"{ src: src }\"\n    >\n      <i\n        class=\"text-info\"\n        c8yIcon=\"help-outline\"\n      ></i>\n      {{ 'About this page' | translate }}\n    </button>\n  </c8y-action-bar-item>\n}\n\n<div\n  class=\"c8y-help-drawer\"\n  id=\"collapseHelp\"\n  [collapse]=\"isCollapsed\"\n  [isAnimated]=\"true\"\n  (collapsed)=\"onCollapsed()\"\n>\n  <div\n    [ngClass]=\"{ 'c8y-help-drawer-block': isInit }\"\n    #docOutlet\n    data-cy=\"c8y-help--c8y-help-drawer-block\"\n  >\n    @if (isLoading) {\n      <c8y-loading></c8y-loading>\n    } @else {\n      <div class=\"d-flex\">\n        <i\n          class=\"c8y-icon-duocolor icon-48\"\n          [c8yIcon]=\"!hasError ? icon : 'unlink'\"\n          [ngClass]=\"{ 'text-warning': hasError, 'text-muted': !hasError }\"\n        ></i>\n        @if (!hasError) {\n          <div class=\"p-l-16 flex-grow\">\n            @if (\n              !helpService.isSupportedLanguage() &&\n              !showLangWarning &&\n              !helpService.isWarningAlertViewed\n            ) {\n              <div class=\"alert alert-info m-b-16\">\n                <button\n                  class=\"close\"\n                  [attr.aria-label]=\"'Close' | translate\"\n                  type=\"button\"\n                  (click)=\"\n                    showLangWarning = !showLangWarning;\n                    helpService.isWarningAlertViewed = !helpService.isWarningAlertViewed\n                  \"\n                >\n                  <span aria-hidden=\"true\">×</span>\n                  <span class=\"sr-only\">Close</span>\n                </button>\n                <p>\n                  {{ 'Help content is only available in English.' | translate }}\n                </p>\n              </div>\n            }\n            <h4 class=\"text-bold text-primary p-t-16 m-b-16\">\n              {{ title }}\n            </h4>\n            <div\n              class=\"help-content\"\n              id=\"helpContent\"\n              [innerHTML]=\"sectionContent\"\n              data-cy=\"help--c8y-help-content\"\n            ></div>\n          </div>\n        }\n\n        @if (hasError) {\n          <div class=\"p-l-16 p-t-16 flex-grow\">\n            <h4\n              class=\"text-bold m-b-16\"\n              translate\n            >\n              Content couldn't be loaded.\n            </h4>\n            <div class=\"help-content\">\n              <p translate>Check internet connection or reload page.</p>\n            </div>\n          </div>\n        }\n      </div>\n    }\n  </div>\n  @if (!isLoading && !hasError) {\n    <div\n      class=\"c8y-help-drawer-footer animated fadeIn\"\n      style=\"animation-delay: 0.35s\"\n      data-cy=\"c8y-help--c8y-help-drawer-footer\"\n    >\n      <button\n        class=\"btn btn-default\"\n        [title]=\"'Close help' | translate\"\n        aria-controls=\"collapseHelp\"\n        [attr.aria-expanded]=\"!isCollapsed\"\n        type=\"button\"\n        data-cy=\"c8y-help--close-btn\"\n        (click)=\"toggle()\"\n        translate\n      >\n        Close\n      </button>\n      <a\n        class=\"btn btn-primary\"\n        href=\"{{ hasError ? getUrl() : getUrl(src) }}\"\n        target=\"_blank\"\n        data-cy=\"c8y-help--user-guide\"\n        rel=\"noopener noreferrer\"\n      >\n        @if (!hasError) {\n          <span translate>\n            Open the\n            <span>user documentation</span>\n          </span>\n        } @else {\n          <span translate>\n            Check the\n            <span>user documentation</span>\n          </span>\n        }\n      </a>\n    </div>\n  }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ActionBarModule } from '../action-bar/action-bar.module';\nimport { ProductExperienceModule } from '../product-experience/product-experience.module';\nimport { CommonModule } from '../common/common.module';\nimport { HelpComponent } from './help.component';\nimport { HelpService } from './help.service';\n\n/**\n * Provides components which allow to display help elements\n * inside the app.\n * @exports HelpComponent A component which shows a context help in\n *                        the action bar.\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    CollapseModule.forRoot(),\n    TooltipModule.forRoot(),\n    ActionBarModule,\n    ProductExperienceModule,\n    HelpComponent\n  ],\n  exports: [HelpComponent],\n  providers: [HelpService]\n})\nexport class HelpModule {}\n","import { Component, Input } from '@angular/core';\nimport { AGGREGATION_ICONS, AGGREGATION_TEXTS } from '../../../aggregation/aggregation.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NgIf, NgClass } from '@angular/common';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { IconDirective } from '../../../common/icon.directive';\nimport { C8yTranslatePipe } from '../../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-widget-time-context-icon-bar',\n  templateUrl: './widget-time-context-icon-bar.component.html',\n  standalone: true,\n  imports: [NgIf, TooltipModule, IconDirective, NgClass, C8yTranslatePipe]\n})\nexport class WidgetTimeContextIconBar {\n  globalContextButtonText: string;\n  readonly AGGREGATION_ICONS = AGGREGATION_ICONS;\n  readonly AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n\n  /**\n   * Widget configuration object.\n   */\n  @Input() config: any;\n\n  ngOnInit(): void {\n    if (\n      this.config.displaySettings.globalRealtimeContext &&\n      !this.config.displaySettings.globalTimeContext\n    ) {\n      this.globalContextButtonText = gettext(\n        'This widget is in sync with the dashboard realtime context.'\n      );\n    } else {\n      this.globalContextButtonText = gettext(\n        'This widget is in sync with the dashboard time range.'\n      );\n    }\n  }\n}\n","<span class=\"m-l-auto d-flex\">\n  <button\n    class=\"btn btn-clean btn-no-focus\"\n    [attr.aria-label]=\"'Aggregation' | translate\"\n    tooltip=\"{{\n      (config?.aggregation ? AGGREGATION_TEXTS[config.aggregation] : AGGREGATION_TEXTS.undefined)\n        | translate\n    }}\"\n    placement=\"top\"\n    container=\"body\"\n    type=\"button\"\n    *ngIf=\"config.displaySettings.globalAggregationContext\"\n    [adaptivePosition]=\"false\"\n  >\n    <i\n      class=\"icon-14\"\n      [c8yIcon]=\"\n        config?.aggregation ? AGGREGATION_ICONS[config.aggregation] : AGGREGATION_ICONS.undefined\n      \"\n    ></i>\n  </button>\n  <button\n    class=\"btn c8y-realtime btn-no-focus\"\n    [attr.aria-label]=\"(config?.realtime ? 'Realtime active' : 'Realtime inactive') | translate\"\n    tooltip=\"{{ (config?.realtime ? 'Realtime active' : 'Realtime inactive') | translate }}\"\n    placement=\"top\"\n    container=\"body\"\n    type=\"button\"\n    *ngIf=\"config?.widgetInstanceGlobalTimeContext\"\n  >\n    <span\n      class=\"c8y-pulse m-0\"\n      [ngClass]=\"{ active: config?.realtime, inactive: !config?.realtime }\"\n    ></span>\n  </button>\n  <button\n    class=\"btn btn-clean btn-no-focus p-l-4 p-r-0\"\n    [attr.aria-label]=\"globalContextButtonText | translate\"\n    [tooltip]=\"globalContextButtonText | translate\"\n    placement=\"top\"\n    container=\"body\"\n    data-cy=\"dashboard-child--global-date-context-indicator\"\n    *ngIf=\"config?.widgetInstanceGlobalTimeContext\"\n  >\n    <span class=\"tag tag--success chip\">\n      <i c8yIcon=\"clock\"></i>\n      {{ 'Realtime' | translate }}\n    </span>\n  </button>\n</span>\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { NgModule } from '@angular/core';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { ActionBarModule } from '../action-bar/action-bar.module';\nimport { BreadcrumbModule } from '../breadcrumb/breadcrumb.module';\nimport { CommonModule } from '../common/common.module';\nimport { DocsModule } from '../docs/docs.module';\nimport { DynamicComponentModule } from '../dynamic-component/dynamic-component.module';\nimport { HeaderModule } from '../header/header.module';\nimport { DashboardChildActionComponent } from './dashboard-child-action.component';\nimport { DashboardChildTitleComponent } from './dashboard-child-title.component';\nimport { DashboardChildComponent } from './dashboard-child.component';\nimport { DashboardComponent } from './dashboard.component';\nimport { WidgetTimeContextComponent } from './wiget-time-context/widget-time-context.component';\nimport { WidgetsDashboardComponent } from './widgets-dashboard.component';\nimport { DynamicFormsModule } from '../dynamic-forms';\nimport { HelpModule } from '../help';\nimport { DateTimePickerModule } from '../date-time-picker';\nimport { FormsModule } from '../forms';\nimport { RealtimeControlComponent } from './wiget-time-context/realtime-control/realtime-control.component';\nimport { AggregationPickerComponent } from './wiget-time-context/aggregation-picker/aggregation-picker.component';\nimport { WidgetTimeContextIconBar } from './wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component';\nimport { IntervalPickerComponent } from '@c8y/ngx-components/interval-picker';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport {\n  AutoRefreshControlComponent,\n  AutoRefreshSelectControlComponent,\n  WidgetAutoRefreshContextComponent,\n  WidgetAutoRefreshContextIconBarComponent\n} from './widget-auto-refresh-context';\nimport { CountdownIntervalModule } from '../countdown-interval';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    ActionBarModule,\n    DynamicComponentModule,\n    DragDropModule,\n    BsDropdownModule.forRoot(),\n    TooltipModule,\n    HeaderModule,\n    DocsModule,\n    BreadcrumbModule,\n    FormsModule,\n    BsDatepickerModule,\n    DynamicFormsModule,\n    HelpModule,\n    DateTimePickerModule,\n    CountdownIntervalModule,\n    IntervalPickerComponent,\n    PopoverModule,\n    DashboardChildComponent,\n    DashboardComponent,\n    DashboardChildTitleComponent,\n    DashboardChildActionComponent,\n    WidgetsDashboardComponent,\n    WidgetTimeContextComponent,\n    RealtimeControlComponent,\n    AggregationPickerComponent,\n    WidgetAutoRefreshContextComponent,\n    WidgetAutoRefreshContextIconBarComponent,\n    AutoRefreshControlComponent,\n    AutoRefreshSelectControlComponent,\n    WidgetTimeContextIconBar\n  ],\n  exports: [\n    DashboardComponent,\n    DashboardChildComponent,\n    DashboardChildTitleComponent,\n    DashboardChildActionComponent,\n    WidgetsDashboardComponent,\n    WidgetTimeContextComponent,\n    AggregationPickerComponent\n  ]\n})\nexport class DashboardModule {}\n","import { Injectable, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class WidgetTimeContextMediatorService {\n  globalUpdate = signal<any>(null);\n  /**\n   * Flag indicating the current update originated from a slider zoom interaction.\n   * Used to prevent resetting initialTimeRange when syncing zoom across widgets.\n   */\n  isSliderZoomUpdate = signal<boolean>(false);\n}\n","import { effect, Injectable, signal } from '@angular/core';\nimport { WidgetTimeContextMediatorService } from './widget-time-context-mediator.service';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class WidgetTimeContextDateRangeService {\n  initialTimeRange = signal<any>(null);\n  displayMode = signal<'dashboard' | 'view_and_config' | 'config'>('dashboard');\n  fullReload$ = new Subject<void>();\n\n  constructor(private mediator: WidgetTimeContextMediatorService) {\n    effect(() => {\n      const update = this.mediator.globalUpdate();\n      if (update && this.displayMode() === 'dashboard') {\n        this.initialTimeRange.set(update);\n        this.fullReload$.next();\n      }\n    });\n  }\n\n  updateInitialTimeRange(data: any) {\n    this.initialTimeRange.set(data);\n  }\n\n  updateDisplayMode(mode: 'dashboard' | 'view_and_config' | 'config') {\n    this.displayMode.set(mode);\n  }\n\n  triggerFullReload() {\n    this.fullReload$.next();\n  }\n}\n","import { Component, inject, TemplateRef, ViewChild, OnDestroy } from '@angular/core';\nimport { DashboardChildComponent } from './dashboard-child.component';\n\n@Component({\n  selector: 'c8y-widget-action',\n  template: '<ng-template #headerTemplateContent><ng-content></ng-content></ng-template>',\n  standalone: true\n})\nexport class WidgetActionWrapperComponent implements OnDestroy {\n  private dashboardChild = inject(DashboardChildComponent);\n\n  private registeredTemplate: TemplateRef<unknown> | null = null;\n\n  @ViewChild('headerTemplateContent')\n  set headerTemplate(template: TemplateRef<unknown>) {\n    if (!template) {\n      return;\n    }\n\n    const templates = this.dashboardChild._additionalHeaderTemplates.value;\n\n    // prevent duplicates\n    if (templates.some(t => t.template === template)) {\n      return;\n    }\n\n    this.dashboardChild._additionalHeaderTemplates.next([\n      ...templates,\n      {\n        template,\n        priority: 10\n      }\n    ]);\n\n    this.registeredTemplate = template;\n  }\n\n  ngOnDestroy(): void {\n    if (!this.registeredTemplate) {\n      return;\n    }\n\n    const templates = this.dashboardChild._additionalHeaderTemplates.value;\n\n    this.dashboardChild._additionalHeaderTemplates.next(\n      templates.filter(t => t.template !== this.registeredTemplate)\n    );\n\n    this.registeredTemplate = null;\n  }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { AuditRecordType, AuditService, IAuditRecord, IResultList } from '@c8y/client';\nimport { ForOfDirective } from '../common/forOf.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { AsyncPipe } from '@angular/common';\nimport { DatePipe } from '../common/date.pipe';\n\n/**\n * Audit log component allows to show audits list. Component fetches audit records for the source object given as input.\n *\n * **Example**\n *\n * ```html\n *  <c8y-audit-log [source]=\"sourceId\"></c8y-audit-log>\n * ```\n */\n@Component({\n  selector: 'c8y-audit-log',\n  templateUrl: './audit-log.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [ForOfDirective, C8yTranslatePipe, AsyncPipe, DatePipe]\n})\nexport class AuditLogComponent implements OnInit {\n  /**\n   * The source ID for which audits will be shown in the list.\n   */\n  @Input()\n  source: string | number;\n\n  /**\n   * The type of audit record to search for.\n   */\n  @Input()\n  type: AuditRecordType;\n\n  /**\n   * Audit records retrieved from auditRecords endpoint.\n   */\n  records: Promise<IResultList<IAuditRecord>>;\n\n  /**\n   * @ignore\n   */\n  constructor(private audit: AuditService) {}\n\n  /**\n   * After page view is initialized, component gets audit records from auditRecords endpoint.\n   */\n  ngOnInit() {\n    const { source, type } = this;\n    this.records = this.audit.list({\n      withTotalPages: true,\n      source,\n      type\n    });\n  }\n}\n","<div class=\"inner-scroll\">\n  <ul class=\"c8y-list__group c8y-list--timeline m-t-16\">\n    <li\n      class=\"c8y-list--timeline__item\"\n      *c8yFor=\"let record of records | async\"\n    >\n      <small class=\"c8y-list--timeline__item__date\">\n        {{ record.time | c8yDate }}\n      </small>\n      <div class=\"c8y-list__item\">\n        <div class=\"c8y-list__item__block\">\n          <div class=\"c8y-list__item__body text-truncate-wrap\">\n            <div class=\"row\">\n              <div class=\"col-md-5 d-flex a-i-baseline\">\n                <span\n                  class=\"text-truncate\"\n                  title=\"{{ record.activity | translate }}\"\n                >\n                  {{ record.activity | translate }}\n                </span>\n                <small class=\"m-l-4 text-muted flex-no-shrink\">{{ record.user }}</small>\n              </div>\n              <div class=\"col-md-7\">\n                <div class=\"small text-truncate-wrap\">{{ record.text | translate }}</div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </li>\n  </ul>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { AuditLogComponent } from './audit-log.component';\n\n/** Audit module allows to show audits list. */\n@NgModule({\n  imports: [CommonModule, AuditLogComponent],\n  exports: [AuditLogComponent]\n})\nexport class AuditLogModule {}\n","/* tslint:disable:max-classes-per-file */\n\nimport { Directive, TemplateRef, Type } from '@angular/core';\nimport { Column, FilterPredicateFunction } from '../data-grid.model';\n\nexport interface FilteringFormRendererSpec {\n  renderer: TemplateRef<FilteringFormRendererContext> | Type<any>;\n  context: FilteringFormRendererContext;\n}\n\nexport class FilteringFormRendererContext {\n  property: Column;\n  applyFilter: (filteringModifier: FilteringModifier) => void;\n  resetFilter: () => void;\n}\n\nexport interface FilteringModifier {\n  filterPredicate?: string | FilterPredicateFunction;\n  externalFilterQuery?: string | object;\n}\n\n@Directive({\n  selector: '[c8yFilteringFormRendererDef]',\n  standalone: true\n})\nexport class FilteringFormRendererDefDirective {\n  constructor(public template: TemplateRef<any>) {}\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { cloneDeep } from 'lodash-es';\nimport { C8yJSONSchema } from '../../dynamic-forms/json-schema/c8y-json-schema.service';\nimport { Column } from '../data-grid.model';\nimport { FilteringFormRendererContext } from './filtering-form-renderer';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  templateUrl: './base.filtering-form-renderer.component.html',\n  selector: 'c8y-base-filtering-form-renderer',\n  standalone: true,\n  imports: [FormlyModule, C8yTranslateDirective, C8yTranslatePipe]\n})\nexport class BaseFilteringFormRendererComponent implements OnInit {\n  schema;\n  form: FormGroup;\n  model;\n  options;\n\n  fields: FormlyFieldConfig[];\n\n  constructor(\n    public context: FilteringFormRendererContext,\n    public jsonschema: C8yJSONSchema\n  ) {}\n\n  @HostListener('keyup.enter', ['$event']) onEnterKeyUp(event: KeyboardEvent) {\n    event.stopPropagation();\n    this.applyFilter();\n  }\n  @HostListener('keydown.escape', ['$event']) onEscapeKeyDown(event: KeyboardEvent) {\n    event.stopPropagation();\n    this.resetFilter();\n  }\n\n  ngOnInit() {\n    const column: Column = this.context.property;\n\n    if (column.filteringConfig.fields) {\n      this.fields = cloneDeep(column.filteringConfig.fields);\n    } else if (!column.filteringConfig.fields && column.filteringConfig.schema) {\n      this.schema = cloneDeep(column.filteringConfig.schema);\n      this.fields = [this.jsonschema.toFieldConfig(this.schema)];\n    } else {\n      throw new Error(`Neither fields nor schema configuration provided for Formly.`);\n    }\n\n    this.form = column.filteringConfig.formGroup || new FormGroup({});\n    this.model = column.externalFilterQuery || column.filteringConfig.model || {};\n    this.options = { formDefaults: { ngModelOptions: { debounce: 100 } } };\n  }\n\n  applyFilter() {\n    this.context.applyFilter({\n      externalFilterQuery: this.form.value\n    });\n  }\n\n  resetFilter() {\n    this.context.resetFilter();\n  }\n}\n","<formly-form\n  [form]=\"form\"\n  [fields]=\"fields\"\n  [model]=\"model\"\n></formly-form>\n<div class=\"data-grid__dropdown__footer d-flex separator-top\">\n  <button\n    class=\"btn btn-default btn-sm m-r-8 flex-grow\"\n    title=\"{{ 'Reset' | translate }}\"\n    (click)=\"resetFilter()\"\n    translate\n  >\n    Reset\n  </button>\n  <button\n    class=\"btn btn-primary btn-sm flex-grow\"\n    title=\"{{ 'Apply' | translate }}\"\n    (click)=\"applyFilter()\"\n    [disabled]=\"form.pristine || form.invalid\"\n    translate\n  >\n    Apply\n  </button>\n</div>\n","/* tslint:disable:max-classes-per-file */\n\nimport { Directive, TemplateRef, Type } from '@angular/core';\n\nimport { AssetTableExtendedColumn } from '../data-grid.model';\n\nexport interface CellRendererDef {\n  template: TemplateRef<any>;\n}\n\nexport interface CellRendererSpec {\n  renderer: TemplateRef<CellRendererContext> | Type<any>;\n  context: CellRendererContext;\n}\n\nexport class CellRendererContext {\n  value: any;\n  item?: any;\n  property: AssetTableExtendedColumn;\n}\n\n@Directive({\n  selector: '[c8yCellRendererDef]',\n  standalone: true\n})\nexport class CellRendererDefDirective implements CellRendererDef {\n  constructor(public template: TemplateRef<any>) {}\n}\n\n@Directive({\n  selector: '[c8yHeaderCellRendererDef]',\n  standalone: true\n})\nexport class HeaderCellRendererDefDirective implements CellRendererDef {\n  constructor(public template: TemplateRef<any>) {}\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DoCheck,\n  Injector,\n  Input,\n  OnChanges,\n  TemplateRef,\n  Type\n} from '@angular/core';\n\nimport { CellRendererContext, CellRendererSpec } from './cell-renderer';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { C8yComponentOutlet } from '../../common/component-outlet.directive';\nimport { StringifyObjectPipe } from '../../common/stringify-object.pipe';\nimport { C8yTranslatePipe } from '../../i18n';\n\n@Component({\n  selector: 'c8y-cell-renderer',\n  templateUrl: './cell-renderer.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [NgTemplateOutlet, C8yComponentOutlet, StringifyObjectPipe, C8yTranslatePipe]\n})\nexport class CellRendererComponent implements OnChanges, DoCheck {\n  spec: CellRendererSpec;\n  @Input('spec')\n  set _spec(spec: CellRendererSpec) {\n    this.spec = spec;\n  }\n  prevSpec: CellRendererSpec;\n\n  rendererType: 'TEMPLATE' | 'COMPONENT';\n  rendererInjector: Injector;\n\n  constructor(\n    private injector: Injector,\n    private cd: ChangeDetectorRef\n  ) {}\n\n  ngOnChanges() {\n    if (!this.prevSpec) {\n      this.prevSpec = this.spec;\n    }\n\n    const { renderer } = this.spec;\n\n    if (renderer instanceof TemplateRef) {\n      this.rendererType = 'TEMPLATE';\n    } else if (renderer instanceof Type) {\n      this.rendererType = 'COMPONENT';\n\n      this.rendererInjector = Injector.create({\n        providers: [{ provide: CellRendererContext, useValue: this.spec.context }],\n        parent: this.injector\n      });\n    }\n  }\n\n  ngDoCheck() {\n    if (!this.spec.context.value === this.prevSpec.context.value) {\n      this.prevSpec = this.spec;\n      this.cd.markForCheck();\n    }\n  }\n}\n","@if (spec.renderer) {\n  @if (rendererType === 'TEMPLATE') {\n    <ng-container\n      [ngTemplateOutlet]=\"spec.renderer\"\n      [ngTemplateOutletContext]=\"{ $implicit: spec.context }\"\n    ></ng-container>\n  }\n  @if (rendererType === 'COMPONENT') {\n    <ng-container\n      [c8yComponentOutlet]=\"spec.renderer\"\n      [c8yComponentOutletInjector]=\"rendererInjector\"\n    ></ng-container>\n  }\n}\n\n@if (!spec.renderer) {\n  @if (spec.context.property.translate) {\n    <span title=\"{{ spec.context.value | translate }}\">\n      {{ spec.context.value | translate }}\n    </span>\n  } @else {\n    <span title=\"{{ spec.context.value | stringifyObject }}\">\n      {{ spec.context.value | stringifyObject }}\n    </span>\n  }\n}\n","import { ContentChild, Directive, Input } from '@angular/core';\n\nimport { CellRendererDefDirective, HeaderCellRendererDefDirective } from './cell-renderer';\nimport { FilteringFormRendererDefDirective } from './filtering-form-renderer';\n\n@Directive({\n  selector: 'c8y-column',\n  standalone: true\n})\nexport class ColumnDirective {\n  @Input() name: string;\n\n  @ContentChild(CellRendererDefDirective, { static: false })\n  cellRendererDef: CellRendererDefDirective;\n\n  @ContentChild(HeaderCellRendererDefDirective, { static: false })\n  headerCellRendererDef: HeaderCellRendererDefDirective;\n\n  @ContentChild(FilteringFormRendererDefDirective, { static: false })\n  filteringFormRendererDef: FilteringFormRendererDefDirective;\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  Injector,\n  Input,\n  OnChanges,\n  TemplateRef,\n  Type\n} from '@angular/core';\n\nimport { FilteringFormRendererContext, FilteringFormRendererSpec } from './filtering-form-renderer';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { C8yComponentOutlet } from '../../common/component-outlet.directive';\nimport { FormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-filtering-form-renderer',\n  templateUrl: './filtering-form-renderer.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [NgTemplateOutlet, C8yComponentOutlet, FormsModule, C8yTranslatePipe]\n})\nexport class FilteringFormRendererComponent implements OnChanges {\n  spec: FilteringFormRendererSpec;\n  @Input('spec')\n  set _spec(spec: FilteringFormRendererSpec) {\n    this.spec = spec;\n  }\n\n  rendererType: 'TEMPLATE' | 'COMPONENT';\n  rendererInjector: Injector;\n  defaultRendererFilterText = '';\n\n  constructor(\n    private injector: Injector,\n    private cd: ChangeDetectorRef\n  ) {}\n\n  ngOnChanges() {\n    const { renderer, context } = this.spec;\n\n    if (renderer instanceof TemplateRef) {\n      this.rendererType = 'TEMPLATE';\n    } else if (renderer instanceof Type) {\n      this.rendererType = 'COMPONENT';\n\n      this.rendererInjector = Injector.create({\n        providers: [{ provide: FilteringFormRendererContext, useValue: this.spec.context }],\n        parent: this.injector\n      });\n    }\n\n    const { filterPredicate } = context.property;\n    if (typeof filterPredicate === 'string') {\n      this.defaultRendererFilterText = filterPredicate;\n    }\n    if (filterPredicate === undefined) {\n      this.defaultRendererFilterText = '';\n    }\n  }\n}\n","@if (spec.renderer) {\n  @if (rendererType === 'TEMPLATE') {\n    <ng-container\n      [ngTemplateOutlet]=\"spec.renderer\"\n      [ngTemplateOutletContext]=\"{ $implicit: spec.context }\"\n    ></ng-container>\n  }\n  @if (rendererType === 'COMPONENT') {\n    <ng-container\n      [c8yComponentOutlet]=\"spec.renderer\"\n      [c8yComponentOutletInjector]=\"rendererInjector\"\n    ></ng-container>\n  }\n}\n\n@if (!spec.renderer) {\n  <div class=\"form-group p-t-8\">\n    <label>{{ 'Filter text' | translate }}</label>\n    <input\n      class=\"form-control\"\n      [(ngModel)]=\"defaultRendererFilterText\"\n      (keyup.enter)=\"\n        spec.context.applyFilter({\n          filterPredicate: defaultRendererFilterText\n        })\n      \"\n    />\n  </div>\n  <div class=\"data-grid__dropdown__footer d-flex separator-top\">\n    <button\n      class=\"btn btn-default btn-sm flex-grow m-r-8\"\n      title=\"{{ 'Reset' | translate }}\"\n      (click)=\"defaultRendererFilterText = ''; spec.context.resetFilter()\"\n    >\n      {{ 'Reset' | translate }}\n    </button>\n    <button\n      class=\"btn btn-primary btn-sm flex-grow\"\n      title=\"{{ 'Apply' | translate }}\"\n      (click)=\"\n        spec.context.applyFilter({\n          filterPredicate: defaultRendererFilterText\n        })\n      \"\n    >\n      {{ 'Apply' | translate }}\n    </button>\n  </div>\n}\n","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport {\n  FormBuilder,\n  FormGroup,\n  NgForm,\n  Validators,\n  FormsModule,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport { camelCase } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { simpleJsonPathValidator } from '../../forms/simple-json-path-validator.directive';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Column, CustomColumnConfig } from '../data-grid.model';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { FormGroupComponent } from '../../forms/form-group.component';\nimport { RequiredInputPlaceholderDirective } from '../../forms/required-input-placeholder.directive';\nimport { UniqueInCollectionByPathValidationDirective } from '../../forms/unique-in-collection-by-path-validation.directive';\nimport { MessagesComponent } from '../../forms/messages.component';\nimport { MessageDirective } from '../../forms/message.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-configure-custom-column',\n  templateUrl: './configure-custom-column.component.html',\n  standalone: true,\n  imports: [\n    C8yTranslateDirective,\n    FormsModule,\n    ReactiveFormsModule,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    UniqueInCollectionByPathValidationDirective,\n    MessagesComponent,\n    MessageDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class ConfigureCustomColumnComponent {\n  readonly SIMPLE_JSON_PATH_REGEX = /^[^.\\s]+(\\.\\S+)*$/;\n\n  @ViewChild('columnConfigForm', { static: false }) form: NgForm;\n\n  @Output()\n  onAddCustomColumn: EventEmitter<CustomColumnConfig> = new EventEmitter();\n\n  formGroup: FormGroup = this.fb.group({\n    header: [''],\n    path: ['', [Validators.required, simpleJsonPathValidator]],\n    addAnother: [false]\n  });\n  columns: Column[] = [];\n\n  uniqueHeaderMsg = gettext('The column header name is too similar to \"{{ value }}\".');\n\n  constructor(\n    public fb: FormBuilder,\n    public modalRef: BsModalRef\n  ) {}\n\n  comparator(val1, val2) {\n    return camelCase(val1) === camelCase(val2);\n  }\n\n  addColumn(): void {\n    const { header, path } = this.formGroup.value;\n    const column = {\n      name: camelCase(header),\n      header,\n      path,\n      type: 'legacy',\n      custom: true,\n      visible: true\n    };\n    this.onAddCustomColumn.emit(column as CustomColumnConfig);\n    // add new column to columns array since it's used for header uniqueness validation\n    this.columns.splice(this.columns.length, 0, column);\n\n    if (this.formGroup.value.addAnother) {\n      this.form.resetForm({ addAnother: true });\n    } else {\n      this.modalRef.hide();\n    }\n  }\n}\n","<div class=\"viewport-modal\">\n  <div class=\"modal-header separator-bottom\">\n    <h3\n      id=\"modal-title\"\n      translate\n    >\n      Configure custom column\n    </h3>\n  </div>\n\n  <form\n    class=\"d-contents\"\n    #columnConfigForm=\"ngForm\"\n    [formGroup]=\"formGroup\"\n  >\n    <div\n      class=\"modal-inner-scroll\"\n      id=\"modal-body\"\n    >\n      <div class=\"modal-body\">\n        <c8y-form-group>\n          <label\n            for=\"header\"\n            translate\n          >\n            Header\n          </label>\n          <input\n            class=\"form-control\"\n            id=\"header\"\n            autocomplete=\"off\"\n            data-cy=\"configure-custom-column--header\"\n            formControlName=\"header\"\n            [placeholder]=\"'e.g. Agent name' | translate\"\n            [required]=\"true\"\n            uniqueByPath\n            [collection]=\"columns\"\n            path=\"header\"\n            [comparator]=\"comparator\"\n          />\n          <c8y-messages>\n            <c8y-message\n              name=\"uniqueByPath\"\n              [text]=\"uniqueHeaderMsg\"\n            ></c8y-message>\n          </c8y-messages>\n        </c8y-form-group>\n        <c8y-form-group>\n          <label\n            for=\"fragmentPath\"\n            translate\n          >\n            Fragment path\n          </label>\n          <input\n            class=\"form-control\"\n            id=\"fragmentPath\"\n            autocomplete=\"off\"\n            data-cy=\"configure-custom-column--fragmentPath\"\n            formControlName=\"path\"\n            [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'c8y_Agent.name' }\"\n          />\n        </c8y-form-group>\n        <label\n          class=\"c8y-switch\"\n          [title]=\"'Add another column after saving this one' | translate\"\n        >\n          <input\n            class=\"form-control\"\n            type=\"checkbox\"\n            formControlName=\"addAnother\"\n          />\n          <span></span>\n          <span translate>Add another column after saving this one</span>\n        </label>\n      </div>\n    </div>\n\n    <div class=\"modal-footer\">\n      <button\n        class=\"btn btn-default\"\n        title=\"{{ 'Cancel' | translate }}\"\n        (click)=\"modalRef.hide()\"\n      >\n        {{ 'Cancel' | translate }}\n      </button>\n      <button\n        class=\"btn btn-primary\"\n        title=\"{{ 'Save' | translate }}\"\n        [disabled]=\"columnConfigForm.form.pristine || !columnConfigForm.form.valid\"\n        (click)=\"addColumn()\"\n      >\n        {{ 'Save' | translate }}\n      </button>\n    </div>\n  </form>\n</div>\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { flatten } from 'lodash-es';\nimport { Observable, shareReplay } from 'rxjs';\nimport {\n  ExtensionPointWithoutStateForPlugins,\n  fromTriggerOnce,\n  GenericHookOptions,\n  GenericHookType,\n  hookGeneric\n} from '../common/extension-hooks';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { ActionControlHook } from './data-grid.model';\n\nconst HOOK_ACTION_CONTROLS = new InjectionToken('ActionControlHook');\n\n/**\n * You can either provide a single `ActionControlHook` as parameter:\n * ```typescript\n *  hookDataGridActionControls(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookDataGridActionControls([...])\n * ```\n *\n * Or you provide a service that implements `ActionControlFactory`\n * ```typescript\n *  export class MyActionControlsFactory implements ActionControlFactory {...}\n *  ...\n *  hookDataGridActionControls(MyActionControlsFactory)\n * ```\n * @param config The `ActionControlHook`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookDataGridActionControls(\n  action: GenericHookType<ActionControlHook>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<ActionControlHook>(action, HOOK_ACTION_CONTROLS, options);\n}\n\n/**\n * A service which defines device grid action options.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class ActionControlsExtensionService extends ExtensionPointWithoutStateForPlugins<ActionControlHook> {\n  constructor(\n    rootInjector: Injector,\n    plugins: PluginsResolveService,\n    private router: Router\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  protected setupItemsObservable(): Observable<ActionControlHook[]> {\n    return fromTriggerOnce<ActionControlHook>(this.router, this.refresh$, [\n      () => {\n        const hooks: ActionControlHook[] = flatten(\n          this.injectors.map(injector => injector.get(HOOK_ACTION_CONTROLS, [], { self: true }))\n        );\n\n        return hooks;\n      },\n      () => this.factories\n    ]).pipe(shareReplay(1));\n  }\n}\n","import { Type } from '@angular/core';\nimport {\n  Column,\n  ColumnConfig,\n  ColumnDataType,\n  ColumnSortingConfig,\n  FilterPredicateFunction,\n  FormlyColumnFilteringConfig,\n  SortOrder\n} from '../data-grid.model';\nimport { BaseFilteringFormRendererComponent } from './base.filtering-form-renderer.component';\n\nexport class BaseColumn implements Column {\n  name: string;\n  path?: string;\n  header?: string;\n  dataType?: ColumnDataType;\n\n  visible?: boolean;\n  positionFixed?: boolean;\n  resizable?: boolean;\n  gridTrackSize?: string;\n\n  headerCSSClassName?: string | string[];\n  headerCellRendererComponent?: Type<any>;\n\n  cellCSSClassName?: string | string[];\n  cellRendererComponent?: Type<any>;\n\n  sortable?: boolean;\n  sortingConfig?: ColumnSortingConfig;\n  sortOrder?: SortOrder;\n\n  filterable?: boolean;\n  filteringConfig?: FormlyColumnFilteringConfig;\n  filteringFormRendererComponent?: Type<any>;\n  filterPredicate?: string | FilterPredicateFunction;\n  externalFilterQuery?: string | object;\n\n  constructor(config: ColumnConfig = {}) {\n    this.filteringFormRendererComponent = BaseFilteringFormRendererComponent;\n    Object.assign(this, config);\n    if (config.filter?.externalFilterQuery) {\n      this.externalFilterQuery = config.filter.externalFilterQuery;\n    }\n  }\n\n  /**\n   * Gets a label template to be used in the schema-form's `type: 'template'` form item.\n   * @param label The label to be displayed.\n   * @param options Additional options:\n   *   - `showWildcardTooltip`: `boolean` - appends a tooltip explaining wildcard usage\n   * @returns The string with the template.\n   */\n  getLabelTemplate(label: string, options: { showWildcardTooltip?: boolean } = {}): string {\n    const wildcardTooltip = `\n      <i\n        class=\"text-info\"\n        c8y-icon=\"info-circle\"\n        title=\"{{ 'Use * as a wildcard character' | translate }}\"\n      ></i>\n    `;\n    return `\n      <label>\n        <span>\n          {{ '${label}' | translate }}\n        </span>\n        ${options.showWildcardTooltip ? wildcardTooltip : ''}\n      </label>\n    `;\n  }\n}\n","import { getBasicInputArrayFormFieldConfig } from '../../dynamic-forms/presets';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { CustomColumnConfig, CustomColumnType } from '../data-grid.model';\nimport { BaseColumn } from './base.column';\n\nexport class CustomColumn extends BaseColumn {\n  type: CustomColumnType;\n  constructor(initialColumnConfig?: CustomColumnConfig) {\n    super(initialColumnConfig);\n\n    this.name = this.name || 'custom';\n    this.header = this.header || gettext('Custom');\n    this.type = initialColumnConfig?.type || 'legacy';\n\n    this.filterable = true;\n    this.filteringConfig = {\n      fields: [\n        {\n          key: 'exists',\n          type: 'switch',\n          defaultValue: false,\n          templateOptions: {\n            label: gettext('Only rows where value is defined')\n          }\n        },\n        ...getBasicInputArrayFormFieldConfig({\n          key: 'equals',\n          label: gettext('Only rows where value equals to'),\n          addText: gettext('Add next`value`'),\n          tooltip: gettext('Use * as a wildcard character'),\n          placeholder: '10300',\n          optional: true\n        })\n      ],\n      getFilter: (model: any): any => {\n        const filter: any = {};\n        if (model.exists) {\n          filter.__has = this.path;\n        }\n        if (model.equals) {\n          filter[this.path] = { __in: model.equals };\n        }\n        return filter;\n      }\n    };\n\n    this.sortable = true;\n    this.sortingConfig = {\n      pathSortingConfigs: [{ path: this.path }]\n    };\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  template: `&nbsp;`,\n  selector: 'c8y-expandable-header-cell-renderer',\n  standalone: true\n})\nexport class ExpandableHeaderCellRendererComponent {}\n","import {\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  Inject,\n  forwardRef,\n  inject\n} from '@angular/core';\nimport { CellRendererContext } from '../cell-renderer';\nimport { DataGridComponent } from '../../data-grid.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { NgClass } from '@angular/common';\nimport { IconDirective } from '../../../common/icon.directive';\nimport { C8yTranslatePipe } from '../../../i18n/c8y-translate.pipe';\n\n@Component({\n  template: `\n    <button\n      class=\"btn btn-dot collapse-btn\"\n      title=\"{{ (isExpanded ? collapse : expand) | translate }}\"\n      [attr.aria-label]=\"(isExpanded ? collapse : expand) | translate\"\n      [attr.aria-controls]=\"context.item.id\"\n      [attr.aria-expanded]=\"isExpanded\"\n      [ngClass]=\"{ active: isExpanded }\"\n      (click)=\"toggleExpand()\"\n    >\n      @if (!loading) {\n        <i c8yIcon=\"chevron-right\"></i>\n      }\n      @if (loading) {\n        <i class=\"icon-spin\" c8yIcon=\"circle-o-notch\"></i>\n      }\n    </button>\n  `,\n  selector: 'c8y-expandable-cell-renderer',\n  standalone: true,\n  imports: [NgClass, IconDirective, C8yTranslatePipe]\n})\nexport class ExpandableCellRendererComponent {\n  readonly collapse = gettext('Collapse');\n  readonly expand = gettext('Expand');\n  isExpanded = false;\n  loading = false;\n  destroyRef = inject(DestroyRef);\n\n  constructor(\n    public context: CellRendererContext,\n    @Inject(forwardRef(() => DataGridComponent)) public dataGridComponent: DataGridComponent, // forwardRef is needed because of circular dependency\n    private cd: ChangeDetectorRef\n  ) {}\n\n  toggleExpand() {\n    if (this.isExpanded) {\n      this.dataGridComponent.collapse(this.context.item);\n      this.isExpanded = false;\n    } else {\n      this.loading = true;\n      this.dataGridComponent\n        .expand(this.context.item)\n        .pipe(takeUntilDestroyed(this.destroyRef))\n        .subscribe((isExpanded: boolean) => {\n          this.loading = false;\n          this.isExpanded = isExpanded;\n          this.cd.detectChanges();\n        });\n    }\n  }\n}\n","import { Type } from '@angular/core';\nimport { ExpandableHeaderCellRendererComponent } from './expandable.header-cell-renderer.component';\nimport { ExpandableCellRendererComponent } from './expandable.cell-renderer.component';\nimport { Column, ColumnDataType, FilterPredicateFunction, SortOrder } from '../../data-grid.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport class ExpandableRowColumn implements Column {\n  name: string;\n  path?: string;\n  header?: string;\n  dataType?: ColumnDataType;\n\n  visible?: boolean;\n  positionFixed?: boolean;\n  gridTrackSize?: string;\n\n  headerCSSClassName?: string | string[];\n  headerCellRendererComponent?: Type<any>;\n\n  cellCSSClassName?: string | string[];\n  cellRendererComponent?: Type<any>;\n\n  sortable?: boolean;\n  sortOrder?: SortOrder;\n\n  filterable?: boolean;\n  filteringFormRendererComponent?: Type<any>;\n  filterPredicate?: string | FilterPredicateFunction;\n  externalFilterQuery?: string | object;\n\n  constructor() {\n    this.name = 'expander';\n    this.header = gettext('Detail toggle');\n    this.dataType = ColumnDataType.Icon;\n\n    this.headerCellRendererComponent = ExpandableHeaderCellRendererComponent;\n    this.cellRendererComponent = ExpandableCellRendererComponent;\n\n    this.gridTrackSize = '64px';\n\n    this.filterable = false;\n\n    this.sortable = false;\n  }\n}\n","import { NgClass } from '@angular/common';\nimport { Component, Inject, computed, forwardRef, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { IconDirective } from '../../../common/icon.directive';\nimport { C8yTranslatePipe } from '../../../i18n/c8y-translate.pipe';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DataGridComponent } from '../../data-grid.component';\nimport { CellRendererContext } from '../cell-renderer';\n\n@Component({\n  template: `\n    @if (context.item.hasChildren) {\n      <button\n        class=\"data-grid-collapse-btn\"\n        title=\"{{ (isExpanded() ? collapse : expand) | translate }}\"\n        [attr.aria-label]=\"(isExpanded() ? collapse : expand) | translate\"\n        [attr.aria-controls]=\"context.item.id\"\n        [attr.aria-expanded]=\"isExpanded()\"\n        [ngClass]=\"btnClass()\"\n        (click)=\"toggleExpand()\"\n      >\n        @if (!loading()) {\n          <i c8yIcon=\"chevron-right\"></i>\n        }\n        @if (loading()) {\n          <i class=\"icon-spin\" c8yIcon=\"circle-o-notch\"></i>\n        }\n      </button>\n    }\n  `,\n  selector: 'c8y-tree-node-cell-renderer',\n  standalone: true,\n  imports: [NgClass, IconDirective, C8yTranslatePipe]\n})\nexport class TreeNodeCellRendererComponent {\n  readonly collapse = gettext('Collapse');\n  readonly expand = gettext('Expand');\n  isExpanded = signal(false);\n  loading = signal(false);\n  level = this.context?.item?.level ?? 0;\n  btnClass = computed(() => ({\n    active: this.isExpanded(),\n    [`level-${this.level}`]: this.level > 0\n  }));\n\n  constructor(\n    public context: CellRendererContext,\n    @Inject(forwardRef(() => DataGridComponent)) public dataGridComponent: DataGridComponent // forwardRef is needed because of circular dependency\n  ) {\n    this.dataGridComponent.dataSource.nodesLoading$\n      .pipe(takeUntilDestroyed())\n      .subscribe(loading => this.loading.set(loading.includes(this.context.item)));\n  }\n\n  toggleExpand() {\n    if (this.isExpanded()) {\n      this.dataGridComponent.collapseNode(this.context.item);\n      this.isExpanded.set(false);\n    } else {\n      this.dataGridComponent.expandNode(this.context.item);\n      this.isExpanded.set(true);\n    }\n  }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  template: `&nbsp;`,\n  selector: 'c8y-tree-node-header-cell-renderer',\n  standalone: true\n})\nexport class TreeNodeHeaderCellRendererComponent {}\n","import { Type } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { Column, ColumnDataType, FilterPredicateFunction, SortOrder } from '../../data-grid.model';\nimport { TreeNodeCellRendererComponent } from './tree-node.cell-renderer.component';\nimport { TreeNodeHeaderCellRendererComponent } from './tree-node.header-cell-renderer.component';\n\nexport class TreeNodeColumn implements Column {\n  name: string;\n  path?: string;\n  header?: string;\n  dataType?: ColumnDataType;\n\n  visible?: boolean;\n  positionFixed?: boolean;\n  gridTrackSize?: string;\n\n  headerCSSClassName?: string | string[];\n  headerCellRendererComponent?: Type<unknown>;\n\n  cellCSSClassName?: string | string[];\n  cellRendererComponent?: Type<unknown>;\n\n  sortable?: boolean;\n  sortOrder?: SortOrder;\n\n  filterable?: boolean;\n  filteringFormRendererComponent?: Type<unknown>;\n  filterPredicate?: string | FilterPredicateFunction;\n  externalFilterQuery?: string | object;\n\n  constructor() {\n    this.name = 'tree-node';\n    this.header = gettext('Tree node toggle');\n    this.dataType = ColumnDataType.Icon;\n\n    this.headerCellRendererComponent = TreeNodeHeaderCellRendererComponent;\n    this.cellRendererComponent = TreeNodeCellRendererComponent;\n\n    this.filterable = false;\n\n    this.sortable = false;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FetchClient, IResultList, Paging, Service } from '@c8y/client';\nimport { AppStateService } from '../common';\nimport { AssetPropertyDefinition, AssetPropertyDefinitionResponse } from './asset-property.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AssetPropertyService extends Service<AssetPropertyDefinition> {\n  protected baseUrl = 'service/dtm';\n  protected listUrl = '/definitions/properties';\n  protected propertyName = 'definitions';\n\n  constructor(\n    client: FetchClient,\n    private appState: AppStateService\n  ) {\n    super(client);\n  }\n\n  async canRetrieveAssetProperties(): Promise<boolean> {\n    const isAppAvailable = await this.appState.isApplicationAvailable('dtm');\n    if (!isAppAvailable) {\n      return false;\n    }\n\n    try {\n      const result = await this.list({ currentPage: 1, pageSize: 1 });\n      return result?.data?.length > 0;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  async list(filterInput: object = {}): Promise<IResultList<AssetPropertyDefinition>> {\n    const headers = { accept: 'application/json' };\n    const filter = this.buildFilter(filterInput);\n    const res = await this.fetch(\n      this.listUrl,\n      this.changeFetchOptions({ headers, params: filter }, this.listUrl)\n    );\n    if (!res.ok) {\n      throw new Error(`Error loading asset property definitions: ${res.status} ${res.statusText}`);\n    }\n\n    const json = (await res.json()) as AssetPropertyDefinitionResponse;\n\n    if (!Array.isArray(json.definitions)) {\n      throw new Error('Invalid response: \"definitions\" must be an array.');\n    }\n\n    const paging = this.getPaging(json, filter);\n    const data: AssetPropertyDefinition[] = json.definitions;\n\n    return { res, data, paging };\n  }\n\n  async getByIdentifier(identifier: string): Promise<AssetPropertyDefinition> {\n    const url = `${this.listUrl}/${encodeURIComponent(identifier)}`;\n    const headers = { accept: 'application/json' };\n    const res = await this.fetch(url, this.changeFetchOptions({ headers }, url));\n    if (res.status === 404) {\n      throw new Error(`Property Definition with identifier '${identifier}' not found (404).`);\n    }\n    if (!res.ok) {\n      throw new Error(\n        `Error fetching Property Definition '${identifier}': ${res.status} ${res.statusText}`\n      );\n    }\n    return (await res.json()) as AssetPropertyDefinition;\n  }\n\n  search(searchTerm: string): Promise<IResultList<AssetPropertyDefinition>> {\n    return this.list({ titles: [searchTerm] });\n  }\n\n  private buildFilter(filter: any): any {\n    const newFilter = { ...filter };\n    ['identifiers', 'titles', 'tags'].forEach(key => {\n      if (Array.isArray(newFilter[key])) {\n        newFilter[key] = newFilter[key].join(',');\n      }\n    });\n    return newFilter;\n  }\n\n  protected getPaging(\n    json: AssetPropertyDefinitionResponse,\n    filter: object\n  ): Paging<AssetPropertyDefinition> {\n    if (\n      !json.statistics ||\n      typeof json.statistics.totalElements !== 'number' ||\n      typeof json.statistics.currentPage !== 'number' ||\n      typeof json.statistics.totalPages !== 'number' ||\n      typeof json.statistics.pageSize !== 'number'\n    ) {\n      throw new Error('Invalid response: missing or invalid paging statistics.');\n    }\n\n    const { currentPage, totalPages, totalElements } = json.statistics;\n    const statistics = {\n      ...json.statistics,\n      nextPage: currentPage < totalPages ? currentPage + 1 : null,\n      prevPage: currentPage > 1 ? currentPage - 1 : null,\n      totalPages: totalPages,\n      totalElements: totalElements\n    };\n    return new Paging<AssetPropertyDefinition>(this, statistics, filter);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { tap, takeUntil } from 'rxjs/operators';\nimport { AssetPropertyService } from '../../asset-property/asset-property.service';\nimport { BottomDrawerService } from '../../bottom-drawer';\nimport { ConfigureCustomColumnComponent } from './configure-custom-column.component';\nimport { CustomColumnConfig, Column } from '../data-grid.model';\n\n@Injectable({ providedIn: 'root' })\nexport class CustomColumnService {\n  constructor(\n    private assetPropertiesService: AssetPropertyService,\n    private bottomDrawerService: BottomDrawerService,\n    private bsModalService: BsModalService\n  ) {}\n\n  async openCustomColumns(\n    existingColumns: Column[],\n    onAdd: (config: CustomColumnConfig) => void\n  ): Promise<void> {\n    const dtmAvailable = await this.assetPropertiesService.canRetrieveAssetProperties();\n    if (dtmAvailable) {\n      this.openDrawer(onAdd);\n    } else {\n      this.openModal(existingColumns, onAdd);\n    }\n  }\n\n  private openModal(columns: Column[], onAdd: (config: CustomColumnConfig) => void) {\n    const modalRef = this.bsModalService.show(ConfigureCustomColumnComponent, {\n      class: 'modal-sm',\n      ignoreBackdropClick: true,\n      initialState: { columns }\n    });\n    modalRef.content.onAddCustomColumn\n      .pipe(\n        tap((cfg: CustomColumnConfig) => onAdd(cfg)),\n        takeUntil(modalRef.onHidden)\n      )\n      .subscribe();\n  }\n\n  private async openDrawer(onAdd: (config: CustomColumnConfig) => void) {\n    // Importing here because otherwise introducing a circular dependency between data-grid and asset-property-grid compponents.\n    const { AssetPropertyGridComponent } = await import('./asset-property-grid.component');\n    const drawerRef = this.bottomDrawerService.openDrawer(AssetPropertyGridComponent);\n    drawerRef.instance.onAddCustomColumn\n      .pipe(tap((cfg: CustomColumnConfig) => onAdd(cfg)))\n      .subscribe();\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { GridConfig } from './data-grid.model';\n\n/**\n * Injection token used to provide a configuration strategy service for data-grid component.\n */\nexport const DATA_GRID_CONFIGURATION_STRATEGY = new InjectionToken<DataGridConfigurationStrategy>(\n  'DataGridConfigurationStrategy'\n);\n\n/**\n * Injection token used to provide a context information needed by any\n * configuration strategy service to retrieve/store configuration data.\n * Use this token if your context data is static.\n */\nexport const DATA_GRID_CONFIGURATION_CONTEXT = new InjectionToken<GridConfigContext>(\n  'DataGridConfigurationContext'\n);\n\n/**\n * Injection token used to provide a context information provider needed by\n * any configuration strategy service to retrieve/store configuration data.\n * Use this token is your context data is dynamic.\n */\nexport const DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER =\n  new InjectionToken<GridConfigContextProvider>('DataGridConfigurationContextProvider');\n\n/**\n * Interface for strategy services implementing storage of data-grid configuration data.\n */\nexport interface DataGridConfigurationStrategy {\n  /**\n   * A method to retrive configuration data.\n   * @param context Any data needed for the configuration data to be uniquely identified and retrieved.\n   */\n  getConfig$(context?: GridConfigContext): Observable<GridConfig>;\n\n  /**\n   * A method to persist configuration data.\n   * @param config Configuration data to persist.\n   * @param context Any data needed for the configuration data to be uniquely identified and retrieved.\n   */\n  saveConfig$(config: GridConfig, context?: GridConfigContext): Observable<GridConfig>;\n\n  /**\n   * Allows to retrieve the context provided for the given configuration strategy.\n   */\n  getContext(): GridConfigContext;\n\n  /**\n   * Tells if strategy has been already provided with context or context provider.\n   */\n  isContextKnown(): boolean;\n}\n\n/**\n * Used to provide context data needed for retrieval/storing of grid configuration data.\n */\nexport interface GridConfigContext {\n  [key: string]: any;\n  /**\n   * Provides a way to exclude given parts of the data grid configuration from being persisted.\n   * This allows to e.g. provide a grid where column configuration (order, visibility, soritng, custom columns)\n   * will be persisted, but filters on columns will be reset next time the grid is used.\n   */\n  configFilter?: GridConfigFilter;\n}\n\n/**\n * Defines the various types of configuration options for data grid component.\n */\nexport type GridConfigPart = 'filter' | 'sort' | 'customColumns' | 'order' | 'visibility';\n\n/**\n * Defines the various options to define if a given part from the data grid configuration\n * will be omited when configuration is persisted.\n * A truthy or missing value means that the given configuration part will be persisted.\n * A falsy value means that the configuration part will not be persisted.\n */\nexport type GridConfigFilter = {\n  [K in GridConfigPart]?:\n    | boolean\n    | Promise<boolean>\n    | Observable<boolean>\n    | (() => boolean | Promise<boolean> | Observable<boolean>);\n};\n\n/**\n * Defines the various types of configuration change events the data grid component can emit.\n */\nexport type GridEventType =\n  | 'filter'\n  | 'sort'\n  | 'pagination'\n  | 'addCustomColumn'\n  | 'removeCustomColumn'\n  | 'reorderColumn'\n  | 'changeColumnVisibility';\n\n/**\n * Marks classes able to provide grid configuration context data.\n */\nexport interface GridConfigContextProvider {\n  getGridConfigContext(): GridConfigContext;\n}\n","import { TemplateRef, Type } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { IResultList } from '@c8y/client';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Observable } from 'rxjs';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { GridConfigContext } from './data-grid-configuration.model';\n\n/** Describes the interface of the data grid. */\nexport interface DataGrid {\n  /** The list of columns. */\n  columns: Column[];\n\n  /** The list of items. */\n  rows: Row[];\n\n  /** Pagination object. */\n  pagination: Pagination;\n\n  /** A callback function to fetch server data. */\n  serverSideDataCallback: ServerSideDataCallback;\n\n  /** Whether items are selectable. */\n  selectable: boolean;\n\n  /** The name of the primary key property. */\n  selectionPrimaryKey: string;\n\n  /** Data grid display options. */\n  displayOptions: DisplayOptions;\n\n  /** Individual action controls. */\n  actionControls: ActionControl[];\n\n  /** Bulk action controls. */\n  bulkActionControls: BulkActionControl[];\n\n  /** Header action controls. */\n  headerActionControls?: HeaderActionControl[];\n}\n\n/** Describes a data grid column. */\nexport interface Column {\n  /** The name for the column. */\n  name: string | SpecialColumnName;\n  /** The column's header (if not given, `name` is used by default). */\n  header?: string;\n  /** The path in a row item to read the cell value from. */\n  path?: string;\n  /** Whether the column is displayed. */\n  visible?: boolean;\n  /** Whether the column can be moved to another position. */\n  positionFixed?: boolean;\n  /** Marks a user configured custom column */\n  custom?: boolean;\n  /** Whether the column can be resized. */\n  resizable?: boolean;\n  /** Optional type of data in the column (used to set data-type attribute, e.g. for additional styling). */\n  dataType?: ColumnDataType;\n  /** The column's size, e.g. \"40 px\". */\n  gridTrackSize?: string;\n  /** Additional CSS classes for the header cell. */\n  headerCSSClassName?: string | string[];\n  /** Additional CSS classes for data cells. */\n  cellCSSClassName?: string | string[];\n  /** Whether to translate the column's value (applies, if the default cell renderer component is used). */\n  translate?: boolean;\n\n  /** Whether the column is sortable. */\n  sortable?: boolean;\n  /** Whether the sort order is ascending, descending or not specified. */\n  sortOrder?: SortOrder;\n  sortingConfig?: ColumnSortingConfig;\n\n  /** Whether the column is filterable. */\n  filterable?: boolean;\n  /** The string to search for or a function for client-side filtering. */\n  filterPredicate?: string | FilterPredicateFunction;\n  /** Custom filtering form renderer can set any value here and it can be used to build a query to the server. */\n  externalFilterQuery?: any;\n  filteringConfig?: FormlyColumnFilteringConfig;\n  /** Custom data cell renderer component. Inject `CellRendererContext` to get access to data value, item and column object. */\n  cellRendererComponent?: Type<any>;\n  /** Custom header cell renderer component. Inject `CellRendererContext` to get access to header value and column object. */\n  headerCellRendererComponent?: Type<any>;\n  /** Custom filtering form renderer component. Inject `FilteringFormRendererContext` to get access to column object and methods: applyFilter, resetFilter. */\n  filteringFormRendererComponent?: Type<any>;\n}\n\n/** Describes a column configuration. */\nexport interface ColumnConfig {\n  /** The name for the column. */\n  name?: string;\n\n  /** Whether the column is displayed. */\n  visible?: boolean;\n\n  /** Whether the sort order is ascending, descending or not specified. */\n  sortOrder?: SortOrder;\n\n  /** The settings of filter in a column. */\n  filter?: Filter;\n}\n\n/** Custom column type. Either declared by an explicit path (legacy)\n *  or with the asset property library of DTM\n * */\nexport type CustomColumnType = 'legacy' | 'property' | 'default';\n\n/** Describes a custom column configuration. */\nexport interface CustomColumnConfig extends ColumnConfig {\n  /** JSON path to the managed object property to be displayed */\n  path: string;\n\n  /** Column header title */\n  header: string;\n\n  /** Flag to identify custom columns */\n  custom: boolean;\n\n  /** Column type of the custom column*/\n  type: CustomColumnType;\n}\n\n/** Describes the settings of filter in a column. */\nexport interface Filter {\n  /** Custom filtering form renderer can set any value here and it can be used to build a query to the server. */\n  externalFilterQuery?: any;\n  /** An optional property that holds a string to search for. */\n  filterPredicate?: string | FilterPredicateFunction;\n}\n\nexport type AssetColumnOperationType = 'maintenance' | 'operation';\n\nexport interface AssetTableExtendedColumn extends Column {\n  /** Configuration for displaying an icon in the cell. */\n  iconConfig?: Array<IconConfigItem>;\n  /** Whether the column is a link. */\n  isLink?: boolean;\n  /** The property to be executed as command */\n  command?: object | string;\n  /** Whether the column is an operation. */\n  isOperation?: boolean;\n  /** The operation type of the operation column */\n  operationType?: AssetColumnOperationType;\n  /** Configuration for computed column */\n  computedConfig?: ComputedConfig;\n  /** Whether to show both icon and value in the cell */\n  showIconAndValue?: boolean;\n  /** The type of the column */\n  type?: string;\n  /**\n   * origin needed to identify if the column comes from selectedProperties or operationColumns for the asset table\n   */\n  __origin?: string;\n  /** The unique identifier for the column used when ordering */\n  __id?: string;\n}\n\n/** Configuration for computed column */\nexport interface ComputedConfig {\n  dp: Array<any>;\n  resultType: number;\n  __propertyName?: string;\n}\n\n/** Comparison type for icon display in the cell. */\nexport interface IconConfigComparison {\n  label: string;\n  value: string;\n  sign: string;\n}\n\n/** Configuration for icon display in the cell. */\nexport interface IconConfigItem {\n  comparison: IconConfigComparison;\n  color: string;\n  icon: string;\n  value: string;\n}\n\n/** Describes an object with data grid configuration. */\nexport interface GridConfig {\n  /** The configuration objects for all the columns. */\n  columns: ColumnConfig[];\n\n  /** Pagination object. */\n  pagination: Pagination;\n}\n\n/**  */\nexport const enum SpecialColumnName {\n  /** Column with checkbox. */\n  Checkbox = 'checkbox',\n\n  /** Column with radio button. */\n  RadioButton = 'radio-button',\n\n  /** Column with row actions. */\n  Actions = 'actions'\n}\n\n/**  */\nexport const enum ColumnDataType {\n  /** Column with icon. */\n  Icon = 'icon',\n\n  /** Numeric column. */\n  Numeric = 'numeric',\n\n  /** Column with short text. */\n  TextShort = 'text-short',\n\n  /** Column with long text. */\n  TextLong = 'text-long'\n}\n\n/** Classes for column data record. */\nexport const enum ColumnDataRecordClassName {\n  /** An icon. */\n  Icon = 'data-record-icon',\n\n  /** A header. */\n  Header = 'data-record-header',\n\n  /** Default - empty. */\n  Default = ''\n}\n\nexport const minColumnGridTrackSize = 80;\n\n/** Maps column types to relative widths. */\nexport const ratiosByColumnTypes = {\n  /** The width ration for icon column type. */\n  icon: 1,\n\n  /** The width ration for numeric column type. */\n  numeric: 1,\n\n  /** The width ration for short text column type. */\n  'text-short': 1.67,\n\n  /** The width ration for long text column type. */\n  'text-long': 3.33\n};\n\n/** Sorting order: ascending, descending, or not specified. */\nexport type SortOrder = 'asc' | 'desc' | '';\n\n/**\n * A filter predicate function.\n * @param item The current item to be checked.\n * @param path The property path configured in the current column.\n * @returns The boolean value indicating whether the item matches a condition or not.\n */\nexport type FilterPredicateFunction = (item: object, path: string) => boolean;\n\n/** Filtering actions. */\nexport enum FilteringActionType {\n  /** Action invoked when filter settings are to be applied. */\n  ApplyFilter = 'APPLY_FILTER',\n\n  /** Action invoked when filter settings are to be cleared. */\n  ResetFilter = 'RESET_FILTER'\n}\n\nexport interface FormlyColumnFilteringConfig {\n  /** Defines a FieldConfig configuration for Formly.  */\n  fields?: FormlyFieldConfig[];\n  /** Defines a JSON schema for filtering config model. Can be used instead of `fields` */\n  schema?: object;\n  /** Defines a model that will be applied to rendered form. */\n  model?: object;\n  /** Defines FormGroup instance */\n  formGroup?: FormGroup;\n  /**\n   * Transforms a filtering config model to an array of partial filter chip objects.\n   * @param model An object with defined structure (e.g. by schema).\n   * @returns An array of partial filter chip objects, each containing at least `displayValue` and the actual `value` to be updated.\n   * Optionally, other properties from `FilterChip` are allowed, for example, a custom `remove` callback to be executed when a chip is being removed.\n   */\n  generateChips?: (model: any) => PartialFilterChipGenerationType[];\n  /**\n   * Transforms a filtering config model (e.g. coming from schema form component) to a query object.\n   * However, using schema form component is not necessary.\n   * Model can be defined arbitrarily but must converted to a valid query object.\n   * @param model An object with defined structure (e.g. by schema).\n   * @returns A query object to be used to generate a query string (QueryUtils).\n   */\n  getFilter: (model: any) => any;\n}\n\nexport interface ColumnSortingConfig {\n  pathSortingConfigs: PathSortingConfig[];\n}\n\nexport interface PathSortingConfig {\n  path: string;\n  sortOrderModifier?: SortOrderModifier;\n}\n\nexport const enum SortOrderModifier {\n  Keep,\n  Invert\n}\n\n/** Describes an item in the row. */\nexport interface Row {\n  /** The unique identifier of the item. */\n  id: string;\n\n  /** If the row has child nodes in a tree grid */\n  hasChildren?: boolean;\n\n  /**  The parent row in case of a tree grid */\n  parentRow?: Row;\n\n  /** Pagination stats for child elements */\n  childrenStats?: DataSourceStats;\n\n  /** Pagination settings for loading child rows */\n  pagination?: Pagination;\n\n  /** Any item property. */\n  [key: string]: any;\n}\n\n/** Describes a pagination object. */\nexport interface Pagination {\n  /** The number of the current page. */\n  currentPage?: number;\n\n  /** The number of the next page. */\n  nextPage?: number;\n\n  /** The number of items on a single page. */\n  pageSize: number;\n}\n\n/**\n * A callback function to fetch server data.\n * @param dataSourceModifier The current data source modifier.\n * @returns Returns the result from server.\n */\nexport type ServerSideDataCallback = (\n  dataSourceModifier: DataSourceModifier\n) => ServerSideDataResult | Promise<ServerSideDataResult> | Observable<ServerSideDataResult>;\n\n/** Describes a data source modifier for requesting server data. */\nexport interface DataSourceModifier {\n  /** The list of columns. */\n  columns: Column[];\n\n  /** Text to search. */\n  searchText: string;\n\n  /** Pagination object. */\n  pagination: Pagination;\n\n  /** Selection info object. */\n  selection: {\n    /** Whether the selection is enabled. */\n    enabled: boolean;\n\n    /** The name of the primary key. */\n    primaryKey: string;\n  };\n\n  /** The parent row in case of a tree grid */\n  parentRow?: Row;\n}\n\n/** Describes a result from server with data and additional statistics. */\nexport type ServerSideDataResult = IResultList<object> & {\n  /** The real grand total number of items (the whole dataset). */\n  size: number;\n\n  /** The number of items after filtering applied to the whole dataset (subset). */\n  filteredSize: number;\n\n  /** The list of ids of all filtered items (subset). */\n  filteredDataIds?: string[];\n\n  /** The row to which the results has to be assigned as child rows */\n  parentRow?: Row;\n};\n\n/** Describes an object with data source statistics. */\nexport interface DataSourceStats {\n  /** The real grand total number of items (the whole dataset). */\n  size: number;\n\n  /** The number of items after filtering applied to the whole dataset (subset). */\n  filteredSize: number;\n\n  /** The number of the current page. */\n  currentPage: number;\n\n  /** The number of the next page. */\n  nextPage?: number;\n\n  /** The number of items currently shown in the list view, a.k.a. current page (what the user sees on screen). */\n  currentPageSize: number;\n\n  /** The number of items on the first page.  */\n  firstPageSize: number;\n}\n\n/** Describes data grid display options. */\nexport interface DisplayOptions {\n  /** Show or hide zebra-striping in the table */\n  striped: boolean;\n\n  /** Show or hide each cell border */\n  bordered: boolean;\n\n  /** Show or hide the grid header */\n  gridHeader: boolean;\n\n  /** Show or hide filter label in the grid header */\n  filter: boolean;\n\n  /** Enable to display a background color on hover */\n  hover: boolean;\n\n  /** Show or hide the loading indicator */\n  showLoadingIndicator?: boolean;\n}\n\n/** Describes a data grid action control for individual item. */\nexport interface ActionControl {\n  /** The type of the action, predefined or custom. */\n  type: BuiltInActionType | string;\n\n  /** The label for the action button. */\n  text?: string;\n\n  /** The icon for the action button. */\n  icon?: SupportedIconsSuggestions;\n\n  /** The icon classes for the action button icon. */\n  iconClasses?: string;\n\n  /** Action icon will be visible on hover only */\n  showOnHover?: boolean;\n\n  /**\n   * A callback function.\n   * @param item The item to perform the action on.\n   * @param reload The function to call, if you want to reload the grid.\n   */\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  callback: ((item: Row, reload: () => void) => void) | Function;\n\n  /**\n   * Determines if the action should be shown for given item (if not defined, the action will be shown always).\n   * @param item The item for which the action is supposed to be performed.\n   */\n  // eslint-disable-next-line @typescript-eslint/ban-types\n  showIf?: ((item: Row & string[]) => boolean | Promise<boolean> | Observable<boolean>) | Function;\n\n  /**\n   * Defines the order in which action controls appear. Higher value means earlier position.\n   * Controls without priority are handled with priority = 0. If you want to place an action after\n   * an action without priority, negative numbers can be used.\n   */\n  priority?: number;\n\n  [key: string]: any;\n}\n\n/** Describes a data grid action control for multiple items. */\nexport interface BulkActionControl extends ActionControl {\n  /**\n   * A callback function.\n   * @param selectedItemIds The list of ids of the selected items.\n   * @param reload The function to call, if you want to reload the grid.\n   */\n  callback(selectedItemIds: string[], reload: () => void): void;\n\n  /**\n   * Determines if the action should be shown for given selected items (if not defined, the action will be shown always).\n   * @param selectedItemIds The list of ids of the selected items for which the action is supposed to be performed.\n   */\n  showIf?(selectedItemIds: string[]): boolean;\n}\n\n/** Describes a data grid action control for the header. */\nexport interface HeaderActionControl extends ActionControl {\n  /**\n   * Custom template can be provided. If no template is provided,\n   * the default headerActionControl template is used.\n   */\n  template?: TemplateRef<any>;\n\n  /**\n   * A callback function.\n   */\n  callback(): void;\n\n  /**\n   * Determines if the action should be shown.\n   */\n  showIf?(): boolean;\n}\n\n/** Predefined types of actions. */\nexport enum BuiltInActionType {\n  /** Edit built-in action. */\n  Edit = 'EDIT',\n\n  /** Delete built-in action. */\n  Delete = 'DELETE',\n\n  /** Export built-in action. */\n  Export = 'EXPORT'\n}\n\n/**\n * Allows to attach action controls to specified grids.\n */\nexport interface ActionControlHook {\n  /**\n   * The action control(s) that will be attached to the grid.\n   */\n  actionControls: ActionControl | ActionControl[];\n  /**\n   * A functions that determines to which grid(s) the action control(s) will be attached.\n   * Not providing a function results in the actions control(s) not being attached to any grid.\n   */\n  matchesGrid: (\n    route: ActivatedRoute,\n    context?: GridConfigContext\n  ) => boolean | Promise<boolean> | Observable<boolean>;\n}\n\n/**\n * Factory to implement in order to add action controls from an extension.\n */\nexport type ActionControlFactory = ExtensionFactory<ActionControlHook>;\n\n/**\n * Defines an interface for a filter chip object, which represents a filter applied to a column.\n */\nexport interface FilterChip {\n  /**\n   * The actual value that the chip will hold.\n   * It can be just a string or a more complex object like\n   * {id: 123, name: Test, value: test}.\n   */\n  value: any;\n\n  /**\n   * The value that the chip will display in the dropdown.\n   */\n  displayValue: string;\n\n  /**\n   * Optional label that will be displayed if filter chips are separated into multiple groups.\n   */\n  label?: string;\n\n  /** An optional property that holds the path to the chip value in the externalFilterQuery. */\n  path?: string[];\n\n  /**\n   * An optional property that holds the form value taken from the column configuration.\n   */\n  externalFilterQuery?: any;\n\n  /**\n   * An optional property that holds the formly filtering configuration for the column that this filter is applied to.\n   */\n  filteringConfig?: FormlyColumnFilteringConfig;\n\n  /** An optional property that holds a string to search for. */\n  filterPredicate?: string;\n\n  /**\n   * The name of the column that this filter is applied to.\n   */\n  columnName: string | SpecialColumnName;\n\n  /**\n   * An optional function to remove this filter from the column.\n   * If not provided will set default removal function that will reduce the external query by removing the object that is resolved by the path set in the FilterChip.\n   * @returns An object defined by the `FilterChip` type, including the `columnName` and  updated `externalFilterQuery` or 'filterPredicate' properties.\n   * The returned object may also include additional properties defined by the `FilterChip` type as partials.\n   */\n  remove?: () => PartialFilterChipRemovalType;\n}\n\n/**\n * Represents a partial filter chip with either 'columnName' and 'externalFilterQuery' or 'columnName' and 'filterPredicate'.\n * @typedef {Object} PartialFilterChipRemovalType\n * @property {string} columnName - The column name for the filter chip.\n * @property {any} [externalFilterQuery] - The external filter query for the chip used for complex filters.\n * @property {any} [filterPredicate] - The filtering predicate for the chip used for simple filters with client-side filtering.\n * @property {...FilterChip} [optionalProperties] - Optional properties from the FilterChip type.\n */\nexport type PartialFilterChipRemovalType = (\n  | Required<Pick<FilterChip, 'columnName' | 'externalFilterQuery'>>\n  | Required<Pick<FilterChip, 'columnName' | 'filterPredicate'>>\n) &\n  Partial<FilterChip>;\n\n/**\n * Represents a partial filter chip with required properties 'displayValue' and 'value'.\n * @typedef {Object} PartialFilterChipGenerationType\n * @property {string} displayValue - The display value for the filter chip.\n * @property {any} value - The value for the filter chip.\n * @property {...FilterChip} [optionalProperties] - Optional properties from the FilterChip type.\n */\nexport type PartialFilterChipGenerationType = Required<Pick<FilterChip, 'displayValue' | 'value'>> &\n  Partial<FilterChip>;\n\n/**\n * Defines an interface for a mapper function that maps a `FormlyFieldConfig` to a `FilterChip`.\n */\nexport interface FilterMapper {\n  /**\n   * The type or types of the `FormlyFieldConfig` that this mapper applies to.\n   */\n  fieldType: string[] | string;\n\n  /**\n   * Maps a `FormlyFieldConfig` and a `FilterChip` to an `Observable` of a `FilterChip`.\n   *\n   * This function extends the provided `FilterChip` object with additional properties based on the information in the `FormlyFieldConfig`.\n   * The mapping process depends on the specific implementation of the `FilterMapper`.\n   *\n   * @param field - The `FormlyFieldConfig` to map.\n   * @param filter - The `FilterChip` to map.\n   * @returns An `Observable` that emits the mapped `FilterChip`.\n   * If undefined is returned an error is thrown and the chip is not visualized.\n   *\n   * ```typescript\n   * // Example implementation of `map` function in a `FilterMapper`\n   * map(field: FormlyFieldConfig, filter: FilterChip): Observable<FilterChip> {\n   *   if (this.fieldType.includes(field.type.toString())) {\n   *     return toObservable(field.templateOptions.options).pipe(\n   *       map(options => {\n   *         const object = options.find(option => option.value === get(filter.externalFilterQuery, filter.path));\n   *         return {\n   *           ...filter,\n   *           value: object,\n   *           displayValue: object?.label\n   *         };\n   *       })\n   *     );\n   *   }\n   * }\n   * ```\n   */\n  map: (field: FormlyFieldConfig, filter: FilterChip) => Observable<FilterChip>;\n}\n","import { Injectable } from '@angular/core';\nimport { QueriesUtil } from '@c8y/client';\nimport { assign, forEach, get, identity, transform } from 'lodash-es';\nimport { from, isObservable, Observable, of } from 'rxjs';\nimport { map, share, take, withLatestFrom } from 'rxjs/operators';\nimport { UserPreferencesService } from '../common/user-preferences/user-preferences.service';\nimport { CustomColumn } from './column/custom.column';\nimport { Column, CustomColumnConfig, GridConfig } from './data-grid.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DataGridService {\n  protected DEFAULT_PAGE_SIZE = 20;\n\n  protected queriesUtil: QueriesUtil;\n\n  constructor(protected userPreferencesService: UserPreferencesService) {\n    this.queriesUtil = new QueriesUtil();\n  }\n\n  clearConfig(key: string) {\n    localStorage.removeItem(key);\n  }\n\n  getConfig$(key: string): Observable<GridConfig> {\n    return this.userPreferencesService.get(key).pipe(\n      map(\n        config =>\n          config || {\n            columns: [],\n            pagination: { pageSize: this.DEFAULT_PAGE_SIZE, currentPage: 1 }\n          }\n      )\n    );\n  }\n\n  saveConfig$(config: GridConfig, key: string): Observable<GridConfig> {\n    return from(this.userPreferencesService.set(key, config));\n  }\n\n  getUserConfiguredColumns$(columns: Column[] | Observable<Column[]>, storageKey?: string) {\n    return this.getConfig$(storageKey).pipe(\n      withLatestFrom(\n        isObservable(columns) ? columns : (of(columns) as unknown as Observable<Column[]>)\n      ),\n      map(([config, cols]) => this.applyConfigToColumns(config, cols, storageKey)),\n      take(1),\n      share()\n    );\n  }\n\n  getQueryObj(columns: Column[], defaultFilter = {}): any {\n    return transform(columns, (query, column) => this.extendQueryByColumn(query, column), {\n      __filter: {},\n      __orderby: [],\n      ...defaultFilter\n    });\n  }\n\n  applyConfigToColumns(config: GridConfig, columns: Column[], storageKey?: string): Column[] {\n    if (config?.columns?.length > 0) {\n      const reOrderedColumns = [];\n      let noConfigColumns = [];\n      try {\n        const customColumns = config.columns\n          .filter(col => (col as CustomColumnConfig).custom)\n          .map((col: CustomColumnConfig) => new CustomColumn(col));\n\n        // Avoid config properties to be applied to the original column object by creating shallow copy of columns\n        const allColumns = [...columns.map(col => ({ ...col })), ...customColumns];\n\n        noConfigColumns = allColumns.filter(\n          col => !config.columns.some(configCol => col.name === configCol.name)\n        );\n        config.columns.forEach(({ visible, name, sortOrder, filter }) => {\n          const columnToReorder = allColumns.find(col => col.name === name);\n          if (columnToReorder) {\n            columnToReorder.visible = visible;\n            columnToReorder.sortOrder = sortOrder;\n            columnToReorder.externalFilterQuery =\n              columnToReorder.externalFilterQuery ?? filter?.externalFilterQuery;\n            columnToReorder.filterPredicate =\n              columnToReorder.filterPredicate ?? filter?.filterPredicate;\n            reOrderedColumns.push(columnToReorder);\n          }\n        });\n      } catch (ex) {\n        this.clearConfig(storageKey);\n      }\n      return [...reOrderedColumns, ...noConfigColumns];\n    }\n    return columns;\n  }\n\n  private extendQueryByColumn(query: any, column: Column): void {\n    if (column.filterable && column.externalFilterQuery) {\n      const getFilter = column.filteringConfig.getFilter || identity;\n      const queryObj = getFilter(column.externalFilterQuery);\n\n      if (queryObj.__or) {\n        query.__filter.__and = query.__filter.__and || [];\n        query.__filter.__and.push(queryObj);\n      } else if (queryObj.__and && get(query, '__filter.__and')) {\n        queryObj.__and.map(obj => query.__filter.__and.push(obj));\n      } else {\n        assign(query.__filter, queryObj);\n      }\n    }\n\n    if (column.sortable && column.sortOrder) {\n      const cs = {};\n      forEach(column.sortingConfig.pathSortingConfigs, pathSortingConfig => {\n        cs[pathSortingConfig.path] =\n          (column.sortOrder === 'asc' ? 1 : -1) * (pathSortingConfig.sortOrderModifier || 1);\n      });\n      query.__orderby.push(cs);\n    }\n    return query;\n  }\n}\n","import { Directive, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n  selector: '[c8yExpandableRow]',\n  standalone: true\n})\nexport class ExpandableRowDirective {\n  constructor(\n    public template: TemplateRef<unknown>,\n    public elementRef: ElementRef,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n","import { Inject, Injectable, InjectionToken, Optional, Type } from '@angular/core';\nimport { FieldType } from '@ngx-formly/core';\nimport { castArray } from 'lodash-es';\nimport {\n  ExtensionFactory,\n  hookGeneric,\n  GenericHookOptions,\n  HookValueType\n} from '../../common/extension-hooks';\nimport { FilterMapper } from '../data-grid.model';\n\nconst HOOK_FILTER_MAPPER = new InjectionToken<FilterMapperExtension>('HOOK_FILTER_MAPPER');\n\n/**\n * An extension HOOK can use either a pure value:\n * ```typescript\n *  { provide: HOOK_X, useValue: { ...hookValue }, multi: true }\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  { provide: HOOK_X, useValue: [{ ...hookValues }], multi: true }\n * ```\n *\n *  * Or a class to register:\n * ```typescript\n *  { provide: HOOK_X, useExisting: BooleanFilterMapper, multi: true }\n * ```\n *\n * Or an ExtensionFactory {@link ExtensionFactory}:\n * ```typescript\n *  { provide: HOOK_X, useFactory: (route) => doSomethingAsync(route), multi: true }\n * ```\n */\nexport type FilterMapperExtension = FilterMapper | FilterMapper[] | ExtensionFactory<FilterMapper>;\n\n/**\n * You can either provide a single `FilterMapper` as parameter:\n * ```typescript\n *  hookFilterMapper(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookFilterMapper([...])\n * ```\n *\n * Or you provide an Service that implements `FilterMapper`\n * ```typescript\n *  export class MyFilterMapper implements FilterMapper {...}\n *  ...\n *  hookFilterMapper(MyFilterMapper)\n * ```\n * A typed alternative to using `HOOK_FILTER_MAPPER`.\n * @param mapper A filter mapper, e.g. `BooleanFilterMapper`, or `ExtensionFactory` to be provided.\n * @param options If this is a multi provider or not (defaults to true) and provider type definition (defaults to ClassProvider) - `HookOptions`.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookFilterMapper(\n  mapper: HookValueType<FilterMapper>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<FilterMapper>(mapper, HOOK_FILTER_MAPPER, options);\n}\n@Injectable({ providedIn: 'root' })\nexport class FilterMapperFactory {\n  map: object;\n  constructor(\n    @Optional()\n    @Inject(HOOK_FILTER_MAPPER)\n    fieldMappers: Array<FilterMapper>\n  ) {\n    this.map = {};\n\n    fieldMappers.forEach(fieldMapper => {\n      castArray(fieldMapper.fieldType).forEach(type => {\n        this.map[type] = fieldMapper;\n      });\n    });\n  }\n\n  get(type: string | Type<FieldType>): FilterMapper {\n    if (type === undefined || type === null) {\n      throw new Error('Invalid input: type is undefined or null');\n    }\n    if (typeof type !== 'string' && typeof type !== 'function') {\n      throw new Error(\n        `Invalid input: type must be a string or a Type<FieldType>, but received ${typeof type}`\n      );\n    }\n    const typeName = typeof type === 'string' ? type : type.name;\n    const mapper = this.map[typeName];\n    if (!mapper) {\n      throw new Error(`Could not find FilterMapper for type ${typeName}`);\n    }\n    return mapper;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { flatten, get, unset } from 'lodash-es';\nimport { combineLatest, from, Observable, of } from 'rxjs';\nimport { map, reduce, switchMap } from 'rxjs/operators';\n\nimport { AlertService } from '../../alert/alert.service';\nimport { C8yJSONSchema } from '../../dynamic-forms/json-schema/c8y-json-schema.service';\nimport { FilterChip, PartialFilterChipRemovalType } from '../data-grid.model';\nimport { FilterMapperFactory } from './filter-mapper.factory';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FilterMapperService {\n  constructor(\n    private alert: AlertService,\n    private jsonschema: C8yJSONSchema,\n    private filterMapperFactory: FilterMapperFactory\n  ) {}\n\n  getMappedFilterValues(filter: FilterChip): Observable<FilterChip[]> {\n    return of(filter).pipe(\n      switchMap(filter => {\n        const { schema, fields, generateChips } = filter.filteringConfig || {};\n        const { externalFilterQuery } = filter;\n\n        if (schema || fields) {\n          // Will return the extracted filterChip items from the formly fields definition.\n          const mappedFields = schema ? [this.jsonschema.toFieldConfig(schema)] : fields;\n          return this.mapFieldsToFilter(filter, mappedFields);\n        }\n\n        if (generateChips) {\n          // Will return the extracted filterChip items from the custom generatedChips\n          // function defined in the columns filteringConfig.\n          const generatedChips = generateChips(externalFilterQuery);\n          const mappedChips = generatedChips.map(chip => ({ ...filter, ...chip }));\n          return of(mappedChips);\n        }\n\n        if (externalFilterQuery?.chips) {\n          // If no schema or custom chips generation function is provided user can put already generated\n          // chips in the externalFilterQuery as it is seen in the server example tutorial grid.\n          const chips = externalFilterQuery.chips || [];\n          const mappedChips = chips.map(chip => ({ ...filter, ...chip }));\n          return of(mappedChips);\n        }\n\n        return of([]);\n      })\n    );\n  }\n\n  mapFieldsToFilter(\n    filterChip: FilterChip,\n    formlyFields: FormlyFieldConfig[],\n    path: string[] = [],\n    result: Observable<FilterChip[]> = of([])\n  ): Observable<FilterChip[]> {\n    return result.pipe(\n      switchMap(resultChips => {\n        return from(formlyFields).pipe(\n          switchMap(field => this.processField(filterChip, field, path, resultChips)),\n          reduce(\n            (resultChips, newChips) => [...new Set([...newChips, ...resultChips])] as FilterChip[]\n          )\n        );\n      })\n    );\n  }\n\n  processField(\n    filterChip: FilterChip,\n    field: FormlyFieldConfig,\n    path: string[],\n    resultChips: FilterChip[]\n  ): Observable<FilterChip[]> {\n    const currentPath = [...path];\n\n    if (field.key) {\n      currentPath.push(field.key as string);\n    }\n\n    if (field.fieldGroup) {\n      const chip = field.props?.label ? { ...filterChip, label: field.props.label } : filterChip;\n      return this.mapFieldsToFilter(chip, field.fieldGroup, currentPath);\n    }\n\n    if (field.fieldArray) {\n      const fieldsArray = get(filterChip.externalFilterQuery, currentPath);\n\n      const filters = fieldsArray.map((el, index) => {\n        filterChip.path = currentPath;\n        return this.mapFieldsToFilter(\n          filterChip,\n          [field.fieldArray as FormlyFieldConfig],\n          [...currentPath, index]\n        );\n      });\n\n      return combineLatest(filters).pipe(map(result => flatten(result)));\n    }\n\n    filterChip.path = currentPath;\n    if (get(filterChip.externalFilterQuery, currentPath)) {\n      return this.getChipFromFactory(resultChips, field, filterChip);\n    }\n\n    return of([]);\n  }\n\n  getChipFromFactory(\n    resultChips: FilterChip[],\n    field: FormlyFieldConfig,\n    filterChip: FilterChip\n  ): Observable<FilterChip[]> {\n    try {\n      const filterMapper = this.filterMapperFactory.get(field.type);\n      return filterMapper\n        .map(field, filterChip)\n        .pipe(\n          map(mappedChip => (mappedChip.displayValue ? [...resultChips, mappedChip] : resultChips))\n        );\n    } catch (error) {\n      this.alert.danger(error);\n      return of([]);\n    }\n  }\n\n  removeChip(chip): PartialFilterChipRemovalType {\n    const { path, externalFilterQuery } = chip;\n\n    const lastKey = path[path.length - 1];\n    const parentObj = path\n      .slice(0, -1)\n      .reduce((nestedObj, key) => nestedObj[key], externalFilterQuery);\n\n    if (Array.isArray(parentObj)) {\n      parentObj.splice(lastKey, 1);\n    } else {\n      unset(parentObj, lastKey);\n    }\n\n    return {\n      externalFilterQuery,\n      columnName: chip.columnName\n    };\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { Column, FilterChip } from '../data-grid.model';\nimport { FilterMapperService } from './filter-mapper.service';\n\n@Pipe({\n  name: 'mapToFilterChips',\n  standalone: true\n})\nexport class FilterMapperPipe implements PipeTransform {\n  constructor(private filterMapperService: FilterMapperService) {}\n\n  transform(column: Column): Observable<FilterChip[]> {\n    const filterMapperService = this.filterMapperService;\n\n    const filterObject: FilterChip = {\n      value: '',\n      displayValue: '',\n      path: [],\n      externalFilterQuery: column.externalFilterQuery,\n      filteringConfig: column.filteringConfig,\n      columnName: column.name,\n      remove() {\n        return filterMapperService.removeChip(this);\n      }\n    };\n\n    if (column.filterPredicate && typeof column.filterPredicate === 'string') {\n      const chip: FilterChip = {\n        value: column.filterPredicate,\n        displayValue: column.filterPredicate,\n        filterPredicate: column.filterPredicate,\n        columnName: column.name,\n        remove() {\n          return {\n            columnName: this.columnName,\n            filterPredicate: this.filterPredicate\n          };\n        }\n      };\n      return of([chip]);\n    }\n\n    return filterMapperService.getMappedFilterValues(filterObject);\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { groupBy } from 'lodash-es';\nimport { FilterChip } from '../data-grid.model';\n\n@Pipe({\n  name: 'groupedFilterChips',\n  standalone: true\n})\nexport class GroupedFilterChips implements PipeTransform {\n  transform(chips: FilterChip[]): { label: string | undefined; chips: FilterChip[] }[] {\n    const groupedChips = groupBy(chips, 'label');\n\n    const result = Object.entries(groupedChips).map(([label, chips]) => ({\n      label: label === 'undefined' ? undefined : label,\n      chips: chips as FilterChip[]\n    }));\n\n    return result.reverse();\n  }\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { IResultList } from '@c8y/client';\nimport { chunk, findIndex, flow, get, isNil, mapValues, omitBy, orderBy } from 'lodash-es';\nimport { BehaviorSubject, defer, Observable, of, Subject } from 'rxjs';\nimport { catchError, finalize, map, switchMap, tap } from 'rxjs/operators';\nimport { toObservable } from '../common/extension-hooks';\nimport { Column, DataSourceStats, Row, ServerSideDataResult } from './data-grid.model';\n\nexport class GridDataSource implements DataSource<object> {\n  loading$: Observable<boolean>;\n  data$: Observable<object[]>;\n  stats$: Observable<DataSourceStats>;\n  selection$: Observable<any>;\n  resultList$: Observable<IResultList<object>>;\n  nodesLoading$: Observable<Row[]>;\n  set childNodesProperty(name: string) {\n    this.childNodesPropertyName = name ?? 'childNodes';\n  }\n\n  private loadingSubject = new BehaviorSubject<boolean>(true);\n  private dataSourceSubject = new BehaviorSubject<object[]>([]);\n  private dataStatsSubject = new BehaviorSubject<DataSourceStats>({\n    size: 0,\n    filteredSize: 0,\n    currentPage: 0,\n    currentPageSize: 0,\n    firstPageSize: 0\n  });\n  private dataSelectionSubject = new BehaviorSubject<any>({\n    filteredDataIds: []\n  });\n  private resultListSubject = new Subject<IResultList<object>>();\n  private nodesLoadingSubject = new BehaviorSubject<Row[]>([]);\n  private childNodesPropertyName = 'childNodes';\n\n  constructor() {\n    this.loading$ = this.loadingSubject.asObservable();\n    this.data$ = this.dataSourceSubject.asObservable();\n    this.stats$ = this.dataStatsSubject.asObservable();\n    this.selection$ = this.dataSelectionSubject.asObservable();\n    this.resultList$ = this.resultListSubject.asObservable();\n    this.nodesLoading$ = this.nodesLoadingSubject.asObservable();\n  }\n\n  connect(_collectionViewer: CollectionViewer): Observable<object[]> {\n    return this.data$;\n  }\n\n  disconnect(_collectionViewer: CollectionViewer): void {\n    this.loadingSubject.complete();\n    this.dataSourceSubject.complete();\n    this.dataStatsSubject.complete();\n    this.dataSelectionSubject.complete();\n    this.resultListSubject.complete();\n  }\n\n  loadData({\n    rows,\n    columns,\n    pagination,\n    searchText,\n    serverSideDataCallback,\n    selectable,\n    selectionPrimaryKey,\n    infiniteScroll,\n    reload = false,\n    parentRow = null\n  }) {\n    const clientSideData$ = toObservable(rows).pipe(\n      map(initialData => {\n        if (!!parentRow) {\n          return parentRow[this.childNodesPropertyName] || [];\n        }\n        return initialData;\n      }),\n      map(initialData => {\n        let filteredSize = 0;\n        let filteredDataIds = [];\n\n        const transformedData = flow(\n          data => this.doClientSideSearch({ data, columns, searchText }),\n          data => this.doClientSideFiltering({ data, columns }),\n          data => this.doClientSideSorting({ data, columns }),\n          data => {\n            filteredSize = data.length;\n            filteredDataIds = selectable\n              ? data.map(item => item[selectionPrimaryKey])\n              : filteredDataIds;\n\n            return data;\n          },\n          data => this.doClientSidePagination({ data, pagination })\n        )(initialData);\n\n        if (!parentRow) {\n          this.dataStatsSubject.next({\n            size: initialData.length,\n            filteredSize,\n            currentPage: pagination.currentPage,\n            currentPageSize: transformedData.length,\n            firstPageSize: pagination.pageSize\n          });\n        }\n\n        this.dataSelectionSubject.next({ filteredDataIds });\n\n        return transformedData;\n      })\n    );\n\n    const serverSideData$ = defer(() =>\n      toObservable(\n        serverSideDataCallback({\n          columns,\n          searchText,\n          pagination,\n          selection: { enabled: selectable, primaryKey: selectionPrimaryKey },\n          parentRow\n        })\n      )\n    ).pipe(\n      map((result: ServerSideDataResult) => {\n        const { data, paging, size, filteredSize, filteredDataIds } = result;\n        if (!parentRow) {\n          this.dataStatsSubject.next({\n            size,\n            filteredSize,\n            currentPage: paging.currentPage,\n            currentPageSize: data.length,\n            nextPage: paging.nextPage,\n            firstPageSize: paging.pageSize\n          });\n        } else {\n          /* Add additional row to be rendered as pagination row containing statistics data */\n          const childrenStats = {\n            size,\n            filteredSize,\n            currentPage: paging.currentPage,\n            currentPageSize: data.length,\n            nextPage: paging.nextPage,\n            firstPageSize: paging.pageSize\n          };\n          data.push({\n            /* θpagination is an internal flag for pagination rows */\n            θpagination: true,\n            childrenStats,\n            parentRow\n          });\n        }\n        this.dataSelectionSubject.next({ filteredDataIds: filteredDataIds || [] });\n        this.resultListSubject.next(result);\n\n        return data;\n      })\n    );\n\n    const data$ = typeof serverSideDataCallback === 'function' ? serverSideData$ : clientSideData$;\n\n    of([])\n      .pipe(\n        tap(() => this.emitLoadingStart(parentRow)),\n        switchMap(() => data$),\n        catchError(() => {\n          this.dataStatsSubject.next({\n            size: 0,\n            filteredSize: 0,\n            currentPage: 0,\n            currentPageSize: 0,\n            firstPageSize: 0\n          });\n          this.dataSelectionSubject.next({ filteredDataIds: [] });\n          return of([]);\n        }),\n        finalize(() => this.emitLoadingEnd(parentRow))\n      )\n      .subscribe(result => {\n        let data;\n        if (parentRow) {\n          result.forEach(item => {\n            item.parentRow = parentRow;\n            item.level = (parentRow?.level ?? 0) + 1;\n          });\n          data = this.dataSourceSubject.value;\n          /* Replace child rows with next page data when paginating */\n          const parentRowIndex = data.indexOf(parentRow);\n          const paginationRowIndex = findIndex(\n            data,\n            r => r.θpagination && r.parentRow === parentRow\n          );\n          const numberOfRowsToRemove =\n            paginationRowIndex > -1 ? paginationRowIndex - parentRowIndex : 0;\n          data.splice(parentRowIndex + 1, numberOfRowsToRemove, ...result);\n        } else {\n          data = infiniteScroll && !reload ? [...this.dataSourceSubject.value, ...result] : result;\n        }\n        this.dataSourceSubject.next(data);\n      });\n  }\n\n  collapseNode(row: Row) {\n    const data = this.dataSourceSubject.value.filter((item: Row) => !this.isParent(item, row));\n    this.dataSourceSubject.next(data);\n  }\n\n  resolveValue(x, path) {\n    return get(x, path);\n  }\n\n  resolveFunction(x) {\n    return typeof x === 'function' ? x() : x;\n  }\n\n  normalizeNil(x) {\n    return isNil(x) ? '' : x;\n  }\n\n  private getLevel(row: Row): number {\n    return !!row.parentRow ? this.getLevel(row.parentRow) + 1 : 0;\n  }\n\n  private emitLoadingStart(parentRow?: Row) {\n    if (parentRow) {\n      this.nodesLoadingSubject.next([...this.nodesLoadingSubject.value, parentRow]);\n    } else {\n      this.loadingSubject.next(true);\n    }\n  }\n\n  private emitLoadingEnd(parentRow?: Row) {\n    if (parentRow) {\n      this.nodesLoadingSubject.next(\n        this.nodesLoadingSubject.value.filter(item => item !== parentRow)\n      );\n    } else {\n      this.loadingSubject.next(false);\n    }\n  }\n\n  private doClientSideFiltering({ data, columns }) {\n    return columns.reduce((result, column) => {\n      const { filterPredicate } = column;\n\n      if (typeof filterPredicate === 'string') {\n        return this.doClientSideSearch({\n          data: result,\n          columns: [column],\n          searchText: filterPredicate\n        });\n      }\n\n      if (typeof filterPredicate === 'function') {\n        return result.filter(item => filterPredicate(item, column.path));\n      }\n\n      return result;\n    }, data);\n  }\n\n  private doClientSideSearch({ data, columns, searchText }) {\n    const propPaths = columns.map(({ path }) => path).filter(column => !isNil(column));\n\n    const regexSearch = this.createRegexSearch(searchText);\n\n    return data.filter(item => {\n      const itemWithResolvedValues = flow(\n        x => propPaths.map(propPath => get(x, propPath)),\n        x => mapValues(x, this.resolveFunction),\n        x => omitBy(x, isNil)\n      )(item);\n\n      const cellValues = Object.values(itemWithResolvedValues);\n\n      return cellValues.some(cellValue => regexSearch.test(cellValue.toString()));\n    });\n  }\n\n  private doClientSideSorting({ data, columns }) {\n    const actives: Column[] = columns.filter(({ sortOrder }: Column) => !!sortOrder);\n\n    const sortingState = {\n      iteratees: actives.map(({ path }) => path).map(path => item => get(item, path) ?? ''),\n      orders: actives.map(({ sortOrder }) => sortOrder)\n    };\n\n    return orderBy(data, sortingState.iteratees, sortingState.orders);\n  }\n\n  private doClientSidePagination({ data, pagination }) {\n    return pagination\n      ? get(chunk(data, pagination.pageSize), pagination.currentPage - 1, [])\n      : data;\n  }\n\n  private createRegexSearch(filterValue) {\n    return RegExp(escapeRegExpPattern(filterValue), 'i');\n  }\n\n  private isParent(row: Row, parentRow: Row): boolean {\n    return (\n      !!row?.parentRow &&\n      (row.parentRow.id === parentRow.id || this.isParent(row.parentRow, parentRow))\n    );\n  }\n}\n\n/**\n *\n * @param string pattern Regex pattern.\n * @return string The escaped regex.\n * @see https://stackoverflow.com/a/3561711/2013891\n */\nfunction escapeRegExpPattern(pattern = '') {\n  return pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","export const PX_EVENT_NAME = 'dataGrid';\n\nexport const PX_ACTIONS = {\n  APPLY_FILTER: 'applyFilter',\n  RESET_FILTER: 'resetFilter',\n  REMOVE_FILTER: 'removeFilter',\n  CLEAR_FILTER: 'clearFilter',\n  CUSTOM_ACTION: 'cutomAction:',\n\n  ADD_CUSTOM_COLUMN: 'addCustomColumn',\n  REMOVE_CUSTOM_COLUMN: 'removeCustomColumn',\n  REORDER_COLUMNS: 'reorderColumns',\n  CHANGE_VISIBILITY: 'changeVisibility',\n  CHANGE_SORTING_ORDER: 'changeSortingOrder',\n  CHANGE_PAGINATION: 'changePagination',\n\n  SELECT_ALL_ITEMS: 'bulk:selectAllItems',\n  BULK_DELETE: 'bulk:delete',\n  BULK_EXPORT: 'bulk:export',\n  BULK_CUSTOM_ACTION: 'bulk:customAction:',\n  BULK_CANCEL: 'bulk:cancel',\n\n  SELECT_ITEM: 'item:select',\n  EDIT_ITEM: 'item:edit',\n  DELETE_ITEM: 'item:delete',\n  EXPORT_ITEM: 'item:export',\n  CUSTOM_ACTION_ITEM: 'item:customAction:',\n\n  RELOAD: 'reload',\n  SEARCH: 'search',\n  CLEAR_SEARCH: 'clearSearch'\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { groupBy, values } from 'lodash-es';\nimport { defer, forkJoin, map, mergeMap, Observable, of } from 'rxjs';\nimport { toObservable } from '../common/extension-hooks';\nimport { ActionControl, Row } from './data-grid.model';\n\n@Pipe({\n  name: 'visibleControls',\n  standalone: true\n})\nexport class VisibleControlsPipe implements PipeTransform {\n  transform(actionControls: ActionControl[], arg?: Row & string[]): Observable<ActionControl[]> {\n    return defer(() => of(actionControls ?? [])).pipe(\n      mergeMap(controls =>\n        forkJoin(\n          controls.map(control =>\n            toObservable(!control.showIf || control.showIf(arg)).pipe(\n              map(visible => ({ control, visible }))\n            )\n          )\n        ).pipe(\n          map(evaluatedControls => evaluatedControls.filter(ec => ec.visible).map(ec => ec.control))\n        )\n      ),\n      map(visible =>\n        values(groupBy(visible, 'type'))\n          .map((actionControls: ActionControl[]) => {\n            if (actionControls?.length === 1) {\n              return actionControls[0];\n            } else {\n              return (actionControls || [])\n                .sort(this.sortByPriority)\n                .find(actionControl => !!actionControl.showIf);\n            }\n          })\n          .sort(this.sortByPriority)\n      )\n    );\n  }\n\n  private sortByPriority(a: ActionControl, b: ActionControl): number {\n    return (b?.priority ?? 0) - (a?.priority ?? 0);\n  }\n}\n","import { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';\nimport {\n  CdkCell,\n  CdkCellDef,\n  CdkColumnDef,\n  CdkFooterCell,\n  CdkFooterCellDef,\n  CdkFooterRow,\n  CdkFooterRowDef,\n  CdkHeaderCell,\n  CdkHeaderCellDef,\n  CdkHeaderRow,\n  CdkHeaderRowDef,\n  CdkRow,\n  CdkRowDef,\n  CdkTable\n} from '@angular/cdk/table';\nimport {\n  AsyncPipe,\n  NgClass,\n  NgPlural,\n  NgPluralCase,\n  NgTemplateOutlet,\n  SlicePipe\n} from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ContentChild,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  Optional,\n  Output,\n  QueryList,\n  ViewChild,\n  ViewChildren,\n  ViewContainerRef,\n  forwardRef,\n  inject\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified, IResultList, Paging } from '@c8y/client';\nimport {\n  filter as _filter,\n  parseInt as _parseInt,\n  castArray,\n  flow,\n  get,\n  indexOf,\n  isEmpty,\n  isNil,\n  union,\n  uniqBy,\n  without\n} from 'lodash-es';\nimport { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PaginationModule } from 'ngx-bootstrap/pagination';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n  BehaviorSubject,\n  Observable,\n  Subject,\n  UnaryFunction,\n  combineLatest,\n  forkJoin,\n  fromEvent,\n  isObservable,\n  merge,\n  of,\n  pipe\n} from 'rxjs';\nimport {\n  combineLatestWith,\n  concatMap,\n  debounceTime,\n  delay,\n  distinctUntilChanged,\n  filter,\n  first,\n  map,\n  mergeMap,\n  startWith,\n  switchMap,\n  take,\n  takeUntil,\n  tap\n} from 'rxjs/operators';\nimport { AlertService } from '../alert/alert.service';\nimport { EmptyStateContextDirective } from '../common/empty-state/empty-state-context.directive';\nimport { toObservable } from '../common/extension-hooks';\nimport { IconDirective } from '../common/icon.directive';\nimport { LoadMoreComponent } from '../common/load-more.component';\nimport { LoadMoreMode } from '../common/load-more.model';\nimport { LoadingComponent } from '../common/loading.component';\nimport { MapFunctionPipe } from '../common/map-function.pipe';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PopoverConfirmButtons, PopoverConfirmComponent } from '../modal/popover-confirm.component';\nimport { GainsightService } from '../product-experience/gainsight.service';\nimport { ProductExperienceDirective } from '../product-experience/product-experience.directive';\nimport {\n  PRODUCT_EXPERIENCE_EVENT_SOURCE,\n  ProductExperienceEvent,\n  ProductExperienceEventSource\n} from '../product-experience/product-experience.model';\nimport { ActionControlsExtensionService } from './action-controls-extension.service';\nimport { CellRendererSpec } from './column/cell-renderer';\nimport { CellRendererComponent } from './column/cell-renderer.component';\nimport { ColumnDirective } from './column/column.directive';\nimport { CustomColumn } from './column/custom.column';\nimport { ExpandableRowColumn } from './column/expandable-row-column/expandable.data-grid-column';\nimport { FilteringFormRendererSpec, FilteringModifier } from './column/filtering-form-renderer';\nimport { FilteringFormRendererComponent } from './column/filtering-form-renderer.component';\nimport { TreeNodeColumn } from './column/tree-node-column/tree-node.data-grid-column';\nimport { CustomColumnService } from './configure-custom-column/configure-custom-column.service';\nimport {\n  DATA_GRID_CONFIGURATION_STRATEGY,\n  DataGridConfigurationStrategy,\n  GridConfigContext,\n  GridConfigPart,\n  GridEventType\n} from './data-grid-configuration.model';\nimport {\n  ActionControl,\n  ActionControlHook,\n  BuiltInActionType,\n  BulkActionControl,\n  Column,\n  ColumnConfig,\n  ColumnDataType,\n  CustomColumnConfig,\n  DataGrid,\n  DataSourceStats,\n  DisplayOptions,\n  Filter,\n  FilterChip,\n  FilteringActionType,\n  GridConfig,\n  HeaderActionControl,\n  Pagination,\n  Row,\n  ServerSideDataCallback,\n  SortOrder,\n  SpecialColumnName,\n  minColumnGridTrackSize,\n  ratiosByColumnTypes\n} from './data-grid.model';\nimport { DataGridService } from './data-grid.service';\nimport { ExpandableRowDirective } from './expandable-row.directive';\nimport { FilterMapperPipe } from './filter-chip/filter-mapper.pipe';\nimport { GroupedFilterChips } from './filter-chip/grouped-filter-chips.pipe';\nimport { GridDataSource } from './grid-data-source';\nimport { PX_ACTIONS, PX_EVENT_NAME } from './product-experience.constants';\nimport { VisibleControlsPipe } from './visible-controls.pipe';\nimport { HumanizePipe } from '../common';\nimport { AssetPropertyService } from '../asset-property';\n\nenum SortingOrder {\n  ASC = 'asc',\n  DESC = 'desc'\n}\n\n@Component({\n  selector: 'c8y-data-grid',\n  templateUrl: './data-grid.component.html',\n  host: { class: 'd-contents' },\n  providers: [\n    {\n      provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n      useExisting: forwardRef(() => DataGridComponent)\n    }\n  ],\n  standalone: true,\n  imports: [\n    NgClass,\n    LoadingComponent,\n    C8yTranslateDirective,\n    BsDropdownModule,\n    CdkTrapFocus,\n    IconDirective,\n    PopoverModule,\n    ProductExperienceDirective,\n    NgTemplateOutlet,\n    CdkDropList,\n    CdkDrag,\n    FormsModule,\n    TooltipModule,\n    PopoverConfirmComponent,\n    NgPlural,\n    NgPluralCase,\n    CdkTable,\n    CdkColumnDef,\n    CdkHeaderCellDef,\n    CdkHeaderCell,\n    CdkCellDef,\n    CdkCell,\n    CellRendererComponent,\n    FilteringFormRendererComponent,\n    CdkFooterCellDef,\n    CdkFooterCell,\n    CdkHeaderRowDef,\n    CdkHeaderRow,\n    CdkRowDef,\n    CdkRow,\n    CdkFooterRowDef,\n    CdkFooterRow,\n    PaginationModule,\n    AsyncPipe,\n    SlicePipe,\n    C8yTranslatePipe,\n    MapFunctionPipe,\n    FilterMapperPipe,\n    GroupedFilterChips,\n    VisibleControlsPipe,\n    HumanizePipe\n  ]\n})\nexport class DataGridComponent\n  implements DataGrid, OnChanges, AfterViewInit, ProductExperienceEventSource\n{\n  /** The title for the data grid, it's displayed in the grid's header. */\n  @Input() title: string = gettext('Items');\n  /** The label for load more button. */\n  @Input() loadMoreItemsLabel: string = gettext('Load more items');\n  /** The label for loading indicator. */\n  @Input() loadingItemsLabel: string = gettext('Loading items…');\n  /** Determines whether text search input is shown in the grid's header. */\n  @Input() showSearch = false;\n  /** Takes an event emitter. When an event is emitted, the grid will be reloaded. */\n  @Input() refresh: EventEmitter<void>;\n  /** Determines whether the grid is in a loading state. To be used in client side data scenarios where data is assigned using `rows` input. */\n  @Input() loading = false;\n\n  columns: Column[] = [];\n  /** The list of columns to be displayed in the grid. */\n  @Input('columns')\n  _columns: Column[];\n\n  dataSource = new GridDataSource();\n  rows: Row[];\n  /** The list of rows to be displayed in the grid (used for client side data). */\n  @Input('rows')\n  set _rows(rows: Row[]) {\n    this.rows = rows || [];\n  }\n\n  filteringLabelsParams = {\n    filteredItemsCount: 0,\n    allItemsCount: 0\n  };\n\n  pagination: Pagination;\n  paginationLabelParams = {\n    pageFirstItemIdx: 0,\n    pageLastItemIdx: 0,\n    itemsTotal: 0\n  };\n  lastClickedRow: Row;\n  readonly possiblePageSizes: number[] = [25, 50, 100];\n  readonly minPossiblePageSize = Math.min(...this.possiblePageSizes);\n  /** Pagination settings, e.g. allows for setting current page or page size. */\n  @Input('pagination')\n  set _pagination(pagination: Pagination) {\n    this.pagination = pagination;\n  }\n\n  /** Child node pagination settings, e.g. allows for setting page size of loaded child node pages. */\n  @Input()\n  childNodePagination: Pagination;\n\n  infiniteScroll: LoadMoreMode;\n  /** Sets load more mode. */\n  @Input('infiniteScroll')\n  set _infiniteScroll(infiniteScroll: LoadMoreMode) {\n    this.infiniteScroll = infiniteScroll;\n  }\n\n  serverSideDataCallback: ServerSideDataCallback;\n  /**\n   * Sets a callback function which will be invoked whenever data needs to be loaded from server.\n   * The function should take [[DataSourceModifier]] and return [[ServerSideDataResult]].\n   */\n  @Input('serverSideDataCallback')\n  set _serverSideDataCallback(serverSideDataCallback: ServerSideDataCallback) {\n    this.serverSideDataCallback = serverSideDataCallback;\n  }\n\n  selectable = false;\n  /** Determines whether items can be selected by clicking a checkbox in the first column. */\n  @Input('selectable')\n  set _selectable(selectable: boolean) {\n    this.selectable = selectable;\n  }\n\n  singleSelection = false;\n  /** Restricts selection to a single row only. Selection column displays radio button instead of checkboxes */\n  @Input('singleSelection')\n  set _singleSelection(singleSelection: boolean) {\n    this.singleSelection = singleSelection;\n  }\n\n  selectionPrimaryKey = 'id';\n  /** Determines which item's property will be used to distinguish selection status. */\n  @Input('selectionPrimaryKey')\n  set _selectionPrimaryKey(selectionPrimaryKey: string) {\n    this.selectionPrimaryKey = selectionPrimaryKey;\n  }\n\n  displayOptions: DisplayOptions = {\n    striped: true,\n    bordered: false,\n    gridHeader: true,\n    filter: true,\n    hover: true,\n    showLoadingIndicator: true\n  };\n  /** Sets display options. */\n  @Input('displayOptions')\n  set _displayOptions(displayOptions: Partial<DisplayOptions>) {\n    this.displayOptions = { ...this.displayOptions, ...displayOptions };\n  }\n\n  actionControls: ActionControl[] = [];\n  /** Sets action controls (actions available for individual items). */\n  @Input('actionControls')\n  set _actionControls(actionControls: ActionControl[]) {\n    this.actionControlsInput$.next(actionControls);\n  }\n\n  bulkActionControls: BulkActionControl[];\n  /** Sets bulk action controls (actions available for items selected by user). */\n  @Input('bulkActionControls')\n  set _bulkActionControls(bulkActionControls: BulkActionControl[]) {\n    this.bulkActionControls = bulkActionControls || [];\n  }\n\n  headerActionControls: HeaderActionControl[];\n  /** Sets header action controls (actions available from data grid header). */\n  @Input('headerActionControls')\n  set _headerActionControls(headerActionControls: HeaderActionControl[]) {\n    this.headerActionControls = headerActionControls || [];\n  }\n\n  /** Sets initial search text. */\n  @Input()\n  searchText = '';\n\n  /** Determines if custom columns button will be enabled. */\n  @Input()\n  configureColumnsEnabled = true;\n\n  /** Shows the warning for the sub-assets counter */\n  @Input()\n  showCounterWarning = false;\n\n  /**\n   * Sets the class name used for active rows (last clicked).\n   * Set empty string to disable appending active class to grid rows.\n   */\n  @Input()\n  activeClassName = 'active';\n\n  /** Determines if the rows of the data grid will be expandable.\n   * Possible values:\n   * - `NONE` - no expandable rows (default value)\n   * - `SYNC` - additional column with expand button is displayed and expandable rows are expanding synchronously when button is clicked\n   * - `ASYNC` - additional column with expand button is displayed and expandable rows are expanding asynchronously when button is clicked\n   */\n  @Input() expandableRows: 'NONE' | 'SYNC' | 'ASYNC' = 'NONE';\n\n  /**\n   * Determines if the data grid is a tree grid.\n   * If set to true, an additional column with expand/collapse button is displayed for rows with child nodes.\n   */\n  @Input() treeGrid: boolean;\n\n  /** Determines if the Reload button will be hidden. */\n  @Input() hideReload = false;\n\n  /**\n   * In a client side data fed tree-grid, this input determines the name of the\n   * property holding the child nodes of the current node.\n   * Default value is `childNodes`.\n   */\n  @Input() set childNodesProperty(childNodesProperty: string) {\n    this.dataSource.childNodesProperty = childNodesProperty;\n  }\n\n  /**\n   * In a tree-grid, this input determines the name of the property that will be used as a label\n   * to refer to the parent node its pagination row.\n   */\n  @Input() parentNodeLabelProperty = 'id';\n\n  /** Emits an event when mouse is over a row. */\n  @Output() rowMouseOver = new EventEmitter<object>();\n  /** Emits an event when mouse leaves a row. */\n  @Output() rowMouseLeave = new EventEmitter<object>();\n  /** Emits an event when a row is clicked. */\n  @Output() rowClick = new EventEmitter<object>();\n  /** Emits an event when grid's configuration is changed. */\n  @Output() onConfigChange = new EventEmitter<GridConfig>();\n  /** Emits an event before the filter is applied. */\n  @Output() onBeforeFilter = new EventEmitter<object>();\n  /** Emits an event before the search is performed. */\n  @Output() onBeforeSearch = new EventEmitter<string>();\n  /** Emits an event when a filter is applied in a column. */\n  @Output() onFilter = new EventEmitter<{\n    columnName?: string;\n    dropdown?: BsDropdownDirective;\n    filteringModifier?: Filter;\n  }>();\n  /** Emits an event when items selection changes. The array contains keys of selected items (key property is defined by `selectionPrimaryKey`). */\n  @Output() itemsSelect = new EventEmitter<string[]>();\n  /** Emits an event when reload button is clicked. */\n  @Output() onReload = new EventEmitter<void>();\n  /** Emits an event when a custom column is added */\n  @Output() onAddCustomColumn = new EventEmitter<CustomColumnConfig>();\n  /** Emits an event when a custom column is removed */\n  @Output() onRemoveCustomColumn = new EventEmitter<Column>();\n  /** Emits an event after the column filter has been reset */\n  @Output() onColumnFilterReset = new EventEmitter<Column>();\n  /** Emits an event when column sorting has been changed */\n  @Output() onSort = new EventEmitter<GridConfig>();\n  /** Emits an event when page size has been changed */\n  @Output() onPageSizeChange = new EventEmitter<GridConfig>();\n  /** Emits an event when column order has been changed */\n  @Output() onColumnReordered = new EventEmitter<GridConfig>();\n  /** Emits an event when column order has been changed */\n  @Output() onColumnVisibilityChange = new EventEmitter<GridConfig>();\n\n  @ContentChildren(ColumnDirective) columnRenderers: QueryList<ColumnDirective>;\n\n  @ContentChild(ExpandableRowDirective)\n  expandableRow: ExpandableRowDirective;\n\n  @ViewChild('scroll', { static: true }) scrollContainer: ElementRef;\n\n  @ViewChild('infiniteScrollContainer', { static: false, read: ViewContainerRef })\n  infiniteScrollContainer: ViewContainerRef;\n\n  @ContentChild(EmptyStateContextDirective) emptyState: EmptyStateContextDirective;\n\n  loadMoreComponent: LoadMoreComponent;\n\n  columnNames = [];\n\n  styles = {\n    tableCursor: 'auto',\n    gridTemplateColumns: undefined,\n    gridInfiniteScrollColumn: undefined\n  };\n\n  searchText$ = new EventEmitter<string>();\n  filteringApplied = false;\n  columnsWithFiltersApplied: Column[] = [];\n\n  totalPagesCount$ = new BehaviorSubject<number>(Infinity);\n  hidePagination$ = this.totalPagesCount$.pipe(\n    map(totalPagesCount => totalPagesCount <= 1),\n    delay(0) // prevents ExpressionChangedAfterItHasBeenCheckedError\n  );\n\n  selectedItemIds: string[] = [];\n  currentPageSelectionState = {\n    allSelected: false,\n    allDeselected: true\n  };\n\n  builtInActionType = {\n    Edit: BuiltInActionType.Edit,\n    Delete: BuiltInActionType.Delete,\n    Export: BuiltInActionType.Export\n  };\n\n  confirmRemoveColumnButtons: PopoverConfirmButtons[] = [\n    {\n      label: gettext('Cancel'),\n      action: () => Promise.resolve(false)\n    },\n    {\n      label: gettext('Remove`column,verb`'),\n      status: 'danger',\n      action: () => Promise.resolve(true)\n    }\n  ];\n\n  isConfigContextKnown = false;\n  emptyStateContext$: Observable<DataSourceStats>;\n\n  /**\n   * A map of rows which have been expanded.\n   */\n  expandedRows: Map<Row, { visible$: Subject<boolean> | BehaviorSubject<boolean> }> = new Map();\n\n  /** Product experience constants declarations */\n  productExperienceEvent: ProductExperienceEvent = { eventName: PX_EVENT_NAME };\n  PX_ACTIONS = PX_ACTIONS;\n\n  readonly sortColumnTitle = gettext('Sort column \"{{ name }}\"');\n\n  resizeHandleMouseDown$ = new EventEmitter<{ event: MouseEvent; targetColumnName: string }>();\n  resizeHandleContainerMouseMove$ = new EventEmitter<MouseEvent>();\n  windowMouseUp$ = fromEvent<MouseEvent>(window, 'mouseup');\n\n  filtersHelpPopoverHtml: string = gettext('Click the column headers to apply filters.');\n\n  canRetrieveAssetProperties = inject(AssetPropertyService)?.canRetrieveAssetProperties();\n\n  private customColumnService = inject(CustomColumnService);\n\n  private headerBeingResized: {\n    columnName: string;\n    el: HTMLElement;\n  };\n  @ViewChildren(CdkHeaderCell, { read: ElementRef }) private thRefs: QueryList<ElementRef>;\n  private thEls: HTMLElement[];\n\n  @ViewChild(CdkTable, { static: false })\n  tableRef: CdkTable<any>;\n\n  private recreateLoadMoreComponent: boolean;\n\n  private columnsInitialized = false;\n\n  private defaultColumns: Column[] = [];\n\n  private reloadConfiguration$: Subject<void> = new Subject();\n\n  private actionControlsInput$ = new BehaviorSubject<ActionControl[]>([]);\n\n  private unsubscribe$ = new Subject<void>();\n\n  private manualSearch$ = new Subject<string>();\n\n  private lastManualSearchValue = '';\n\n  private readonly SEARCH_DEBOUNCE_TIME = 500;\n\n  /**\n   * Event emitter, taking boolean values used for loading data grid data with debounce.\n   * Default value is set to false. Set to true if data grid is using infinite scroll and page should be reloaded.\n   * This is used to avoid having multiple this.loadData() function calls.\n   */\n  private triggerLoadData = new EventEmitter<boolean>();\n\n  constructor(\n    @Optional()\n    @Inject(DATA_GRID_CONFIGURATION_STRATEGY)\n    public configurationStrategy: DataGridConfigurationStrategy,\n    private dataGridService: DataGridService,\n    private sanitizer: DomSanitizer,\n    private gainsightService: GainsightService,\n    private alertService: AlertService,\n    private actionControlsService: ActionControlsExtensionService,\n    private route: ActivatedRoute\n  ) {\n    this.triggerLoadData.pipe(debounceTime(1), takeUntil(this.unsubscribe$)).subscribe(reload => {\n      this.loadData(reload);\n    });\n\n    this.reloadConfiguration$\n      .pipe(\n        switchMap(() => this.configurationStrategy?.getConfig$() ?? of(null)),\n        tap(config => {\n          this.setColumns(config);\n          this.setPageSize(config);\n          this.triggerLoadData.emit(!!this.infiniteScroll);\n        }),\n        switchMap(() => this.dataSource.stats$),\n        tap(stats => {\n          this.createLoadMoreComponent(stats);\n          this.updateFilteringLabelsParams(stats);\n          this.updatePaginationLabelParams(stats);\n          this.updatePaginationWhenNoDevicesLastPage(stats);\n        }),\n        takeUntil(this.unsubscribe$)\n      )\n      .subscribe();\n  }\n\n  ngOnInit() {\n    this.isConfigContextKnown = !!this.configurationStrategy?.isContextKnown();\n\n    this.setupSearchObservables();\n\n    if (this.selectable) {\n      combineLatest(this.dataSource.data$, this.itemsSelect.asObservable())\n        .pipe(takeUntil(this.unsubscribe$))\n        .subscribe(([data]) => {\n          const currentPageEmpty = data.length === 0;\n\n          this.currentPageSelectionState = {\n            allSelected: currentPageEmpty ? false : data.every(item => this.isItemSelected(item)),\n            allDeselected: currentPageEmpty ? true : data.every(item => !this.isItemSelected(item))\n          };\n        });\n    }\n\n    this.reloadConfiguration$.next();\n\n    this.actionControlsService.items$\n      .pipe(\n        startWith([]),\n        switchMap((hooks: ActionControlHook[]) =>\n          forkJoin(\n            hooks.map(hook =>\n              toObservable(\n                hook?.matchesGrid\n                  ? this.safelyInvokeMatcher(\n                      hook.matchesGrid,\n                      this.route,\n                      this.configurationStrategy?.getContext()\n                    )\n                  : false\n              ).pipe(map(matches => ({ hook, matches })))\n            )\n          ).pipe(startWith([]))\n        ),\n        map((hooks: Array<{ hook: ActionControlHook; matches: boolean }>) =>\n          hooks.filter(hook => hook.matches).map(hook => hook.hook)\n        ),\n        map((hooks: ActionControlHook[]) =>\n          hooks.reduce((actionControls: ActionControl[], currentHook: ActionControlHook) => {\n            return [...actionControls, ...castArray(currentHook.actionControls)];\n          }, [])\n        ),\n        combineLatestWith(this.actionControlsInput$),\n        tap(\n          ([hookControls, inputControls]) =>\n            (this.actionControls = [...inputControls, ...hookControls])\n        ),\n        takeUntil(this.unsubscribe$)\n      )\n      .subscribe();\n\n    if (this.refresh) {\n      this.refresh.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n        this.cancel();\n        this.reload();\n      });\n    }\n\n    this.processAndPersistConfigChange();\n    this.updateColumns();\n\n    // Resetting the stats size to 0 when managed objects are deleted but sizing not yet updated\n    // TODO remove after MTM-60226 is resolved\n    this.emptyStateContext$ = combineLatest([this.dataSource.stats$, this.dataSource.data$]).pipe(\n      map(([stats, data]) => {\n        if (stats.filteredSize === 1 && data.length === 0) {\n          return { ...stats, size: 0, filteredSize: 0 };\n        }\n        return stats;\n      })\n    );\n  }\n\n  setExpandableRowVisible(row: Row, success: boolean): void {\n    if (success) {\n      this.expandedRows.get(row).visible$.next(true);\n    } else {\n      this.expandedRows.get(row).visible$.next(false);\n      this.expandedRows.delete(row);\n      this.tableRef.renderRows();\n    }\n  }\n\n  ngOnChanges(event) {\n    if (\n      ((!event._actionControls && !event.searchText) || event._actionControls?.firstChange) &&\n      this.columnsInitialized\n    ) {\n      const reload = !!event._infiniteScroll?.currentValue && !event._infiniteScroll?.firstChange;\n      this.triggerLoadData.emit(reload);\n    }\n    if (!!event._columns && !event._columns.firstChange) {\n      this.reloadConfiguration$.next();\n    }\n    this.updateColumns();\n  }\n\n  ngAfterViewInit() {\n    this.updateGridColumnsSize();\n    this.updateThEls();\n    this.setupResizeHandle();\n  }\n\n  ngOnDestroy() {\n    this.unsubscribe$.next();\n    this.unsubscribe$.complete();\n  }\n\n  expand(row: Row) {\n    const isSyncExpand = this.expandableRows === 'SYNC';\n    let visibleSubject: Subject<boolean> | BehaviorSubject<boolean>;\n    if (isSyncExpand) {\n      visibleSubject = new BehaviorSubject(true);\n    } else {\n      visibleSubject = new Subject();\n    }\n    this.expandedRows.set(row, { visible$: visibleSubject });\n    this.tableRef.renderRows();\n    return visibleSubject;\n  }\n\n  collapse(row: Row): void {\n    this.expandedRows.delete(row);\n    this.tableRef.renderRows();\n  }\n\n  expandNode(row: Row): void {\n    row.pagination = row.pagination ?? this.childNodePagination;\n    this.loadData(false, row);\n  }\n\n  collapseNode(row: Row): void {\n    this.dataSource.collapseNode(row);\n  }\n\n  isDataRow = (idx: number, row: Row): boolean => {\n    return !this.isPaginationRow(idx, row);\n  };\n\n  isRowExpanded = (_, row: Row): boolean => {\n    return !!this.expandedRows.get(row);\n  };\n\n  isPaginationRow = (_, row: Row): boolean => {\n    return !!row?.θpagination;\n  };\n\n  setColumns(config: GridConfig) {\n    if (!!this.configurationStrategy && !isEmpty(this._columns)) {\n      this.columns = this.dataGridService.applyConfigToColumns(config, this._columns);\n      this.columnsInitialized = true;\n    } else {\n      this.columns = this._columns || [];\n      this.columnsInitialized = this.columnsInitialized || !!this._columns;\n    }\n\n    this.defaultColumns = this.columns || [];\n    this.updateColumns();\n  }\n\n  setPageSize(config: GridConfig) {\n    if (!!config?.pagination) {\n      this.pagination = {\n        ...this.pagination,\n        pageSize: config.pagination.pageSize\n      };\n    }\n\n    const pageSize = get(this.pagination, 'pageSize');\n    if (\n      this.pagination &&\n      !this.possiblePageSizes.find(possiblePageSize => possiblePageSize === pageSize)\n    ) {\n      this.pagination = { ...this.pagination, pageSize: this.minPossiblePageSize };\n    }\n  }\n\n  async openCustomColumn() {\n    await this.customColumnService.openCustomColumns(this.columns, config => {\n      const firstFixed = this.columns.findIndex(c => c.positionFixed);\n      const idx = firstFixed > -1 ? firstFixed : this.columns.length;\n      this.columns.splice(idx, 0, new CustomColumn(config));\n      this.updateColumns();\n      this.triggerEvent({\n        action: PX_ACTIONS.ADD_CUSTOM_COLUMN,\n        column: config.header || config.name\n      });\n      this.onAddCustomColumn.emit(config);\n    });\n  }\n\n  async removeCustomColumn(\n    poConfirm: PopoverConfirmComponent,\n    column: Column,\n    ddConfigureColumns: BsDropdownDirective\n  ) {\n    ddConfigureColumns.autoClose = false;\n    poConfirm.message = gettext('Do you want to remove this column?');\n    try {\n      const remove: boolean = await poConfirm.show(this.confirmRemoveColumnButtons);\n      if (remove) {\n        this.columns = this.columns.filter(col => col?.name !== column?.name);\n        this.updateColumns();\n        this.onRemoveCustomColumn.emit(column);\n        this.triggerEvent({\n          action: PX_ACTIONS.REMOVE_CUSTOM_COLUMN,\n          column: column.header || column.name\n        });\n      }\n    } catch (e) {\n      this.alertService.addServerFailure(e);\n    }\n\n    setTimeout(() => (ddConfigureColumns.autoClose = true), 0);\n  }\n\n  async removeFilter(filter: Partial<FilterChip>) {\n    const filteringModifier = filter.externalFilterQuery\n      ? { externalFilterQuery: filter.externalFilterQuery }\n      : { filterPredicate: filter.filterPredicate };\n    this.onBeforeFilter.emit({\n      columnName: filter.columnName,\n      dropdown: undefined,\n      filteringModifier\n    });\n    if (\n      (filter.externalFilterQuery && !this.checkIfAnyValuesExist(filter.externalFilterQuery)) ||\n      filter.filterPredicate\n    ) {\n      this.updateFiltering([filter.columnName], {\n        type: FilteringActionType.ResetFilter\n      });\n\n      this.onFilter.emit({ columnName: filter.columnName });\n    } else {\n      this.updateFiltering([filter.columnName], {\n        type: FilteringActionType.ApplyFilter,\n        payload: { filteringModifier }\n      });\n      this.onFilter.emit({\n        columnName: filter.columnName,\n        dropdown: undefined,\n        filteringModifier\n      });\n    }\n\n    this.triggerEvent({\n      action: PX_ACTIONS.REMOVE_FILTER,\n      column: filter.columnName,\n      filteringModifier\n    });\n  }\n\n  trackByName(index, item) {\n    return item.name;\n  }\n\n  resolveCellValue(row, path) {\n    return flow([\n      x => this.dataSource.resolveValue(x, path),\n      this.dataSource.resolveFunction,\n      this.dataSource.normalizeNil\n    ])(row);\n  }\n\n  changeSortOrder(columnName) {\n    const column = this.columns.find(({ name }) => name === columnName);\n\n    if (column) {\n      const { sortOrder } = column;\n\n      if (!sortOrder) {\n        this.updateSorting([columnName], SortingOrder.ASC);\n      } else if (sortOrder === SortingOrder.ASC) {\n        this.updateSorting([columnName], SortingOrder.DESC);\n      } else {\n        this.updateSorting([columnName], '');\n      }\n    }\n  }\n\n  updateSorting(columnNames: string[], sortOrder: SortOrder) {\n    this.triggerEvent({\n      action: PX_ACTIONS.CHANGE_SORTING_ORDER,\n      columns: columnNames,\n      sortOrder: sortOrder === '' ? 'none' : sortOrder\n    });\n\n    this.columns = this.columns.map((column): Column => {\n      if (columnNames.includes(column.name)) {\n        return { ...column, sortOrder };\n      }\n\n      return column;\n    });\n    this.emitConfigChange('sort');\n\n    this.reload();\n  }\n\n  applyFilter(columnName, dropdown, filteringModifier) {\n    this.triggerEvent({\n      action: PX_ACTIONS.APPLY_FILTER,\n      column: columnName,\n      filteringModifier\n    });\n    this.onBeforeFilter.emit({ columnName, dropdown, filteringModifier });\n    this.updateFiltering([columnName], {\n      type: FilteringActionType.ApplyFilter,\n      payload: { filteringModifier }\n    });\n    dropdown.hide();\n    this.onFilter.emit({ columnName, dropdown, filteringModifier });\n  }\n\n  resetFilter(columnName, dropdown) {\n    this.triggerEvent({ action: PX_ACTIONS.RESET_FILTER, column: columnName });\n    this.updateFiltering([columnName], { type: FilteringActionType.ResetFilter });\n    dropdown.hide();\n    this.onFilter.emit({ columnName, dropdown });\n  }\n\n  clearFilters(reload = true) {\n    this.updateFiltering(\n      this.columns.map(({ name }) => name),\n      {\n        type: FilteringActionType.ResetFilter\n      },\n      reload\n    );\n    this.onFilter.emit({});\n    this.triggerEvent({ action: PX_ACTIONS.CLEAR_FILTER });\n  }\n\n  updateFiltering(\n    columnNames: string[],\n    action: {\n      type: FilteringActionType;\n      payload?: { filteringModifier: FilteringModifier };\n    },\n    reload = true\n  ) {\n    this.columns = this.columns.map(column => {\n      if (columnNames.includes(column.name)) {\n        return {\n          ...column,\n          ...(action.type === FilteringActionType.ApplyFilter\n            ? action.payload.filteringModifier\n            : this.onResetFilterAction(column))\n        };\n      }\n      return column;\n    });\n\n    this.updateFilteringApplied();\n\n    if (reload) {\n      this.reload();\n    }\n  }\n\n  updateFilteringApplied() {\n    this.columnsWithFiltersApplied = this.columns.filter(this.isColumnFilteringApplied);\n    this.filteringApplied = this.columnsWithFiltersApplied.length > 0;\n\n    this.filtersHelpPopoverHtml = this.filteringApplied\n      ? gettext(\n          'Click the column headers to apply filters. Click <b>Active filters</b> button to manage applied filters.'\n        )\n      : gettext('Click the column headers to apply filters.');\n  }\n\n  isColumnFilteringApplied(column: Column): boolean {\n    const { filterable, filterPredicate, externalFilterQuery } = column;\n\n    return !!(filterable && (filterPredicate || externalFilterQuery));\n  }\n\n  updatePagination({ itemsPerPage, page }) {\n    const configChanged = this.pagination?.pageSize !== itemsPerPage;\n    this.pagination = { ...this.pagination, pageSize: itemsPerPage, currentPage: page };\n    this.loadData();\n    if (configChanged) {\n      this.emitConfigChange('pagination');\n    }\n    this.triggerEvent({ action: PX_ACTIONS.CHANGE_PAGINATION, itemsPerPage, page });\n  }\n\n  updateChildPagination({ itemsPerPage, page }, { parentRow }) {\n    if (\n      page === parentRow?.pagination?.currentPage &&\n      itemsPerPage === parentRow?.pagination?.pageSize\n    ) {\n      // avoid endless loop through same page feedback\n      return;\n    }\n    parentRow.pagination = {\n      currentPage: page,\n      pageSize: itemsPerPage\n    };\n    this.loadData(false, parentRow);\n  }\n\n  clickReload() {\n    this.searchText = '';\n    this.reload();\n    this.onReload.next();\n    this.triggerEvent({ action: PX_ACTIONS.RELOAD });\n  }\n\n  reload(redirect = true) {\n    this.pagination = {\n      ...this.pagination,\n      currentPage: redirect ? 1 : this.pagination.currentPage\n    };\n    this.recreateLoadMoreComponent = true;\n    this.loadData(true);\n    this.scrollToTop();\n  }\n\n  loadNextPage(): Promise<IResultList<object>> {\n    this.pagination = { ...this.pagination, currentPage: this.pagination.nextPage };\n\n    this.loadData();\n\n    return this.dataSource.resultList$\n      .pipe(take(1)) // in order for `toPromise` to work, the observable needs to complete\n      .toPromise()\n      .then(result => {\n        return {\n          ...result,\n          paging: {\n            ...result.paging,\n            next: this.loadNextPage.bind(this)\n          }\n        } as IResultList<object>;\n      });\n  }\n\n  getCellRendererSpec({ value, row, columnName }): CellRendererSpec {\n    return this._getCellRendererSpec({ type: 'CELL', value, row, columnName });\n  }\n\n  getHeaderCellRendererSpec({ value, columnName }): CellRendererSpec {\n    return this._getCellRendererSpec({ type: 'HEADER', value, row: undefined, columnName });\n  }\n\n  getFilteringFormRendererSpec({ column, dropdown }): FilteringFormRendererSpec {\n    return {\n      renderer:\n        get(this.getColumnRenderer(column), 'filteringFormRendererDef.template') ||\n        column.filteringFormRendererComponent,\n      context: {\n        property: column,\n        applyFilter: this.applyFilter.bind(this, column.name, dropdown),\n        resetFilter: this.resetFilter.bind(this, column.name, dropdown)\n      }\n    };\n  }\n\n  setAllItemsSelected(selected) {\n    this.dataSource.selection$\n      .pipe(first())\n      .subscribe(({ filteredDataIds }) => this.setItemsSelected(filteredDataIds, selected));\n  }\n\n  setAllItemsInCurrentPageSelected(selected) {\n    this.dataSource.data$.pipe(first()).subscribe(data => this.setItemsSelected(data, selected));\n  }\n\n  setItemsSelected(items: any, selected) {\n    const itemIds = items.map((item: object | string) =>\n      typeof item === 'object' ? item[this.selectionPrimaryKey] : item\n    );\n\n    this.selectedItemIds = selected\n      ? union(this.selectedItemIds, itemIds)\n      : without(this.selectedItemIds, ...itemIds);\n    this.itemsSelect.emit(this.selectedItemIds);\n  }\n\n  changeSelectedItem(item: any) {\n    this.selectedItemIds = [item[this.selectionPrimaryKey]];\n    this.itemsSelect.emit(this.selectedItemIds);\n  }\n\n  cancel() {\n    this.selectedItemIds = [];\n    this.itemsSelect.emit(this.selectedItemIds);\n  }\n\n  isItemSelected(item) {\n    return this.selectedItemIds.includes(item[this.selectionPrimaryKey]);\n  }\n\n  onColumnDrop({ previousIndex, currentIndex }) {\n    const differentIndex = previousIndex !== currentIndex;\n\n    if (differentIndex) {\n      this.triggerEvent({\n        action: PX_ACTIONS.REORDER_COLUMNS,\n        column: this.columnNames[previousIndex]\n      });\n      const column = this.columns.splice(previousIndex, 1);\n      this.columns.splice(currentIndex, 0, column[0]);\n      this.emitConfigChange('reorderColumn');\n    }\n\n    this.updateColumnNames();\n    this.updateGridColumnsSize();\n  }\n\n  updateGridColumnsSize() {\n    this.styles = {\n      ...this.styles,\n      gridTemplateColumns: this.sanitizer.bypassSecurityTrustStyle(\n        this.columns\n          .filter(column => column.visible)\n          .map(({ gridTrackSize }) => gridTrackSize)\n          .join(' ')\n      ),\n      gridInfiniteScrollColumn: this.sanitizer.bypassSecurityTrustStyle(`1 / -1`)\n    };\n  }\n\n  updateThEls() {\n    setTimeout(() => {\n      this.thEls = this.thRefs\n        ? this.thRefs.toArray().map(({ nativeElement }) => nativeElement)\n        : [];\n    }, 0);\n  }\n\n  // To be removed when columns are transformed to observables.\n  isDropDownPlacedRight(column: Column) {\n    return (\n      indexOf(\n        this.columns.filter(c => c.visible),\n        column\n      ) >\n      this.columns.filter(c => c.visible).length / 2\n    );\n  }\n\n  emitConfigChange(eventType?: GridEventType) {\n    if (this.columnsInitialized) {\n      const columns = this.columns.map(this.mapColumnToConfig.bind(this));\n      const config = { columns, pagination: this.pagination };\n      this.onConfigChange.emit(config);\n      switch (eventType) {\n        case 'sort':\n          this.onSort.emit(config);\n          break;\n        case 'pagination':\n          this.onPageSizeChange.emit(config);\n          break;\n        case 'reorderColumn':\n          this.onColumnReordered.emit(config);\n          break;\n        case 'changeColumnVisibility':\n          this.onColumnVisibilityChange.emit(config);\n      }\n    }\n  }\n\n  triggerEvent(eventData) {\n    this.gainsightService.triggerEvent(this.productExperienceEvent?.eventName || PX_EVENT_NAME, {\n      ...this.productExperienceEvent?.data,\n      ...eventData\n    });\n  }\n\n  handleClick(row: Row) {\n    this.lastClickedRow = row;\n    this.rowClick.emit(row);\n  }\n\n  performSearch(searchText: string): void {\n    this.searchText = searchText;\n    this.manualSearch$.next(searchText);\n  }\n\n  private setupSearchObservables(): void {\n    const autoSearch$ = this.searchText$.pipe(\n      debounceTime(this.SEARCH_DEBOUNCE_TIME),\n      distinctUntilChanged(),\n      filter(value => value !== this.lastManualSearchValue),\n      tap(value => {\n        this.lastManualSearchValue = value;\n      })\n    );\n\n    const manualSearch$ = this.manualSearch$.pipe(\n      filter(value => value.trim() !== ''),\n      tap(value => {\n        this.lastManualSearchValue = value;\n      })\n    );\n\n    merge(autoSearch$, manualSearch$)\n      .pipe(\n        takeUntil(this.unsubscribe$),\n        tap(searchText => {\n          this.searchText = searchText;\n          this.onBeforeSearch.emit(searchText);\n          this.triggerEvent({\n            action: PX_ACTIONS.SEARCH,\n            searchInput: searchText\n          });\n        })\n      )\n      .subscribe(() => {\n        this.reload();\n      });\n  }\n\n  private onResetFilterAction(column: Column) {\n    this.onColumnFilterReset.emit(column);\n    return {\n      filterPredicate: undefined,\n      externalFilterQuery: undefined\n    };\n  }\n\n  private mapColumnToConfig(column: Column): ColumnConfig | CustomColumnConfig {\n    let config;\n    if (column.custom) {\n      const { visible, sortOrder, name, externalFilterQuery, header, path, type } =\n        column as CustomColumn;\n      config = {\n        visible,\n        sortOrder,\n        name,\n        filter: { externalFilterQuery },\n        header,\n        path,\n        custom: true,\n        type\n      };\n    } else {\n      const { visible, sortOrder, name, externalFilterQuery } = column;\n      config = { visible, sortOrder, name, filter: { externalFilterQuery } };\n    }\n\n    if (isEmpty(config?.filter?.externalFilterQuery)) {\n      delete config.filter;\n    }\n\n    return config;\n  }\n\n  private loadData(reload = false, parentRow?: Row) {\n    const {\n      rows,\n      columns,\n      pagination,\n      searchText,\n      serverSideDataCallback,\n      selectable,\n      selectionPrimaryKey,\n      infiniteScroll\n    } = this;\n\n    this.dataSource.loadData({\n      rows,\n      columns,\n      pagination,\n      searchText,\n      serverSideDataCallback,\n      selectable,\n      selectionPrimaryKey,\n      infiniteScroll,\n      reload,\n      parentRow\n    });\n  }\n\n  private updateColumns() {\n    const specialColumn = {\n      sortable: false,\n      positionFixed: true\n    };\n    const selectionColumn = this.selectable\n      ? {\n          ...specialColumn,\n          name: this.singleSelection ? SpecialColumnName.RadioButton : SpecialColumnName.Checkbox,\n          gridTrackSize: '32px'\n        }\n      : undefined;\n    const actionsColumn =\n      this.actionControls?.length > 0\n        ? {\n            ...specialColumn,\n            name: SpecialColumnName.Actions,\n            gridTrackSize: 'minmax(40px, auto)'\n          }\n        : undefined;\n\n    const expandableRowsColumn = this.expandableRows !== 'NONE' ? new ExpandableRowColumn() : null;\n    const treeNodeColums = this.treeGrid ? new TreeNodeColumn() : null;\n    const columns = [\n      treeNodeColums,\n      expandableRowsColumn,\n      selectionColumn,\n      ...this.columns,\n      actionsColumn\n    ]\n      .filter(Boolean)\n      .map(this.withColumnDefaults);\n\n    this.columns = uniqBy(columns, 'name');\n    const specialColumnsCount = _filter(\n      [treeNodeColums, expandableRowsColumn, selectionColumn],\n      col => !!col\n    ).length;\n    this.columns.forEach(\n      (column, index) =>\n        (column.cellCSSClassName = this.addOrRemoveCellPaddingClass(\n          column.cellCSSClassName,\n          index,\n          specialColumnsCount\n        ))\n    );\n    this.updateColumnNames();\n    this.updateGridColumnsSize();\n    this.updateThEls();\n    this.updateFilteringApplied();\n  }\n\n  private addOrRemoveCellPaddingClass(\n    cssClassName: string | string[] = [],\n    index: number,\n    startAt: number\n  ): string[] {\n    const cellPaddingClass = 'tree-node-padding-cell';\n    let result = typeof cssClassName === 'string' ? cssClassName.split(' ') : cssClassName;\n\n    if (index === startAt) {\n      // If this is the first column, add the padding class if it doesn't exist\n      if (!result.includes(cellPaddingClass)) {\n        result = [...result, cellPaddingClass];\n      }\n    } else {\n      // If this is not the first column, remove the padding class if it exists\n      result = without(result, cellPaddingClass);\n    }\n\n    return result;\n  }\n\n  private checkIfAnyValuesExist(obj, results = []) {\n    if (obj && Object.entries(obj)) {\n      Object.entries(obj).forEach(([key, value]) => {\n        if (typeof obj[key] === 'object') {\n          this.checkIfAnyValuesExist(obj[key], results);\n        } else {\n          results.push(value);\n        }\n      });\n    }\n\n    return results.some(val => !!val);\n  }\n\n  private withColumnDefaults(column): Column {\n    const dataType = column.dataType || ColumnDataType.TextShort;\n    const { headerCSSClassName, cellCSSClassName } = column;\n\n    return {\n      visible: true,\n      positionFixed: false,\n      resizable: dataType === 'icon' ? false : true,\n      sortable: true,\n      sortOrder: '',\n      filterable: false,\n      ...column,\n      dataType,\n      gridTrackSize:\n        column.gridTrackSize ||\n        (dataType === 'icon'\n          ? `max-content`\n          : `minmax(${minColumnGridTrackSize}px, ${ratiosByColumnTypes[dataType]}fr)`),\n      headerCSSClassName:\n        (typeof headerCSSClassName === 'string'\n          ? headerCSSClassName.split(' ')\n          : headerCSSClassName) || [],\n      cellCSSClassName:\n        (typeof cellCSSClassName === 'string' ? cellCSSClassName.split(' ') : cellCSSClassName) ||\n        []\n    };\n  }\n\n  private updateColumnNames() {\n    this.columnNames = this.columns.map(({ name }) => name);\n  }\n\n  private setupResizeHandle() {\n    const resizeHandleDrag$ = this.resizeHandleMouseDown$.pipe(\n      takeUntil(this.unsubscribe$),\n      tap(() => this.clearMouseHighlights()),\n      mergeMap(({ event, targetColumnName }) => {\n        this.columns = this.columns.map(column => {\n          if (column.name === targetColumnName) {\n            return {\n              ...column,\n              headerCSSClassName: union(column.headerCSSClassName, ['header--being-resized'])\n            };\n          }\n\n          return column;\n        });\n\n        this.headerBeingResized = {\n          columnName: targetColumnName,\n          el: (event.target as HTMLElement)?.parentNode as HTMLElement\n        };\n\n        this.styles = {\n          ...this.styles,\n          tableCursor: 'col-resize'\n        };\n\n        return this.resizeHandleContainerMouseMove$.pipe(\n          tap(() => this.clearMouseHighlights()),\n          takeUntil(this.windowMouseUp$)\n        );\n      })\n    );\n\n    resizeHandleDrag$.subscribe((event: MouseEvent) => {\n      requestAnimationFrame(() => {\n        this.columns = this.columns.map(column => {\n          if (this.headerBeingResized && column.name === this.headerBeingResized.columnName) {\n            const scrollContainerDiv: HTMLDivElement = this.scrollContainer.nativeElement;\n\n            // Read scrollContainerEl's offset left relative to the document.\n            const horizontalOffset = scrollContainerDiv.getBoundingClientRect().left;\n\n            // Adjust with the scrollContainerEl horizontal scroll position.\n            const horizontalScrollOffset = scrollContainerDiv.scrollLeft - horizontalOffset;\n\n            // Read left offset of the resized header.\n            const headerOffsetLeft = this.headerBeingResized.el.offsetLeft || 0;\n\n            // Calculate the desired width.\n            const width = horizontalScrollOffset + event.clientX - headerOffsetLeft;\n\n            return {\n              ...column,\n              // Update the column object with the new size value, enforce our minimum size.\n              gridTrackSize: `${Math.max(minColumnGridTrackSize, width)}px`\n            };\n          }\n\n          return column;\n        });\n\n        /*\n         * Update the column sizes.\n         * Note: grid-template-columns sets the width for all columns in one value.\n         */\n        this.updateGridColumnsSize();\n      });\n    });\n\n    // Listen for mouseup on the whole document to cancel resizing\n    this.windowMouseUp$.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {\n      if (this.headerBeingResized) {\n        this.columns = this.columns.map(column => {\n          if (column.name === this.headerBeingResized.columnName) {\n            return {\n              ...column,\n              headerCSSClassName: without(column.headerCSSClassName, 'header--being-resized')\n            };\n          }\n          return column;\n        });\n        this.headerBeingResized = undefined;\n        this.styles = {\n          ...this.styles,\n          tableCursor: 'auto'\n        };\n      }\n    });\n  }\n\n  private clearMouseHighlights() {\n    if (window.getSelection) {\n      window.getSelection().removeAllRanges();\n    }\n  }\n\n  private _getCellRendererSpec({ type, value, row, columnName }): CellRendererSpec {\n    const column = this.columns.find(({ name }) => name === columnName);\n    const columnRenderer = this.getColumnRenderer(column);\n    const rendererTemplate = get(\n      columnRenderer,\n      `${type === 'HEADER' ? 'headerCellRendererDef' : 'cellRendererDef'}.template`\n    );\n\n    const { cellRendererComponent, headerCellRendererComponent } = column;\n    const rendererComponent =\n      type === 'HEADER' ? headerCellRendererComponent : cellRendererComponent;\n\n    return {\n      renderer: rendererTemplate || rendererComponent,\n      context: {\n        value,\n        item: row,\n        property: column\n      }\n    };\n  }\n\n  private getColumnRenderer(column): ColumnDirective {\n    return this.columnRenderers.toArray().find(({ name }) => name === column.name);\n  }\n\n  private updateFilteringLabelsParams(stats: DataSourceStats) {\n    this.filteringLabelsParams = {\n      filteredItemsCount: stats.filteredSize,\n      allItemsCount: stats.size\n    };\n  }\n\n  private updatePaginationLabelParams(stats: DataSourceStats) {\n    if (stats.nextPage) {\n      this.pagination = { ...this.pagination, nextPage: stats.nextPage };\n    }\n\n    const pageFirstItemIdx = (stats.currentPage - 1) * stats.firstPageSize + 1;\n    this.paginationLabelParams = {\n      pageFirstItemIdx,\n      pageLastItemIdx: pageFirstItemIdx + (stats.currentPageSize - 1),\n      itemsTotal: stats.filteredSize\n    };\n  }\n\n  private updatePaginationWhenNoDevicesLastPage(stats: DataSourceStats) {\n    if (!stats.nextPage && stats.currentPageSize === 0 && stats.size > 0) {\n      this.pagination = {\n        ...this.pagination,\n        currentPage: this.pagination.currentPage - 1,\n        nextPage: null\n      };\n    }\n  }\n\n  private createLoadMoreComponent(stats: DataSourceStats) {\n    if (\n      this.infiniteScroll &&\n      stats &&\n      stats.nextPage &&\n      (!this.loadMoreComponent || this.recreateLoadMoreComponent)\n    ) {\n      this.recreateLoadMoreComponent = false;\n      this.infiniteScrollContainer.clear();\n      const componentRef = this.infiniteScrollContainer.createComponent(LoadMoreComponent);\n      const instance = componentRef.instance as LoadMoreComponent;\n      instance.useIntersection = this.infiniteScroll === 'auto' || this.infiniteScroll === 'hidden';\n      instance.hidden = this.infiniteScroll === 'hidden';\n      instance.paging = {\n        nextPage: stats.nextPage,\n        next: this.loadNextPage.bind(this)\n      } as Paging<IIdentified>;\n      instance.loadNextLabel = this.loadMoreItemsLabel;\n      instance.loadingLabel = this.loadingItemsLabel;\n      this.loadMoreComponent = instance;\n    } else if (this.loadMoreComponent && !stats.nextPage) {\n      this.loadMoreComponent.paging = {\n        nextPage: null\n      } as Paging<IIdentified>;\n    }\n  }\n\n  private scrollToTop() {\n    if (this.infiniteScroll) {\n      this.scrollContainer.nativeElement.scrollTop = 0;\n    }\n  }\n\n  private processAndPersistConfigChange() {\n    merge(\n      merge(\n        this.onSort,\n        this.onPageSizeChange,\n        this.onColumnReordered,\n        this.onColumnVisibilityChange\n      ).pipe(map(config => config.columns)),\n      merge(this.onAddCustomColumn, this.onRemoveCustomColumn).pipe(\n        map(() => (this.columns || []).map(this.mapColumnToConfig.bind(this)))\n      ),\n      this.onFilter.pipe(\n        map(({ columnName, filteringModifier }) =>\n          this.columns.map(this.mapColumnToConfig.bind(this)).map((column: ColumnConfig) => {\n            if (isNil(columnName)) {\n              delete column.filter;\n            } else if (column.name === columnName) {\n              if (isEmpty(filteringModifier)) {\n                delete column.filter;\n              } else {\n                column.filter = filteringModifier;\n              }\n            }\n\n            return column;\n          })\n        )\n      )\n    )\n      .pipe(\n        map((columns: Array<ColumnConfig | CustomColumnConfig>) => ({\n          columns,\n          pagination: { pageSize: this.pagination.pageSize }\n        })),\n        filter(() => !!this.configurationStrategy),\n        this.trimFilterConfigPipe(),\n        this.trimSortConfigPipe(),\n        this.trimCustomColumnConfigPipe(),\n        this.ignoreColumnOrderPipe(),\n        this.ignoreColumnVisibilityPipe(),\n        concatMap((config: GridConfig) => this.configurationStrategy.saveConfig$(config)),\n        takeUntil(this.unsubscribe$)\n      )\n      .subscribe();\n  }\n\n  private trimFilterConfigPipe(): UnaryFunction<Observable<GridConfig>, Observable<GridConfig>> {\n    return pipe(\n      this.checkEventPipe('filter', config => {\n        config.columns = (config.columns || []).map(col => {\n          delete col.filter;\n          return col;\n        });\n\n        return config;\n      })\n    );\n  }\n\n  private trimSortConfigPipe(): UnaryFunction<Observable<GridConfig>, Observable<GridConfig>> {\n    return pipe(\n      this.checkEventPipe('sort', config => {\n        config.columns = (config.columns || []).map(col => {\n          col.sortOrder = '';\n          return col;\n        });\n\n        return config;\n      })\n    );\n  }\n\n  private trimCustomColumnConfigPipe(): UnaryFunction<\n    Observable<GridConfig>,\n    Observable<GridConfig>\n  > {\n    return pipe(\n      this.checkEventPipe('customColumns', config => {\n        config.columns = (config.columns || []).filter((col: CustomColumnConfig) => !col.custom);\n\n        return config;\n      })\n    );\n  }\n\n  private ignoreColumnOrderPipe(): UnaryFunction<Observable<GridConfig>, Observable<GridConfig>> {\n    return pipe(\n      this.checkEventPipe('order', config => {\n        return this.configurationStrategy.getConfig$().pipe(\n          map(oldConfig => {\n            const oldColumns: ColumnConfig[] =\n              oldConfig?.columns || (this.defaultColumns as ColumnConfig[]);\n            // check if custom columns have been added\n            const columnsAdded = (config.columns || []).filter(\n              col => !oldColumns.find(old => old.name === col.name)\n            );\n\n            config.columns = [\n              ...oldColumns.map(oldCol =>\n                (config.columns || []).find(newCol => newCol.name === oldCol.name)\n              ),\n              ...columnsAdded\n            ];\n\n            return config;\n          })\n        );\n      })\n    );\n  }\n\n  private ignoreColumnVisibilityPipe(): UnaryFunction<\n    Observable<GridConfig>,\n    Observable<GridConfig>\n  > {\n    return pipe(\n      this.checkEventPipe('visibility', config => {\n        return this.configurationStrategy.getConfig$().pipe(\n          map(oldConfig => {\n            config.columns = (config.columns || []).map(newCol => {\n              const columns: ColumnConfig[] =\n                oldConfig?.columns || (this.defaultColumns as ColumnConfig[]);\n              const oldCol = columns.find((col: any) => newCol.name === col.name);\n              newCol.visible = oldCol?.visible ?? true;\n              return newCol;\n            });\n\n            return config;\n          })\n        );\n      })\n    );\n  }\n\n  private checkEventPipe(\n    configPart: GridConfigPart,\n    trimEventDataFn: (config: GridConfig) => GridConfig | Observable<GridConfig>\n  ): UnaryFunction<Observable<GridConfig>, Observable<GridConfig>> {\n    return pipe(\n      concatMap((config: GridConfig) => {\n        return this.resolveConfigFilter\n          .call(this, configPart)\n          .pipe(map(keepEventData => ({ config, keepEventData })));\n      }),\n      map(({ config, keepEventData }) =>\n        keepEventData ? config : trimEventDataFn.call(this, config)\n      ),\n      concatMap(config => (isObservable(config) ? config : of(config)) as Observable<GridConfig>)\n    );\n  }\n\n  private resolveConfigFilter(configPart: GridConfigPart): Observable<boolean> {\n    let result: boolean | Observable<boolean> | Promise<boolean>;\n    const valueOrFn = this.configurationStrategy.getContext()?.configFilter?.[configPart];\n    if (typeof valueOrFn === 'function') {\n      result = valueOrFn();\n    } else {\n      result = valueOrFn;\n    }\n    return toObservable(result ?? true);\n  }\n\n  private safelyInvokeMatcher(\n    matchesFn: (\n      route: ActivatedRoute,\n      context?: GridConfigContext\n    ) => boolean | Promise<boolean> | Observable<boolean>,\n    route: ActivatedRoute,\n    context?: GridConfigContext\n  ) {\n    if (matchesFn) {\n      try {\n        return matchesFn(route, context);\n      } catch (e) {\n        return false;\n      }\n    }\n  }\n}\n","@let loadingData = ((dataSource.loading$ | async) && !loadMoreComponent?.isLoading) || loading;\n\n<div\n  class=\"table-data-grid-scroll\"\n  #scroll\n  [ngClass]=\"{\n    'table-data-grid__overlay': loadingData\n  }\"\n  data-cy=\"c8y-data-grid--table-data-grid-scroll\"\n>\n  @if (loadingData && displayOptions.showLoadingIndicator) {\n    <div class=\"table-data-grid__loading--wrapper\">\n      <div class=\"table-data-grid__loading--loader\">\n        <c8y-loading\n          layout=\"application\"\n          [message]=\"loadingItemsLabel\"\n        ></c8y-loading>\n      </div>\n    </div>\n  }\n\n  @if (displayOptions.gridHeader) {\n    <div class=\"table-data-grid-header separator large-padding\">\n      <div\n        class=\"h4\"\n        [ngClass]=\"{ 'm-r-16': !!title }\"\n      >\n        {{ title | translate }}\n      </div>\n\n      @if (displayOptions.filter) {\n        @if (!filteringApplied) {\n          <span>\n            @if (!!filteringLabelsParams.allItemsCount) {\n              <small\n                class=\"m-r-4\"\n                ngNonBindable\n                translate\n                [translateParams]=\"filteringLabelsParams\"\n              >\n                {{ filteredItemsCount }} of {{ allItemsCount }} items\n              </small>\n            }\n            <span\n              class=\"label label-default m-r-4\"\n              translate\n            >\n              No filters\n            </span>\n          </span>\n        }\n        @if (filteringApplied) {\n          <span class=\"d-flex a-i-center\">\n            @if (!!filteringLabelsParams.allItemsCount) {\n              <div class=\"a-i-center\">\n                <span class=\"badge badge-info m-r-4\">\n                  {{ (dataSource.stats$ | async).filteredSize }}\n                </span>\n                <small\n                  ngNonBindable\n                  translate\n                  [translateParams]=\"filteringLabelsParams\"\n                >\n                  of {{ allItemsCount }} items\n                </small>\n              </div>\n            }\n            <div\n              class=\"dropdown\"\n              placement=\"bottom left\"\n              dropdown\n              #ddFilters=\"bs-dropdown\"\n              [cdkTrapFocus]=\"ddFilters.isOpen\"\n              [insideClick]=\"true\"\n            >\n              <button\n                class=\"btn btn-default btn-sm m-l-8\"\n                title=\"{{ 'Active filters' | translate }}\"\n                aria-haspopup=\"true\"\n                dropdownToggle\n                data-cy=\"c8y-data-grid--filters\"\n              >\n                <i\n                  class=\"m-r-4\"\n                  c8yIcon=\"filter\"\n                ></i>\n                <span>{{ 'Active filters' | translate }}</span>\n                <span class=\"badge badge-system\">\n                  {{ columnsWithFiltersApplied.length }}\n                </span>\n              </button>\n\n              <div\n                class=\"dropdown-menu\"\n                *dropdownMenu\n                (click)=\"$event.stopPropagation()\"\n              >\n                <div class=\"data-grid__dropdown bg-level-0\">\n                  <ul class=\"list-unstyled m-0\">\n                    @for (column of columnsWithFiltersApplied; track $index; let last = $last) {\n                      <li [ngClass]=\"{ 'separator-bottom': !last }\">\n                        <ng-container>\n                          <div\n                            class=\"dropdown-header sticky-top text-truncate no-border-top p-b-0\"\n                            title=\"{{ (column.header | translate) || column.name }}\"\n                          >\n                            <label>\n                              {{ (column.header | translate) || column.name }}\n                            </label>\n                          </div>\n                          @for (\n                            groupedFilterChips of column\n                              | mapToFilterChips\n                              | async\n                              | groupedFilterChips;\n                            track $index;\n                            let first = $first\n                          ) {\n                            <div\n                              class=\"list-group-item borderless d-flex d-col\"\n                              [ngClass]=\"{ 'p-t-0': first }\"\n                            >\n                              @if (groupedFilterChips.label) {\n                                <p class=\"small p-b-4\">\n                                  {{ groupedFilterChips.label | translate }}\n                                </p>\n                              }\n                              <div class=\"d-flex a-i-center gap-4 flex-wrap\">\n                                @for (chip of groupedFilterChips.chips; track $index) {\n                                  <span class=\"tag tag--info chip\">\n                                    <button\n                                      class=\"btn btn-xs btn-clean text-10 m-r-4\"\n                                      title=\"{{ 'Remove filter' | translate }}\"\n                                      (click)=\"removeFilter(chip.remove())\"\n                                      data-cy=\"c8y-data-grid--remove-chip\"\n                                    >\n                                      <i c8yIcon=\"times\"></i>\n                                    </button>\n                                    {{ chip.displayValue | translate }}\n                                  </span>\n                                }\n                              </div>\n                            </div>\n                          }\n                        </ng-container>\n                      </li>\n                    }\n                  </ul>\n                </div>\n                <div class=\"list-group-item separator-top sticky-bottom\">\n                  <button\n                    class=\"btn btn-sm btn-default\"\n                    title=\"{{ 'Clear all filters' | translate }}\"\n                    type=\"button\"\n                    (click)=\"clearFilters()\"\n                    data-cy=\"c8y-data-grid--clear-filters\"\n                  >\n                    {{ 'Clear all filters' | translate }}\n                  </button>\n                </div>\n              </div>\n            </div>\n          </span>\n        }\n\n        @if (displayOptions.filter) {\n          <button\n            class=\"btn-help btn-help--sm hidden-xs hidden-sm\"\n            [attr.aria-label]=\"'Help' | translate\"\n            [popover]=\"filtersHelpPopover\"\n            placement=\"right\"\n            triggers=\"focus\"\n            type=\"button\"\n            data-cy=\"data-grid--help-filters\"\n          >\n            <i c8yIcon=\"question-circle-o\"></i>\n          </button>\n        }\n        <ng-template #filtersHelpPopover>\n          <div [innerHtml]=\"filtersHelpPopoverHtml | translate\"></div>\n        </ng-template>\n\n        @if (showCounterWarning) {\n          <button\n            class=\"btn-clean text-primary hidden-xs hidden-sm\"\n            [attr.aria-label]=\"'Help' | translate\"\n            popover=\"{{\n              'The counter for the total number of items might be inaccurate.' | translate\n            }}\"\n            placement=\"right\"\n            triggers=\"focus\"\n            type=\"button\"\n          >\n            <i c8yIcon=\"warning\"></i>\n          </button>\n        }\n      }\n\n      <div class=\"m-l-auto\">\n        <div class=\"btnbar d-flex a-i-center\">\n          @for (\n            headerActionControl of headerActionControls | visibleControls | async;\n            track $index\n          ) {\n            <ng-container>\n              @if (!headerActionControl.template) {\n                <button\n                  class=\"btnbar-btn btn-link\"\n                  title=\"{{ headerActionControl.text | translate }}\"\n                  type=\"button\"\n                  (click)=\"headerActionControl.callback()\"\n                  c8yProductExperience\n                  inherit\n                  [actionData]=\"{\n                    action: PX_ACTIONS.CUSTOM_ACTION,\n                    customActionName: headerActionControl.text,\n                    type: headerActionControl.type\n                  }\"\n                >\n                  <i\n                    class=\"m-r-4\"\n                    [c8yIcon]=\"headerActionControl.icon\"\n                  ></i>\n                  <span>{{ headerActionControl.text | translate }}</span>\n                </button>\n              } @else {\n                <ng-container\n                  *ngTemplateOutlet=\"\n                    headerActionControl.template;\n                    context: { headerActionControl: headerActionControl }\n                  \"\n                ></ng-container>\n              }\n            </ng-container>\n          }\n\n          @if (configureColumnsEnabled) {\n            <div\n              class=\"dropdown\"\n              placement=\"bottom left\"\n              dropdown\n              #ddConfigureColumns=\"bs-dropdown\"\n              [cdkTrapFocus]=\"ddConfigureColumns.isOpen\"\n              [insideClick]=\"true\"\n            >\n              <button\n                class=\"btnbar-btn\"\n                title=\"{{ 'Configure columns' | translate }}\"\n                type=\"button\"\n                data-cy=\"data-grid--custom-column-btn\"\n                dropdownToggle\n              >\n                <i\n                  class=\"m-r-4\"\n                  c8yIcon=\"columns\"\n                ></i>\n                <span>{{ 'Configure columns' | translate }}</span>\n              </button>\n\n              <ul\n                class=\"dropdown-menu data-grid__dropdown\"\n                *dropdownMenu\n                (click)=\"$event.stopPropagation()\"\n              >\n                <li>\n                  <div\n                    class=\"list-group m-0\"\n                    cdkDropList\n                    (cdkDropListDropped)=\"onColumnDrop($event)\"\n                  >\n                    @for (column of columns; track $index) {\n                      <div\n                        cdkDrag\n                        cdkDragLockAxis=\"y\"\n                      >\n                        @if (!column.positionFixed) {\n                          <div class=\"list-group-item draggable-after p-l-16 p-r-16 a-i-center\">\n                            <label\n                              class=\"c8y-checkbox min-width-0\"\n                              title=\"{{ column.custom ? ('Custom' | translate) + ' ' : '' }}{{\n                                (column.header | translate) || column.name\n                              }}\"\n                              [attr.data-cy]=\"'data-grid--custom-column-header-' + column.header\"\n                            >\n                              <input\n                                type=\"checkbox\"\n                                [(ngModel)]=\"column.visible\"\n                                (change)=\"\n                                  updateGridColumnsSize();\n                                  emitConfigChange('changeColumnVisibility')\n                                \"\n                                c8yProductExperience\n                                inherit\n                                [actionData]=\"{\n                                  action: PX_ACTIONS.CHANGE_VISIBILITY,\n                                  column: column.name,\n                                  visible: !column.visible\n                                }\"\n                              />\n                              <span></span>\n                              <div class=\"d-col min-width-0 m-l-8 m-r-8\">\n                                @if (column?.custom) {\n                                  <span class=\"text-muted text-10 m-b-0\">\n                                    {{ 'Custom' | translate }}\n                                  </span>\n                                }\n                                <span class=\"text-truncate l-h-1 m-t-2\">\n                                  {{ (column.header | translate) || column.name }}\n                                </span>\n                              </div>\n                              @let canRetrieve = canRetrieveAssetProperties | async;\n                              @if (canRetrieve) {\n                                @if (canRetrieve && column?.type) {\n                                  <span\n                                    class=\"tag tag--default a-s-end\"\n                                    title=\"{{ column.type | translate | humanize }}\"\n                                  >\n                                    {{ column.type | translate | humanize }}\n                                  </span>\n                                }\n                              }\n                            </label>\n                            @if (column.custom) {\n                              <button\n                                class=\"btn btn-dot btn-dot--danger showOnHover max-width-fit a-i-center\"\n                                [attr.aria-label]=\"'Remove`column,verb`' | translate\"\n                                tooltip=\"{{ 'Remove`column,verb`' | translate }}\"\n                                placement=\"left\"\n                                container=\"body\"\n                                type=\"button\"\n                                (click)=\"removeCustomColumn(poConfirm, column, ddConfigureColumns)\"\n                              >\n                                <c8y-popover-confirm\n                                  [title]=\"'Confirm removal' | translate\"\n                                  triggers=\"focus\"\n                                  [placement]=\"'left'\"\n                                  #poConfirm\n                                ></c8y-popover-confirm>\n                                <i\n                                  c8yIcon=\"minus-circle\"\n                                  data-cy=\"data-grid--custom-column-remove-btn\"\n                                ></i>\n                              </button>\n                            }\n                          </div>\n                        }\n                      </div>\n                    }\n                  </div>\n                </li>\n                @if (isConfigContextKnown) {\n                  <li class=\"p-8 sticky-bottom separator-top\">\n                    <button\n                      class=\"btn btn-default btn-block\"\n                      title=\"{{ 'Add custom column' | translate }}\"\n                      type=\"button\"\n                      data-cy=\"data-grid--add-custom-column\"\n                      (click)=\"openCustomColumn(); ddConfigureColumns.hide()\"\n                    >\n                      <i\n                        class=\"m-r-4\"\n                        c8yIcon=\"plus-circle\"\n                      ></i>\n                      <span>{{ 'Add custom column' | translate }}</span>\n                    </button>\n                  </li>\n                }\n              </ul>\n            </div>\n          }\n\n          @if (!hideReload) {\n            <button\n              class=\"btnbar-btn btn-link\"\n              title=\"{{ 'Reload' | translate }}\"\n              type=\"button\"\n              data-cy=\"data-grid--reload-btn\"\n              [disabled]=\"dataSource.loading$ | async\"\n              (click)=\"clickReload()\"\n            >\n              <i\n                class=\"m-r-4\"\n                c8yIcon=\"refresh\"\n              ></i>\n              <span>{{ 'Reload' | translate }}</span>\n            </button>\n          }\n\n          @if (!serverSideDataCallback || showSearch) {\n            <div class=\"input-group input-group-search m-l-sm-16 data-grid__search-input\">\n              <input\n                class=\"form-control\"\n                placeholder=\"{{ 'Search…' | translate }}\"\n                type=\"search\"\n                [(ngModel)]=\"searchText\"\n                (ngModelChange)=\"searchText$.emit($event)\"\n                (keydown.enter)=\"$event.stopPropagation(); performSearch(searchText)\"\n              />\n              <div class=\"input-group-addon\">\n                @if (searchText.length === 0) {\n                  <i c8yIcon=\"search\"></i>\n                }\n                @if (searchText.length > 0) {\n                  <i\n                    class=\"pointer\"\n                    c8yIcon=\"times\"\n                    (click)=\"searchText = ''; searchText$.emit('')\"\n                    c8yProductExperience\n                    inherit\n                    [actionData]=\"{ action: PX_ACTIONS.CLEAR_SEARCH }\"\n                  ></i>\n                }\n              </div>\n            </div>\n          }\n        </div>\n      </div>\n      @if (selectedItemIds.length !== 0) {\n        <div\n          class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n          data-cy=\"table-data-grid-header-bulk-actions\"\n        >\n          <h4>\n            <ng-container [ngPlural]=\"selectedItemIds.length\">\n              <ng-template ngPluralCase=\"=1\">\n                <span translate>1 selected item.</span>\n              </ng-template>\n              <ng-template ngPluralCase=\"other\">\n                <span\n                  ngNonBindable\n                  translate\n                  [translateParams]=\"{ count: selectedItemIds.length }\"\n                >\n                  {{ count }} selected items.\n                </span>\n              </ng-template>\n            </ng-container>\n            <br class=\"visible-xs\" />\n            @if (!serverSideDataCallback && selectedItemIds.length >= pagination.pageSize) {\n              <small>\n                <a\n                  class=\"interact\"\n                  (click)=\"setAllItemsSelected(true)\"\n                  c8yProductExperience\n                  inherit\n                  [actionData]=\"{ action: PX_ACTIONS.SELECT_ALL_ITEMS }\"\n                >\n                  <span\n                    ngNonBindable\n                    translate\n                    [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n                  >\n                    Select all {{ count }} items\n                  </span>\n                </a>\n              </small>\n            }\n          </h4>\n          <div class=\"m-l-auto\">\n            <div class=\"btnbar d-flex\">\n              @for (\n                bulkActionControl of bulkActionControls | visibleControls: selectedItemIds | async;\n                track $index\n              ) {\n                <ng-container>\n                  @switch (bulkActionControl.type) {\n                    @case (builtInActionType.Export) {\n                      <button\n                        class=\"btnbar-btn\"\n                        title=\"{{ 'Export' | translate }}\"\n                        type=\"button\"\n                        (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n                        [actionData]=\"{ action: PX_ACTIONS.BULK_EXPORT }\"\n                        c8yProductExperience\n                        inherit\n                      >\n                        <i c8yIcon=\"sign-out\"></i>\n                        <span>{{ 'Export' | translate }}</span>\n                      </button>\n                    }\n                    @case (builtInActionType.Delete) {\n                      <button\n                        class=\"btnbar-btn\"\n                        title=\"{{ 'Delete' | translate }}\"\n                        type=\"button\"\n                        (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n                        [actionData]=\"{ action: PX_ACTIONS.BULK_DELETE }\"\n                        c8yProductExperience\n                        inherit\n                      >\n                        <i c8yIcon=\"delete\"></i>\n                        <span>{{ 'Delete' | translate }}</span>\n                      </button>\n                    }\n                    @default {\n                      <button\n                        class=\"btnbar-btn\"\n                        title=\"{{ bulkActionControl.text | translate }}\"\n                        type=\"button\"\n                        (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n                        [actionData]=\"{\n                          action: PX_ACTIONS.BULK_CUSTOM_ACTION,\n                          customActionName: bulkActionControl.text\n                        }\"\n                        c8yProductExperience\n                        inherit\n                      >\n                        <i\n                          [class]=\"bulkActionControl.iconClasses\"\n                          c8yIcon=\"{{ bulkActionControl.icon }}\"\n                        ></i>\n                        <span>{{ bulkActionControl.text | translate }}</span>\n                      </button>\n                    }\n                  }\n                </ng-container>\n              }\n\n              <button\n                class=\"btnbar-btn\"\n                title=\"{{ 'Cancel' | translate }}\"\n                type=\"button\"\n                (click)=\"cancel()\"\n                [actionData]=\"{\n                  action: PX_ACTIONS.BULK_CANCEL\n                }\"\n                c8yProductExperience\n                inherit\n              >\n                <i c8yIcon=\"times\"></i>\n                <span>{{ 'Cancel' | translate }}</span>\n              </button>\n            </div>\n          </div>\n        </div>\n      }\n    </div>\n  }\n\n  <table\n    class=\"table table-filtered-sorted table-data-grid large-padding\"\n    [class.table-striped]=\"displayOptions.striped && !treeGrid\"\n    [class.table-bordered]=\"displayOptions.bordered\"\n    [class.table-hover]=\"displayOptions.hover\"\n    [class.table-data-grid-with-checkboxes]=\"selectable\"\n    [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n    [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n    cdk-table\n    [dataSource]=\"dataSource\"\n    [multiTemplateDataRows]=\"true\"\n    (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n    data-cy=\"c8y-data-grid--table\"\n  >\n    @for (column of columns; track column.name; let i = $index) {\n      <ng-container [cdkColumnDef]=\"column.name\">\n        @switch (column.name) {\n          @case ('checkbox') {\n            <th\n              cdk-header-cell\n              *cdkHeaderCellDef\n              data-type=\"icon\"\n            >\n              <div>\n                <label class=\"c8y-checkbox\">\n                  <input\n                    [attr.aria-label]=\"'Selected' | translate\"\n                    type=\"checkbox\"\n                    [checked]=\"currentPageSelectionState.allSelected\"\n                    [indeterminate]=\"\n                      !(\n                        currentPageSelectionState.allSelected ||\n                        currentPageSelectionState.allDeselected\n                      )\n                    \"\n                    (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n                    c8yProductExperience\n                    inherit\n                    [actionData]=\"{ action: PX_ACTIONS.SELECT_ALL_ITEMS }\"\n                  />\n                  <span></span>\n                </label>\n              </div>\n            </th>\n\n            <td\n              cdk-cell\n              *cdkCellDef=\"let row\"\n              data-type=\"icon\"\n            >\n              <label class=\"c8y-checkbox\">\n                <input\n                  [attr.aria-label]=\"'Selected' | translate\"\n                  type=\"checkbox\"\n                  [checked]=\"isItemSelected(row)\"\n                  (change)=\"setItemsSelected([row], $event.target.checked)\"\n                  c8yProductExperience\n                  inherit\n                  [actionData]=\"{\n                    action: PX_ACTIONS.SELECT_ITEM,\n                    id: row.id\n                  }\"\n                  data-cy=\"c8y-data-grid--checkbox\"\n                />\n                <span></span>\n              </label>\n            </td>\n          }\n\n          @case ('radio-button') {\n            <th\n              cdk-header-cell\n              *cdkHeaderCellDef\n              data-type=\"icon\"\n            ></th>\n\n            <td\n              cdk-cell\n              *cdkCellDef=\"let row\"\n              data-type=\"icon\"\n            >\n              <label class=\"c8y-radio\">\n                <input\n                  [attr.aria-label]=\"'Selected' | translate\"\n                  name=\"select-row\"\n                  type=\"radio\"\n                  [checked]=\"isItemSelected(row)\"\n                  (change)=\"changeSelectedItem(row)\"\n                  c8yProductExperience\n                  inherit\n                  [actionData]=\"{\n                    action: PX_ACTIONS.SELECT_ITEM,\n                    id: row.id\n                  }\"\n                  data-cy=\"c8y-data-grid--radio\"\n                />\n                <span></span>\n              </label>\n            </td>\n          }\n\n          @case ('actions') {\n            <th\n              cdk-header-cell\n              *cdkHeaderCellDef\n              data-type=\"icon\"\n            >\n              <p class=\"text-medium sr-only\">{{ 'Actions' | translate }}</p>\n            </th>\n\n            <td\n              cdk-cell\n              *cdkCellDef=\"let row\"\n              data-type=\"icon\"\n            >\n              @for (\n                actionControl of actionControls\n                  | visibleControls: row\n                  | async\n                  | slice\n                    : 0\n                    : ((actionControls | visibleControls: row | async)?.length > 2 ? 1 : 2);\n                track $index\n              ) {\n                <ng-container>\n                  @switch (actionControl.type) {\n                    @case (builtInActionType.Edit) {\n                      <button\n                        class=\"btn btn-dot\"\n                        [attr.aria-label]=\"'Edit' | translate\"\n                        tooltip=\"{{ 'Edit' | translate }}\"\n                        container=\"body\"\n                        type=\"button\"\n                        [delay]=\"500\"\n                        (click)=\"actionControl.callback(row, reload.bind(this))\"\n                        c8yProductExperience\n                        inherit\n                        [actionData]=\"{\n                          action: PX_ACTIONS.EDIT_ITEM,\n                          id: row.id\n                        }\"\n                        data-cy=\"c8y-data-grid--edit-button-in-row\"\n                      >\n                        <i c8yIcon=\"pencil\"></i>\n                      </button>\n                    }\n                    @case (builtInActionType.Delete) {\n                      <button\n                        class=\"btn btn-dot btn-dot--danger showOnHover\"\n                        [attr.aria-label]=\"'Delete' | translate\"\n                        tooltip=\"{{ 'Delete' | translate }}\"\n                        container=\"body\"\n                        type=\"button\"\n                        [delay]=\"500\"\n                        (click)=\"actionControl.callback(row, reload.bind(this))\"\n                        [actionData]=\"{\n                          action: PX_ACTIONS.DELETE_ITEM,\n                          id: row.id\n                        }\"\n                        c8yProductExperience\n                        inherit\n                        data-cy=\"c8y-data-grid--remove-button-in-row\"\n                      >\n                        <i c8yIcon=\"delete\"></i>\n                      </button>\n                    }\n                    @default {\n                      <button\n                        class=\"btn btn-dot\"\n                        [attr.aria-label]=\"\n                          (actionControl.icon ? actionControl.text : '') | translate\n                        \"\n                        tooltip=\"{{ (actionControl.icon ? actionControl.text : '') | translate }}\"\n                        container=\"body\"\n                        type=\"button\"\n                        [ngClass]=\"{ showOnHover: actionControl.showOnHover }\"\n                        [delay]=\"500\"\n                        (click)=\"actionControl.callback(row, reload.bind(this))\"\n                        [actionData]=\"{\n                          action: PX_ACTIONS.CUSTOM_ACTION_ITEM,\n                          customActionName: actionControl.text,\n                          id: row.id\n                        }\"\n                        c8yProductExperience\n                        inherit\n                        [attr.data-cy]=\"'c8y-data-grid--button-in-row--' + actionControl.text\"\n                      >\n                        @if (actionControl.icon) {\n                          <i\n                            c8yIcon=\"{{ actionControl.icon }}\"\n                            [ngClass]=\"actionControl.iconClasses\"\n                          ></i>\n                        } @else {\n                          <span>{{ actionControl.text | translate }}</span>\n                        }\n                      </button>\n                    }\n                  }\n                </ng-container>\n              }\n\n              <div\n                [ngClass]=\"{\n                  'm-l-auto overflow-visible':\n                    (actionControls | visibleControls: row | async)?.length > 2\n                }\"\n              >\n                @if ((actionControls | visibleControls: row | async)?.length > 2) {\n                  <div\n                    class=\"dropdown\"\n                    placement=\"bottom right\"\n                    container=\"body\"\n                    dropdown\n                  >\n                    <button\n                      class=\"dropdown-toggle c8y-dropdown\"\n                      title=\"{{ 'Actions' | translate }}\"\n                      aria-haspopup=\"true\"\n                      type=\"button\"\n                      data-cy=\"c8y-data-grid--row-actions-dropdown\"\n                      dropdownToggle\n                    >\n                      <i c8yIcon=\"ellipsis-v\"></i>\n                    </button>\n                    <ul\n                      class=\"dropdown-menu dropdown-menu-right\"\n                      *dropdownMenu\n                    >\n                      @for (\n                        actionControl of actionControls\n                          | visibleControls: row\n                          | async\n                          | slice\n                            : ((actionControls | visibleControls: row | async)?.length > 2 ? 1 : 2);\n                        track $index\n                      ) {\n                        <li>\n                          @switch (actionControl.type) {\n                            @case (builtInActionType.Edit) {\n                              <button\n                                title=\"{{ 'Edit' | translate }}\"\n                                type=\"button\"\n                                (click)=\"actionControl.callback(row, reload.bind(this))\"\n                                [actionData]=\"{\n                                  action: PX_ACTIONS.EDIT_ITEM,\n                                  id: row.id\n                                }\"\n                                c8yProductExperience\n                                inherit\n                              >\n                                <i c8yIcon=\"pencil\"></i>\n                                {{ 'Edit' | translate }}\n                              </button>\n                            }\n                            @case (builtInActionType.Delete) {\n                              <button\n                                title=\"{{ 'Delete' | translate }}\"\n                                type=\"button\"\n                                (click)=\"actionControl.callback(row, reload.bind(this))\"\n                                [actionData]=\"{\n                                  action: PX_ACTIONS.DELETE_ITEM,\n                                  id: row.id\n                                }\"\n                                c8yProductExperience\n                                inherit\n                              >\n                                <i c8yIcon=\"delete\"></i>\n                                {{ 'Delete' | translate }}\n                              </button>\n                            }\n                            @case (builtInActionType.Export) {\n                              <button\n                                title=\"{{ 'Export' | translate }}\"\n                                type=\"button\"\n                                (click)=\"actionControl.callback(row, reload.bind(this))\"\n                                [actionData]=\"{\n                                  action: PX_ACTIONS.EXPORT_ITEM,\n                                  id: row.id\n                                }\"\n                                c8yProductExperience\n                                inherit\n                              >\n                                <i c8yIcon=\"data-export\"></i>\n                                {{ 'Export' | translate }}\n                              </button>\n                            }\n                            @default {\n                              <button\n                                title=\"{{ actionControl.text | translate }}\"\n                                type=\"button\"\n                                (click)=\"actionControl.callback(row, reload.bind(this))\"\n                                c8yProductExperience\n                                inherit\n                                [actionData]=\"{\n                                  action: PX_ACTIONS.CUSTOM_ACTION_ITEM,\n                                  customActionName: actionControl.text,\n                                  id: row.id\n                                }\"\n                              >\n                                <i\n                                  c8yIcon=\"{{ actionControl.icon }}\"\n                                  [ngClass]=\"actionControl.iconClasses\"\n                                ></i>\n                                {{ actionControl.text | translate }}\n                              </button>\n                            }\n                          }\n                        </li>\n                      }\n                    </ul>\n                  </div>\n                }\n              </div>\n            </td>\n          }\n          @default {\n            <th\n              [class.sorted]=\"column.sortOrder\"\n              [class.filtered]=\"column | map: isColumnFilteringApplied\"\n              [class.hidden]=\"!column.visible\"\n              cdk-header-cell\n              *cdkHeaderCellDef\n              [ngClass]=\"column.headerCSSClassName\"\n              [attr.data-type]=\"column.dataType\"\n            >\n              @if (!column.filterable) {\n                <div [title]=\"(column.header | translate) || column.name\">\n                  @let cellRendererSpec =\n                    [\n                      {\n                        columnName: column.name,\n                        value: (column.header | translate) || column.name\n                      }\n                    ] | map: getHeaderCellRendererSpec : this;\n\n                  @if (cellRendererSpec) {\n                    <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n                  }\n                </div>\n              }\n\n              <!-- isDropDownPlacedRight to be removed when columns are transformed to observables. -->\n              @if (column.filterable) {\n                <div\n                  class=\"dropdown\"\n                  placement=\"bottom {{ isDropDownPlacedRight(column) ? 'right' : 'left' }}\"\n                  dropdown\n                  #gridHeaderDropdown=\"bs-dropdown\"\n                  [cdkTrapFocus]=\"gridHeaderDropdown.isOpen\"\n                  [insideClick]=\"true\"\n                >\n                  <button\n                    class=\"btn-header\"\n                    [title]=\"(column.header | translate) || column.name\"\n                    type=\"button\"\n                    [attr.data-cy]=\"'data-grid--header-btn--' + column.header\"\n                    dropdownToggle\n                  >\n                    @let cellRendererSpec =\n                      [\n                        {\n                          columnName: column.name,\n                          value: (column.header | translate) || column.name\n                        }\n                      ] | map: getHeaderCellRendererSpec : this;\n\n                    @if (cellRendererSpec) {\n                      <c8y-cell-renderer\n                        data-cy=\"c8y-data-grid--c8y-cell-renderer\"\n                        [spec]=\"cellRendererSpec\"\n                      ></c8y-cell-renderer>\n                    }\n                    <i\n                      c8yIcon=\"filter\"\n                      title=\"{{ 'Filter' | translate }}\"\n                    ></i>\n                  </button>\n\n                  <!-- isDropDownPlacedRight to be removed when columns are transformed to observables. -->\n                  <ul\n                    class=\"dropdown-menu\"\n                    *dropdownMenu\n                    [ngClass]=\"{ 'dropdown-menu-right-grid': isDropDownPlacedRight(column) }\"\n                    (click)=\"$event.stopPropagation()\"\n                  >\n                    <li class=\"data-grid__dropdown\">\n                      @let filteringFormRendererSpec =\n                        [\n                          {\n                            column: column,\n                            dropdown: gridHeaderDropdown\n                          }\n                        ] | map: getFilteringFormRendererSpec : this;\n\n                      @if (filteringFormRendererSpec) {\n                        <c8y-filtering-form-renderer\n                          class=\"bg-component\"\n                          [spec]=\"filteringFormRendererSpec\"\n                          data-cy=\"c8y-data-grid--c8y-filtering-form-renderer\"\n                        ></c8y-filtering-form-renderer>\n                      }\n                    </li>\n                  </ul>\n                </div>\n              }\n\n              @if (column.sortable) {\n                <button\n                  class=\"btn-sort\"\n                  [style]=\"{\n                    'margin-left': !column.filterable && column.sortable ? '-20px' : null\n                  }\"\n                  [title]=\"sortColumnTitle | translate: { name: column.header | translate }\"\n                  type=\"button\"\n                  (click)=\"changeSortOrder(column.name)\"\n                  data-cy=\"change-sort-order\"\n                >\n                  @switch (column.sortOrder) {\n                    @case ('asc') {\n                      <i c8yIcon=\"long-arrow-up\"></i>\n                    }\n                    @case ('desc') {\n                      <i c8yIcon=\"long-arrow-down\"></i>\n                    }\n                    @default {\n                      <i c8yIcon=\"exchange\"></i>\n                    }\n                  }\n                </button>\n              }\n\n              @if (column.resizable) {\n                <span\n                  class=\"resize-handle\"\n                  (mousedown)=\"\n                    resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n                  \"\n                ></span>\n              }\n            </th>\n\n            <td\n              [class.hidden]=\"!column.visible\"\n              [attr.data-cell-title]=\"column.header | translate\"\n              cdk-cell\n              *cdkCellDef=\"let row\"\n              [ngClass]=\"column.cellCSSClassName\"\n              [attr.data-cy]=\"'data-grid--' + column.header\"\n              [attr.data-type]=\"column.dataType\"\n            >\n              @let cellRendererSpec =\n                [\n                  {\n                    value: resolveCellValue(row, column.path),\n                    row: row,\n                    columnName: column.name\n                  }\n                ] | map: getCellRendererSpec : this;\n\n              @if (cellRendererSpec) {\n                <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n              }\n            </td>\n          }\n        }\n      </ng-container>\n    }\n\n    <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n      <td\n        [style.grid-column]=\"styles.gridInfiniteScrollColumn\"\n        cdk-footer-cell\n        *cdkFooterCellDef\n      >\n        <template #infiniteScrollContainer></template>\n      </td>\n    </ng-container>\n\n    <tr\n      cdk-header-row\n      *cdkHeaderRowDef=\"columnNames\"\n    ></tr>\n\n    <tr\n      data-cy=\"c8y-data-grid--row-in-data-grid\"\n      cdk-row\n      *cdkRowDef=\"let row; columns: columnNames; let idx = dataIndex; when: isDataRow\"\n      [ngClass]=\"[\n        activeClassName && row === lastClickedRow ? activeClassName : '',\n        idx % 2 === 0 ? 'even' : 'odd',\n        row.level > 0 ? 'data-grid-child-node level-' + row.level : ''\n      ]\"\n      (mouseover)=\"rowMouseOver.emit(row)\"\n      (mouseleave)=\"rowMouseLeave.emit(row)\"\n      (click)=\"handleClick(row)\"\n    ></tr>\n\n    <tr\n      class=\"expanded-row\"\n      [ngClass]=\"{ hidden: !(expandedRows.get(row).visible$ | async) }\"\n      data-cy=\"c8y-data-grid--expanded-row-in-data-grid\"\n      cdk-row\n      *cdkRowDef=\"let row; columns: ['expanded-row']; when: isRowExpanded\"\n    ></tr>\n\n    <ng-container cdkColumnDef=\"expanded-row\">\n      <td\n        [style.grid-column]=\"styles.gridInfiniteScrollColumn\"\n        cdk-cell\n        *cdkCellDef=\"let row\"\n      >\n        <ng-container\n          *ngTemplateOutlet=\"\n            expandableRow?.template;\n            context: {\n              $implicit: row,\n              asyncRenderSuccess: setExpandableRowVisible.bind(this, row, true),\n              asyncRenderFail: setExpandableRowVisible.bind(this, row, false)\n            }\n          \"\n        ></ng-container>\n      </td>\n    </ng-container>\n\n    <tr\n      [class]=\"'pagination-row level-' + (row.parentRow.level + 1)\"\n      cdk-row\n      *cdkRowDef=\"let row; columns: ['pagination-row']; when: isPaginationRow\"\n    ></tr>\n\n    <ng-container cdkColumnDef=\"pagination-row\">\n      <td\n        [style.grid-column]=\"styles.gridInfiniteScrollColumn\"\n        cdk-cell\n        *cdkCellDef=\"let row\"\n      >\n        <div class=\"col-sm-4 no-gutter\">\n          @if ((dataSource.stats$ | async).currentPageSize > 0) {\n            <div\n              class=\"counter p-t-8 p-b-8\"\n              data-cy=\"data-grid--child-counter\"\n            >\n              <span\n                class=\"text-muted\"\n                ngNonBindable\n                translate\n                [translateParams]=\"{\n                  pageFirstItemIdx:\n                    (row.childrenStats.currentPage - 1) * row.childrenStats.firstPageSize + 1,\n                  pageLastItemIdx:\n                    (row.childrenStats.currentPage - 1) * row.childrenStats.firstPageSize +\n                    1 +\n                    (row.childrenStats.currentPageSize - 1),\n                  itemsTotal: row.childrenStats.filteredSize\n                }\"\n              >\n                {{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}\n              </span>\n              <span class=\"text-muted text-12 m-r-4\">{{ 'Parent node' | translate }}</span>\n              <span class=\"tag tag--default\">{{ row.parentRow?.[parentNodeLabelProperty] }}</span>\n            </div>\n          }\n        </div>\n        <div class=\"col-sm-4 col-sm-offset-4 no-gutter text-right\">\n          @if (row.childrenStats.filteredSize > row.childrenStats.currentPageSize) {\n            <pagination\n              class=\"d-flex j-c-end\"\n              [ngModel]=\"row.childrenStats.currentPage\"\n              (pageChanged)=\"updateChildPagination($event, row)\"\n              [totalItems]=\"row.childrenStats.filteredSize\"\n              [itemsPerPage]=\"row?.parentRow?.pagination?.pageSize ?? childNodePagination.pageSize\"\n              [maxSize]=\"5\"\n              [boundaryLinks]=\"false\"\n              [previousText]=\"'Previous' | translate\"\n              [nextText]=\"'Next' | translate\"\n            ></pagination>\n          }\n        </div>\n      </td>\n    </ng-container>\n\n    <ng-container>\n      <tr\n        [ngClass]=\"{ hidden: !infiniteScroll }\"\n        cdk-footer-row\n        *cdkFooterRowDef=\"['infiniteScrollFooter']\"\n      ></tr>\n    </ng-container>\n  </table>\n\n  @if (\n    !(dataSource.loading$ | async) &&\n    !loading &&\n    ((dataSource.stats$ | async).filteredSize === 0 || (dataSource.data$ | async).length === 0)\n  ) {\n    <div class=\"d-flex m-0 p-t-40 p-b-40\">\n      <div class=\"col-lg-3 col-sm-4 m-l-auto m-r-auto\">\n        <ng-content select=\"c8y-ui-empty-state, .c8y-empty-state\"></ng-content>\n        <ng-container\n          *ngTemplateOutlet=\"\n            emptyState?.templateRef;\n            context: { $implicit: emptyStateContext$ | async }\n          \"\n        ></ng-container>\n      </div>\n    </div>\n  }\n\n  @if (pagination && !infiniteScroll) {\n    <div class=\"table-data-grid-footer separator large-padding\">\n      <div class=\"col-sm-4 no-gutter\">\n        @if ((dataSource.stats$ | async).currentPageSize > 0) {\n          <div\n            class=\"counter p-t-8 p-b-8\"\n            data-cy=\"data-grid--counter\"\n          >\n            <span\n              class=\"text-muted\"\n              ngNonBindable\n              translate\n              [translateParams]=\"paginationLabelParams\"\n            >\n              {{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}\n            </span>\n          </div>\n        }\n      </div>\n\n      <div class=\"col-sm-4 no-gutter text-center\">\n        @if ((dataSource.stats$ | async).filteredSize > minPossiblePageSize) {\n          <div class=\"form-group form-inline p-t-8 p-b-8\">\n            <label\n              class=\"m-r-4\"\n              for=\"filteredSize\"\n            >\n              {{ 'Items per page' | translate }}\n            </label>\n            <div class=\"c8y-select-wrapper\">\n              <select\n                class=\"form-control\"\n                id=\"filteredSize\"\n                data-cy=\"data-grid--pagesize-options\"\n                [ngModel]=\"pagination.pageSize\"\n                (ngModelChange)=\"\n                  updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n                \"\n              >\n                @for (pageSize of possiblePageSizes; track $index) {\n                  <option [ngValue]=\"pageSize\">\n                    {{ pageSize }}\n                  </option>\n                }\n              </select>\n            </div>\n          </div>\n        }\n      </div>\n\n      <div class=\"col-sm-4 no-gutter text-right\">\n        @if ((dataSource.stats$ | async).filteredSize > 0) {\n          <pagination\n            [class.hidden]=\"hidePagination$ | async\"\n            class=\"d-flex j-c-end\"\n            [ngModel]=\"pagination.currentPage\"\n            (pageChanged)=\"updatePagination($event)\"\n            [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n            [itemsPerPage]=\"pagination.pageSize\"\n            (numPages)=\"totalPagesCount$.next($event)\"\n            [maxSize]=\"5\"\n            [boundaryLinks]=\"false\"\n            [previousText]=\"'Previous' | translate\"\n            [nextText]=\"'Next' | translate\"\n          ></pagination>\n        }\n      </div>\n    </div>\n  }\n</div>\n","import { Injectable } from '@angular/core';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { get } from 'lodash-es';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { DatePipe } from '../../common';\nimport { toObservable } from '../../common/extension-hooks';\nimport { FilterChip, FilterMapper } from '../data-grid.model';\n\n@Injectable({ providedIn: 'root' })\nexport class BooleanFilterMapper implements FilterMapper {\n  fieldType = ['switch', 'boolean', 'checkbox'];\n  map(field: FormlyFieldConfig, filter: FilterChip): Observable<FilterChip> {\n    if (this.fieldType.includes(field.type.toString())) {\n      if (get(filter.externalFilterQuery, filter.path)) {\n        return of({\n          ...filter,\n          value: get(filter.externalFilterQuery, filter.path),\n          displayValue: field.props?.label\n        });\n      }\n    }\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class RadioFilterMapper implements FilterMapper {\n  fieldType = ['radio', 'enum'];\n  map(field: FormlyFieldConfig, filter: FilterChip) {\n    if (this.fieldType.includes(field.type.toString())) {\n      const fieldOptions = field.props?.options || field.props?.enum;\n      return toObservable(fieldOptions).pipe(\n        map(options => {\n          const object =\n            options.find(option => option.value === get(filter.externalFilterQuery, filter.path)) ??\n            options.find(option => option === get(filter.externalFilterQuery, filter.path));\n          return {\n            ...filter,\n            value: object,\n            displayValue: object?.label\n          };\n        })\n      );\n    }\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class TypeaheadFilterMapper implements FilterMapper {\n  fieldType = 'typeahead';\n  map(field: FormlyFieldConfig, filter: FilterChip) {\n    if (this.fieldType === field.type) {\n      const displayProperty = field.props?.displayProperty;\n\n      const valueNoProps = get(filter.externalFilterQuery, filter.path);\n      const valueProperties = field.props?.valueProperties;\n\n      let value = valueNoProps;\n      if (valueProperties) {\n        value = valueProperties.reduce((acc, prop) => {\n          const value = get(filter.externalFilterQuery, [...filter.path, prop]);\n          return { ...acc, [prop]: value };\n        }, {});\n      }\n\n      return of({\n        ...filter,\n        value,\n        displayValue: get(filter.externalFilterQuery, [...filter.path, displayProperty])\n      });\n    }\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class DateFilterMapper implements FilterMapper {\n  fieldType = ['date-time', 'date'];\n\n  constructor(private datePipe: DatePipe) {}\n\n  map(field: FormlyFieldConfig, filter: FilterChip) {\n    if (this.fieldType.includes(field.type.toString())) {\n      return of({\n        ...filter,\n        label: field.props?.label,\n        displayValue: this.datePipe\n          .transform(new Date(get(filter.externalFilterQuery, filter.path)))\n          .toString(),\n        value: get(filter.externalFilterQuery, filter.path)\n      });\n    }\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SelectFilterMapper implements FilterMapper {\n  fieldType = 'select';\n  map(field: FormlyFieldConfig, filter: FilterChip) {\n    if (this.fieldType === field.type) {\n      return toObservable(field.props?.options).pipe(\n        map(options => {\n          const selectedOption = options.find(\n            option => option.value === get(filter.externalFilterQuery, filter.path)\n          );\n          return {\n            ...filter,\n            value: get(filter.externalFilterQuery, filter.path),\n            displayValue: selectedOption.label\n          };\n        })\n      );\n    }\n  }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class StringFilterMapper implements FilterMapper {\n  fieldType = ['string', 'input'];\n  map(field: FormlyFieldConfig, filter: FilterChip): Observable<FilterChip> {\n    if (this.fieldType.includes(field.type.toString())) {\n      if (get(filter.externalFilterQuery, filter.path)) {\n        return of({\n          ...filter,\n          value: get(filter.externalFilterQuery, filter.path),\n          displayValue: get(filter.externalFilterQuery, filter.path)\n        });\n      }\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\nimport {\n  BooleanFilterMapper,\n  DateFilterMapper,\n  RadioFilterMapper,\n  SelectFilterMapper,\n  StringFilterMapper,\n  TypeaheadFilterMapper\n} from './filter-mapper-impl.service';\nimport { hookFilterMapper } from './filter-mapper.factory';\nimport { FilterMapperPipe } from './filter-mapper.pipe';\nimport { GroupedFilterChips } from './grouped-filter-chips.pipe';\n\n@NgModule({\n  imports: [FilterMapperPipe, GroupedFilterChips],\n  providers: [\n    hookFilterMapper(BooleanFilterMapper),\n    hookFilterMapper(RadioFilterMapper),\n    hookFilterMapper(TypeaheadFilterMapper),\n    hookFilterMapper(DateFilterMapper),\n    hookFilterMapper(SelectFilterMapper),\n    hookFilterMapper(StringFilterMapper)\n  ],\n  exports: [FilterMapperPipe, GroupedFilterChips]\n})\nexport class FilterMapperModule {}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PaginationModule } from 'ngx-bootstrap/pagination';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { CommonModule as C8YCommonModule } from '../common/common.module';\nimport { DynamicFormsModule } from '../dynamic-forms/dynamic-forms.module';\nimport { FormsModule as C8yFormsModule } from '../forms/forms.module';\nimport { ModalModule } from '../modal/modal.module';\nimport { ProductExperienceModule } from '../product-experience/product-experience.module';\nimport { BaseFilteringFormRendererComponent } from './column/base.filtering-form-renderer.component';\nimport { CellRendererDefDirective, HeaderCellRendererDefDirective } from './column/cell-renderer';\nimport { CellRendererComponent } from './column/cell-renderer.component';\nimport { ColumnDirective } from './column/column.directive';\nimport { FilteringFormRendererDefDirective } from './column/filtering-form-renderer';\nimport { FilteringFormRendererComponent } from './column/filtering-form-renderer.component';\nimport { ConfigureCustomColumnComponent } from './configure-custom-column/configure-custom-column.component';\nimport { DataGridComponent } from './data-grid.component';\nimport { FilterMapperModule } from './filter-chip/filter-mapper.module';\nimport { VisibleControlsPipe } from './visible-controls.pipe';\nimport { ExpandableRowDirective } from './expandable-row.directive';\nimport { ExpandableCellRendererComponent } from './column/expandable-row-column/expandable.cell-renderer.component';\nimport { ExpandableHeaderCellRendererComponent } from './column/expandable-row-column/expandable.header-cell-renderer.component';\n@NgModule({\n  imports: [\n    CommonModule,\n    CdkTableModule,\n    DragDropModule,\n    FormsModule,\n    ReactiveFormsModule,\n    DynamicFormsModule,\n    C8YCommonModule,\n    C8yFormsModule,\n    ModalModule,\n    BsDropdownModule.forRoot(),\n    PopoverModule.forRoot(),\n    TooltipModule.forRoot(),\n    PaginationModule.forRoot(),\n    ProductExperienceModule,\n    A11yModule,\n    FilterMapperModule,\n    CellRendererDefDirective,\n    HeaderCellRendererDefDirective,\n    BaseFilteringFormRendererComponent,\n    CellRendererComponent,\n    FilteringFormRendererDefDirective,\n    FilteringFormRendererComponent,\n    ColumnDirective,\n    DataGridComponent,\n    VisibleControlsPipe,\n    ConfigureCustomColumnComponent,\n    ExpandableRowDirective,\n    ExpandableCellRendererComponent,\n    ExpandableHeaderCellRendererComponent\n  ],\n  exports: [\n    CellRendererDefDirective,\n    HeaderCellRendererDefDirective,\n    FilteringFormRendererDefDirective,\n    BaseFilteringFormRendererComponent,\n    ColumnDirective,\n    DataGridComponent,\n    VisibleControlsPipe,\n    ExpandableRowDirective\n  ]\n})\nexport class DataGridModule {}\n","import { Location, NgFor } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { pipe } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { DisplayOption } from './list-display-switch.model';\nimport { FormsModule } from '@angular/forms';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-list-display-switch',\n  templateUrl: './list-display-switch.component.html',\n  standalone: true,\n  imports: [FormsModule, NgFor, C8yTranslatePipe]\n})\nexport class ListDisplaySwitchComponent implements OnInit {\n  /**\n   * The key used to identify the list in local storage.\n   */\n  @Input() listKey: string;\n\n  /**\n   * The length of the list to display.\n   */\n  @Input('listLength')\n  set listLength(val: number) {\n    this._listLength = val;\n    this.loadSelectedOption();\n  }\n\n  /**\n   * The pipe used to filter the list items. It should return an observable that emits the filtered items.\n   */\n  @Input() filterPipe = pipe(tap());\n\n  @Output() onListClassChange: EventEmitter<string> = new EventEmitter<string>();\n  selectedOption: DisplayOption;\n\n  readonly DISPLAY_OPTIONS: DisplayOption[] = [\n    {\n      name: 'AUTO',\n      value: 'auto',\n      label: gettext('Auto'),\n      default: true,\n      getListClass: () => {\n        const option =\n          this._listLength > this.AUTO_GRID_ITEMS_LIMIT\n            ? this.DISPLAY_OPTIONS.find(opt => opt.name === 'LIST')\n            : this.DISPLAY_OPTIONS.find(opt => opt.name === 'GRID');\n        return option.getListClass();\n      }\n    },\n    {\n      name: 'GRID',\n      value: 'grid',\n      label: gettext('Grid'),\n      getListClass: () => 'interact-grid'\n    },\n    {\n      name: 'LIST',\n      value: 'list',\n      label: gettext('List'),\n      getListClass: () => 'interact-list'\n    }\n  ];\n  private readonly AUTO_GRID_ITEMS_LIMIT = 12;\n  private _listLength: number;\n  constructor(private location: Location) {}\n\n  ngOnInit() {\n    this.loadSelectedOption();\n  }\n\n  onOptionSelect(option: DisplayOption) {\n    const localStorageKey = this.getLocalStorageKey();\n    if (option.default) {\n      localStorage.removeItem(localStorageKey);\n    } else {\n      localStorage.setItem(localStorageKey, option.value);\n    }\n    this.loadSelectedOption();\n  }\n\n  private loadSelectedOption() {\n    this.selectedOption = this.getLocalStorageOption() || this.getDefaultOption();\n    this.onListClassChange.emit(this.selectedOption.getListClass());\n  }\n\n  private getLocalStorageOption(): DisplayOption {\n    return this.DISPLAY_OPTIONS.find(\n      option => option.value === localStorage.getItem(this.getLocalStorageKey())\n    );\n  }\n\n  private getDefaultOption(): DisplayOption {\n    return this.DISPLAY_OPTIONS.find(option => option.default);\n  }\n\n  private getLocalStorageKey(): string {\n    return `list-display-option[${this.getListKey()}]`;\n  }\n\n  private getListKey(): string {\n    return this.listKey || this.location.path();\n  }\n}\n","<div class=\"d-flex a-i-center\">\n  <label class=\"m-r-8 m-b-0\" id=\"listLabel\">\n    {{ 'Display as' | translate }}\n  </label>\n  <div class=\"c8y-select-wrapper\">\n    <select\n      aria-labelledby=\"listLabel\"\n      name=\"listLabel\"\n      class=\"form-control\"\n      [ngModel]=\"selectedOption\"\n      (ngModelChange)=\"onOptionSelect($event)\"\n      [attr.aria-label]=\"'Display mode' | translate\"\n    >\n      <option *ngFor=\"let option of DISPLAY_OPTIONS\" [ngValue]=\"option\">\n        {{ option.label | translate }}\n      </option>\n    </select>\n    <span></span>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CommonModule } from '../common/common.module';\nimport { ListDisplaySwitchComponent } from './list-display-switch.component';\n\n/**\n * The angular module definition for the list display switcher.\n * It allows to switch between a list and a grid view.\n * @exports ListDisplaySwitchComponent\n */\n@NgModule({\n  imports: [CommonModule, FormsModule, ListDisplaySwitchComponent],\n  exports: [ListDisplaySwitchComponent]\n})\nexport class ListDisplaySwitchModule {}\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnDestroy,\n  ViewChild\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, map, takeUntil } from 'rxjs/operators';\nimport { RangeDisplay } from './range-display.model';\nimport { NgClass, NgIf, NgStyle, NgFor, DecimalPipe } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { DatePipe } from '../common/date.pipe';\n\n@Component({\n  selector: 'c8y-range-display',\n  templateUrl: './range-display.component.html',\n  standalone: true,\n  imports: [NgClass, NgIf, NgStyle, NgFor, C8yTranslatePipe, DecimalPipe, DatePipe]\n})\nexport class RangeDisplayComponent implements AfterViewInit, OnDestroy, OnChanges {\n  @Input() config: RangeDisplay = {};\n  @Input() display: 'full' | 'compact' | 'inline' = 'full';\n  private currentRangeWidthObserver: ResizeObserver;\n  private currentRangeWidthChanged = new Subject<Element>();\n  // width of current range is changing within 150ms, see style declaration for .range-display__range__current\n  private readonly CURRENT_RANGE_WIDTH_TRANSITION_TIME = 150;\n  private readonly DEFAULT_TOOLTIP_SHIFT = '50%';\n  private readonly MIN_TOOLTIP_SHIFT = 10;\n  private tooltipShift = this.DEFAULT_TOOLTIP_SHIFT;\n  @HostBinding('attr.style')\n  get inlineStyle() {\n    this.config = this.config || {};\n    if (!this.config.min) {\n      this.config.min = 0;\n    }\n    if (!this.config.max && this.config.max !== 0) {\n      this.config.max = 100;\n    }\n    if (this.config.fractionSize !== undefined) {\n      this.config.current = parseFloat(this.config.current.toFixed(this.config.fractionSize));\n    }\n    return this.sanitizer.bypassSecurityTrustStyle(\n      `\n          --range-min: ${this.config.min};\n          --range-max: ${this.config.max};\n          --range-display-tooltip-translate: translate(${this.tooltipShift}, -56px);\n          --range-display-tooltip-bg: var(${this.getTooltipBackground()});\n          --full-range: ${this.config.max - this.config.min};\n          --measurement-target: ${\n            ((this.config.target - this.config.min) * 100) / (this.config.max - this.config.min)\n          }%;\n          --measurement-current: ${\n            ((this.config.current - this.config.min) * 100) / (this.config.max - this.config.min)\n          }%;\n          --range-y-min: ${\n            ((this.config.yellowRangeMin - this.config.min) * 100) /\n            (this.config.max - this.config.min)\n          }%;\n          --range-y-max: ${\n            ((this.config.yellowRangeMax - this.config.min) / (this.config.max - this.config.min)) *\n            100\n          }%;\n          --range-r-min: ${\n            ((this.config.redRangeMin - this.config.min) * 100) /\n            (this.config.max - this.config.min)\n          }%;\n          --range-r-max: ${\n            ((this.config.redRangeMax - this.config.min) / (this.config.max - this.config.min)) *\n            100\n          }%;\n        `\n    );\n  }\n  @ViewChild('rangeDisplay', { static: false })\n  private rangeDisplay: ElementRef;\n  @ViewChild('currentRangeElement', { static: false })\n  private currentRangeElement: ElementRef;\n  private destroyed$ = new Subject<void>();\n  constructor(private sanitizer: DomSanitizer) {}\n\n  ngOnChanges() {\n    // It's necessary to handle tooltip shifting both in OnChanges and AfterViewInit. In case of Linear gauge widget, view is\n    // rendered first (so as elements needed for calculating shifting) and config orientation is set later on.\n    // In other cases it's possible that orientation is defined on initialization of class and view elements are rendered later.\n    this.setupTooltipShiftingIfPossible();\n  }\n\n  ngAfterViewInit() {\n    this.setupTooltipShiftingIfPossible();\n  }\n\n  ngOnDestroy() {\n    this.currentRangeWidthObserver?.disconnect();\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n\n  /**\n   *\n   * @returns true if the target value is within the defined range, false otherwise.\n   * This method checks if the target value is defined and falls within the minimum and maximum range\n   */\n  checkTarget(): boolean {\n    return (\n      this.config.target !== undefined &&\n      this.config.target !== null &&\n      this.config.target >= this.config.min &&\n      this.config.target <= this.config.max\n    );\n  }\n\n  rulerCalc(index) {\n    const num: number = this.config.min + ((this.config.max - this.config.min) / 10) * index;\n    if (this.config.fractionSize !== undefined) {\n      return parseFloat(num.toFixed(this.config.fractionSize));\n    }\n    return parseFloat(num.toFixed(2));\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  isRedRangeDisplayed() {\n    const { redRangeMin, redRangeMax } = this.config;\n    return this.isRangeDisplayed(redRangeMin, redRangeMax);\n  }\n\n  isYellowRangeDisplayed() {\n    const { yellowRangeMin, yellowRangeMax } = this.config;\n    return this.isRangeDisplayed(yellowRangeMin, yellowRangeMax);\n  }\n\n  /**\n   * Checks if the given range is displayed.\n   * @param rangeMin - The minimum value of the range.\n   * @param rangeMax - The maximum value of the range.\n   * * @returns true if the range is displayed, false otherwise.\n   */\n  isRangeDisplayed(rangeMin, rangeMax) {\n    return rangeMin === 0 || rangeMax === 0 || (rangeMin && rangeMax);\n  }\n\n  private setupTooltipShifting() {\n    this.currentRangeWidthObserver = new ResizeObserver(([val]) => {\n      if (getComputedStyle(val.target, null).display === 'block') {\n        this.currentRangeWidthChanged.next(val.target);\n      }\n    });\n\n    this.currentRangeWidthObserver.observe(this.currentRangeElement.nativeElement);\n\n    this.currentRangeWidthChanged\n      .pipe(\n        debounceTime(this.CURRENT_RANGE_WIDTH_TRANSITION_TIME),\n        map((rangeElement: Element) => parseInt(getComputedStyle(rangeElement, null).width)),\n        distinctUntilChanged(),\n        takeUntil(this.destroyed$)\n      )\n      .subscribe(rangeElementWidth => {\n        this.setTooltipShiftValue(rangeElementWidth);\n      });\n  }\n\n  private setTooltipShiftValue(rangeElementWidth: number) {\n    const tooltipWidth = parseInt(\n      getComputedStyle(this.currentRangeElement.nativeElement, ':after').width\n    );\n    const currentRangeWidth = rangeElementWidth;\n    const rangeDisplayWidth = parseInt(\n      getComputedStyle(this.rangeDisplay.nativeElement, null).getPropertyValue('width')\n    );\n    const rangeDisplayPaddingLeft = parseInt(\n      getComputedStyle(this.rangeDisplay.nativeElement, null).getPropertyValue('padding-left')\n    );\n    const tooltipOverflowsLeftEdge = tooltipWidth / 2 > rangeDisplayPaddingLeft + currentRangeWidth;\n    const tooltipOverflowsRightEdge =\n      tooltipWidth / 2 > rangeDisplayWidth - rangeDisplayPaddingLeft - currentRangeWidth;\n    if (tooltipOverflowsLeftEdge) {\n      this.tooltipShift = `${tooltipWidth - this.MIN_TOOLTIP_SHIFT}px`;\n    } else if (tooltipOverflowsRightEdge) {\n      this.tooltipShift = `${this.MIN_TOOLTIP_SHIFT}px`;\n    } else {\n      this.tooltipShift = this.DEFAULT_TOOLTIP_SHIFT;\n    }\n  }\n\n  private setupTooltipShiftingIfPossible() {\n    if (\n      this.config?.orientation === 'horizontal' &&\n      !this.currentRangeWidthObserver &&\n      this.rangeDisplay &&\n      this.currentRangeElement\n    ) {\n      this.setupTooltipShifting();\n    }\n  }\n\n  private getTooltipBackground(): string {\n    const current = this.config.current;\n    switch (true) {\n      case this.isValueInRange(current, this.config.redRangeMin, this.config.redRangeMax):\n        return '--c8y-palette-status-danger';\n      case this.isValueInRange(current, this.config.yellowRangeMin, this.config.yellowRangeMax):\n        return '--c8y-palette-status-warning';\n      default:\n        return '--c8y-brand-10';\n    }\n  }\n\n  private isValueInRange(value: number, min: number, max: number): boolean {\n    return min != null && max != null && value >= min && value <= max;\n  }\n}\n","<div\n  [ngClass]=\"{\n    'range-display--vertical': config.orientation === 'vertical',\n    'range-display--compact': display === 'compact',\n    'range-display--inline': display === 'inline'\n  }\"\n  attr.data-label=\"{{ config.unit }}\"\n>\n  <div\n    class=\"range-display\"\n    #rangeDisplay\n  >\n    <div class=\"range-display__range\">\n      <div class=\"range-display__range__unit\">\n        {{ config.unit }}\n      </div>\n      <div\n        *ngIf=\"isYellowRangeDisplayed()\"\n        class=\"range-display__range__min\"\n      ></div>\n      <div\n        *ngIf=\"isRedRangeDisplayed()\"\n        class=\"range-display__range__max\"\n      ></div>\n      <div\n        *ngIf=\"checkTarget()\"\n        class=\"range-display__range__target\"\n        attr.data-label=\"{{ config.target }} {{ config.unit }}\"\n        title=\"{{ 'Target' | translate }}: {{ config.target }} {{ config.unit }}\"\n      ></div>\n      <div\n        [ngStyle]=\"{\n          display:\n            config.current != undefined &&\n            config.current >= config.min &&\n            config.current <= config.max\n              ? 'block'\n              : 'none'\n        }\"\n        #currentRangeElement\n        class=\"range-display__range__current\"\n        attr.data-label=\"{{ config.current }} {{ config.unit }} &#xa;{{ config.time | c8yDate }}\"\n        title=\"{{ 'Current' | translate }}: {{ config.current }} {{ config.unit }} | {{\n          config.time | c8yDate\n        }}\"\n      ></div>\n    </div>\n    <div class=\"range-display__ruler\">\n      <div\n        *ngFor=\"let x of [].constructor(10); let index = index; trackBy: trackByIndex\"\n        attr.data-label=\"{{ rulerCalc(index) }}\"\n        class=\"range-display__tick\"\n      ></div>\n      <div\n        attr.data-label=\"{{ config.max ?? 100 | number }}\"\n        class=\"range-display__tick\"\n      ></div>\n    </div>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule as C8yCommonModule } from '../common/common.module';\nimport { RangeDisplayComponent } from './range-display.component';\n\n/**\n * The angular module definition for a range-display.\n * @exports RangeDisplayModule\n */\n@NgModule({\n  imports: [C8yCommonModule, RangeDisplayComponent],\n  exports: [RangeDisplayComponent]\n})\nexport class RangeDisplayModule {}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { RealtimeService } from './realtime.service';\nimport { NgClass } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-realtime-btn',\n  templateUrl: './realtime-button.component.html',\n  standalone: true,\n  imports: [NgClass, C8yTranslatePipe]\n})\nexport class RealtimeButtonComponent {\n  @Input()\n  service: RealtimeService<unknown>;\n  @Input()\n  label: string = gettext('Realtime');\n  @Input()\n  title: string = gettext('Toggle realtime');\n  @Input()\n  disabled: boolean;\n\n  @Output()\n  onToggle: EventEmitter<boolean> = new EventEmitter();\n\n  get active(): boolean {\n    return !!this.service && this.service.active;\n  }\n\n  toggle() {\n    if (this.service) {\n      this.active ? this.service.stop() : this.service.start();\n      this.onToggle.emit(this.active);\n    }\n  }\n}\n","<button\n  type=\"button\"\n  class=\"btn btn-link c8y-realtime\"\n  [title]=\"title | translate\"\n  [disabled]=\"disabled\"\n  (click)=\"toggle()\"\n>\n  <span\n    class=\"c8y-pulse\"\n    [ngClass]=\"{ active: active, inactive: !active }\"\n  ></span>\n  <span>{{ label | translate }}</span>\n</button>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { RealtimeButtonComponent } from './realtime-button.component';\n\n@NgModule({\n  imports: [CommonModule, RealtimeButtonComponent],\n  exports: [RealtimeButtonComponent]\n})\nexport class RealtimeModule {}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ISelectModalObject } from './select-modal.model';\n\n@Pipe({\n  name: 'selectModalFilterPipe',\n  standalone: true\n})\nexport class SelectModalFilterPipe implements PipeTransform {\n  transform(items: ISelectModalObject[], filterTerm: string): any {\n    return filterTerm.trim().length === 0\n      ? items\n      : items.filter((item: ISelectModalObject) => {\n          const allValues = this.extractValues(item);\n          const filteredValues = allValues.filter(value =>\n            this.filterContainString(value, filterTerm)\n          );\n          return filteredValues.length > 0;\n        });\n  }\n\n  private filterContainString(value: string, filterTerm: string) {\n    const term = filterTerm.toLowerCase().trim();\n    return value && value.toLowerCase().indexOf(term) > -1;\n  }\n\n  private extractValues(item) {\n    let values = [];\n    if (item.value) {\n      values.push(item.value);\n    }\n    Object.keys(item).forEach(key => {\n      if (Array.isArray(item[key])) {\n        item[key].forEach(obj => values.concat(this.extractValues(obj)));\n      }\n      if (item[key] instanceof Object) {\n        values = values.concat(this.extractValues(item[key]));\n      }\n    });\n    return values;\n  }\n}\n","import { TemplateRef } from '@angular/core';\nimport { IIdentified } from '@c8y/client';\n\nexport interface ISelectModalObject {\n  groupId: string | number;\n  body: ISelectModalBodyPart[];\n  options: ISelectModalOption[];\n  additionalInformation?: ISelectModalBodyPart;\n}\n\nexport interface ISelectModalOption {\n  body: ISelectModalBodyPart[];\n  obj: IIdentified;\n  selected?: boolean;\n  template?: TemplateRef<any>;\n}\n\nexport interface ISelectModalBodyPart {\n  value: string;\n  class?: string;\n}\n\n/**\n * Use event to trigger an update on a select modal entry.\n */\nexport interface IUpdateItemEvent<T> {\n  /** Object refering to the item that is to be updated */\n  object: ISelectModalObject;\n  /** Allows to define a template that will be rendered next to the item option label. */\n  template?: TemplateRef<T>;\n  /**\n   * A function to call whenever an item is updated.\n   * Allows to read or modify the object attached to the updated item,\n   * e.g. to set a flag on the object.\n   */\n  mapper?: (obj: IIdentified) => IIdentified;\n}\n\nexport interface ModalLabels {\n  ok?: string;\n  cancel?: string;\n}\n\nexport enum ModalSelectionMode {\n  SINGLE = 'single',\n  MULTI = 'multi'\n}\n","import {\n  Component,\n  EventEmitter,\n  forwardRef,\n  Input,\n  Output,\n  SimpleChanges,\n  TemplateRef\n} from '@angular/core';\nimport { IIdentified } from '@c8y/client';\nimport { assign } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ProductExperienceEvent,\n  ProductExperienceEventSource,\n  PRODUCT_EXPERIENCE_EVENT_SOURCE\n} from '../product-experience/product-experience.model';\nimport { ISelectModalObject, ModalLabels, ModalSelectionMode } from './select-modal.model';\nimport { IconDirective } from '../common/icon.directive';\nimport { NgIf, NgClass, NgTemplateOutlet, NgFor } from '@angular/common';\nimport { FilterInputComponent } from '../forms/filter-input.component';\nimport { ListGroupComponent } from '../list-group/list-group.component';\nimport { ListItemComponent } from '../list-group/list-item.component';\nimport { ListItemIconComponent } from '../list-group/list-item-icon.component';\nimport { ListItemBodyComponent } from '../list-group/list-item-body.component';\nimport { HighlightComponent } from '../search/highlight.component';\nimport { ListItemCollapseComponent } from '../list-group/list-item-collapse.component';\nimport { ListItemRadioComponent } from '../list-group/list-item-radio.component';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { ProductExperienceDirective } from '../product-experience/product-experience.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { SelectModalFilterPipe } from './select-modal-filter.pipe';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\ninterface ISelectModalInternalObject extends ISelectModalObject {\n  selectedId: string | number;\n}\n\n@Component({\n  selector: 'c8y-select-modal',\n  templateUrl: './select-modal.component.html',\n  providers: [\n    {\n      provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n      useExisting: forwardRef(() => SelectModalComponent)\n    }\n  ],\n  standalone: true,\n  imports: [\n    IconDirective,\n    NgIf,\n    NgClass,\n    FilterInputComponent,\n    NgTemplateOutlet,\n    ListGroupComponent,\n    NgFor,\n    ListItemComponent,\n    ListItemIconComponent,\n    ListItemBodyComponent,\n    HighlightComponent,\n    ListItemCollapseComponent,\n    ListItemRadioComponent,\n    C8yTranslateDirective,\n    ProductExperienceDirective,\n    C8yTranslatePipe,\n    SelectModalFilterPipe\n  ]\n})\nexport class SelectModalComponent implements ProductExperienceEventSource {\n  @Input() icon: SupportedIconsSuggestions;\n  @Input() title: string;\n  @Input() subTitle: string = gettext('Select from the list of items matching the device type');\n  @Input() items: ISelectModalInternalObject[];\n  @Input() mode: ModalSelectionMode = ModalSelectionMode.MULTI;\n  @Input() disableSelected = true;\n  @Input() showFilter = true;\n  @Input() additionalFilterTemplate: TemplateRef<any>;\n  @Input() areMoreEntries = false;\n  @Input() set labels(labels: ModalLabels) {\n    const { ok = this.labels.ok, cancel = this.labels.cancel } = labels || {};\n    this._labels = { ok, cancel };\n  }\n  get labels(): ModalLabels {\n    return this._labels;\n  }\n  @Input() noItemsMessage: string;\n  @Input() hideEmptyItems: boolean;\n  @Output() result: EventEmitter<IIdentified[]> = new EventEmitter<IIdentified[]>();\n  @Output() search: EventEmitter<string> = new EventEmitter<string>();\n  @Output() onChoiceUpdated: EventEmitter<IIdentified> = new EventEmitter<IIdentified>();\n  selected = false;\n  filterTerm = '';\n  listItems: ISelectModalInternalObject[] = [];\n  productExperienceEvent: ProductExperienceEvent = {\n    eventName: undefined, // supress emitting events if a parent component does not declare event name\n    data: {\n      component: 'select-modal'\n    }\n  };\n  emptyItemsOnly: boolean;\n  private debouncer: Subject<string> = new Subject<string>();\n  private _labels: ModalLabels = { ok: gettext('Confirm'), cancel: gettext('Cancel') };\n\n  constructor(private bsModalRef: BsModalRef) {\n    this.debouncer.pipe(debounceTime(500)).subscribe(value => {\n      this.search.emit(value);\n    });\n  }\n\n  async ngOnChanges(changes: SimpleChanges) {\n    if (changes.items && changes.items.currentValue) {\n      const itemsPromise = changes.items.currentValue.map(async item => {\n        item.options = await item.options;\n        const selected = item.options.find(option => option.selected);\n        if (selected) {\n          item.selectedId = selected.obj.id;\n          if (this.disableSelected) {\n            item.options.map(option => assign(option, { disabled: true }));\n          }\n        }\n        return item;\n      });\n      this.listItems = await Promise.all(itemsPromise);\n      this.emptyItemsOnly = this.listItems.every(\n        item => !item.options || item.options.length === 0\n      );\n    }\n    if (changes.title && !!this.productExperienceEvent?.data) {\n      this.productExperienceEvent.data.title = changes.title.currentValue;\n    }\n  }\n\n  updatePipe(filterTerm: string) {\n    this.debouncer.next(filterTerm);\n    this.filterTerm = filterTerm;\n  }\n\n  updateChoice({ item, id }) {\n    if (this.mode === 'single') {\n      this.listItems.map(value => (value.selectedId = undefined));\n    }\n    item.selectedId = id;\n    this.selected = true;\n    this.onChoiceUpdated.emit(item);\n  }\n\n  dismiss() {\n    this.bsModalRef.hide();\n  }\n\n  select() {\n    this.result.emit(this.getOutput());\n    this.bsModalRef.hide();\n  }\n\n  ngOnDestroy() {\n    this.debouncer.complete();\n    this.result.complete();\n    this.search.complete();\n  }\n\n  private getOutput(): IIdentified[] {\n    return this.listItems\n      .filter(item => item.selectedId)\n      .map(item => item.options.find(option => item.selectedId === option.obj.id))\n      .filter(option => !option.selected)\n      .map(selectedOption => selectedOption.obj);\n  }\n}\n","<div class=\"viewport-modal\">\n  <div class=\"modal-header dialog-header\">\n    <i [c8yIcon]=\"icon\"></i>\n    <h1\n      class=\"h3\"\n      id=\"modal-title\"\n    >\n      {{ title | translate }}\n    </h1>\n  </div>\n  <div class=\"p-16 text-center separator-bottom min-height-fit\">\n    <p class=\"m-b-8\">{{ subTitle | translate }}</p>\n    <div class=\"row\">\n      <div\n        *ngIf=\"showFilter\"\n        [ngClass]=\"{\n          'col-xs-6': showFilter && additionalFilterTemplate,\n          'col-xs-12': !showFilter || !additionalFilterTemplate\n        }\"\n      >\n        <c8y-filter\n          [icon]=\"'search'\"\n          (onSearch)=\"updatePipe($event)\"\n        ></c8y-filter>\n      </div>\n      <div\n        *ngIf=\"additionalFilterTemplate\"\n        [ngClass]=\"{\n          'col-xs-6': showFilter && additionalFilterTemplate,\n          'col-xs-12': !showFilter || !additionalFilterTemplate\n        }\"\n      >\n        <ng-container *ngTemplateOutlet=\"additionalFilterTemplate\"></ng-container>\n      </div>\n    </div>\n  </div>\n  <div\n    class=\"modal-inner-scroll\"\n    id=\"modal-body\"\n  >\n    <div class=\"p-l-16 p-r-16\">\n      <div\n        class=\"panel m-t-8 m-b-8\"\n        *ngIf=\"!items || items.length === 0 || (emptyItemsOnly && hideEmptyItems)\"\n      >\n        <div class=\"c8y-empty-state text-left\">\n          <h1\n            class=\"c8y-icon-duocolor\"\n            c8yIcon=\"{{ icon }} \"\n          ></h1>\n          <p>{{ (noItemsMessage | translate) ?? 'No items to display.' | translate }}</p>\n        </div>\n      </div>\n    </div>\n    <c8y-list-group>\n      <ng-container *ngFor=\"let item of listItems | selectModalFilterPipe : filterTerm\">\n        <c8y-li *ngIf=\"item.options?.length > 0 || !hideEmptyItems\">\n          <c8y-li-icon>\n            <i c8yIcon=\"{{ icon }}\"></i>\n          </c8y-li-icon>\n\n          <c8y-li-body class=\"content-flex-30\">\n            <div class=\"col-9\">\n              <div\n                *ngFor=\"let bodyPart of item.body\"\n                [ngClass]=\"bodyPart.class\"\n              >\n                <c8y-highlight\n                  [title]=\"bodyPart.value\"\n                  [pattern]=\"filterTerm\"\n                  [text]=\"bodyPart.value\"\n                ></c8y-highlight>\n              </div>\n            </div>\n\n            <div\n              class=\"col-3 text-right\"\n              *ngIf=\"item.additionalInformation\"\n            >\n              <div [ngClass]=\"item.additionalInformation.class\">\n                {{ item.additionalInformation.value }}\n              </div>\n            </div>\n          </c8y-li-body>\n\n          <c8y-li-collapse *ngIf=\"item.options?.length > 0\">\n            <c8y-list-group>\n              <c8y-li *ngFor=\"let option of item.options\">\n                <c8y-li-radio\n                  [name]=\"mode === 'single' ? 'single' : item.groupId\"\n                  (onSelect)=\"updateChoice({ item: item, id: option.obj.id })\"\n                  [disabled]=\"option.disabled\"\n                  [selected]=\"option.selected\"\n                ></c8y-li-radio>\n                <c8y-li-body class=\"content-flex-20\">\n                  <div\n                    *ngFor=\"let optionPart of option.body; let i = index\"\n                    [ngClass]=\"optionPart.class\"\n                  >\n                    <c8y-highlight\n                      [pattern]=\"filterTerm\"\n                      [text]=\"optionPart.value\"\n                    ></c8y-highlight>\n                  </div>\n                  <ng-container\n                    *ngIf=\"option.template\"\n                    [ngTemplateOutlet]=\"option.template\"\n                    [ngTemplateOutletContext]=\"{ $implicit: item, option: option }\"\n                  ></ng-container>\n                </c8y-li-body>\n              </c8y-li>\n            </c8y-list-group>\n          </c8y-li-collapse>\n        </c8y-li>\n      </ng-container>\n      <div *ngIf=\"areMoreEntries\">\n        <div\n          class=\"alert alert-info m-t-16 m-r-8 m-l-8\"\n          translate\n        >\n          Some entries might not be shown. Try narrowing search criteria.\n        </div>\n      </div>\n    </c8y-list-group>\n  </div>\n\n  <div class=\"modal-footer\">\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ labels.cancel | translate }}\"\n      type=\"button\"\n      data-cy=\"select-modal--Cancel-button\"\n      *ngIf=\"labels.cancel\"\n      (click)=\"dismiss()\"\n      c8yProductExperience\n      inherit\n      [actionData]=\"{ result: labels.cancel }\"\n    >\n      {{ labels.cancel | translate }}\n    </button>\n    <button\n      class=\"btn btn-primary\"\n      title=\"{{ labels.ok | translate }}\"\n      type=\"button\"\n      data-cy=\"select-modal--Save-button\"\n      (click)=\"select()\"\n      [disabled]=\"!selected\"\n      c8yProductExperience\n      inherit\n      [actionData]=\"{ result: labels.ok }\"\n    >\n      {{ labels.ok | translate }}\n    </button>\n  </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CommonModule } from '../common/common.module';\nimport { FormsModule } from '../forms/forms.module';\nimport { ListGroupModule } from '../list-group/list-group.module';\nimport { ProductExperienceModule } from '../product-experience/product-experience.module';\nimport { CoreSearchModule } from '../search/search.module';\nimport { SelectModalFilterPipe } from './select-modal-filter.pipe';\nimport { SelectModalComponent } from './select-modal.component';\n\n@NgModule({\n  imports: [\n    BsDropdownModule.forRoot(),\n    CommonModule,\n    ListGroupModule,\n    CoreSearchModule,\n    FormsModule,\n    ProductExperienceModule,\n    SelectModalComponent,\n    SelectModalFilterPipe\n  ],\n  exports: [SelectModalComponent, SelectModalFilterPipe]\n})\nexport class SelectModalModule {}\n","import { BsDaterangepickerConfig } from 'ngx-bootstrap/datepicker';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface DateRangePickerConfig extends Partial<BsDaterangepickerConfig> {}\n\nexport interface TimeInterval {\n  dateFrom: Date;\n  dateTo: Date;\n}\n\nexport interface TimeIntervalOption {\n  label: string;\n  getStartDate?: () => Date;\n}\n\nexport const LAST_MINUTE: TimeIntervalOption = {\n  label: gettext('Last minute'),\n  getStartDate: () => {\n    const start = new Date();\n    start.setMinutes(start.getMinutes() - 1);\n    return start;\n  }\n};\n\nexport const LAST_HOUR = {\n  label: gettext('Last hour'),\n  getStartDate: () => {\n    const start = new Date();\n    start.setHours(start.getHours() - 1);\n    return start;\n  }\n};\n\nexport const LAST_DAY = {\n  label: gettext('Last day'),\n  getStartDate: () => {\n    const start = new Date();\n    start.setDate(start.getDate() - 1);\n    start.setHours(0, 0, 0, 0);\n    return start;\n  }\n};\n\nexport const LAST_WEEK = {\n  label: gettext('Last week'),\n  getStartDate: () => {\n    const start = new Date();\n    start.setDate(start.getDate() - 7);\n    start.setHours(0, 0, 0, 0);\n    return start;\n  }\n};\n\nexport const LAST_MONTH = {\n  label: gettext('Last month'),\n  getStartDate: () => {\n    const start = new Date();\n    start.setMonth(start.getMonth() - 1);\n    start.setHours(0, 0, 0, 0);\n    return start;\n  }\n};\n\nexport const CUSTOM = { label: gettext('Custom') };\n\nexport const INTERVAL_OPTIONS: TimeIntervalOption[] = [\n  LAST_MINUTE,\n  LAST_HOUR,\n  LAST_DAY,\n  LAST_WEEK,\n  LAST_MONTH,\n  CUSTOM\n];\n","import {\n  AfterViewInit,\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport {\n  CUSTOM,\n  DateRangePickerConfig,\n  INTERVAL_OPTIONS,\n  LAST_HOUR,\n  TimeInterval,\n  TimeIntervalOption\n} from './time-interval.model';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { NgForOf, NgIf } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { DateFormatService } from '../common/date-format.service';\n\n@Component({\n  standalone: true,\n  selector: 'c8y-time-interval',\n  templateUrl: './time-interval.component.html',\n  imports: [C8yTranslatePipe, NgForOf, NgIf, IconDirective, FormsModule, BsDatepickerModule]\n})\nexport class TimeIntervalComponent implements OnInit, AfterViewInit {\n  intvervals = INTERVAL_OPTIONS;\n  CUSTOM = CUSTOM;\n\n  @Input()\n  minCustomDate: Date;\n\n  @Input()\n  maxCustomDate: Date;\n\n  @Input()\n  dateRangePickerConfig: DateRangePickerConfig;\n\n  @Input()\n  selectedInterval: TimeIntervalOption = LAST_HOUR;\n\n  @Output()\n  interval: EventEmitter<TimeInterval> = new EventEmitter();\n\n  customRange: Date[];\n\n  private dateFormatService = inject(DateFormatService);\n\n  ngOnInit(): void {\n    if (!this.dateRangePickerConfig.dateInputFormat) {\n      this.dateRangePickerConfig.dateInputFormat = this.dateFormatService.getDateFormat();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.changeInterval(this.selectedInterval);\n  }\n\n  changeInterval(intervalOption: TimeIntervalOption) {\n    if (intervalOption !== CUSTOM) {\n      const interval: TimeInterval = {\n        dateFrom: intervalOption.getStartDate(),\n        dateTo: this.getEndDate()\n      };\n\n      this.emitInterval(interval);\n    }\n  }\n\n  changeCustomRange(range: Date[]) {\n    this.emitInterval(this.rangeToInterval(range));\n  }\n\n  reload() {\n    if (this.selectedInterval === CUSTOM) {\n      this.emitInterval(this.rangeToInterval(this.customRange));\n    } else {\n      this.changeInterval(this.selectedInterval);\n    }\n  }\n\n  private getEndDate(): Date {\n    const end = new Date();\n    end.setSeconds(end.getSeconds() + 1);\n    return end;\n  }\n\n  private rangeToInterval(range: Date[]): TimeInterval {\n    const dateFrom = new Date(range[0]);\n    const dateTo = new Date(range[1]);\n\n    dateFrom.setHours(0, 0, 0, 0);\n    if (!this.isToday(dateTo)) {\n      dateTo.setHours(23, 59, 59, 999);\n    }\n    return { dateFrom, dateTo };\n  }\n\n  private isToday(date: Date): boolean {\n    const today = new Date();\n    return (\n      date?.getDate() === today.getDate() &&\n      date.getMonth() === today.getMonth() &&\n      date.getFullYear() === today.getFullYear()\n    );\n  }\n\n  private emitInterval(interval: TimeInterval) {\n    // only emit valid intervals\n    if (!isNaN(interval?.dateFrom?.getTime()) && !isNaN(interval?.dateTo?.getTime())) {\n      this.interval.emit(interval);\n    }\n  }\n}\n","<form class=\"form-inline\">\n  <div class=\"form-group\">\n    <div class=\"c8y-select-wrapper\">\n      <select\n        class=\"form-control\"\n        [attr.aria-label]=\"'Time interval' | translate\"\n        name=\"interval\"\n        [(ngModel)]=\"selectedInterval\"\n        (ngModelChange)=\"changeInterval($event)\"\n        data-cy=\"c8y-time-interval--select\"\n      >\n        <option\n          *ngFor=\"let interval of intvervals\"\n          [ngValue]=\"interval\"\n        >\n          {{ interval.label | translate }}\n        </option>\n      </select>\n    </div>\n  </div>\n\n  <div\n    class=\"form-group datepicker\"\n    *ngIf=\"selectedInterval === CUSTOM\"\n  >\n    <input\n      class=\"form-control\"\n      [placeholder]=\"'Select date range' | translate\"\n      bsDaterangepicker\n      [bsConfig]=\"dateRangePickerConfig\"\n      [minDate]=\"minCustomDate\"\n      [maxDate]=\"maxCustomDate\"\n      [(bsValue)]=\"customRange\"\n      (bsValueChange)=\"changeCustomRange($event)\"\n    />\n  </div>\n\n  <button\n    class=\"btn btn-link\"\n    [title]=\"'Reload' | translate\"\n    type=\"button\"\n    [disabled]=\"selectedInterval === CUSTOM && (!customRange || customRange.length === 0)\"\n    (click)=\"reload()\"\n  >\n    <i c8yIcon=\"refresh\"></i>\n    {{ 'Reload' | translate }}\n  </button>\n</form>\n","import { EventEmitter, InjectionToken, Injector, Type } from '@angular/core';\nimport {\n  ExtensionFactory,\n  GenericHookType,\n  hookGeneric,\n  GenericHookOptions\n} from '../common/extension-hooks';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n/**\n * A hook to add wizard entries.\n * @deprecated Consider using the `hookWizard` function instead.\n */\nexport const HOOK_WIZARD = new InjectionToken<WizardExtension[]>('HOOK_WIZARD');\n\n/**\n * A hook to add wizard entries.\n *\n * You can either provide a single `WizardEntry` as parameter:\n * ```typescript\n *  hookWizard(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookWizard([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<WizardEntry>`\n * ```typescript\n *  export class MyWizardFactory implements ExtensionFactory<WizardEntry> {...}\n *  ...\n *  hookWizard(MyWizardFactory)\n * ```\n * A typed alternative to `HOOK_WIZARD`.\n * @param wizard The `WizardEntry`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookWizard(\n  wizard: GenericHookType<WizardEntry>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<WizardEntry>(wizard, HOOK_WIZARD, options);\n}\n\nexport interface Wizard<T = any> {\n  /**\n   * The id parameter identifies the particular wizard and can be used to refer to it when hooking wizard entries.\n   * Example: \"wizardId\".\n   */\n  id: string;\n  /** Wizard configuration object. */\n  wizardConfig?: WizardConfig;\n  /** A state that will be assigned to the actual component contained by the wizard. */\n  componentInitialState?: Partial<T>;\n  /** The event that is emitted when the wizard entry is selected. */\n  onSelect?: EventEmitter<WizardEntry>;\n  /** The event that is emitted when the wizard is closed. */\n  onClose?: EventEmitter<any>;\n  /** The event that is emitted when the wizard is reset. */\n  onReset?: EventEmitter<any>;\n}\n\nexport interface WizardConfig {\n  /** Text that will be displayed in the header of the wizard  */\n  headerText?: string;\n  /** Icon that will be displayed in the header of the wizard  */\n  headerIcon?: SupportedIconsSuggestions;\n  /** Text that will be displayed in the header of the wizard body section  */\n  bodyHeaderText?: string;\n  /** Icon that will be displayed in the header of the wizard body section  */\n  bodyHeaderIcon?: SupportedIconsSuggestions;\n}\n\n/**\n * A single item in the wizard.\n * An interface describing the entry displayed in the first step of the wizard as well as the configuration of the second step and their way of interaction.\n */\nexport interface WizardEntry {\n  /**\n   * The identifier of a wizard to which the entry will be hooked.\n   * Example: \"wizardId\".\n   */\n  wizardId: string;\n  /** The name that will be displayed in the wizard menu  */\n  name: string;\n  /** The path where user will be redirected when this entry is selected in the wizard's menu. Takes precedence over `component` property. */\n  path?: string;\n  /** The component that will be rendered when this entry is selected in the wizard's menu. If `path` is provided, the `component` will be ignored. */\n  component?: Type<any>;\n  /** The injector to use. If not set, default injector will be used. */\n  injector?: Injector;\n  /** The icon that will be shown in the wizard menu next to the item. */\n  c8yIcon?: SupportedIconsSuggestions;\n}\n\nexport type WizardExtension = WizardEntry | WizardEntry[] | ExtensionFactory<WizardEntry>;\n","import { Injectable, Injector, TemplateRef } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable, Subject } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport {\n  ExtensionPointForPlugins,\n  fromTrigger,\n  getInjectedHooks,\n  allEntriesAreEqual,\n  stateToFactory\n} from '../common/extension-hooks';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { HOOK_WIZARD, WizardEntry } from './wizard.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WizardService extends ExtensionPointForPlugins<WizardEntry> {\n  /** Wizard header subject. It emits header template. */\n  readonly headerTemplate$: Subject<{ wizardId: string; template: TemplateRef<any> }> =\n    new Subject();\n  /** Wizard body subject. It emits body template. */\n  readonly bodyTemplate$: Subject<{ wizardId: string; template: TemplateRef<any> }> = new Subject();\n  /** Wizard footer subject. It emits footer template. */\n  readonly footerTemplate$: Subject<{ wizardId: string; template: TemplateRef<any> }> =\n    new Subject();\n\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    plugins: PluginsResolveService\n  ) {\n    super(rootInjector, plugins);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  /**\n   * Returns the current state.\n   * @returns The current set of entries.\n   * @readonly\n   */\n  get state(): Set<WizardEntry> {\n    return this.state$.value;\n  }\n\n  /**\n   * Adds a new entry in the wizard.\n   * @param entry Wizard entry to add.\n   */\n  add(entry: WizardEntry) {\n    this.state.add(entry);\n    this.emitNewState();\n  }\n\n  /**\n   * Removes entry from the wizard.\n   * @param entry Wizard entry to remove.\n   */\n  remove(entry: WizardEntry) {\n    this.state.delete(entry);\n    this.emitNewState();\n  }\n\n  /**\n   * List of wizard entries matching the given id.\n   * @param id\n   * @returns observable with list of wizard entries.\n   */\n  getEntriesListById(id: string): Observable<WizardEntry[]> {\n    return this.items$.pipe(map(entries => entries.filter(entry => entry.wizardId === id)));\n  }\n\n  protected setupItemsObservable(): Observable<WizardEntry[]> {\n    return fromTrigger(this.router, this.refresh$, [\n      getInjectedHooks<WizardEntry>(HOOK_WIZARD, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      distinctUntilChanged(allEntriesAreEqual),\n      map(entries => this.getUniqueListBy(entries, 'name', 'wizardId') as WizardEntry[]),\n      shareReplay(1)\n    );\n  }\n\n  private getUniqueListBy<T>(entries: T[], ...keys: string[]): T[] {\n    return [\n      ...new Map(entries.map(item => [this.getUniqIdentifierForKeys(item, keys), item])).values()\n    ];\n  }\n\n  private getUniqIdentifierForKeys(entry: any, keys: string[]): string {\n    return keys.map(key => entry[key]).join('_');\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  ComponentRef,\n  EnvironmentInjector,\n  EventEmitter,\n  Injector,\n  Input,\n  OnDestroy,\n  Output,\n  Type,\n  ViewChild,\n  ViewContainerRef\n} from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { WizardEntry } from '../wizard.model';\nimport { WizardService } from '../wizard.service';\nimport { NgIf, NgFor } from '@angular/common';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { IconDirective } from '../../common/icon.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\n\n@Component({\n  selector: 'c8y-wizard-outlet',\n  templateUrl: './wizard-outlet.component.html',\n  standalone: true,\n  imports: [NgIf, C8yTranslateDirective, NgFor, IconDirective, C8yTranslatePipe]\n})\nexport class WizardOutletComponent implements AfterViewInit, OnDestroy {\n  @ViewChild('container', { read: ViewContainerRef }) container: ViewContainerRef;\n  /**\n   * The initial state to be assigned to the created component.\n   */\n  @Input() initialState: any = {};\n  /**\n   * The id parameter identifies the particular wizard and can be used to refer to it when hooking wizard entries.\n   * Example: \"wizardId\".\n   */\n  @Input() id: string;\n  /**\n   * The event that is emitted when the wizard entry is clicked.\n   */\n  @Output() onSelect: EventEmitter<WizardEntry> = new EventEmitter();\n  /**\n   * The event that is emitted when the URL path is provided.\n   */\n  @Output() onPath: EventEmitter<string> = new EventEmitter();\n  /**\n   * List of wizard entries.\n   */\n  entries: WizardEntry[] = [];\n  /**\n   * @ignore\n   */\n  showList = true;\n  /**\n   * @ignore\n   */\n  private destroy$: Subject<boolean> = new Subject<boolean>();\n  /**\n   * @ignore\n   */\n  private componentInstance: ComponentRef<unknown>;\n  constructor(\n    private router: Router,\n    private c8yWizardService: WizardService,\n    private viewContainerRef: ViewContainerRef,\n    private injector: Injector\n  ) {}\n\n  ngAfterViewInit() {\n    this.c8yWizardService\n      .getEntriesListById(this.id)\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((entries: WizardEntry[]) => {\n        this.container.clear();\n        this.entries = entries;\n        this.onEntriesLoaded();\n      });\n  }\n\n  /**\n   * Handles the wizard entry, if the entry contains a path, the user will be redirected to it.\n   * Otherwise, an attempt will be made to create a dynamic component provided in the entry.\n   * @param entry Wizard menu entry.\n   */\n  handleEntry(entry: WizardEntry = {} as WizardEntry) {\n    const { path, component, injector } = entry;\n    if (path) {\n      this.handlePath(path);\n      return;\n    }\n\n    if (component) {\n      this.handleComponent(component, injector);\n      this.onSelect.emit(entry);\n    }\n  }\n\n  /**\n   * Resets the wizard to its initial state.\n   */\n  reset() {\n    if (this.componentInstance) {\n      this.componentInstance = undefined;\n      this.container.clear();\n      this.showList = true;\n    }\n  }\n\n  ngOnDestroy() {\n    if (this.componentInstance) {\n      this.container.clear();\n    }\n    this.destroy$.next(true);\n    this.destroy$.unsubscribe();\n  }\n\n  private onEntriesLoaded() {\n    const [firstEntry] = this.entries;\n    const isSingleEntry = this.entries.length === 1;\n    const shouldRedirectToPath = firstEntry && !!firstEntry.path;\n    const shouldOmitListOfEntries = isSingleEntry && !shouldRedirectToPath;\n\n    if (shouldOmitListOfEntries) {\n      this.handleEntry(firstEntry);\n    }\n  }\n\n  private handlePath(path: string) {\n    this.router.navigateByUrl(path);\n    this.onPath.emit(path);\n  }\n\n  private handleComponent(component: Type<unknown>, injector: Injector) {\n    this.showList = false;\n    const componentInstance = this.viewContainerRef.createComponent(component, {\n      environmentInjector: (injector || this.injector) as EnvironmentInjector\n    });\n    Object.assign(componentInstance.instance, this.initialState);\n    this.componentInstance = componentInstance;\n  }\n}\n","<ng-container>\n  <div class=\"modal-inner-scroll animated fadeIn\" *ngIf=\"showList\" id=\"modal-body\">\n    <p class=\"p-16 text-center text-medium separator-bottom\">\n      <span translate>Select method</span>\n    </p>\n    <div class=\"list-group list-group-links\" *ngIf=\"entries.length > 0; else emptyState\">\n      <button\n        *ngFor=\"let entry of entries\"\n        type=\"button\"\n        class=\"list-group-item d-flex a-i-center p-t-8 p-b-8\"\n        (click)=\"handleEntry(entry)\"\n      >\n        <div class=\"list-item-icon\">\n          <i [c8yIcon]=\"entry.c8yIcon || 'cogs'\"></i>\n        </div>\n        <div title=\"{{ entry.name | translate }}\" class=\"list-item-body text-truncate\">\n          {{ entry.name | translate }}\n        </div>\n      </button>\n    </div>\n\n    <ng-template #emptyState>\n      <div class=\"c8y-empty-state\">\n        <p>{{ 'No options available.' | translate }}</p>\n      </div>\n    </ng-template>\n  </div>\n</ng-container>\n<template #container [hidden]=\"showList\"></template>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { filter } from 'rxjs/operators';\nimport { WizardOutletComponent } from './wizard-outlet/wizard-outlet.component';\nimport { Wizard, WizardConfig, WizardEntry } from './wizard.model';\nimport { WizardService } from './wizard.service';\nimport { NgTemplateOutlet, NgIf, AsyncPipe } from '@angular/common';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslateDirective } from '../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\n\n/**\n * A generic component that is intended to serve as the building block of more wizards.\n *\n * **Example**\n * ```html\n * <button\n *    title=\"Add application\"\n *    class=\"btn btn-primary\"\n *    (click)=\"addApplication()\"\n *  >\n *    Add application\n *  </button>\n * ```\n *\n * ```ts\n * import { Component } from '@angular/core';\n * import { WizardConfig, WizardService, Wizard } from '@c8y/ngx-components';\n * import { ModalOptions } from 'ngx-bootstrap/modal';\n *\n * @Component({\n *  selector: 'c8y-add-application-wizard',\n *  templateUrl: './templatePath'\n * })\n * export class AddApplicationWizardComponent {\n *   constructor(private wizardService: WizardService) {}\n *\n *   addApplication() {\n *     const wizardConfig: WizardConfig = {\n *       headerText: 'Add Application',\n *       headerIcon: 'c8y-icon-modules',\n *       bodyHeaderText: 'Select methods',\n *       bodyHeaderIcon: 'c8y-icon-modules'\n *     };\n *\n *     const initialState: Wizard = {\n *       wizardConfig,\n *       id: 'uploadApplication'\n *     };\n *\n *     const modalOptions: ModalOptions = { initialState };\n *\n *     this.wizardService.show(modalOptions);\n *   }\n * }\n * ```\n */\n\n@Component({\n  selector: 'c8y-wizard',\n  templateUrl: './wizard.component.html',\n  standalone: true,\n  imports: [\n    NgTemplateOutlet,\n    IconDirective,\n    NgIf,\n    WizardOutletComponent,\n    C8yTranslateDirective,\n    AsyncPipe,\n    C8yTranslatePipe\n  ]\n})\nexport class WizardComponent<T = any> implements Wizard<T>, OnInit {\n  @ViewChild('headerRef', { static: true }) header: TemplateRef<any>;\n  @ViewChild('bodyRef', { static: true }) body: TemplateRef<any>;\n  @ViewChild('footerRef', { static: true }) footer: TemplateRef<any>;\n  @ViewChild(WizardOutletComponent) outlet: WizardOutletComponent;\n  /**\n   * The id parameter identifies the particular wizard and can be used to refer to it when hooking wizard entries.\n   * Example: \"wizardId\".\n   */\n  @Input() id: string;\n  /**\n   * A configuration object that allows you to set header values, both text and icon.\n   */\n  @Input() wizardConfig: WizardConfig = {};\n  /**\n   * A state that will be assigned to the actual component contained by the wizard.\n   */\n  componentInitialState: Partial<T> = {};\n  /**\n   * The event that is emitted when the wizard is closed.\n   */\n  @Output() onClose: EventEmitter<any> = new EventEmitter();\n  /**\n   * The event that is emitted when the wizard is reseted.\n   */\n  @Output() onReset: EventEmitter<any> = new EventEmitter();\n  /**\n   * The event that is emitted when the wizard entry is clicked.\n   */\n  @Output() onSelect: EventEmitter<WizardEntry> = new EventEmitter();\n  readonly headerTemplate$ = this.wizardService.headerTemplate$.pipe(\n    filter(header => header.wizardId === this.id)\n  );\n  readonly bodyTemplate$ = this.wizardService.bodyTemplate$.pipe(\n    filter(body => body.wizardId === this.id)\n  );\n  readonly footerTemplate$ = this.wizardService.footerTemplate$.pipe(\n    filter(footer => footer.wizardId === this.id)\n  );\n\n  constructor(\n    public wizardService: WizardService,\n    public bsModalRef: BsModalRef\n  ) {}\n\n  ngOnInit() {\n    this.emitTemplates();\n  }\n\n  /**\n   * Resets the wizard.\n   * @param result Custom result object which will be emitted via onReset output.\n   */\n  reset(result?: any) {\n    this.outlet.reset();\n    this.onReset.emit(result);\n    this.emitTemplates();\n  }\n\n  /**\n   * Closes the wizard.\n   * @param result Custom result object which will be emitted via onClose output.\n   */\n  close(result?: any) {\n    this.onClose.emit(result);\n    this.onClose.complete();\n    this.bsModalRef.hide();\n  }\n\n  onPath() {\n    this.close();\n  }\n\n  private emitTemplates() {\n    setTimeout(() => {\n      this.wizardService.headerTemplate$.next({ template: this.header, wizardId: this.id });\n      this.wizardService.bodyTemplate$.next({ template: this.body, wizardId: this.id });\n      this.wizardService.footerTemplate$.next({ template: this.footer, wizardId: this.id });\n    });\n  }\n}\n","<div class=\"viewport-modal animated fadeIn\">\n  <ng-template *ngTemplateOutlet=\"(headerTemplate$ | async)?.template\"></ng-template>\n\n  <ng-template #headerRef>\n    <div class=\"modal-header dialog-header animated fadeIn\">\n      <i [c8yIcon]=\"wizardConfig.headerIcon\"></i>\n      <h4 id=\"modal-title\">{{ wizardConfig.headerText | translate }}</h4>\n    </div>\n  </ng-template>\n\n  <ng-template *ngTemplateOutlet=\"(bodyTemplate$ | async)?.template\"></ng-template>\n\n  <ng-template #bodyRef>\n    <div class=\"p-16 p-t-8 text-center\" *ngIf=\"wizardConfig.bodyHeaderText\">\n      <div class=\"c8y-wizard-nav\">\n        <i [c8yIcon]=\"wizardConfig.bodyHeaderIcon\"></i>\n        <span>{{ wizardConfig.bodyHeaderText | translate }}</span>\n      </div>\n    </div>\n  </ng-template>\n  <c8y-wizard-outlet\n    [initialState]=\"componentInitialState\"\n    [id]=\"id\"\n    (onSelect)=\"onSelect.emit($event)\"\n    (onPath)=\"onPath()\"\n  ></c8y-wizard-outlet>\n\n  <ng-template *ngTemplateOutlet=\"(footerTemplate$ | async)?.template\"></ng-template>\n  <ng-template #footerRef>\n    <div class=\"modal-footer animated fadeIn\">\n      <button\n        (click)=\"close()\"\n        type=\"button\"\n        class=\"btn btn-default\"\n        title=\"{{ 'Cancel' | translate }}\"\n      >\n        <span translate>Cancel</span>\n      </button>\n    </div>\n  </ng-template>\n</div>\n","import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { WizardComponent } from './wizard.component';\nimport { WizardService } from './wizard.service';\n\n@Component({\n  selector: 'c8y-wizard-body',\n  template: `\n    <ng-template #bodyContent>\n      <div class=\"modal-inner-scroll animated fadeIn\">\n        <ng-content></ng-content>\n      </div>\n    </ng-template>\n  `,\n  standalone: true\n})\nexport class WizardBodyComponent implements OnInit {\n  @ViewChild('bodyContent', { static: true }) bodyContent: TemplateRef<any>;\n\n  constructor(\n    private wizard: WizardComponent,\n    private wizardService: WizardService\n  ) {}\n\n  ngOnInit() {\n    setTimeout(() => {\n      this.wizardService.bodyTemplate$.next({\n        template: this.bodyContent,\n        wizardId: this.wizard.id\n      });\n    });\n  }\n}\n","import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { WizardComponent } from './wizard.component';\nimport { WizardService } from './wizard.service';\n\n@Component({\n  selector: 'c8y-wizard-footer',\n  template: `\n    <ng-template #footerContent>\n      <div class=\"modal-footer\">\n        <ng-content></ng-content>\n      </div>\n    </ng-template>\n  `,\n  standalone: true\n})\nexport class WizardFooterComponent implements OnInit {\n  @ViewChild('footerContent', { static: true }) footerContent: TemplateRef<any>;\n\n  constructor(\n    private wizard: WizardComponent,\n    private wizardService: WizardService\n  ) {}\n\n  ngOnInit() {\n    setTimeout(() => {\n      this.wizardService.footerTemplate$.next({\n        template: this.footerContent,\n        wizardId: this.wizard.id\n      });\n    });\n  }\n}\n","import { Component, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { WizardComponent } from './wizard.component';\nimport { WizardService } from './wizard.service';\n\n@Component({\n  selector: 'c8y-wizard-header',\n  template: `\n    <ng-template #headerContent>\n      <div class=\"modal-header dialog-header animated fadeIn\">\n        <ng-content></ng-content>\n      </div>\n    </ng-template>\n  `,\n  standalone: true\n})\nexport class WizardHeaderComponent implements OnInit {\n  @ViewChild('headerContent', { static: true }) headerContent: TemplateRef<any>;\n\n  constructor(\n    private wizard: WizardComponent,\n    private wizardService: WizardService\n  ) {}\n\n  ngOnInit() {\n    setTimeout(() => {\n      this.wizardService.headerTemplate$.next({\n        template: this.headerContent,\n        wizardId: this.wizard.id\n      });\n    });\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { WizardComponent } from './wizard.component';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WizardModalService {\n  constructor(private bsModalService: BsModalService) {}\n  /**\n   * Shows a wizard modal.\n   * @param modalOptions Modal options.\n   * @returns a reference to the modal.\n   */\n  show(modalOptions: ModalOptions = {}): BsModalRef<WizardComponent> {\n    const options = {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      backdrop: 'static',\n      ...modalOptions\n    } as ModalOptions<WizardComponent>;\n    return this.bsModalService.show<WizardComponent>(WizardComponent, options);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { BsModalRef, ModalModule as BsModalModule } from 'ngx-bootstrap/modal';\nimport { CommonModule as C8yCommonModule } from '../common/common.module';\nimport { WizardBodyComponent } from './wizard-body.component';\nimport { WizardFooterComponent } from './wizard-footer.component';\nimport { WizardHeaderComponent } from './wizard-header.component';\nimport { WizardOutletComponent } from './wizard-outlet/wizard-outlet.component';\nimport { WizardComponent } from './wizard.component';\nimport { WizardService } from './wizard.service';\nimport { WizardModalService } from './wizard-modal.service';\n\n@NgModule({\n  imports: [\n    BsModalModule,\n    CommonModule,\n    C8yCommonModule,\n    WizardComponent,\n    WizardOutletComponent,\n    WizardHeaderComponent,\n    WizardBodyComponent,\n    WizardFooterComponent\n  ],\n  exports: [\n    WizardComponent,\n    WizardOutletComponent,\n    WizardHeaderComponent,\n    WizardBodyComponent,\n    WizardFooterComponent\n  ],\n  providers: [WizardService, BsModalRef, WizardModalService]\n})\nexport class WizardModule {}\n","import { Component, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n@Component({\n  selector: 'c8y-color-input',\n  templateUrl: './color-input.component.html',\n  standalone: true,\n  imports: [FormsModule],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ColorInputComponent),\n      multi: true\n    }\n  ]\n})\nexport class ColorInputComponent implements ControlValueAccessor {\n  currentValue: string;\n  isDisabled = false;\n  private onTouched: () => void;\n  private onChange: (value: string) => void;\n\n  writeValue(obj: string): void {\n    this.currentValue = obj;\n  }\n\n  registerOnChange(fn: (value: string) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState?(isDisabled: boolean): void {\n    this.isDisabled = isDisabled;\n  }\n\n  valueChange(value: string) {\n    this.currentValue = value;\n    if (this.onChange) {\n      this.onChange(value);\n    }\n    if (this.onTouched) {\n      this.onTouched();\n    }\n  }\n}\n","<div class=\"input-group\">\n  <div class=\"color-input form-control\">\n    <div class=\"c8y-colorpicker\">\n      <input\n        type=\"color\"\n        [disabled]=\"isDisabled\"\n        [ngModelOptions]=\"{ standalone: true }\"\n        [ngModel]=\"currentValue\"\n        (ngModelChange)=\"valueChange($event)\"\n      />\n      <span [style.background-color]=\"currentValue\"></span>\n    </div>\n  </div>\n  <input\n    class=\"form-control\"\n    type=\"text\"\n    [disabled]=\"isDisabled\"\n    [ngModelOptions]=\"{ standalone: true }\"\n    [ngModel]=\"currentValue\"\n    (ngModelChange)=\"valueChange($event)\"\n  />\n</div>\n","import { inject, Injectable, InjectionToken, Injector } from '@angular/core';\nimport { BehaviorSubject, combineLatest, firstValueFrom, Observable, of } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay, switchMap } from 'rxjs/operators';\nimport {\n  GenericHookOptions,\n  GenericHookType,\n  hookGeneric,\n  getInjectedHooks,\n  ExtensionPointForPlugins,\n  fromTriggerOnce,\n  stateToFactory,\n  sortByPriority\n} from '../common/extension-hooks';\nimport { PreviewFeature } from './preview-feature.model';\nimport { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { FeatureService } from '@c8y/client';\nimport { FeatureCacheService } from './feature-cache.service';\nimport { OptionsService } from '../common/options.service';\n\nexport const HOOK_PREVIEW = new InjectionToken<PreviewFeature[]>('HOOK_PREVIEW');\n\nexport function hookPreview(\n  preview: GenericHookType<PreviewFeature>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<PreviewFeature>(preview, HOOK_PREVIEW, options);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class PreviewService extends ExtensionPointForPlugins<PreviewFeature> {\n  items$: Observable<PreviewFeature[]> = this.setupItemsObservable();\n  reload$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n  private readonly LOCAL_STORAGE_KEY = 'c8y_beta_features_seen';\n  private seenFeatures$ = new BehaviorSubject<string[]>(this.getSeenFeatures());\n  hasUnseenFeatures$ = combineLatest([this.getAvailableFeatures$(), this.seenFeatures$]).pipe(\n    map(([features, seen]) => features.some(feature => !seen.includes(feature.label))),\n    distinctUntilChanged()\n  );\n  private readonly featureService = inject(FeatureService);\n  private readonly featureCacheService = inject(FeatureCacheService);\n  private readonly optionsService = inject(OptionsService);\n\n  private toggledFeaturesWithReload: Set<string> = new Set(); // track features with settings.reload = true\n\n  constructor(rootInjector: Injector, pluginService: PluginsResolveService) {\n    super(rootInjector, pluginService);\n  }\n\n  get state(): Set<PreviewFeature> {\n    return this.state$.value;\n  }\n\n  /**\n   * Get the state of a specific feature.\n   * @param key The unique key or label for the feature. Label is used to find the custom features.\n   * @returns Observable<boolean> representing the state of the feature.\n   */\n  getState$(key: string): Observable<boolean> {\n    return this.items$.pipe(\n      switchMap(features =>\n        this.optionsService.get$('enableAllPreviewFeatures').pipe(\n          switchMap(enableAllPreviewFeatures => {\n            if (enableAllPreviewFeatures) {\n              return of(true);\n            }\n            const feature = features.find(f => f.key === key || f.label === key);\n            if (!feature) {\n              throw new Error(`Feature with key \"${key}\" does not exist.`);\n            }\n            if (feature.active$) {\n              return feature.active$;\n            }\n            return this.featureCacheService.getFeatureState(key).pipe(distinctUntilChanged());\n          })\n        )\n      ),\n      distinctUntilChanged()\n    );\n  }\n\n  /**\n   * Toggle the state of a specific feature.\n   * @param key The unique key or label for the feature. Label is used to find the custom features.\n   * @returns Promise<void> after toggling the state.\n   */\n  async setFeatureActiveState(key: string, toggleValue: boolean): Promise<void> {\n    const features = await firstValueFrom(this.items$);\n    const feature = features.find(f => f.key === key) || features.find(f => f.label === key);\n\n    if (!feature) {\n      throw new Error(`Feature with key \"${key}\" does not exist.`);\n    }\n\n    if (feature.onToggle) {\n      const success = await feature.onToggle(toggleValue);\n      if (!success) {\n        throw new Error(`Failed to toggle feature with key \"${key}\".`);\n      }\n      this.checkIfReloadNeeded(feature, key);\n      return;\n    }\n\n    if (toggleValue) {\n      const featureToUpdate = { key: feature.key, active: toggleValue };\n      await this.featureService.updateFeature(featureToUpdate);\n    } else {\n      await this.featureService.removeTenantOverride({ key: feature.key });\n    }\n    this.featureCacheService.resetFeatureState();\n    this.checkIfReloadNeeded(feature, key);\n  }\n\n  /**\n   * Marks all unseen features as seen by the user and updates the local storage.\n   * This assumes all features are provided via the `items$` observable.\n   */\n  async markAllFeaturesAsSeen(): Promise<void> {\n    const features = await firstValueFrom(this.getAvailableFeatures$());\n    const newFeatureNames = features.map(feature => feature.label);\n\n    const storedFeatures = localStorage.getItem(this.LOCAL_STORAGE_KEY);\n    const existingFeatureNames: string[] = storedFeatures ? JSON.parse(storedFeatures) : [];\n\n    // Update the local storage with unique feature names and remove duplicates\n    const updatedFeatureNames = Array.from(new Set([...existingFeatureNames, ...newFeatureNames]));\n\n    localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(updatedFeatureNames));\n    this.seenFeatures$.next(updatedFeatureNames);\n  }\n\n  /**\n   * Filters the features to only include those that are available by checking the feature toggle API.\n   */\n  getAvailableFeatures$(): Observable<PreviewFeature[]> {\n    return this.items$.pipe(\n      switchMap(features => {\n        return combineLatest(\n          features.map(feat =>\n            feat.key\n              ? this.featureCacheService\n                  .featureExists(feat.key)\n                  .pipe(map(exists => (exists ? feat : false)))\n              : of(feat)\n          )\n        ).pipe(map(features => features.filter(Boolean))) as Observable<PreviewFeature[]>;\n      })\n    );\n  }\n\n  checkIfReloadNeeded(feature: PreviewFeature, key: string): void {\n    if (feature.settings?.reload) {\n      if (this.toggledFeaturesWithReload.has(key)) {\n        this.toggledFeaturesWithReload.delete(key);\n      } else {\n        this.toggledFeaturesWithReload.add(key);\n      }\n    }\n\n    this.reload$.next(this.toggledFeaturesWithReload.size > 0);\n  }\n\n  /**\n   *\n   * @returns An array of feature names that have been seen by the user. This is retrieved from local storage.\n   */\n  private getSeenFeatures(): string[] {\n    const seenFeatures = localStorage.getItem(this.LOCAL_STORAGE_KEY);\n    return seenFeatures ? JSON.parse(seenFeatures) : [];\n  }\n\n  protected setupItemsObservable(): Observable<PreviewFeature[]> {\n    return fromTriggerOnce<PreviewFeature>(undefined, this.refresh$, [\n      getInjectedHooks<PreviewFeature>(HOOK_PREVIEW, this.injectors),\n      () => this.factories,\n      stateToFactory(this.state$)\n    ]).pipe(\n      distinctUntilChanged(),\n      map(features => sortByPriority(features)),\n      shareReplay(1)\n    );\n  }\n}\n","import { Type } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport const SHOW_PREVIEW_FEATURES = 'showPreviewFeatures';\n\nexport type PreviewFeature = PreviewFeatureCustom | PreviewFeatureDefault;\nexport interface PreviewFeatureCustom extends BasePreviewFeature {\n  key?: never;\n  scope?: never;\n  onToggle: (state: any) => Promise<boolean>;\n  active$: Observable<boolean>;\n}\n\nexport interface PreviewFeatureDefault extends BasePreviewFeature {\n  key: string;\n  scope?: 'user' | 'tenant' | 'temp' | 'platform';\n  onToggle?: never;\n  active$?: never;\n}\n\nexport interface BasePreviewFeature {\n  label: string;\n  description: () => Promise<string | Type<any>>;\n  settings?: {\n    reload?: boolean;\n  };\n}\n","import { Component, inject, OnDestroy } from '@angular/core';\nimport { C8yTranslateDirective, C8yTranslatePipe } from '../i18n';\nimport { PreviewService } from './preview-feature.service';\nimport { Observable, Subject } from 'rxjs';\nimport { HeaderService } from '../header';\nimport { AsyncPipe, NgIf } from '@angular/common';\nimport { ActivatedRoute, Router } from '@angular/router';\n\n@Component({\n  selector: 'c8y-preview-feature-button',\n  templateUrl: './preview-feature-button.component.html',\n  standalone: true,\n  imports: [C8yTranslateDirective, C8yTranslatePipe, AsyncPipe, NgIf]\n})\nexport class PreviewFeatureButtonComponent implements OnDestroy {\n  open$: Observable<boolean>;\n  hasUnseenFeatures$: Observable<boolean>;\n  private readonly previewService = inject(PreviewService);\n  private readonly headerService = inject(HeaderService);\n  private readonly router = inject(Router);\n  private readonly route = inject(ActivatedRoute);\n  private destroy$ = new Subject<void>();\n\n  async ngOnInit() {\n    this.hasUnseenFeatures$ = this.previewService.hasUnseenFeatures$;\n    this.open$ = this.headerService.rightDrawerOpen$;\n  }\n\n  async openPreviewFeature() {\n    this.headerService.closeRightDrawer();\n    this.router.navigate([], {\n      relativeTo: this.route,\n      queryParams: { showPreviewFeatures: true },\n      queryParamsHandling: 'merge',\n      replaceUrl: true\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n}\n","<div class=\"separator-top p-t-8 m-t-auto c8y-right-drawer__item sticky-top\">\n  <i class=\"dlt-c8y-icon-science\"></i>\n  <span\n    class=\"text-bold\"\n    translate\n  >\n    Preview features\n  </span>\n  <span\n    class=\"m-l-8 tag tag--primary\"\n    *ngIf=\"hasUnseenFeatures$ | async\"\n  >\n    {{ 'New' | translate }}\n  </span>\n</div>\n<ul class=\"list-unstyled\">\n  <li class=\"c8y-right-drawer__item\">\n    <small translate>\n      Enable or disable experimental features. Your feedback helps us improve functionality before\n      final release.\n    </small>\n  </li>\n  <li class=\"c8y-right-drawer__item\">\n    <button\n      class=\"btn btn-default btn-sm\"\n      title=\"{{ 'Manage preview features' | translate }}\"\n      [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n      (click)=\"openPreviewFeature()\"\n    >\n      <i class=\"m-t-0 m-b-9 text-14 dlt-c8y-icon-settings\"></i>\n      <span translate>Manage preview features</span>\n    </button>\n  </li>\n</ul>\n","import { Injectable } from '@angular/core';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { OptionsService } from '../common/options.service';\nimport { DrawerItem } from '../drawer/drawer.model';\nimport { combineLatest, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { PreviewFeatureButtonComponent } from './preview-feature-button.component';\nimport { PreviewService } from './preview-feature.service';\nimport { Permissions } from '../common/permissions.service';\n\n@Injectable({ providedIn: 'root' })\nexport class PreviewFeatureDrawerFactory implements ExtensionFactory<DrawerItem> {\n  protected drawerItem: DrawerItem = {\n    component: PreviewFeatureButtonComponent,\n    position: 'right',\n    priority: 80,\n    id: 'previewFeature'\n  };\n\n  constructor(\n    private options: OptionsService,\n    private previewService: PreviewService,\n    private permissions: Permissions\n  ) {}\n\n  get(): Observable<DrawerItem[] | DrawerItem> {\n    return this.shouldShowPreviewFeature$().pipe(\n      distinctUntilChanged(),\n      map(shouldShowPreviewFeature => {\n        if (shouldShowPreviewFeature) {\n          return this.drawerItem;\n        }\n        return [];\n      })\n    );\n  }\n\n  private shouldShowPreviewFeature$(): Observable<boolean> {\n    return combineLatest([\n      this.options.get$('hidePreviewFeature'),\n      this.previewService.getAvailableFeatures$()\n    ]).pipe(\n      map(([hidePreviewFeature, items]) => {\n        const hasItems = items.length > 0;\n        if (!hasItems) {\n          return false;\n        }\n\n        const hasAdminRole = this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN);\n\n        if (hidePreviewFeature === undefined) {\n          return hasItems && hasAdminRole;\n        }\n\n        return !hidePreviewFeature && hasItems && hasAdminRole;\n      })\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { AppStateService, Permissions } from '../common';\nimport { of, switchMap } from 'rxjs';\nimport { PreviewService } from './preview-feature.service';\n\n@Injectable({ providedIn: 'root' })\nexport class PreviewFeatureShowNotification\n  implements CumulocityServiceRegistry.NotificationServiceProvider\n{\n  shouldShowNotification$ = this.appState.currentUser.pipe(\n    switchMap(user => {\n      if (!user) {\n        return of(false);\n      }\n      const hasAdminRole = this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN);\n      if (!hasAdminRole) {\n        return of(false);\n      }\n      return this.previewService.hasUnseenFeatures$;\n    })\n  );\n\n  constructor(\n    private previewService: PreviewService,\n    private permissions: Permissions,\n    private appState: AppStateService\n  ) {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { PluginsResolveService } from './plugins-resolve.service';\nimport { distinctUntilChanged, map, Observable, of } from 'rxjs';\n\n@Pipe({\n  name: 'c8yPluginLoaded',\n  standalone: true\n})\nexport class PluginLoadedPipe implements PipeTransform {\n  constructor(private pluginsResolve: PluginsResolveService) {}\n\n  transform(pluginName: string): Observable<boolean> {\n    if (!pluginName) {\n      return of(false);\n    }\n    return this.pluginsResolve.loadedPluginNames$.pipe(\n      map(pluginNames => pluginNames.includes(pluginName)),\n      distinctUntilChanged()\n    );\n  }\n}\n","import {\n  Injectable,\n  InjectionToken,\n  Injector,\n  Optional,\n  runInInjectionContext\n} from '@angular/core';\nimport {\n  ExtensionPointWithoutStateForPlugins,\n  fromTrigger,\n  GenericHookOptions,\n  GenericHookType,\n  getInjectedHooks,\n  hookGeneric\n} from '../common';\nimport { PluginsResolveService } from '../plugins';\nimport { combineLatest, distinctUntilChanged, NEVER, Observable, shareReplay, tap } from 'rxjs';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nexport interface QueryParamConfig {\n  /**\n   * The name of the query parameter to observe.\n   */\n  queryParam: string;\n  /**\n   * This function will be called when the query parameter is present in the URL.\n   */\n  trigger: () => void | Promise<void>;\n  /**\n   * The injector to use. If not set, the default root injector will be used.\n   */\n  injector?: Injector;\n}\n\nexport const HOOK_QUERY_PARAM = new InjectionToken<QueryParamConfig[]>('HOOK_QUERY_PARAM');\n\nexport function hookQueryParam(\n  config: GenericHookType<QueryParamConfig>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<QueryParamConfig>(config, HOOK_QUERY_PARAM, options);\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class QueryParamHandlerService extends ExtensionPointWithoutStateForPlugins<QueryParamConfig> {\n  constructor(\n    rootInjector: Injector,\n    private router: Router,\n    pluginService: PluginsResolveService,\n    @Optional() private activatedRoute: ActivatedRoute\n  ) {\n    super(rootInjector, pluginService);\n    this.items$ = this.setupItemsObservable();\n\n    combineLatest([this.items$, this.activatedRoute?.queryParamMap || NEVER])\n      .pipe(\n        distinctUntilChanged(([prevItems, prevParamsMap], [currItems, currParamsMap]) => {\n          const previousItems = prevItems.map(item => item.queryParam).sort();\n          const currentItems = currItems.map(item => item.queryParam).sort();\n          const itemsUnchanged = JSON.stringify(previousItems) === JSON.stringify(currentItems);\n          const prevParams: { [key: string]: string } = {};\n          prevParamsMap.keys.forEach(key => {\n            const value = prevParamsMap.get(key);\n            if (value !== null) {\n              prevParams[key] = value;\n            }\n          });\n          const currParams: { [key: string]: string } = {};\n          currParamsMap.keys.forEach(key => {\n            const value = currParamsMap.get(key);\n            if (value !== null) {\n              currParams[key] = value;\n            }\n          });\n          const paramsUnchanged = JSON.stringify(prevParams) === JSON.stringify(currParams);\n          return itemsUnchanged && paramsUnchanged;\n        }),\n        tap(([items, params]) => {\n          items.forEach(item => {\n            const paramValue = params.get(item.queryParam);\n            if (paramValue !== null) {\n              runInInjectionContext(item.injector || rootInjector, async () => {\n                await item.trigger();\n              });\n            }\n          });\n        })\n      )\n      .subscribe();\n  }\n\n  protected setupItemsObservable(): Observable<QueryParamConfig[]> {\n    return fromTrigger<QueryParamConfig>(this.router, this.refresh$, [\n      getInjectedHooks<QueryParamConfig>(HOOK_QUERY_PARAM, this.injectors),\n      () => this.factories\n    ]).pipe(distinctUntilChanged(), shareReplay(1));\n  }\n}\n","import { Injectable, InjectionToken, Injector } from '@angular/core';\nimport { ComponentType } from '@angular/cdk/overlay';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport {\n  ExtensionFactory,\n  ExtensionPointWithoutStateForPlugins,\n  fromTriggerOnce,\n  GenericHookOptions,\n  GenericHookType,\n  getInjectedHooks,\n  hookGeneric\n} from '../common';\nimport { BottomDrawerService } from '../bottom-drawer';\nimport { QueryParamConfig } from './query-param-handler.service';\nimport { PluginsResolveService } from '../plugins';\n\nexport interface QueryParamBottomDrawerConfig {\n  /**\n   * The name of the query parameter to observe.\n   */\n  queryParam: string;\n  /**\n   * Defines whether the drawer should be closed when navigation start is detected. Defaults to <code>true</code>.\n   */\n  closeOnNavigation: boolean;\n  /**\n   * Defines whether it should be possible to click outside of the drawer to close the drawer.\n   */\n  disableClickOutside: boolean;\n  /**\n   * The component to display in the bottom drawer.\n   */\n  component: ComponentType<any>;\n  /**\n   * The injector to use. If not set, the default root injector will be used.\n   */\n  injector?: Injector;\n}\n\nexport const HOOK_QUERY_PARAM_BOTTOM_DRAWER = new InjectionToken<QueryParamBottomDrawerConfig[]>(\n  'HOOK_QUERY_PARAM_BOTTOM_DRAWER'\n);\n\nexport function hookQueryParamBottomDrawer(\n  config: GenericHookType<QueryParamBottomDrawerConfig>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<QueryParamBottomDrawerConfig>(config, HOOK_QUERY_PARAM_BOTTOM_DRAWER, options);\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class QueryParamBottomDrawerStateService extends ExtensionPointWithoutStateForPlugins<QueryParamBottomDrawerConfig> {\n  constructor(rootInjector: Injector, pluginService: PluginsResolveService) {\n    super(rootInjector, pluginService);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  protected setupItemsObservable(): Observable<QueryParamBottomDrawerConfig[]> {\n    return fromTriggerOnce<QueryParamBottomDrawerConfig>(undefined, this.refresh$, [\n      getInjectedHooks<QueryParamBottomDrawerConfig>(\n        HOOK_QUERY_PARAM_BOTTOM_DRAWER,\n        this.injectors\n      ),\n      () => this.factories\n    ]).pipe(distinctUntilChanged(), shareReplay(1));\n  }\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class QueryParamBottomDrawerFactory implements ExtensionFactory<QueryParamConfig> {\n  constructor(\n    private readonly queryParamBottomDrawerStateService: QueryParamBottomDrawerStateService,\n    private readonly bottomDrawerService: BottomDrawerService\n  ) {}\n\n  get(): Observable<QueryParamConfig[]> {\n    return this.queryParamBottomDrawerStateService.items$.pipe(\n      map(items => {\n        return items.map(item => {\n          const config: QueryParamConfig = {\n            queryParam: item.queryParam,\n            trigger: () => {\n              this.handleQueryParamBottomDrawer(item);\n            },\n            injector: item.injector\n          };\n          return config;\n        });\n      })\n    );\n  }\n\n  async handleQueryParamBottomDrawer(config: QueryParamBottomDrawerConfig): Promise<void> {\n    const bottomDrawer = this.bottomDrawerService.openDrawer(config.component, {\n      closeOnNavigation: config.closeOnNavigation,\n      disableClickOutside: config.disableClickOutside\n    });\n\n    try {\n      const result = await bottomDrawer.instance.shouldClose;\n      if (result) {\n        bottomDrawer.close();\n      }\n    } catch (e) {\n      // intended empty\n    }\n  }\n}\n","import { Injectable, InjectionToken, Injector, Optional } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport { BsModalRef, BsModalService, ModalOptions } from 'ngx-bootstrap/modal';\nimport { ComponentType } from '@angular/cdk/overlay';\nimport { Observable, Subscription } from 'rxjs';\nimport {\n  ExtensionFactory,\n  ExtensionPointWithoutStateForPlugins,\n  fromTriggerOnce,\n  GenericHookOptions,\n  GenericHookType,\n  getInjectedHooks,\n  hookGeneric\n} from '../common';\nimport { QueryParamConfig } from './query-param-handler.service';\nimport { PluginsResolveService } from '../plugins';\n\nexport type QueryParamModalConfig = QueryParamModalConfigLazy | QueryParamModalConfigEager;\n\nexport interface QueryParamModalConfigEager extends QueryParamModalConfigBase {\n  /**\n   * The component to display in the modal.\n   */\n  component: ComponentType<any>;\n\n  loadComponent?: never;\n}\n\nexport interface QueryParamModalConfigLazy extends QueryParamModalConfigBase {\n  component?: never;\n\n  /**\n   * The component to display in the modal.\n   */\n  loadComponent: () => Promise<ComponentType<any>>;\n}\n\nexport interface QueryParamModalConfigBase {\n  /**\n   * The name of the query parameter to observe.\n   */\n  queryParam: string;\n  /**\n   * Optional configuration settings for the modal.\n   */\n  modalConfig?: ModalOptions;\n  /**\n   * The injector to use. If not set, the default root injector will be used.\n   */\n  injector?: Injector;\n}\n\nexport const HOOK_QUERY_PARAM_MODAL = new InjectionToken<QueryParamModalConfig[]>(\n  'HOOK_QUERY_PARAM_MODAL'\n);\n\nexport function hookQueryParamModal(\n  config: GenericHookType<QueryParamModalConfig>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<QueryParamModalConfig>(config, HOOK_QUERY_PARAM_MODAL, options);\n}\n\n/**\n * Service to manage the display of modals based on URL query parameter.\n *\n * This service listens for specific query parameters in the URL and opens corresponding modals when detected.\n * It automatically cleans up the query parameters from the URL when the modal is closed or query parameter value passed as 'false'.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class QueryParamModalStateService extends ExtensionPointWithoutStateForPlugins<QueryParamModalConfig> {\n  constructor(rootInjector: Injector, pluginService: PluginsResolveService) {\n    super(rootInjector, pluginService);\n    this.items$ = this.setupItemsObservable();\n  }\n\n  protected setupItemsObservable(): Observable<QueryParamModalConfig[]> {\n    return fromTriggerOnce<QueryParamModalConfig>(undefined, this.refresh$, [\n      getInjectedHooks<QueryParamModalConfig>(HOOK_QUERY_PARAM_MODAL, this.injectors),\n      () => this.factories\n    ]).pipe(distinctUntilChanged(), shareReplay(1));\n  }\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class QueryParamModalFactory implements ExtensionFactory<QueryParamConfig> {\n  private modalCloseSubscription: Subscription | null = null;\n\n  constructor(\n    private readonly queryParamModalStateService: QueryParamModalStateService,\n    private readonly bsModalService: BsModalService,\n    private readonly router: Router,\n    @Optional() private readonly activatedRoute: ActivatedRoute\n  ) {}\n\n  get(): Observable<QueryParamConfig[]> {\n    return this.queryParamModalStateService.items$.pipe(\n      map(items => {\n        return items.map(item => {\n          const config = {\n            queryParam: item.queryParam,\n            trigger: () => {\n              this.handleQueryParamModal(item);\n            },\n            injector: item.injector\n          };\n          return config;\n        });\n      })\n    );\n  }\n\n  /**\n   * Handles the display of a modal based on a specific query parameter.\n   *\n   * @param config - Configuration object specifying the query parameter, component, and optional modal settings.\n   * @returns An observable that listens for changes in the query parameter.\n   */\n  async handleQueryParamModal(config: QueryParamModalConfig): Promise<void> {\n    const component = config.component\n      ? config.component\n      : config.loadComponent\n        ? await config.loadComponent()\n        : null;\n    const modalRef = this.showModal(component, config.modalConfig);\n\n    this.modalCloseSubscription = modalRef.onHidden.subscribe(() => {\n      this.removeQueryParam(config.queryParam);\n      this.cleanup();\n    });\n  }\n\n  /**\n   * Removes the specified query parameter from the URL.\n   *\n   * @param paramKey - The key of the query parameter to remove.\n   */\n  private removeQueryParam(paramKey: string): void {\n    const queryParams = {\n      [paramKey]: null\n    };\n\n    this.router.navigate([], {\n      relativeTo: this.activatedRoute,\n      queryParams,\n      queryParamsHandling: 'merge'\n    });\n  }\n\n  /**\n   * Displays a modal with the specified component and configuration.\n   *\n   * @param component - The component to display in the modal.\n   * @param modalConfig - Optional settings for the modal appearance and behavior.\n   */\n  private showModal(component: ComponentType<any>, modalConfig?: any): BsModalRef {\n    return this.bsModalService.show(component, modalConfig);\n  }\n\n  /**\n   * Cleans up subscriptions related to modal events.\n   * Ensures no memory leaks by unsubscribing from modal close events.\n   */\n  private cleanup(): void {\n    if (this.modalCloseSubscription) {\n      this.modalCloseSubscription.unsubscribe();\n      this.modalCloseSubscription = null;\n    }\n  }\n}\n","import { inject, provideAppInitializer } from '@angular/core';\nimport { hookQueryParam, QueryParamHandlerService } from './query-param-handler.service';\nimport { QueryParamBottomDrawerFactory } from './query-param-bottom-drawer.service';\nimport { QueryParamModalFactory } from './query-param-modal-handler.service';\n\nexport * from './query-param-modal-handler.service';\nexport * from './query-param-bottom-drawer.service';\nexport * from './query-param-handler.service';\n\nexport const QUERY_PARAM_HANDLER_PROVIDERS = [\n  // This will ensure that the QueryParamHandlerService is initialized\n  provideAppInitializer(() => {\n    inject(QueryParamHandlerService);\n  }),\n  hookQueryParam(QueryParamBottomDrawerFactory),\n  hookQueryParam(QueryParamModalFactory)\n];\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { PreviewService } from './preview-feature.service';\n\n@Pipe({\n  name: 'featureState',\n  standalone: true\n})\nexport class FeatureStatePipe implements PipeTransform {\n  constructor(private previewService: PreviewService) {}\n\n  transform(featureKey: string): Observable<boolean> {\n    return this.previewService.getState$(featureKey);\n  }\n}\n","export const PRODUCT_EXPERIENCE_FEEDBACK_FORM = {\n  EVENTS: {\n    FORM_SUBMIT: 'feedback-form-submit'\n  }\n};\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { PRODUCT_EXPERIENCE_FEEDBACK_FORM } from './feedback-form.model';\nimport { TextareaAutoresizeDirective, OperationResultComponent } from '../common';\nimport { GainsightService } from '../product-experience';\nimport { C8yTranslateModule, gettext } from '../i18n';\n\n@Component({\n  selector: 'c8y-feedback-form',\n  templateUrl: './feedback-form.component.html',\n  standalone: true,\n  imports: [\n    ReactiveFormsModule,\n    TextareaAutoresizeDirective,\n    C8yTranslateModule,\n    OperationResultComponent\n  ]\n})\nexport class FeedbackFormComponent implements OnChanges {\n  @Input() featureKey!: string;\n  @Input() featurePreviewName!: string;\n  feedbackMessageTpl = gettext(\n    'We want to hear from you. Share your feedback on the <strong>{{featurePreviewName}}</strong> feature preview to help us improve Cumulocity.'\n  );\n\n  feedbackForm: ReturnType<FeedbackFormComponent['initForm']>;\n  stars = [1, 2, 3, 4, 5];\n  hoveredRating = 0;\n  ratingLockOnHover = false;\n  submitted: Record<string, boolean> = {};\n\n  constructor(\n    private fb: FormBuilder,\n    private gainsightService: GainsightService\n  ) {\n    this.feedbackForm = this.initForm();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['featureKey'] && !changes['featureKey'].firstChange) {\n      this.feedbackForm.reset();\n      this.submitted[this.featureKey] = false;\n      this.ratingLockOnHover = false;\n      this.hoveredRating = 0;\n    }\n  }\n\n  setRating(star: number): void {\n    this.feedbackForm.patchValue({ rating: star });\n    this.ratingLockOnHover = true;\n  }\n\n  onMouseDown(star: number): void {\n    if (this.hoveredRating > 0) {\n      this.hoveredRating = star; // needed in case ratingLockOnHover is true\n      this.setRating(star);\n    }\n  }\n\n  onMouseEnter(star: number): void {\n    if (!this.ratingLockOnHover) {\n      this.hoveredRating = star;\n    }\n  }\n\n  onMouseLeave(): void {\n    if (!this.ratingLockOnHover) {\n      this.hoveredRating = 0;\n    }\n  }\n\n  onSubmit(): void {\n    if (this.feedbackForm.valid) {\n      this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_FEEDBACK_FORM.EVENTS.FORM_SUBMIT, {\n        component: this.featureKey,\n        ...this.feedbackForm.value\n      });\n      this.feedbackForm.reset();\n      this.submitted[this.featureKey] = true;\n      this.ratingLockOnHover = false;\n      this.hoveredRating = 0;\n    }\n  }\n\n  private initForm(): FormGroup {\n    return this.fb.group({\n      feedback: ['', [Validators.maxLength(900)]],\n      rating: [null, [Validators.required]],\n      contactViaEmail: [false]\n    });\n  }\n}\n","<form\n  class=\"card card-highlight b-r-16 m-t-40\"\n  [formGroup]=\"feedbackForm\"\n  (ngSubmit)=\"onSubmit()\"\n>\n  <div class=\"card-header p-48 p-b-24\">\n    <h3 translate>We value your feedback.</h3>\n  </div>\n  <div class=\"card-block p-48 p-t-0\">\n    <div class=\"d-flex-md row\">\n      <div class=\"col-md-4\">\n        <p\n          class=\"m-b-8\"\n          [innerHTML]=\"feedbackMessageTpl | translate: { featurePreviewName: featurePreviewName }\"\n        ></p>\n        <p\n          class=\"m-b-24\"\n          translate\n        >\n          Your insights and suggestions directly influence the future of the platform.\n        </p>\n      </div>\n      <div\n        class=\"col-md-7\"\n        style=\"min-height: 256px\"\n      >\n        @if (!submitted[featureKey]) {\n          <div class=\"form-group\">\n            <label class=\"text-medium\">\n              {{ 'How would you rate your experience with this feature?' | translate }}\n            </label>\n            <div\n              class=\"d-flex a-i-center gap-4\"\n              (mouseleave)=\"onMouseLeave()\"\n            >\n              @for (star of stars; track star) {\n                <button\n                  class=\"btn-clean btn-lg\"\n                  [attr.aria-label]=\"\n                    'Your rating: {{ starCount }} star(s)' | translate: { starCount: star }\n                  \"\n                  type=\"button\"\n                  (mousedown)=\"onMouseDown(star)\"\n                  (mouseenter)=\"onMouseEnter(star)\"\n                >\n                  @if (star <= (hoveredRating || feedbackForm.get('rating')?.value || 0)) {\n                    <i class=\"dlt-c8y-icon-star stroked-icon status minor\"></i>\n                  } @else {\n                    <i class=\"dlt-c8y-icon-star-outline status\"></i>\n                  }\n                </button>\n              }\n            </div>\n          </div>\n\n          <div class=\"form-group\">\n            <label\n              class=\"text-medium\"\n              for=\"feedback\"\n              translate\n            >\n              Share your feedback, suggestions, or any issues you’ve encountered.\n            </label>\n            <textarea\n              class=\"form-control no-resize inner-scroll\"\n              style=\"max-height: 100px !important\"\n              [attr.aria-label]=\"'Enter your feedback here' | translate\"\n              id=\"feedback\"\n              c8y-textarea-autoresize\n              formControlName=\"feedback\"\n              maxlength=\"900\"\n            ></textarea>\n          </div>\n\n          <label class=\"c8y-switch\">\n            <input\n              id=\"contactViaEmail\"\n              type=\"checkbox\"\n              formControlName=\"contactViaEmail\"\n            />\n            <span></span>\n            <span>\n              {{ 'I’m open to being contacted for follow-up about my feedback' | translate }}\n            </span>\n          </label>\n\n          <button\n            class=\"btn btn-primary m-t-24\"\n            type=\"submit\"\n            [disabled]=\"feedbackForm.invalid\"\n            translate\n          >\n            Submit feedback\n          </button>\n        } @else {\n          <c8y-operation-result\n            class=\"d-block\"\n            style=\"margin-top: -40px\"\n            type=\"success\"\n            [size]=\"90\"\n            text=\"{{ 'Thank you for your feedback.' | translate }}\"\n            [vertical]=\"true\"\n          ></c8y-operation-result>\n        }\n      </div>\n    </div>\n  </div>\n</form>\n","import { Component, HostListener, inject, Type } from '@angular/core';\nimport { PreviewFeature } from './preview-feature.model';\nimport { BehaviorSubject, firstValueFrom, Observable } from 'rxjs';\nimport { AsyncPipe } from '@angular/common';\nimport { CommonModule, MarkdownToHtmlPipe } from '../common';\nimport { ListGroupModule } from '../list-group';\nimport { PreviewService } from './preview-feature.service';\nimport { FeatureStatePipe } from './feature-state.pipe';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { FeedbackFormComponent } from '../feedback-form';\n\n@Component({\n  selector: 'c8y-preview-feature',\n  templateUrl: './preview-feature.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [AsyncPipe, CommonModule, ListGroupModule, FeatureStatePipe, FeedbackFormComponent],\n  providers: [MarkdownToHtmlPipe]\n})\nexport class PreviewFeatureComponent {\n  selectedFeature: PreviewFeature;\n  shouldClose: Promise<boolean>;\n  description$: BehaviorSubject<string | Type<any> | Promise<string | Type<any>>> =\n    new BehaviorSubject('');\n  private resolveClose!: (value: boolean | PromiseLike<boolean>) => void;\n\n  private readonly previewFeatureService = inject(PreviewService);\n  private readonly markdownToHtmlPipe = inject(MarkdownToHtmlPipe);\n  private readonly router = inject(Router);\n  private readonly route = inject(ActivatedRoute);\n\n  features$: Observable<PreviewFeature[]> = this.previewFeatureService.getAvailableFeatures$();\n\n  constructor() {\n    this.shouldClose = new Promise<boolean>(resolve => {\n      this.resolveClose = resolve;\n    });\n  }\n\n  @HostListener('document:keydown.escape', ['$event'])\n  onEscapeKey(event: KeyboardEvent) {\n    event.preventDefault();\n    this.close();\n  }\n\n  async ngOnInit() {\n    await this.previewFeatureService.markAllFeaturesAsSeen();\n    const features = await firstValueFrom(this.features$);\n    this.updateSelectedFeature(features[0]);\n  }\n\n  async updateSelectedFeature(feature: PreviewFeature) {\n    this.selectedFeature = feature;\n    await this.updateDescription();\n  }\n\n  async updateDescription() {\n    const description = await this.selectedFeature?.description();\n    if (!this.isComponent(description)) {\n      const html = await firstValueFrom(this.markdownToHtmlPipe.transform(description));\n      this.description$.next(html);\n    } else {\n      this.description$.next(description);\n    }\n  }\n\n  isComponent(description: string | Type<any> | Promise<string | Type<any>>) {\n    return description instanceof Function;\n  }\n\n  async onToggle(feature: PreviewFeature, event: Event): Promise<void> {\n    const isChecked = (event.target as HTMLInputElement).checked;\n    await this.previewFeatureService.setFeatureActiveState(feature.key, isChecked);\n  }\n\n  close() {\n    this.resolveClose(true);\n    this.router\n      .navigate([], {\n        relativeTo: this.route,\n        queryParams: { showPreviewFeatures: null },\n        queryParamsHandling: 'merge',\n        replaceUrl: true\n      })\n      .then(() => {\n        // Reload if needed\n        if (this.previewFeatureService.reload$.value) {\n          window.location.reload();\n        }\n      });\n  }\n}\n","<div class=\"card-block separator-bottom bg-component text-center flex-no-shrink p-24\">\n  <div class=\"d-flex fit-w a-i-center j-c-center\">\n    <i\n      class=\"icon-24 m-r-8\"\n      [c8yIcon]=\"'science'\"\n    ></i>\n    <h3\n      class=\"m-0\"\n      translate\n    >\n      Preview features\n    </h3>\n  </div>\n  <p class=\"text-16 m-t-8\">\n    {{\n      'Select any feature to view additional details and documentation. Toggle features on or off using the switches.'\n        | translate\n    }}\n  </p>\n\n  <p>\n    {{\n      'These beta capabilities may change or be removed before final release. We value your feedback. The descriptions for the features below are available only in English.'\n        | translate\n    }}\n  </p>\n</div>\n\n<div class=\"card-block p-0\">\n  <div class=\"d-flex fit-h\">\n    <div class=\"col-md-4 col-lg-3 p-l-0 p-r-0 sticky-top m-t-0 inner-scroll bg-level-1\">\n      <div class=\"nav-tabs nav-tabs-vertical nav-tabs-vertical--wide p-t-0\">\n        @for (feature of features$ | async; track feature) {\n          <div\n            [class.active]=\"feature === selectedFeature\"\n            class=\"d-flex fit-w a-i-center\"\n          >\n            <button\n              class=\"d-flex gap-4 text-truncate flex-grow min-width-0\"\n              title=\"{{ feature.label }}\"\n              [ngClass]=\"{\n                'bg-component': feature === selectedFeature,\n                'bg-level-1': feature !== selectedFeature\n              }\"\n              (click)=\"updateSelectedFeature(feature)\"\n            >\n              <i\n                class=\"m-l-0\"\n                [c8yIcon]=\"'science'\"\n              ></i>\n              <span class=\"text-truncate\">\n                {{ feature.label }}\n              </span>\n            </button>\n            <div\n              class=\"a-s-stretch d-flex a-i-center separator-bottom p-r-16\"\n              [ngClass]=\"{\n                'bg-component': feature === selectedFeature,\n                'bg-level-1': feature !== selectedFeature\n              }\"\n            >\n              <label\n                class=\"c8y-switch c8y-switch--inline m-l-auto\"\n                title=\"{{ 'Enable or disable' | translate }}\"\n              >\n                <input\n                  [attr.aria-label]=\"feature.label\"\n                  type=\"checkbox\"\n                  [checked]=\"feature.key | featureState | async\"\n                  (change)=\"$event.stopPropagation(); onToggle(feature, $event)\"\n                />\n                <span class=\"slider round\"></span>\n              </label>\n            </div>\n          </div>\n        }\n      </div>\n    </div>\n\n    @if (selectedFeature) {\n      <div class=\"col-md-8 col-lg-9 p-24 inner-scroll markdown-content\">\n        <span class=\"tag tag--primary h4\">\n          {{ 'Feature preview' | translate }} — {{ selectedFeature.label }}\n        </span>\n        @if (isComponent(description$.value)) {\n          <div>\n            <ng-container *ngComponentOutlet=\"description$.value\"></ng-container>\n            @if (selectedFeature.key) {\n              <c8y-feedback-form\n                [featureKey]=\"selectedFeature.key\"\n                [featurePreviewName]=\"selectedFeature.label\"\n              ></c8y-feedback-form>\n            }\n          </div>\n        } @else {\n          <p [innerHTML]=\"description$.value\"></p>\n          @if (selectedFeature.key) {\n            <c8y-feedback-form\n              [featureKey]=\"selectedFeature.key\"\n              [featurePreviewName]=\"selectedFeature.label\"\n            ></c8y-feedback-form>\n          }\n        }\n      </div>\n    }\n  </div>\n</div>\n\n<div class=\"text-center card-footer p-24 separator\">\n  <button\n    class=\"btn btn-default\"\n    title=\"{{ 'Close' | translate }}\"\n    type=\"button\"\n    (click)=\"close()\"\n  >\n    {{ 'Close' | translate }}\n  </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { OptionsService } from '../common/options.service';\nimport { combineLatest, Observable } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\nimport { PreviewService } from './preview-feature.service';\nimport { Permissions } from '../common/permissions.service';\nimport { SHOW_PREVIEW_FEATURES } from './preview-feature.model';\nimport { PreviewFeatureComponent } from './preview-feature.component';\n\n@Injectable({ providedIn: 'root' })\nexport class PreviewFeatureQueryParamDrawerFactory implements ExtensionFactory<any> {\n  protected queryParamConfig = {\n    queryParam: SHOW_PREVIEW_FEATURES,\n    closeOnNavigation: false,\n    disableClickOutside: true,\n    component: PreviewFeatureComponent\n  };\n\n  constructor(\n    private options: OptionsService,\n    private previewService: PreviewService,\n    private permissions: Permissions\n  ) {}\n\n  get(): Observable<any[] | any> {\n    return this.shouldShowPreviewFeature$().pipe(\n      distinctUntilChanged(),\n      map(shouldShowPreviewFeature => {\n        if (shouldShowPreviewFeature) {\n          return this.queryParamConfig;\n        }\n        return [];\n      })\n    );\n  }\n\n  private shouldShowPreviewFeature$(): Observable<boolean> {\n    return combineLatest([\n      this.options.get$('hidePreviewFeature'),\n      this.previewService.getAvailableFeatures$()\n    ]).pipe(\n      map(([hidePreviewFeature, items]) => {\n        const hasItems = items.length > 0;\n        if (!hasItems) {\n          return false;\n        }\n\n        const hasAdminRole = this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN);\n\n        if (hidePreviewFeature === undefined) {\n          return hasItems && hasAdminRole;\n        }\n\n        return !hidePreviewFeature && hasItems && hasAdminRole;\n      })\n    );\n  }\n}\n","import { Provider } from '@angular/core';\nimport { hookDrawer } from '../drawer';\nimport { PreviewFeatureDrawerFactory } from './preview-feature-drawer.factory';\nimport { hookService } from '../common';\nimport { PreviewFeatureShowNotification } from './preview-feature-show-notification.service';\nimport { hookQueryParamBottomDrawer } from '../query-param-handler';\nimport { PreviewFeatureQueryParamDrawerFactory } from './preview-feature-query-param.factory';\n\nexport const PREVIEW_FEATURE_PROVIDERS: Provider[] = [\n  hookDrawer(PreviewFeatureDrawerFactory),\n  hookService('notificationService', PreviewFeatureShowNotification),\n  hookQueryParamBottomDrawer(PreviewFeatureQueryParamDrawerFactory)\n];\n","import { Component, input, output } from '@angular/core';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n@Component({\n  selector: 'c8y-change-icon',\n  imports: [C8yTranslatePipe, IconDirective, TooltipModule],\n  template: `\n    <div class=\"p-relative d-flex j-c-center a-i-center fit-h fit-w\">\n      @if (currentIcon()) {\n        <i class=\"c8y-icon-duocolor\" [c8yIcon]=\"currentIcon()\"></i>\n      } @else {\n        <ng-content></ng-content>\n      }\n      <div class=\"showOnHover top-0 left-0 d-flex j-c-center a-i-center p-absolute fit-h fit-w\">\n        <button\n          class=\"btn btn-default btn-xs\"\n          [attr.aria-label]=\"'Change icon' | translate\"\n          [tooltip]=\"'Change icon' | translate\"\n          placement=\"top\"\n          container=\"body\"\n          type=\"button\"\n          [delay]=\"500\"\n          [adaptivePosition]=\"false\"\n          (click)=\"onButtonClick.emit()\"\n        >\n          <i c8yIcon=\"replace\"></i>\n        </button>\n      </div>\n    </div>\n  `\n})\nexport class ChangeIconComponent {\n  currentIcon = input<string>();\n  onButtonClick = output<void>();\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { ActionBarModule } from './action-bar/action-bar.module';\nimport { ActionModule } from './action/action.module';\nimport { AlertModule } from './alert/alert.module';\nimport { ApplicationModule } from './application/application.module';\nimport { AuditLogModule } from './audit-log/audit-log.module';\nimport { AuthenticationModule } from './authentication/authentication.module';\nimport { BootstrapModule } from './bootstrap/bootstrap.module';\nimport { BreadcrumbModule } from './breadcrumb/breadcrumb.module';\nimport { ClipboardModule } from './clipboard/clipboard.module';\nimport { CommonModule } from './common/common.module';\nimport { DashboardModule } from './dashboard/dashboard.module';\nimport { DataGridModule } from './data-grid/data-grid.module';\nimport { DatePickerModule } from './date-picker/date-picker.module';\nimport { DateTimePickerModule } from './date-time-picker/date-time-picker.module';\nimport { DeviceStatusModule } from './device-status/device-status.module';\nimport { DocsModule } from './docs/docs.module';\nimport { DrawerModule } from './drawer/drawer.module';\nimport { DropAreaModule } from './drop-area/drop-area.module';\nimport { DynamicComponentModule } from './dynamic-component/dynamic-component.module';\nimport { DynamicFormsModule } from './dynamic-forms/dynamic-forms.module';\nimport { FilePickerFormControlModule } from './file-picker-form-control/file-picker-form-control.module';\nimport { FilePickerModule } from './file-picker/file-picker.module';\nimport { FormsModule as c8yFormsModule } from './forms/forms.module';\nimport { HeaderModule } from './header/header.module';\nimport { HelpModule } from './help/help.module';\nimport { ListDisplaySwitchModule } from './list-display-switch/list-display-switch.module';\nimport { ListGroupModule } from './list-group/list-group.module';\nimport { ModalModule } from './modal/modal.module';\nimport { NavigatorBottomModule } from './navigator/navigator-bottom/navigator-bottom.module';\nimport { NavigatorTopModule } from './navigator/navigator-top/navigator-top.module';\nimport { NavigatorModule } from './navigator/navigator.module';\nimport { PluginsModule } from './plugins/plugins.module';\nimport { ProductExperienceModule } from './product-experience/product-experience.module';\nimport { PropertiesListModule } from './properties-list/properties-list.module';\nimport { RangeDisplayModule } from './range-display/range-display.module';\nimport { RealtimeModule } from './realtime/realtime.module';\nimport { CoreSearchModule } from './search/search.module';\nimport { SelectModalModule } from './select-modal/select-modal.module';\nimport { SelectModule } from './select/select.module';\nimport { StepperModule as c8yStepperModule } from './stepper/stepper.module';\nimport { TabsModule } from './tabs/tabs.module';\nimport { TimeIntervalComponent } from './time-interval/time-interval.component';\nimport { TimePickerModule } from './time-picker/time-picker.module';\nimport { UiSettingsModule } from './ui-settings/ui-settings.module';\nimport { UserModule } from './user/user.module';\nimport { VersionModule } from './version/version.module';\nimport { WizardModule } from './wizard/wizard.module';\nimport { CountdownIntervalModule } from './countdown-interval/countdown-interval.module';\nimport { ColorInputComponent } from './color-input/color-input.component';\nimport { PREVIEW_FEATURE_PROVIDERS } from './preview-feature';\nimport { ChangeIconComponent } from './change-icon/change-icon.component';\nimport { QUERY_PARAM_HANDLER_PROVIDERS } from './query-param-handler';\n\n@NgModule({\n  imports: [TimeIntervalComponent, ColorInputComponent, ChangeIconComponent],\n  exports: [\n    ApplicationModule,\n    ActionBarModule,\n    ActionModule,\n    AlertModule,\n    AuditLogModule,\n    BootstrapModule,\n    BreadcrumbModule,\n    CommonModule,\n    DataGridModule,\n    DropAreaModule,\n    HeaderModule,\n    ModalModule,\n    NavigatorModule,\n    AuthenticationModule,\n    CoreSearchModule,\n    SelectModule,\n    TabsModule,\n    UserModule,\n    c8yFormsModule,\n    DeviceStatusModule,\n    DocsModule,\n    c8yStepperModule,\n    DynamicComponentModule,\n    DashboardModule,\n    ListGroupModule,\n    SelectModalModule,\n    FilePickerModule,\n    FilePickerFormControlModule,\n    DatePickerModule,\n    ProductExperienceModule,\n    HelpModule,\n    RealtimeModule,\n    RangeDisplayModule,\n    ListDisplaySwitchModule,\n    WizardModule,\n    PluginsModule,\n    DynamicFormsModule,\n    PropertiesListModule,\n    DateTimePickerModule,\n    TimePickerModule,\n    ClipboardModule,\n    VersionModule,\n    DrawerModule,\n    NavigatorTopModule,\n    NavigatorBottomModule,\n    UiSettingsModule,\n    TimeIntervalComponent,\n    CountdownIntervalModule,\n    ColorInputComponent,\n    ChangeIconComponent\n  ]\n})\nexport class CoreModule {\n  static forRoot(): ModuleWithProviders<CoreModule> {\n    return {\n      ngModule: CoreModule,\n      providers: [\n        ...CommonModule.providers(),\n        ...DocsModule.providers(),\n        ...NavigatorModule.providers(),\n        ...NavigatorBottomModule.providers(),\n        ...NavigatorTopModule.providers(),\n        ...UiSettingsModule.providers(),\n        ...UserModule.providers(),\n        ...VersionModule.providers(),\n        ...PREVIEW_FEATURE_PROVIDERS,\n        ...QUERY_PARAM_HANDLER_PROVIDERS\n      ]\n    };\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { kebabCase } from 'lodash-es';\r\nimport { IconDirective } from '../common/icon.directive';\r\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\r\n\r\n@Component({\r\n  selector: 'c8y-quick-link',\r\n  templateUrl: './quick-link.component.html',\r\n  standalone: true,\r\n  imports: [IconDirective, C8yTranslatePipe]\r\n})\r\nexport class QuickLinkComponent implements OnInit {\r\n  @Input() icon;\r\n  @Input() label;\r\n  classes = '';\r\n\r\n  ngOnInit(): void {\r\n    this.classes = `card-block text-center ${kebabCase(this.label)}`;\r\n  }\r\n}\r\n","<div [class]=\"classes\">\r\n  <i [c8yIcon]=\"icon\" class=\"c8y-icon-duocolor icon-32\"></i>\r\n  <p class=\"text-muted\" title=\"{{ label | translate }}\">{{ label | translate }}</p>\r\n</div>\r\n","import { CoreModule } from '../core.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { QuickLinkComponent } from './quick-link.component';\r\n\r\n@NgModule({\r\n  imports: [CoreModule, QuickLinkComponent],\r\n  exports: [QuickLinkComponent],\r\n  providers: []\r\n})\r\nexport class QuickLinkModule {}\r\n","import { InjectionToken } from '@angular/core';\nimport { GenericHookType, hookGeneric, GenericHookOptions } from '../common/extension-hooks';\nimport { DynamicProviderConfig } from './model/dynamic-provider-config.model';\n\n/**\n * @deprecated Consider using the `hookDynamicProviderConfig` function instead.\n */\nexport const HOOK_DYNAMIC_PROVIDER_CONFIG = new InjectionToken('HOOK_DYNAMIC_PROVIDER_CONFIG');\n\n/**\n * You can either provide a single `DynamicProviderConfig` as parameter:\n * ```typescript\n *  hookDynamicProviderConfig(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n *  hookDynamicProviderConfig([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<DynamicProviderConfig>`\n * ```typescript\n *  export class MyDynamicProviderConfigFactory implements ExtensionFactory<DynamicProviderConfig> {...}\n *  ...\n *  hookDynamicProviderConfig(MyDynamicProviderConfigFactory)\n * ```\n * A typed alternative to `HOOK_DYNAMIC_PROVIDER_CONFIG`.\n * @param config The `DynamicProviderConfig`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookDynamicProviderConfig(\n  config: GenericHookType<DynamicProviderConfig>,\n  options?: Partial<GenericHookOptions>\n) {\n  return hookGeneric<DynamicProviderConfig>(config, HOOK_DYNAMIC_PROVIDER_CONFIG, options);\n}\n","import { Inject, Injectable, Injector, Optional } from '@angular/core';\nimport { CanActivateFn } from '@angular/router';\nimport { flatten } from 'lodash-es';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { toObservable } from '../common';\nimport { NavigatorNode, NavigatorNodeFactory } from '../navigator';\nimport { DynamicProviderConfig } from './model/dynamic-provider-config.model';\nimport { HOOK_DYNAMIC_PROVIDER_CONFIG } from './provider-configuration-hook';\n\n@Injectable({ providedIn: 'root' })\nexport class ProviderConfigurationNodeFactory implements NavigatorNodeFactory {\n  private config: DynamicProviderConfig[];\n  private nodes: NavigatorNode[];\n\n  constructor(\n    @Optional()\n    @Inject(HOOK_DYNAMIC_PROVIDER_CONFIG)\n    config: DynamicProviderConfig[][],\n    private injector: Injector\n  ) {\n    this.config = flatten(config);\n  }\n\n  get() {\n    if (!this.config || !this.config.length) {\n      return;\n    }\n\n    if (!this.nodes) {\n      const canActivate: Array<Observable<boolean>> = this.config\n        .map(this.getGuards.bind(this))\n        .map(this.checkCanActivate.bind(this));\n\n      return forkJoin(canActivate).pipe(\n        map((canActivateResult: boolean[]) =>\n          this.config\n            .map((c, index) =>\n              canActivateResult[index] ? new NavigatorNode(c.navigation) : undefined\n            )\n            .filter(el => !!el)\n        ),\n        tap(nodes => (this.nodes = nodes))\n      );\n    }\n\n    return this.nodes;\n  }\n\n  private checkCanActivate(\n    ca: {\n      canActivate: CanActivateFn;\n    }[]\n  ): Observable<boolean> {\n    if (!!ca && ca.length) {\n      const canActivateResult: Array<Observable<boolean>> = ca\n        .map((canActivate: { canActivate: CanActivateFn }) =>\n          canActivate.canActivate(undefined, undefined)\n        )\n        .map(toObservable) as Array<Observable<boolean>>;\n\n      return forkJoin(canActivateResult).pipe(\n        map((caResult: boolean[]) => caResult.reduce((acc, curr) => acc && curr))\n      );\n    }\n    return of(true);\n  }\n\n  private getGuards(c) {\n    let result = [];\n\n    if (c.tab && c.tab.canActivate && c.tab.canActivate.length) {\n      result = [...result, ...c.tab.canActivate.map(ca => this.injector.get(ca))];\n    }\n\n    if (c.navigation.canActivate && c.navigation.canActivate.length) {\n      result = [...result, ...c.navigation.canActivate.map(ca => this.injector.get(ca))];\n    }\n\n    return result;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { FetchClient, IIdentified, IResult, Service } from '@c8y/client';\nimport { get } from 'lodash-es';\nimport { ProviderProperties } from '../model/provider-properties.model';\n\n@Injectable()\nexport class ProviderConfigurationService extends Service<ProviderProperties> {\n  private static readonly NO_DETAIL_ID: string = null;\n\n  protected baseUrl: string;\n  protected listUrl: string;\n\n  constructor(client: FetchClient, activatedRoute: ActivatedRoute) {\n    super(client);\n    this.baseUrl = get(activatedRoute, 'snapshot.data.endpoint.configurationEndpoint.baseUrl');\n    this.listUrl = get(activatedRoute, 'snapshot.data.endpoint.configurationEndpoint.listUrl');\n  }\n\n  async detail(): Promise<IResult<ProviderProperties>> {\n    return super.detail(ProviderConfigurationService.NO_DETAIL_ID);\n  }\n\n  async update(entity: Partial<ProviderProperties>): Promise<IResult<ProviderProperties>> {\n    return super.update(entity);\n  }\n\n  async delete(): Promise<IResult<null>> {\n    return super.delete(ProviderConfigurationService.NO_DETAIL_ID);\n  }\n\n  /** There is a single provider configuration per tenant and detail URL is not needed */\n  protected getDetailUrl(_: string | number | IIdentified): string {\n    return this.listUrl;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { FetchClient, IResultList, Service } from '@c8y/client';\nimport { get } from 'lodash-es';\nimport { ProviderDefinition } from '../model/provider-definition.model';\n\n@Injectable()\nexport class ProviderDefinitionsService extends Service<ProviderDefinition> {\n  protected baseUrl: string;\n  protected listUrl: string;\n\n  constructor(client: FetchClient, activatedRoute: ActivatedRoute) {\n    super(client);\n    this.baseUrl = get(activatedRoute, 'snapshot.data.endpoint.definitionsEndpoint.baseUrl');\n    this.listUrl = get(activatedRoute, 'snapshot.data.endpoint.definitionsEndpoint.listUrl');\n  }\n\n  async list(): Promise<IResultList<ProviderDefinition>> {\n    return super.list();\n  }\n}\n","import { Component } from '@angular/core';\nimport { FormGroup, FormsModule } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { IResult } from '@c8y/client';\nimport {\n  FormlyFieldConfig,\n  FormlyFormOptions,\n  ɵdefineHiddenProp,\n  FormlyModule\n} from '@ngx-formly/core';\nimport { find, forOwn, get, mapValues, pick } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject, combineLatest, from, merge, of } from 'rxjs';\nimport { catchError, map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { AlertService } from '../alert/alert.service';\nimport { Permissions, Status } from '../common/index';\nimport { C8yJSONSchema } from '../dynamic-forms/json-schema/c8y-json-schema.service';\nimport { ModalService } from '../modal/modal.service';\nimport {\n  DynamicProviderConfig,\n  DynamicProviderLayoutConfig\n} from './model/dynamic-provider-config.model';\nimport { ProviderDefinition } from './model/provider-definition.model';\nimport { ProviderProperties } from './model/provider-properties.model';\nimport { ProviderConfigurationService } from './service/provider-configuration.service';\nimport { ProviderDefinitionsService } from './service/provider-definitions.service';\nimport { TitleComponent } from '../header/title/title.component';\nimport { BreadcrumbComponent } from '../breadcrumb/breadcrumb.component';\nimport { BreadcrumbItemComponent } from '../breadcrumb/breadcrumb-item.component';\nimport { NgIf, NgFor, AsyncPipe } from '@angular/common';\nimport { FormGroupComponent } from '../forms/form-group.component';\nimport { ListItemComponent } from '../list-group/list-item.component';\nimport { HighlightComponent } from '../search/highlight.component';\nimport { MessagesComponent } from '../forms/messages.component';\nimport { MessageDirective } from '../forms/message.directive';\nimport { IfAllowedDirective } from '../common/if-allowed.directive';\nimport { C8yTranslatePipe } from '../i18n/c8y-translate.pipe';\nimport { TypeaheadComponent } from '../select/typeahead.component';\n\n@Component({\n  selector: 'c8y-sms-gateway',\n  templateUrl: './provider-configuration.component.html',\n  providers: [ProviderConfigurationService, ProviderDefinitionsService],\n  standalone: true,\n  imports: [\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    NgIf,\n    FormsModule,\n    FormGroupComponent,\n    TypeaheadComponent,\n    HighlightComponent,\n    NgFor,\n    ListItemComponent,\n    MessagesComponent,\n    MessageDirective,\n    FormlyModule,\n    IfAllowedDirective,\n    C8yTranslatePipe,\n    AsyncPipe\n  ]\n})\nexport class ProviderConfigurationComponent {\n  layout$: Observable<DynamicProviderLayoutConfig> = this.activatedRoute.data.pipe(\n    map((config: DynamicProviderConfig) => config.layout),\n    tap((layout: DynamicProviderLayoutConfig) => (this.layout = layout)),\n    tap((layout: DynamicProviderLayoutConfig) => {\n      this.options.formState.disabled = !this.permissions.hasAllRoles(layout.saveRoles || []);\n      this.beforeSaveHook = layout.beforeSaveHook;\n    })\n  );\n\n  allRoles$: Observable<string[]> = this.layout$.pipe(\n    map((layout: DynamicProviderLayoutConfig) => [\n      ...(layout.deleteRoles || []),\n      ...(layout.saveRoles || [])\n    ])\n  );\n\n  providers$: Observable<ProviderDefinition[]>;\n  selectedProvider$: Observable<ProviderDefinition>;\n  changeProvider$: Subject<ProviderDefinition> = new BehaviorSubject(null);\n  configuration$: Observable<ProviderProperties>;\n  providerInput$ = new BehaviorSubject<string>('');\n\n  form = new FormGroup({});\n  model: ProviderProperties;\n  fields: FormlyFieldConfig[] = [];\n  options: FormlyFormOptions = {\n    formState: {\n      disabled: false\n    }\n  };\n\n  private reload$ = new BehaviorSubject<void>(null);\n  private updatedConfiguration$ = new Subject<ProviderProperties>();\n  private layout: DynamicProviderLayoutConfig;\n  private beforeSaveHook: (\n    model: ProviderProperties,\n    fields: FormlyFieldConfig[]\n  ) => Promise<ProviderProperties> | ProviderProperties;\n\n  constructor(\n    public permissions: Permissions,\n    private activatedRoute: ActivatedRoute,\n    private modalService: ModalService,\n    private alertService: AlertService,\n    private providerDefinitionsService: ProviderDefinitionsService,\n    private providerConfigurationService: ProviderConfigurationService,\n    private jsonschema: C8yJSONSchema\n  ) {}\n\n  ngOnInit() {\n    const allProviders$: Observable<ProviderDefinition[]> = from(\n      this.providerDefinitionsService.list()\n    ).pipe(\n      map(result => result.data),\n      shareReplay(1)\n    );\n\n    this.providers$ = combineLatest(allProviders$, this.providerInput$).pipe(\n      map(([providers, input]: [ProviderDefinition[], string]) =>\n        input\n          ? providers.filter(el => el.displayName.toLowerCase().indexOf(input.toLowerCase()) >= 0)\n          : providers\n      ),\n      shareReplay(1)\n    );\n\n    this.configuration$ = merge(\n      this.updatedConfiguration$,\n      this.reload$.pipe(\n        switchMap(() =>\n          from(this.providerConfigurationService.detail()).pipe(catchError(() => of({} as any)))\n        ),\n        map(result => result.data)\n      )\n    ).pipe(map(this.removeEncryptedValues), shareReplay(1));\n\n    this.selectedProvider$ = combineLatest(\n      allProviders$,\n      this.configuration$,\n      this.changeProvider$\n    ).pipe(\n      tap(\n        ([_, configuration, newProvider]: [\n          ProviderDefinition[],\n          ProviderProperties,\n          ProviderDefinition\n        ]) =>\n          (this.model = newProvider\n            ? pick(this.model, 'sms.senderName', 'sms.senderAddress')\n            : configuration)\n      ),\n      map(\n        ([providers, configuration, newProvider]: [\n          ProviderDefinition[],\n          ProviderProperties,\n          ProviderDefinition\n        ]) =>\n          newProvider ||\n          find(\n            providers,\n            (provider: ProviderDefinition) => get(configuration, 'provider') === provider.id\n          )\n      ),\n      tap((provider: ProviderDefinition) => {\n        if (provider) {\n          const config: FormlyFieldConfig = this.jsonschema.toFieldConfig(get(provider, 'schema'));\n          if (config.fieldGroup) {\n            config.fieldGroup.forEach((fieldConfig: FormlyFieldConfig) => {\n              ɵdefineHiddenProp(fieldConfig, '_keyPath', {\n                key: fieldConfig.key,\n                path: [fieldConfig.key]\n              });\n\n              fieldConfig.expressionProperties = {\n                'templateOptions.disabled': 'formState.disabled'\n              };\n            });\n          }\n          this.fields = [config];\n          this.form = new FormGroup({});\n        }\n      }),\n      shareReplay(1)\n    );\n  }\n\n  async saveProviderConfiguration() {\n    const modelToSave: ProviderProperties = !!this.beforeSaveHook\n      ? await this.beforeSaveHook(this.model, this.fields)\n      : this.model;\n\n    forOwn(modelToSave, (value: any, key: string) => {\n      if (Array.isArray(value)) {\n        modelToSave[key] = value\n          .filter(item => !!item || item === 0)\n          .map(item => (typeof item === 'string' ? item.trim() : item));\n      } else if (typeof value === 'string') {\n        modelToSave[key] = value.trim();\n      }\n    });\n\n    try {\n      const res: IResult<ProviderProperties> =\n        await this.providerConfigurationService.update(modelToSave);\n      this.changeProvider$.next(null);\n      this.updatedConfiguration$.next(res.data);\n      this.alertService.success(this.layout.configurationUpdatedSuccessMsg);\n      this.form.markAsPristine();\n    } catch (err) {\n      this.alertService.addServerFailure(err);\n    }\n  }\n\n  async deleteProviderConfiguration() {\n    try {\n      await this.modalService.confirm(\n        this.layout.deleteConfigurationModalTitle,\n        this.layout.deleteConfigurationModalBody,\n        Status.DANGER,\n        {\n          ok: this.layout.deleteConfigurationModalOkBtnLabel,\n          cancel: this.layout.deleteConfigurationModalCancelBtnLabel\n        }\n      );\n      await this.providerConfigurationService.delete();\n      this.reload$.next();\n      this.alertService.success(this.layout.configurationDeletedSuccessMsg);\n    } catch (err) {\n      if (err) {\n        this.alertService.addServerFailure(err);\n      }\n    }\n  }\n\n  private removeEncryptedValues(configuration: ProviderProperties): ProviderProperties {\n    return mapValues(configuration, value => (value === '<<Encrypted>>' ? undefined : value));\n  }\n}\n","<c8y-title>\n  {{ (layout$ | async)?.pageTitle | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    [label]=\"'Settings' | translate\"\n    [icon]=\"'cog'\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item *ngIf=\"(layout$ | async)?.pageTitle !='Connectivity'\"\n    [label]=\"'SMS provider' | translate\"\n    [icon]=\"'cog'\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item *ngIf=\"(layout$ | async)?.pageTitle =='Connectivity'\"\n    [label]=\"'Connectivity' | translate\"\n    [icon]=\"'cog'\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item *ngIf=\"(layout$ | async)?.pageTitle =='Connectivity'\"\n    [icon]=\"'cog'\"\n    [label]=\"'SIM provider settings' | translate\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<div class=\"row\">\n  <div class=\"col-md-8 col-xs-12\">\n    <form class=\"card card--fullpage\" (ngSubmit)=\"saveProviderConfiguration()\">\n      <div class=\"card-header separator\">\n        <div class=\"card-title\">\n          {{ (layout$ | async)?.cardTitle | translate }}\n        </div>\n      </div>\n      <div class=\"inner-scroll\">\n        <div class=\"card-block\">\n          <p *ngIf=\"!!(layout$ | async)?.description\" class=\"m-b-8\">\n            {{ (layout$ | async)?.description | translate }}\n          </p>\n          <c8y-form-group>\n            <label for=\"providerName\">{{ (layout$ | async)?.providerName | translate }}</label>\n            <c8y-typeahead\n              [disabled]=\"!permissions.hasAllRoles((layout$ | async)?.saveRoles || [])\"\n              [ngModel]=\"selectedProvider$ | async\"\n              [displayProperty]=\"'displayName'\"\n              name=\"providerName\"\n              placeholder=\"{{ (layout$ | async)?.providerNamePlaceholder | translate }}\"\n              (onSearch)=\"providerInput$.next($event)\"\n              [allowFreeEntries]=\"false\"\n              [required]=\"true\"\n              [container]=\"'body'\"\n            >\n              <c8y-li\n                *ngFor=\"let provider of providers$ | async\"\n                class=\"p-l-8 p-r-8 c8y-list__item--link\"\n                (click)=\"changeProvider$.next(provider); providerInput$.next('')\"\n                [active]=\"(selectedProvider$ | async) === provider\"\n                [attr.role]=\"'menuitem'\"\n              >\n                <c8y-highlight\n                  [text]=\"provider.displayName || '--'\"\n                  [pattern]=\"providerInput$ | async\"\n                ></c8y-highlight>\n              </c8y-li>\n            </c8y-typeahead>\n            <c8y-messages>\n              <c8y-message\n                name=\"notExisting\"\n                [text]=\"(layout$ | async)?.providerNameNoMatchesHint | translate\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n          <formly-form\n            *ngIf=\"selectedProvider$ | async\"\n            [form]=\"form\"\n            [fields]=\"fields\"\n            [model]=\"model\"\n            [options]=\"options\"\n          ></formly-form>\n        </div>\n      </div>\n      <div class=\"card-footer separator\" *c8yIfAllowed=\"allRoles$ | async; allowAny\">\n        <button\n          *c8yIfAllowed=\"(layout$ | async)?.deleteRoles\"\n          class=\"btn btn-default\"\n          type=\"button\"\n          (click)=\"deleteProviderConfiguration()\"\n          [disabled]=\"\n            !(configuration$ | async)?.provider && !(configuration$ | async)?.providerName\n          \"\n          title=\"{{ (layout$ | async)?.deleteBtnLabel | translate }}\"\n        >\n          {{ (layout$ | async)?.deleteBtnLabel | translate }}\n        </button>\n        <button\n          *c8yIfAllowed=\"(layout$ | async)?.saveRoles\"\n          class=\"btn btn-primary\"\n          type=\"submit\"\n          [disabled]=\"form.invalid || form.pristine\"\n          title=\"{{ (layout$ | async)?.saveBtnLabel | translate }}\"\n        >\n          {{ (layout$ | async)?.saveBtnLabel | translate }}\n        </button>\n      </div>\n    </form>\n  </div>\n</div>\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { flatten, get, uniqBy } from 'lodash-es';\nimport { DynamicProviderConfig } from './model/dynamic-provider-config.model';\nimport { HOOK_DYNAMIC_PROVIDER_CONFIG } from './provider-configuration-hook';\nimport { ProviderConfigurationComponent } from './provider-configuration.component';\nimport { ConditionalTabsOutletComponent } from '../tabs';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { Route } from '@angular/router';\n\n@Injectable({ providedIn: 'root' })\nexport class ProviderConfigurationRouteFactory implements ExtensionFactory<Route> {\n  private config: DynamicProviderConfig[];\n\n  constructor(@Optional() @Inject(HOOK_DYNAMIC_PROVIDER_CONFIG) config: DynamicProviderConfig[][]) {\n    this.config = flatten(config);\n  }\n\n  get() {\n    const navigationRoutes = uniqBy(\n      this.config.filter(c => c.tab),\n      'navigation.path'\n    ).map(c => {\n      return {\n        path: c.navigation.path,\n        component: ConditionalTabsOutletComponent\n      };\n    });\n\n    const navigationWithTabsRoutes = this.config.map(c => ({\n      path: c.tab\n        ? `${c.navigation.path.replace(/^\\/|\\/$/g, '')}/${c.tab.path.replace(/^\\/|\\/$/g, '')}`\n        : c.navigation.path,\n      component: ProviderConfigurationComponent,\n      canActivate: [\n        ...(c.navigation.canActivate || []),\n        ...(get(c, 'tab.canActivate') || [])\n      ].filter(g => !!g),\n      data: {\n        layout: c.layout,\n        endpoint: c.endpoint\n      }\n    }));\n\n    return [...navigationRoutes, ...navigationWithTabsRoutes];\n  }\n}\n","import { Inject, Injectable, Injector, Optional } from '@angular/core';\nimport { Router, CanActivateFn } from '@angular/router';\nimport { flatten } from 'lodash-es';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { toObservable } from '../common';\nimport { Tab, TabFactory } from '../tabs';\nimport { DynamicProviderConfig } from './model/dynamic-provider-config.model';\nimport { HOOK_DYNAMIC_PROVIDER_CONFIG } from './provider-configuration-hook';\n\n@Injectable({ providedIn: 'root' })\nexport class ProviderConfigurationTabFactory implements TabFactory {\n  private config: DynamicProviderConfig[];\n\n  constructor(\n    @Optional()\n    @Inject(HOOK_DYNAMIC_PROVIDER_CONFIG)\n    config: DynamicProviderConfig[][],\n    public router: Router,\n    private injector: Injector\n  ) {\n    this.config = flatten(config);\n  }\n\n  get() {\n    if (!this.config || !this.config.length) {\n      return;\n    }\n\n    const configForRoute = this.config.find(c =>\n      c.tab\n        ? this.router.url === '/' + this.getNodeTabPath(c.navigation.path, c.tab.path) ||\n          this.router.url.startsWith('/' + c.navigation.path.replace(/^\\/|\\/$/g, ''))\n        : false\n    );\n\n    const filteredRoutes = configForRoute\n      ? this.config.filter(\n          c =>\n            c.navigation.path.replace(/^\\/|\\/$/g, '') ===\n              configForRoute.navigation.path.replace(/^\\/|\\/$/g, '') && c.tab\n        )\n      : [];\n\n    const canActivate: Array<Observable<boolean>> = filteredRoutes\n      .map(c =>\n        c.tab.canActivate && c.tab.canActivate.length\n          ? c.tab.canActivate.map(ca => this.injector.get(ca))\n          : undefined\n      )\n      .map(this.checkCanActivate.bind(this));\n\n    return canActivate.length > 0\n      ? forkJoin(canActivate).pipe(\n          map((canActivateResult: boolean[]) =>\n            filteredRoutes\n              .map((c, index) => {\n                const tab = {\n                  ...c.tab,\n                  path: this.getNodeTabPath(c.navigation.path, c.tab.path)\n                };\n                return canActivateResult[index] ? (tab as Tab) : undefined;\n              })\n              .filter(el => !!el)\n          )\n        )\n      : [];\n  }\n\n  private checkCanActivate(\n    ca: {\n      canActivate: CanActivateFn;\n    }[]\n  ): Observable<boolean> {\n    if (!!ca && ca.length) {\n      const canActivateResult: Array<Observable<boolean>> = ca\n        .map((canActivate: { canActivate: CanActivateFn }) =>\n          canActivate.canActivate(undefined, undefined)\n        )\n        .map(toObservable) as Array<Observable<boolean>>;\n\n      return forkJoin(canActivateResult).pipe(\n        map((caResult: boolean[]) => caResult.reduce((acc, curr) => acc && curr))\n      );\n    }\n    return of(true);\n  }\n\n  private getNodeTabPath(nodePath, tabPath) {\n    return `${nodePath.replace(/^\\/|\\/$/g, '')}/${tabPath.replace(/^\\/|\\/$/g, '')}`;\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '../common/common.module';\nimport { CoreModule } from '../core.module';\nimport { DynamicFormsModule } from '../dynamic-forms/dynamic-forms.module';\nimport { hookNavigator } from '../navigator';\nimport { hookRoute } from '../router';\nimport { hookTab } from '../tabs';\nimport { DynamicProviderConfig } from './model/dynamic-provider-config.model';\nimport { hookDynamicProviderConfig } from './provider-configuration-hook';\nimport { ProviderConfigurationNodeFactory } from './provider-configuration-node.factory';\nimport { ProviderConfigurationRouteFactory } from './provider-configuration-route.factory';\nimport { ProviderConfigurationTabFactory } from './provider-configuration-tab.factory';\nimport { ProviderConfigurationComponent } from './provider-configuration.component';\n\n@NgModule({\n  exports: [ProviderConfigurationComponent],\n  imports: [CoreModule, CommonModule, DynamicFormsModule, ProviderConfigurationComponent],\n  providers: [\n    hookRoute(ProviderConfigurationRouteFactory),\n    hookNavigator(ProviderConfigurationNodeFactory),\n    hookTab(ProviderConfigurationTabFactory)\n  ]\n})\nexport class ProviderConfigurationModule {\n  static config(config: DynamicProviderConfig[]): ModuleWithProviders<ProviderConfigurationModule> {\n    return {\n      ngModule: ProviderConfigurationModule,\n      providers: [hookDynamicProviderConfig(config)]\n    };\n  }\n}\n","import { Observable } from 'rxjs';\nimport {\n  DataGridConfigurationStrategy,\n  GridConfigContext,\n  GridConfigContextProvider\n} from './data-grid-configuration.model';\nimport { GridConfig } from './data-grid.model';\n\n/**\n * Implements common functionality for grid configuration strategies.\n */\nexport abstract class AbstractConfigurationStrategy implements DataGridConfigurationStrategy {\n  constructor(\n    protected context: GridConfigContext,\n    protected contextProvider: GridConfigContextProvider\n  ) {}\n  abstract getConfig$(context?: GridConfigContext): Observable<GridConfig>;\n\n  abstract saveConfig$(config: GridConfig, context?: GridConfigContext): Observable<GridConfig>;\n\n  getContext(): GridConfigContext {\n    return this.retrieveContext();\n  }\n\n  isContextKnown(): boolean {\n    return !!this.retrieveContext();\n  }\n\n  protected retrieveContext<T extends GridConfigContext>(context?: T): T {\n    return (context ?? this.contextProvider?.getGridConfigContext() ?? this.context) as T;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { isEmpty, isNil, omitBy } from 'lodash-es';\nimport { combineLatest, Observable, of } from 'rxjs';\nimport { concatMap, map } from 'rxjs/operators';\nimport { UserPreferencesService } from '../common/user-preferences/user-preferences.service';\nimport { GridConfigContext } from './data-grid-configuration.model';\nimport { Column, CustomColumnConfig, GridConfig } from './data-grid.model';\nimport { DataGridService } from './data-grid.service';\n\ninterface LegacyColumnConfig {\n  key: string;\n  headerName: string;\n  active: boolean;\n  custom: boolean;\n  fragmentPath: string;\n}\n\ninterface LegacyColumnFilterConfig {\n  [key: string]: {\n    filtering: object;\n    sorting: {\n      order: number;\n    };\n  };\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LegacyGridConfigMapperService {\n  static deviceGridLegacyKeyToName = {\n    status: 'status',\n    name: 'name',\n    model: 'model',\n    serialNumber: 'serialNumber',\n    group: 'group',\n    registrationDate: 'registrationDate',\n    systemId: 'systemId',\n    imei: 'imei',\n    alarms: 'alarms'\n  };\n\n  constructor(\n    private userPreferencesService: UserPreferencesService,\n    private dataGridService: DataGridService\n  ) {}\n\n  getMappedGridConfig(context: GridConfigContext): Observable<GridConfig> {\n    const legacyAllDevicesGridKey = context.legacyConfigKey;\n    const legacyAllDevicesGridFilterKey = context.legacyFilterKey;\n    return combineLatest([\n      this.userPreferencesService.get(legacyAllDevicesGridKey),\n      this.userPreferencesService.get(legacyAllDevicesGridFilterKey)\n    ]).pipe(\n      map(([legacyConfig, legacyFilterConfig]) =>\n        this.mapLegacyToDeviceGridConfig(legacyConfig, legacyFilterConfig, context.defaultColumns)\n      ),\n      concatMap(mappedLegacyConfig => {\n        if (mappedLegacyConfig) {\n          return Promise.all([\n            this.userPreferencesService.set(legacyAllDevicesGridKey, null),\n            this.userPreferencesService.set(legacyAllDevicesGridFilterKey, null)\n          ]).then(() => mappedLegacyConfig);\n        } else {\n          return of(null);\n        }\n      }),\n      concatMap(mappedLegacyConfig =>\n        mappedLegacyConfig\n          ? this.userPreferencesService\n              .set(context?.key, mappedLegacyConfig)\n              .then(() => mappedLegacyConfig)\n          : this.userPreferencesService.get(context?.key)\n      ),\n      map(\n        config =>\n          config || {\n            columns: [],\n            pagination: {\n              pageSize: (this.dataGridService as any).DEFAULT_PAGE_SIZE,\n              currentPage: 1\n            }\n          }\n      )\n    );\n  }\n\n  mapLegacyToDeviceGridConfig(\n    legacyConfig: LegacyColumnConfig[],\n    legacyFilterConfig: LegacyColumnFilterConfig,\n    defaultColumns: Column[] = []\n  ): GridConfig {\n    if (Array.isArray(legacyConfig) || !isEmpty(legacyFilterConfig)) {\n      return {\n        columns: this.getConfigColumns(legacyConfig, legacyFilterConfig, defaultColumns),\n        pagination: {\n          pageSize: (this.dataGridService as any).DEFAULT_PAGE_SIZE,\n          currentPage: 1\n        }\n      };\n    }\n  }\n\n  getConfigColumns(\n    legacyConfig: LegacyColumnConfig[],\n    legacyFilterConfig: LegacyColumnFilterConfig,\n    defaultColumns: Column[]\n  ) {\n    const legacyFilterConfigArray = legacyFilterConfig\n      ? Object.keys(legacyFilterConfig).map(key => ({\n          key,\n          filter: {\n            externalFilterQuery: legacyFilterConfig[key].filtering\n          },\n          sorting: legacyFilterConfig[key].sorting\n        }))\n      : [];\n\n    const config = this.mergeLegacyConfigs(\n      legacyConfig || defaultColumns.map(column => ({ key: column.name })),\n      legacyFilterConfigArray\n    );\n\n    return config\n      .filter(column => column.key !== 'removalColumn')\n      .map(this.mapLegacyColumnConfig.bind(this));\n  }\n\n  mergeLegacyConfigs(columnConfig, filterConfig) {\n    return columnConfig.map(column => ({\n      ...filterConfig.find(item => item.key === column.key),\n      ...column\n    }));\n  }\n\n  mapLegacyColumnConfig(legacy): CustomColumnConfig {\n    const { active, key, custom, headerName, fragmentPath, filter, sorting } = legacy;\n    const sortOrder = sorting ? this.migrateSortOrder(sorting) : '';\n\n    return omitBy(\n      {\n        visible: active ?? true,\n        name: LegacyGridConfigMapperService.deviceGridLegacyKeyToName[key] || key,\n        sortOrder,\n        custom,\n        header: custom ? headerName : null,\n        path: fragmentPath,\n        filter\n      },\n      isNil\n    );\n  }\n\n  migrateSortOrder(sorting) {\n    switch (sorting.order) {\n      case 0:\n        return '';\n      case -1:\n        return 'desc';\n      case 1:\n        return 'asc';\n    }\n  }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { isEmpty } from 'lodash-es';\nimport { from, Observable, of } from 'rxjs';\nimport { UserPreferencesService } from '../common/user-preferences/user-preferences.service';\nimport { AbstractConfigurationStrategy } from './abstract-configuration-strategy';\nimport {\n  DATA_GRID_CONFIGURATION_CONTEXT,\n  DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n  GridConfigContext,\n  GridConfigContextProvider\n} from './data-grid-configuration.model';\nimport { Column, GridConfig } from './data-grid.model';\nimport { LegacyGridConfigMapperService } from './legacy-grid-config-mapper.service';\n\nexport interface UserPreferencesGridConfigContext extends GridConfigContext {\n  key: string;\n  legacyConfigKey?: string;\n  legacyFilterKey?: string;\n  defaultColumns?: Column[];\n}\n\n/**\n * Stores data grid configuration in form of user preferences.\n */\n@Injectable({ providedIn: 'root' })\nexport class UserPreferencesConfigurationStrategy extends AbstractConfigurationStrategy {\n  constructor(\n    protected userPreferencesService: UserPreferencesService,\n    @Inject(DATA_GRID_CONFIGURATION_CONTEXT)\n    @Optional()\n    protected context: UserPreferencesGridConfigContext,\n    @Inject(DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER)\n    @Optional()\n    protected contextProvider: GridConfigContextProvider,\n    protected legacyGridMapperService: LegacyGridConfigMapperService\n  ) {\n    super(context, contextProvider);\n  }\n\n  getConfig$(context?: UserPreferencesGridConfigContext): Observable<GridConfig> {\n    const configContext: UserPreferencesGridConfigContext = this.retrieveContext(context);\n\n    if (isEmpty(configContext)) {\n      return of(undefined);\n    } else {\n      return configContext.legacyConfigKey || configContext.legacyFilterKey\n        ? this.legacyGridMapperService.getMappedGridConfig(configContext)\n        : this.userPreferencesService.get(configContext?.key);\n    }\n  }\n\n  saveConfig$(\n    config: GridConfig,\n    context?: UserPreferencesGridConfigContext\n  ): Observable<GridConfig> {\n    const configContext: UserPreferencesGridConfigContext = this.retrieveContext(context);\n    return isEmpty(configContext)\n      ? of(undefined)\n      : from(this.userPreferencesService.set(configContext?.key, config));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { RealtimeService } from './realtime.service';\nimport { IAlarm } from '@c8y/client';\nimport { RealtimeSubjectService } from './realtime-subject.service';\n\n@Injectable()\nexport class AlarmRealtimeService extends RealtimeService<IAlarm> {\n  constructor(protected realtimeSubject: RealtimeSubjectService) {\n    super(realtimeSubject);\n  }\n\n  protected channel(): string {\n    return '/alarms/*';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IAlarm } from '@c8y/client';\nimport { RealtimeSubjectService } from './realtime-subject.service';\nimport { RealtimeService } from './realtime.service';\n\n@Injectable()\nexport class AlarmWithChildrenRealtimeService extends RealtimeService<IAlarm> {\n  constructor(protected realtimeSubject: RealtimeSubjectService) {\n    super(realtimeSubject);\n  }\n\n  protected channel(): string {\n    return '/alarmsWithChildren/*';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { RealtimeService } from './realtime.service';\nimport { IEvent } from '@c8y/client';\nimport { RealtimeSubjectService } from './realtime-subject.service';\n\n@Injectable()\nexport class EventRealtimeService extends RealtimeService<IEvent> {\n  constructor(protected realtimeSubject: RealtimeSubjectService) {\n    super(realtimeSubject);\n  }\n\n  protected channel(): string {\n    return '/events/*';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IMeasurement, MeasurementService } from '@c8y/client';\nimport { from, merge, Observable } from 'rxjs';\nimport { filter, map, switchMap } from 'rxjs/operators';\nimport { RealtimeSubjectService } from './realtime-subject.service';\nimport { RealtimeService } from './realtime.service';\n\n@Injectable()\nexport class MeasurementRealtimeService extends RealtimeService<IMeasurement> {\n  constructor(\n    protected realtimeSubject: RealtimeSubjectService,\n    protected measurementService: MeasurementService\n  ) {\n    super(realtimeSubject);\n  }\n\n  /**\n   * Get an Observable of all measurements filtered by fragment and series.\n   *\n   * @param {string} fragment Measurement fragment\n   *\n   * @param {string} series Measurement series\n   *\n   * @param {string | number | IIdentified} entityOrId Entity object or id\n   *\n   * @returns An [[Observable]] of newly created entity objects.\n   */\n  onCreateOfSpecificMeasurement$(\n    fragment: string,\n    series: string,\n    entityOrId?: string | number | IIdentified\n  ): Observable<IMeasurement> {\n    return this.onCreate$(entityOrId).pipe(filter(msg => msg[fragment] && msg[fragment][series]));\n  }\n\n  /**\n   * Get an Observable of all measurements filtered by fragment and series.\n   * Combines the latest value from measurement API and future values via realtime API.\n   *\n   * @param {string} fragment Measurement fragment\n   *\n   * @param {string} series Measurement series\n   *\n   * @param {string | number | IIdentified} entityOrId Entity object or id\n   *\n   * @param {number} pageSize Number of measurements to initially retrieve from backend\n   *\n   * @param {boolean} emitNullIfInitialValuesWereNotFound Flag that if set to true will initially emit value of null in case no measurement could have been retrieved from backend\n   *\n   * @returns An [[Observable]] of newly created entity objects.\n   */\n  latestValueOfSpecificMeasurement$(\n    fragment: string,\n    series: string,\n    entityOrId: string | number | IIdentified,\n    pageSize = 1,\n    emitNullIfInitialValuesWereNotFound = false,\n    dateFrom: Date | string = '1970-01-01',\n    dateTo?: Date | string\n  ) {\n    const realtime$ = this.onCreateOfSpecificMeasurement$(fragment, series, entityOrId);\n    const lastMeasurement$ = this.lastMeasurement$(\n      fragment,\n      series,\n      entityOrId,\n      pageSize,\n      emitNullIfInitialValuesWereNotFound,\n      dateFrom,\n      dateTo\n    );\n    return merge(lastMeasurement$, realtime$);\n  }\n\n  lastMeasurement$(\n    fragment: string,\n    series: string,\n    entityOrId: string | number | IIdentified,\n    pageSize: number,\n    emitNullIfInitialValuesWereNotFound = false,\n    dateFrom: Date | string = '1970-01-01',\n    dateTo?: Date | string\n  ) {\n    return from(\n      this.measurementService.list({\n        valueFragmentSeries: series,\n        valueFragmentType: fragment,\n        source: this.getIdString(entityOrId),\n        dateFrom,\n        revert: true,\n        pageSize,\n        ...(dateTo ? { dateTo } : {})\n      })\n    ).pipe(\n      // emit null in case no value could have been retrieved so we are able to note that in certain cases.\n      map(result =>\n        !emitNullIfInitialValuesWereNotFound || result.data.length ? result.data : [null]\n      ),\n      // reverse required, so that measurements are received ordered by time (ascending).\n      // from ensures values are sent as single measurements and not a measurement array.\n      // TODO: replace `[...result].reverse()` with `result.toReversed()` once es2023 is available.\n      // Had to clone the result array as otherwise reverse may alternate the array multiple times if the observable is subscribed multiple times.\n      switchMap(result => from([...result].reverse()))\n    );\n  }\n\n  protected channel(): string {\n    return '/measurements/*';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IOperationBulk } from '@c8y/client';\nimport { Observable } from 'rxjs';\nimport { RealtimeSubjectService } from './realtime-subject.service';\nimport { RealtimeService } from './realtime.service';\n\n/**\n * A service for handling bulk operation realtime notifications in RxJS fashion.\n */\n@Injectable()\nexport class OperationBulkRealtimeService extends RealtimeService<IOperationBulk> {\n  constructor(protected realtimeSubject: RealtimeSubjectService) {\n    super(realtimeSubject);\n  }\n\n  /**\n   * Get an Observable of all CREATE realtime notifications.\n   *\n   * @returns An [[Observable]] of newly created entity objects.\n   */\n  onCreate$(): Observable<IOperationBulk> {\n    return super.onCreate$();\n  }\n\n  protected channel(): string {\n    return '/bulkOperations/*';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IOperation } from '@c8y/client';\nimport { RealtimeSubjectService } from './realtime-subject.service';\nimport { RealtimeService } from './realtime.service';\n\n/**\n * A service for handling operation realtime notifications in RxJS fashion.\n */\n@Injectable()\nexport class OperationRealtimeService extends RealtimeService<IOperation> {\n  constructor(protected realtimeSubject: RealtimeSubjectService) {\n    super(realtimeSubject);\n  }\n\n  protected channel(): string {\n    return '/operations/*';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { DeviceRegistrationStatus } from '@c8y/client';\nimport { RealtimeService } from './realtime.service';\nimport { RealtimeSubjectService } from './realtime-subject.service';\n\nexport interface IRealtimeDeviceBootstrap {\n  id: string;\n  status: DeviceRegistrationStatus;\n}\n\n/**\n * A service for handling device bootstrap realtime notifications in RxJS fashion.\n */\n@Injectable()\nexport class DeviceBootstrapRealtimeService extends RealtimeService<IRealtimeDeviceBootstrap> {\n  constructor(protected realtimeSubject: RealtimeSubjectService) {\n    super(realtimeSubject);\n  }\n\n  protected channel(): string {\n    return '/bootstrap';\n  }\n}\n","export class RealtimeMessage<T> {\n  id: string;\n  channel: string;\n  realtimeAction: RealtimeAction;\n  data: T | number;\n}\n\nexport type RealtimeAction = 'UPDATE' | 'DELETE' | 'CREATE';\n","import {\n  Component,\n  ElementRef,\n  ViewChild,\n  AfterViewInit,\n  Renderer2,\n  Input,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  HostBinding,\n  HostListener,\n  OnInit // Import OnInit for ID generation\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n';\n\nexport interface ResizableGridConfig {\n  collapseThreshold?: number;\n  leftColumnWidth?: string;\n  trackId?: string | null;\n  collapsible?: boolean;\n}\n\n/**\n * Resizable Grid Component\n *\n * Provides a flexible layout with two adjustable columns separated by a draggable divider.\n *\n * ## Basic Usage\n *\n * ```html\n * <c8y-resizable-grid\n *   [leftColumnWidth]=\"'50%'\"\n *   [collapseThreshold]=\"320\"\n *   [collapsible]=\"true\"\n *   [trackId]=\"'my-layout'\">\n *   <div #colA>Left column content</div>\n *   <div #colB>Right column content</div>\n * </c8y-resizable-grid>\n * ```\n */\n@Component({\n  selector: 'c8y-resizable-grid',\n  templateUrl: './resizable-grid.component.html',\n  standalone: true,\n  imports: [CommonModule, C8yTranslatePipe]\n})\nexport class ResizableGridComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n  /**\n   * Initial width of the left column (A). Can be any valid CSS width value (e.g., '50%', '300px').\n   */\n  @Input() leftColumnWidth = '50%';\n  /**\n   * Optional key for localStorage to persist the left column width between sessions.\n   */\n  @Input() trackId: string | null = null;\n  /**\n   * Minimum width (in pixels) before a column is considered collapsed.\n   */\n  @Input() collapseThreshold = 320;\n  /**\n   * If true, columns can collapse below the threshold. If false, columns stop at the threshold.\n   */\n  @Input() collapsible = true;\n\n  /**\n   * Reference to the left column element.\n   */\n  @ViewChild('colA') colA!: ElementRef<HTMLDivElement>;\n  /**\n   * Reference to the right column element.\n   */\n  @ViewChild('colB') colB!: ElementRef<HTMLDivElement>;\n\n  /**\n   * True if the user is currently resizing the grid.\n   */\n  @HostBinding('class.is-resizing')\n  isResizing = false;\n\n  /**\n   * CSS width value for the left column (A).\n   * Used for dynamic styling via HostBinding.\n   */\n  @HostBinding('style.--col-a-width')\n  private _colAWidth = '50%';\n\n  /**\n   * Public getter for aria-valuenow\n   */\n  get colAWidthPercent(): number {\n    if (!this.colA || !this.colA.nativeElement.parentElement) return 50; // Default or fallback\n    const totalWidth = this.colA.nativeElement.parentElement.offsetWidth;\n    const currentWidth = this.colA.nativeElement.offsetWidth;\n    return totalWidth > 0 ? Math.round((currentWidth / totalWidth) * 100) : 0;\n  }\n\n  /**\n   * X position of the mouse when resizing starts.\n   */\n  private startX = 0;\n  /**\n   * Pixel width of column A when resizing starts.\n   */\n  private startColAWidthPx = 0;\n  /**\n   * Last known non-collapsed width of column A (for restore logic).\n   */\n  private lastKnownNonCollapsedWidth: string | null = null;\n\n  // A11y specific properties\n  colAId!: string;\n  colBId!: string;\n  private resizeStep = 10; // Pixels to move with arrow keys\n\n  /**\n   * Creates an instance of ResizableGridComponent.\n   * @param renderer Angular Renderer2 for DOM manipulation.\n   */\n  constructor(private renderer: Renderer2) {}\n\n  // A11y: Generate unique IDs for the columns\n  ngOnInit() {\n    const uniqueId = Math.random().toString(36).substring(2, 9);\n    this.colAId = `c8y-grid-colA-${uniqueId}`;\n    this.colBId = `c8y-grid-colB-${uniqueId}`;\n  }\n\n  /**\n   * Angular lifecycle hook. Sets up initial column width after view initialization.\n   */\n  ngAfterViewInit() {\n    this.setupInitialWidth();\n  }\n\n  /**\n   * Angular lifecycle hook. Handles changes to input properties.\n   * @param changes Object containing changed input properties.\n   */\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['trackId'] && !changes['trackId'].firstChange) {\n      this.setupInitialWidth();\n    }\n  }\n\n  /**\n   * Angular lifecycle hook. Cleans up cursor style if resizing is active.\n   */\n  ngOnDestroy() {\n    if (this.isResizing) {\n      this.renderer.removeStyle(document.body, 'cursor');\n    }\n  }\n\n  /**\n   * Mouse down event handler for starting resize.\n   * @param event MouseEvent\n   */\n  onMouseDown(event: MouseEvent) {\n    if (!this.colA || !this.colB) {\n      return;\n    }\n\n    event.preventDefault();\n\n    this.isResizing = true;\n    this.startX = event.clientX;\n    this.startColAWidthPx = this.colA.nativeElement.offsetWidth;\n\n    this.renderer.setStyle(document.body, 'cursor', 'col-resize');\n    this.renderer.addClass(document.body, 'no-select');\n\n    // Store the current _colAWidth as the starting point for lastKnownNonCollapsedWidth\n    // before we potentially remove collapse classes.\n    if (\n      !this.colA.nativeElement.classList.contains('collapsed') &&\n      !this.colB.nativeElement.classList.contains('collapsed')\n    ) {\n      this.lastKnownNonCollapsedWidth = this._colAWidth;\n    } else {\n      // If it was collapsed, try to get the last *saved* value if trackId exists,\n      // otherwise default to the input 'leftColumnWidth' for the initial restore.\n      this.lastKnownNonCollapsedWidth =\n        (this.trackId ? localStorage.getItem(this.trackId) : null) || this.leftColumnWidth;\n    }\n\n    // Immediately remove collapse classes on mousedown\n    this.removeCollapseClasses();\n  }\n\n  /**\n   * Mouse move event handler for resizing columns.\n   * @param event MouseEvent\n   */\n  @HostListener('window:mousemove', ['$event'])\n  onMouseMove(event: MouseEvent) {\n    if (!this.isResizing || !this.colA || !this.colB) {\n      return;\n    }\n\n    const deltaX = event.clientX - this.startX;\n    this.updateColumnWidth(this.startColAWidthPx + deltaX);\n  }\n\n  /**\n   * Mouse up event handler for ending resize and applying collapse logic.\n   */\n  @HostListener('window:mouseup')\n  onMouseUp() {\n    if (this.isResizing) {\n      this.isResizing = false;\n      this.renderer.removeStyle(document.body, 'cursor');\n      this.renderer.removeClass(document.body, 'no-select');\n\n      requestAnimationFrame(() => {\n        this.checkAndApplyCollapse(\n          this.colA.nativeElement.offsetWidth,\n          this.colB.nativeElement.offsetWidth\n        );\n      });\n    }\n  }\n\n  /**\n   * Keyboard event handler for resizing columns with arrow keys.\n   * @param event KeyboardEvent\n   */\n  onKeyDown(event: KeyboardEvent) {\n    if (!this.colA || !this.colB) {\n      return;\n    }\n\n    const currentWidth = this.colA.nativeElement.offsetWidth;\n    const totalWidth = this.colA.nativeElement.parentElement?.offsetWidth || window.innerWidth;\n    let newWidthPx = currentWidth;\n\n    // If the column is collapsed, always allow keyboard to restore it\n    const colACollapsed = this.colA.nativeElement.classList.contains('collapsed');\n    const colBCollapsed = this.colB.nativeElement.classList.contains('collapsed');\n\n    switch (event.key) {\n      case 'ArrowLeft':\n        if (colACollapsed) {\n          newWidthPx = this.collapseThreshold + this.resizeStep; // Restore to just above threshold\n        } else {\n          newWidthPx = Math.max(0, currentWidth - this.resizeStep);\n        }\n        event.preventDefault();\n        break;\n      case 'ArrowRight':\n        if (colACollapsed) {\n          newWidthPx = this.collapseThreshold + this.resizeStep;\n        } else {\n          newWidthPx = Math.min(totalWidth, currentWidth + this.resizeStep);\n        }\n        event.preventDefault();\n        break;\n      case 'Home':\n        newWidthPx = 0;\n        event.preventDefault();\n        break;\n      case 'End':\n        newWidthPx = totalWidth;\n        event.preventDefault();\n        break;\n      default:\n        return;\n    }\n\n    // If right column is collapsed, allow keyboard to restore it by expanding left\n    if (colBCollapsed && (event.key === 'ArrowRight' || event.key === 'End')) {\n      newWidthPx = totalWidth - this.collapseThreshold - this.resizeStep;\n    }\n\n    this.removeCollapseClasses();\n    this.updateColumnWidth(newWidthPx, true);\n  }\n\n  /**\n   * Sets up the initial width of the left column, using localStorage if trackId is provided.\n   */\n  private setupInitialWidth() {\n    if (!this.colA || !this.colB) {\n      return;\n    }\n\n    let initialWidth = this.leftColumnWidth;\n    // Only attempt to retrieve from localStorage if trackId is provided\n    if (this.trackId) {\n      const savedWidth = localStorage.getItem(this.trackId);\n      if (savedWidth) {\n        initialWidth = savedWidth;\n      }\n    }\n    this._colAWidth = initialWidth;\n    this.lastKnownNonCollapsedWidth = initialWidth;\n\n    requestAnimationFrame(() => {\n      this.checkAndApplyCollapse(\n        this.colA.nativeElement.offsetWidth,\n        this.colB.nativeElement.offsetWidth\n      );\n    });\n  }\n\n  /**\n   * Updates the column A width and handles boundaries.\n   * @param targetWidthPx The desired width in pixels for column A.\n   * @param applyCollapseImmediately If true, calls checkAndApplyCollapse directly.\n   */\n  private updateColumnWidth(targetWidthPx: number, applyCollapseImmediately = false) {\n    if (!this.colA || !this.colB) {\n      return;\n    }\n\n    const totalWidth = this.colA.nativeElement.parentElement?.offsetWidth || window.innerWidth;\n\n    // If not collapsible, enforce the threshold as the minimum\n    const minWidthPx = this.collapsible ? 0 : this.collapseThreshold;\n    const maxWidthPx = this.collapsible ? totalWidth : totalWidth - this.collapseThreshold;\n\n    let newWidthPx = Math.max(minWidthPx, targetWidthPx);\n    newWidthPx = Math.min(newWidthPx, maxWidthPx);\n\n    const newWidthString = `${newWidthPx}px`;\n    this._colAWidth = newWidthString;\n\n    // Update lastKnownNonCollapsedWidth during drag, regardless of trackId\n    if (newWidthPx > 0 && newWidthPx < totalWidth) {\n      this.lastKnownNonCollapsedWidth = newWidthString;\n    }\n\n    // Only save to localStorage if trackId is provided and not in a collapsed state\n    if (this.trackId && newWidthPx > 0 && newWidthPx < totalWidth) {\n      localStorage.setItem(this.trackId, newWidthString);\n    }\n\n    // A11y: If triggered by keyboard, apply collapse immediately for feedback\n    if (applyCollapseImmediately) {\n      this.checkAndApplyCollapse(newWidthPx, totalWidth - newWidthPx);\n    }\n  }\n\n  /**\n   * Checks if either column should be collapsed based on their widths and applies the appropriate classes/styles.\n   * @param colAWidth Width of column A in pixels\n   * @param colBWidth Width of column B in pixels\n   */\n  private checkAndApplyCollapse(colAWidth: number, colBWidth: number) {\n    if (!this.colA || !this.colB) {\n      return;\n    }\n\n    const colANative = this.colA.nativeElement;\n    const colBNative = this.colB.nativeElement;\n\n    this.removeCollapseClasses();\n\n    // Only apply collapse logic if collapsible is true\n    if (this.collapsible) {\n      if (colAWidth < this.collapseThreshold) {\n        this.renderer.addClass(colANative, 'collapsed');\n        this.renderer.addClass(colBNative, 'expanded');\n        this._colAWidth = '0px';\n      } else if (colBWidth < this.collapseThreshold) {\n        this.renderer.addClass(colBNative, 'collapsed');\n        this.renderer.addClass(colANative, 'expanded');\n        this._colAWidth = '100%';\n      } else {\n        // If neither is collapsed, restore the last known non-collapsed width.\n        // This will be the actual width from the drag, or the localStorage value.\n        this._colAWidth = this.lastKnownNonCollapsedWidth || this.leftColumnWidth;\n        if (this.trackId) {\n          // Ensure localStorage is up-to-date if no collapse occurred.\n          const saved = localStorage.getItem(this.trackId);\n          if (saved !== this._colAWidth) {\n            // Only write if different\n            localStorage.setItem(this.trackId, this._colAWidth);\n          }\n        }\n      }\n    } else {\n      // When not collapsible, just maintain the current width without collapse\n      this._colAWidth = this.lastKnownNonCollapsedWidth || this.leftColumnWidth;\n      if (this.trackId) {\n        const saved = localStorage.getItem(this.trackId);\n        if (saved !== this._colAWidth) {\n          localStorage.setItem(this.trackId, this._colAWidth);\n        }\n      }\n    }\n  }\n\n  /**\n   * Removes collapse/expand classes from both columns.\n   */\n  private removeCollapseClasses() {\n    if (!this.colA || !this.colB) {\n      return;\n    }\n\n    const colANative = this.colA.nativeElement;\n    const colBNative = this.colB.nativeElement;\n\n    this.renderer.removeClass(colANative, 'collapsed');\n    this.renderer.removeClass(colANative, 'expanded');\n    this.renderer.removeClass(colBNative, 'collapsed');\n    this.renderer.removeClass(colBNative, 'expanded');\n  }\n}\n","<div class=\"resizable-grid-container\" [class.is-resizing]=\"isResizing\">\n  <div #colA class=\"col-a\" [id]=\"colAId\">\n    <!-- Content for the left column goes here -->\n    <ng-content select=\"[left-pane]\"></ng-content>\n  </div>\n  <div\n    class=\"resizer\"\n    (mousedown)=\"onMouseDown($event)\"\n    (keydown)=\"onKeyDown($event)\"\n    tabindex=\"0\"\n    role=\"separator\"\n    aria-orientation=\"vertical\"\n    [attr.aria-controls]=\"colAId + ' ' + colBId\"\n    [attr.aria-label]=\"'Resize columns' | translate\"\n    [attr.aria-valuenow]=\"colAWidthPercent\"\n    aria-valuemin=\"0\"\n    aria-valuemax=\"100\"\n  >\n    <i class=\"dlt-c8y-icon-arrow-circle-divide-horizontal\"></i>\n  </div>\n  <div #colB class=\"col-b\" [id]=\"colBId\">\n    <!-- Content for the right column goes here -->\n    <ng-content select=\"[right-pane]\"></ng-content>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { ApiCall, ApiService } from '@c8y/ngx-components/api';\nimport { NEVER, of } from 'rxjs';\nimport { distinctUntilChanged, filter, map, mergeMap, switchMap, take, tap } from 'rxjs/operators';\nimport { AppStateService } from '../common/ui-state.service';\nimport { AssetTypesRealtimeService } from './asset-types.realtime.service';\n\n/**\n * AssetTypesService is being used to manage a cache of all existing asset types.\n * This service is injected in the AssetOverviewNavigationFactory class, which will trigger\n * the initialization of the cache as the constructor is called.\n * @deprecated Consider using `AssetTypesRealtimeService` service instead.\n */\n@Injectable({ providedIn: 'root' })\nexport class AssetTypesService {\n  private readonly DEFAULT_ASSET_ICON = 'c8y-enterprise';\n  private assetTypesCache: Record<string, IManagedObject> = {};\n  private allowedMethods = ['POST', 'PUT', 'DELETE'];\n\n  constructor(\n    private assetTypesRealtimeService: AssetTypesRealtimeService,\n    private apiService: ApiService,\n    private appStateService: AppStateService\n  ) {\n    this.appStateService.currentUser\n      .pipe(\n        map(user => user?.id),\n        distinctUntilChanged(),\n        switchMap(userId => {\n          if (userId) {\n            this.assetTypesRealtimeService\n              .getAssetTypesCache$()\n              .pipe(take(1))\n              .subscribe(assetType => (this.assetTypesCache = assetType));\n            return this.subscribeForAssetTypeUpdates();\n          } else {\n            this.assetTypesCache = {};\n            return NEVER;\n          }\n        })\n      )\n      .subscribe();\n  }\n\n  /**\n   * Returns an asset type from the cache based on the unique name property.\n   * @param name Name of the asset type.\n   * @returns IManagedObject which represents the asset type.\n   */\n  getAssetTypeByName(name: string): IManagedObject {\n    if (!this.assetTypesCache.hasOwnProperty(name)) {\n      return undefined;\n    }\n\n    return this.assetTypesCache[name];\n  }\n\n  /**\n   * Returns an asset type from the cache based on the id.\n   * @param assetTypeId Id of the asset type.\n   * @returns IManagedObject which represents the asset type.\n   */\n  getAssetTypeById(assetTypeId: string): IManagedObject {\n    if (!assetTypeId) {\n      return;\n    }\n\n    return Object.values(this.assetTypesCache).find(\n      (assetType: IManagedObject) => assetType.id === assetTypeId\n    );\n  }\n\n  /**\n   * Returns all the available asset types from the cache.\n   * @returns available asset types.\n   */\n  getAssetTypesCache(): Record<string, IManagedObject> {\n    return this.assetTypesCache;\n  }\n\n  /**\n   * Extracts an icon from an asset type.\n   * @param type Type of the asset type.\n   * @returns Returns an icon for a given asset type.\n   */\n  getIcon(type: string): string {\n    const assetType = this.getAssetTypeByName(type);\n    return (\n      assetType?.c8y_IsAssetType?.icon?.name || assetType?.icon?.name || this.DEFAULT_ASSET_ICON\n    );\n  }\n\n  /**\n   * Add an asset type to the local cache.\n   * @param assetType Asset type which should be added to the cache.\n   * @returns void.\n   */\n  private addAssetType(assetType: IManagedObject): void {\n    this.assetTypesCache[assetType.name] = assetType;\n  }\n\n  /**\n   * Delete an asset type from the local cache based on the given asset type id.\n   * @param assetTypeId Id of the asset type which should be deleted.\n   * @returns void.\n   */\n  private deleteAssetType(assetTypeId: string): void {\n    const assetType = this.getAssetTypeById(assetTypeId);\n    if (assetType) {\n      delete this.assetTypesCache[assetType.name];\n    }\n  }\n  /**\n   * Update an asset type in the local cache.\n   * @param assetType Asset type which should be updated in the cache.\n   * @returns void.\n   */\n  private updateAssetType(assetType: IManagedObject): void {\n    const cachedAssetType = this.getAssetTypeById(assetType.id);\n    if (cachedAssetType) {\n      this.assetTypesCache[cachedAssetType.name] = Object.assign(cachedAssetType, assetType);\n    }\n  }\n\n  /**\n   * Subscribes to api PUT, POST and DELETE requests interceptor to update local asset types cache.\n   * If a new asset type has been created it will be added to the local cache. If an asset\n   * type has been deleted it will be removed from the local cache.\n   */\n  private subscribeForAssetTypeUpdates() {\n    return this.apiService\n      .hookResponse(c => this.checkIfInventoryMoApiCall(c))\n      .pipe(\n        filter((call: ApiCall) => !!call?.method && this.isExpectedMethod(call)),\n        mergeMap(this.apiService.resolveData<IManagedObject | null>),\n        switchMap(({ method, data, url }) =>\n          method === 'DELETE' ? this.handleDelete(method, url) : of(data)\n        ),\n        filter((mo: IManagedObject) => !!mo && this.hasIsAssetTypeFragment(mo)),\n        tap((mo: IManagedObject) => this.handlePutOrPost(mo))\n      );\n  }\n\n  private isExpectedMethod(call: ApiCall) {\n    return this.allowedMethods.includes(call?.method);\n  }\n\n  private handleDelete(method: string, url: string) {\n    const moId: string = this.getMoIdFromUrl(url);\n    if (method !== 'DELETE' || !moId) {\n      return NEVER;\n    }\n    this.deleteAssetType(moId);\n    return NEVER;\n  }\n\n  private handlePutOrPost(mo: IManagedObject) {\n    if (this.getAssetTypeById(mo.id)) {\n      this.updateAssetType(mo);\n    } else {\n      this.addAssetType(mo);\n    }\n  }\n\n  private hasIsAssetTypeFragment(mo: IManagedObject) {\n    return mo?.hasOwnProperty('c8y_IsAssetType');\n  }\n\n  private getMoIdFromUrl(url: string) {\n    const regex = /managedObjects\\/(\\d+)/;\n    const match = url.match(regex);\n\n    if (match && !url.includes('childAdditions')) {\n      const moId = match[1];\n      return moId;\n    }\n    return;\n  }\n\n  /**\n   * Managed objects inventory api filter, allowing only PUT, POST and DELETE methods.\n   * @param call Api call to filter.\n   * @returns Returns true if api call meets the required criteria.\n   */\n  private checkIfInventoryMoApiCall(call: ApiCall): boolean {\n    if (!call) {\n      return false;\n    }\n\n    const hasRequiredMethod =\n      call.method === 'POST' || call.method === 'DELETE' || call.method === 'PUT';\n    const hasRequiredUrl = call.url.includes('managedObjects');\n    return hasRequiredMethod && hasRequiredUrl;\n  }\n}\n","import { AsyncValidatorFn } from '@angular/forms';\nimport type { ChromaStatic } from 'chroma-js';\n\nexport function colorValidator(allowedModes?: string[]): AsyncValidatorFn {\n  return async control => {\n    if (!control.value) {\n      return null;\n    }\n\n    let chroma: Pick<ChromaStatic, 'valid'>;\n    try {\n      const chromaImport = await import('chroma-js');\n      chroma = chromaImport.default || chromaImport;\n      if (typeof chroma.valid !== 'function') {\n        throw new Error('valid is not a function');\n      }\n    } catch (e) {\n      console.log(e);\n      throw new Error('Chroma-js is required for color validation');\n    }\n\n    const color = control.value;\n    if (!allowedModes) {\n      try {\n        if (chroma.valid(color)) {\n          return null;\n        }\n      } catch {\n        // parsing error\n      }\n    } else {\n      for (const mode of allowedModes) {\n        try {\n          if (chroma.valid(color, mode)) {\n            return null;\n          }\n        } catch {\n          // parsing error\n        }\n      }\n    }\n\n    return {\n      invalidColor: {\n        currentValue: color,\n        allowedModes\n      }\n    };\n  };\n}\n","import { NgClass } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n';\nimport { ProductExperienceDirective } from '../product-experience/product-experience.directive';\n\n/**\n * Configuration for a single action button in the details panel.\n * Used to display action buttons with icons, labels, and optional analytics tracking.\n */\nexport interface SplitViewAction {\n  /** Unique identifier for the action (used for tracking in loops) */\n  id: string;\n\n  /** Display label for the button (will be translated) */\n  label: string;\n\n  /** Icon name to display (c8y icon identifier) */\n  icon: string;\n\n  /** Optional CSS classes for the icon (e.g., 'icon-spin'). Default: empty string */\n  iconClass?: string;\n\n  /** Optional CSS classes for the button (e.g., 'btn btn-primary'). Default: empty string */\n  class?: string;\n\n  /** Whether the button is disabled. Default: false */\n  disabled?: boolean;\n\n  /** Whether the button is visible. Default: true */\n  visible?: boolean;\n\n  /** Function to execute when button is clicked */\n  action: () => void;\n\n  /** Optional data-cy attribute for E2E testing */\n  dataCy?: string;\n\n  /** Optional tooltip text (will be translated) */\n  title?: string;\n\n  /** Optional product experience tracking configuration */\n  productExperience?: {\n    /** Action name for analytics */\n    actionName: string;\n    /** Additional data to track with the action */\n    actionData?: Record<string, unknown>;\n  };\n}\n\n/**\n * Displays a row of action buttons in the split view details panel.\n * Renders buttons based on the provided action configurations with support for:\n * - Icons and translatable labels\n * - Disabled and visibility states\n * - Product experience analytics tracking\n * - Custom tooltips and styling\n *\n * @example\n * ```html\n * <c8y-sv-details-actions [actions]=\"detailActions\"></c8y-sv-details-actions>\n * ```\n *\n * @example\n * ```typescript\n * detailActions: SplitViewAction[] = [\n *   {\n *     id: 'edit',\n *     label: 'Edit',\n *     icon: 'pencil',\n *     class: 'btn btn-primary',\n *     action: () => this.editItem(),\n *     title: 'Edit this item'\n *   },\n *   {\n *     id: 'delete',\n *     label: 'Delete',\n *     icon: 'trash',\n *     class: 'btn btn-danger',\n *     action: () => this.deleteItem(),\n *     productExperience: {\n *       actionName: 'delete_item',\n *       actionData: { itemType: 'device' }\n *     }\n *   }\n * ];\n * ```\n */\n@Component({\n  selector: 'c8y-sv-details-actions',\n  templateUrl: './split-view-details-actions.component.html',\n  standalone: true,\n  imports: [NgClass, C8yTranslatePipe, IconDirective, ProductExperienceDirective]\n})\nexport class SplitViewDetailsActionsComponent {\n  /**\n   * Array of action configurations to display as buttons.\n   * Buttons are rendered in the order provided.\n   */\n  @Input() actions: SplitViewAction[] = [];\n}\n","<div\n  class=\"d-flex gap-8 a-i-center\"\n  [attr.aria-label]=\"'Actions' | translate\"\n  role=\"group\"\n  data-cy=\"c8y-sv-details-actions\"\n>\n  @for (action of actions; track action.id) {\n    @if (action.visible !== false) {\n      <button\n        [title]=\"action.title ? (action.title | translate) : null\"\n        [attr.aria-label]=\"action.title ? (action.title | translate) : (action.label | translate)\"\n        [attr.aria-disabled]=\"action.disabled ? 'true' : 'false'\"\n        type=\"button\"\n        [ngClass]=\"action.class || ''\"\n        [disabled]=\"action.disabled || false\"\n        [attr.data-cy]=\"action.dataCy\"\n        (click)=\"action.action()\"\n        c8yProductExperience\n        [actionName]=\"action.productExperience?.actionName\"\n        [actionData]=\"action.productExperience?.actionData\"\n      >\n        <i\n          [c8yIcon]=\"action.icon\"\n          aria-hidden=\"true\"\n          [ngClass]=\"action.iconClass || ''\"\n        ></i>\n        {{ action.label | translate }}\n      </button>\n    }\n  }\n\n  <ng-content></ng-content>\n</div>\n","import { Component } from '@angular/core';\n\n/**\n * Extra header component for split view details.\n * Provides a flexible content projection area below the main header.\n *\n * Use this component to add custom content like metadata, status information,\n * or any other details you want to display at the top of the details panel.\n *\n * @example\n * ```html\n * <c8y-sv-details>\n *   <c8y-sv-extra-header>\n *     <div class=\"row p-16\">\n *       <div class=\"col-sm-6\">\n *         <label>Device ID:</label>\n *         <span>{{ device.id }}</span>\n *       </div>\n *       <div class=\"col-sm-6\">\n *         <label>Status:</label>\n *         <span>{{ device.status }}</span>\n *       </div>\n *     </div>\n *   </c8y-sv-extra-header>\n * </c8y-sv-details>\n * ```\n */\n@Component({\n  selector: 'c8y-sv-extra-header',\n  template: '<ng-content></ng-content>',\n  host: { class: 'd-contents' },\n  standalone: true\n})\nexport class SplitViewExtraHeaderComponent {}\n","import { NgClass } from '@angular/common';\nimport { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'c8y-sv-footer',\n  templateUrl: './split-view-footer.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [NgClass]\n})\nexport class SplitViewFooterComponent {\n  @Input() cssClass = '';\n}\n","<div\n  class=\"card-footer separator-top fit-w sticky-bottom m-t-auto bg-inherit\"\n  [ngClass]=\"cssClass\"\n  data-cy=\"c8y-sv-footer\"\n>\n  <ng-content></ng-content>\n</div>\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Service to manage selection state in split view components.\n * Provides methods to select/deselect items and track selection state.\n */\n@Injectable()\nexport class SplitViewSelectionService<T = unknown> implements OnDestroy {\n  private readonly _selectedItem$ = new BehaviorSubject<T | null>(null);\n\n  ngOnDestroy(): void {\n    this._selectedItem$.complete();\n  }\n\n  /**\n   * Observable of the currently selected item\n   */\n  get selectedItem$(): Observable<T | null> {\n    return this._selectedItem$.asObservable();\n  }\n\n  /**\n   * Get the current selected item value\n   */\n  get selectedItem(): T | null {\n    return this._selectedItem$.value;\n  }\n\n  /**\n   * Check if an item is currently selected\n   */\n  get hasSelection(): boolean {\n    return this._selectedItem$.value !== null;\n  }\n\n  /**\n   * Select an item\n   */\n  select(item: T): void {\n    this._selectedItem$.next(item);\n  }\n\n  /**\n   * Clear the current selection\n   */\n  clearSelection(): void {\n    this._selectedItem$.next(null);\n  }\n\n  /**\n   * Check if a specific item is selected\n   */\n  isSelected(item: T): boolean {\n    return this._selectedItem$.value === item;\n  }\n}\n","import { Location, NgClass } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  DestroyRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnDestroy,\n  Optional,\n  Output\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterOutlet } from '@angular/router';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { EmptyStateComponent } from '../common/empty-state/empty-state.component';\nimport { IconDirective } from '../common/icon.directive';\nimport { C8yTranslatePipe } from '../i18n';\nimport { SplitViewDetailsActionsComponent } from './split-view-details-actions.component';\nimport { SplitViewExtraHeaderComponent } from './split-view-extra-header.component';\nimport { SplitViewFooterComponent } from './split-view-footer.component';\nimport { SplitViewSelectionService } from './split-view-selection.service';\n\n/**\n * Split View Details Component\n *\n * Displays the details panel of a split-view layout.\n *\n * ## Basic Usage\n *\n * ```html\n * <c8y-sv-details\n *   emptyStateIcon=\"c8y-devices\"\n *   emptyStateTitle=\"No device selected\"\n *   emptyStateSubtitle=\"Select a device to view details\">\n *\n *   @if (selectedItem) {\n *     <c8y-sv-extra-header>\n *       <c8y-icon-panel [sections]=\"sections\"></c8y-icon-panel>\n *     </c8y-sv-extra-header>\n *   }\n *\n *   @if (selectedItem) {\n *     <h3>{{ selectedItem.name }}</h3>\n *     <p>{{ selectedItem.description }}</p>\n *   }\n * </c8y-sv-details>\n * ```\n *\n * ## Router-Outlet Integration\n *\n * ```html\n * <c8y-sv-details (backClick)=\"handleBackClick()\">\n *   <router-outlet></router-outlet>\n * </c8y-sv-details>\n * ```\n *\n * ```typescript\n * async handleBackClick(): Promise<void> {\n *   await this.alarmsViewService.closeDetailsView(this.activatedRoute);\n * }\n * ```\n */\n@Component({\n  selector: 'c8y-sv-details',\n  templateUrl: './split-view-details.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [NgClass, C8yTranslatePipe, EmptyStateComponent, IconDirective]\n})\nexport class SplitViewDetailsComponent implements AfterViewInit, OnDestroy {\n  private readonly destroyRef = inject(DestroyRef);\n  private _routerOutletActivated = false;\n\n  /**\n   * Title for the details section\n   */\n  @Input() title?: string;\n\n  /**\n   * Aria label for the details panel region.\n   */\n  @Input() ariaLabel = gettext('Details panel') as string;\n\n  /**\n   * Custom CSS classes\n   */\n  @Input() cssClass = '';\n\n  /**\n   * Empty state icon when nothing is selected\n   */\n  @Input() emptyStateIcon = 'c8y-alert-idle' as string;\n\n  /**\n   * Empty state title when nothing is selected\n   */\n  @Input() emptyStateTitle = gettext('No item selected') as string;\n\n  /**\n   * Empty state subtitle when nothing is selected\n   */\n  @Input() emptyStateSubtitle = gettext('Select an item from the list to view details') as string;\n\n  /**\n   * Emits when the back button is clicked.\n   * Allows parent components to handle custom navigation logic.\n   * If not handled, default behavior (location.back or clearSelection) is used.\n   */\n  @Output() backClick = new EventEmitter<void>();\n\n  @ContentChild(SplitViewExtraHeaderComponent)\n  private readonly extraHeaderComponent?: SplitViewExtraHeaderComponent;\n  @ContentChild(SplitViewDetailsActionsComponent)\n  private readonly actionsComponent?: SplitViewDetailsActionsComponent;\n  @ContentChild(SplitViewFooterComponent)\n  private readonly footerComponent?: SplitViewFooterComponent;\n  @ContentChild(RouterOutlet) private readonly routerOutlet?: RouterOutlet;\n\n  constructor(\n    @Optional() public selectionService: SplitViewSelectionService<unknown> | null,\n    @Optional() private readonly location?: Location,\n    private readonly cdr?: ChangeDetectorRef\n  ) {}\n\n  ngAfterViewInit(): void {\n    // Listen to router outlet activation/deactivation events directly\n    if (this.routerOutlet) {\n      // Set initial state and mark for check\n      this._routerOutletActivated = !!this.routerOutlet.isActivated;\n      this.cdr?.markForCheck();\n\n      // Subscribe to activation events\n      this.routerOutlet.activateEvents.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n        this._routerOutletActivated = true;\n        this.cdr?.markForCheck();\n      });\n\n      // Subscribe to deactivation events\n      this.routerOutlet.deactivateEvents.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n        this._routerOutletActivated = false;\n        this.cdr?.markForCheck();\n      });\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.backClick.complete();\n  }\n\n  get hasExtraHeader(): boolean {\n    return !!this.extraHeaderComponent;\n  }\n\n  get hasActions(): boolean {\n    return !!this.actionsComponent;\n  }\n\n  get hasFooter(): boolean {\n    return !!this.footerComponent;\n  }\n\n  /**\n   * Check if an item is selected or if router-outlet is activated\n   */\n  get hasSelection(): boolean {\n    // Check selection service first\n    if (this.selectionService?.hasSelection) {\n      return true;\n    }\n\n    // Check router outlet activation state (updated via outlet events)\n    return this._routerOutletActivated;\n  }\n\n  /**\n   * Clear the current selection (back button handler).\n   * Emits backClick event for parent to handle, or uses default behavior:\n   * - Router-outlet: navigates back using browser history\n   * - Selection service: clears the selection\n   */\n  clearSelection(): void {\n    // Emit event for parent to handle\n    if (this.backClick.observed) {\n      this.backClick.emit();\n    }\n    // Default behavior: If using router-outlet, go back in history\n    else if (this.routerOutlet?.isActivated && this.location) {\n      this.location.back();\n    }\n    // Otherwise clear selection service\n    else {\n      this.selectionService?.clearSelection();\n    }\n  }\n}\n","<div\n  class=\"inner-scroll fit-h d-col fit-w split-view__detail\"\n  [class.split-view__detail--selected]=\"hasSelection\"\n  [attr.aria-label]=\"ariaLabel | translate\"\n  role=\"region\"\n  [ngClass]=\"cssClass\"\n  data-cy=\"c8y-sv-details\"\n>\n  <!-- Back button for mobile/tablet -->\n  @if (hasSelection) {\n    <div class=\"card-header separator sticky-top visible-sm visible-xs\">\n      <button\n        class=\"btn btn-clean text-primary\"\n        [title]=\"'Back' | translate\"\n        [attr.aria-label]=\"'Back' | translate\"\n        type=\"button\"\n        (click)=\"clearSelection()\"\n      >\n        <i c8yIcon=\"chevron-left\"></i>\n        <span>{{ 'Back' | translate }}</span>\n      </button>\n    </div>\n  }\n  <!-- Content when item is selected -->\n  @if (title || hasExtraHeader) {\n    <div\n      class=\"p-l-24 p-r-24 card-header flex-no-shrink sticky-top bg-component separator\"\n      [ngClass]=\"{ 'flex-wrap': hasExtraHeader, 'gap-8': hasExtraHeader && title }\"\n    >\n      <h4 class=\"card-title\">{{ title | translate }}</h4>\n      <ng-content select=\"c8y-sv-header-actions\"></ng-content>\n      @if (hasExtraHeader) {\n        <div class=\"details-info fit-w\">\n          <ng-content select=\"c8y-sv-extra-header\"></ng-content>\n        </div>\n      }\n    </div>\n  }\n  <!-- Empty state when nothing is selected -->\n  @if (!hasSelection) {\n    <div class=\"d-flex a-i-center j-c-center flex-grow p-24\">\n      <c8y-ui-empty-state\n        [icon]=\"emptyStateIcon\"\n        [title]=\"emptyStateTitle\"\n        [subtitle]=\"emptyStateSubtitle\"\n      ></c8y-ui-empty-state>\n    </div>\n  }\n  <!-- Content when item is selected -->\n  @if (hasSelection) {\n    <div\n      class=\"p-24\"\n      [ngClass]=\"{ 'p-t-0': !title && !hasExtraHeader }\"\n    >\n      <div class=\"details-content\">\n        <ng-content\n          select=\":not(c8y-sv-extra-header):not(c8y-sv-details-actions):not(c8y-sv-footer):not(c8y-sv-header-actions)\"\n        ></ng-content>\n      </div>\n\n      @if (hasActions) {\n        <div class=\"details-actions\">\n          <ng-content select=\"c8y-sv-details-actions\"></ng-content>\n        </div>\n      }\n    </div>\n    @if (hasFooter) {\n      <ng-content select=\"c8y-sv-footer\"></ng-content>\n    }\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  ContentChild,\n  DestroyRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RouterOutlet } from '@angular/router';\nimport { debounceTime, fromEvent, skip } from 'rxjs';\nimport { C8yTranslatePipe } from '../i18n';\nimport {\n  ResizableGridComponent,\n  ResizableGridConfig\n} from '../resizable-grid/resizable-grid.component';\nimport { SplitViewDetailsComponent } from './split-view-details.component';\nimport { SplitViewSelectionService } from './split-view-selection.service';\n\nconst DEFAULT_RESIZABLE_CONFIG: Required<ResizableGridConfig> = Object.freeze({\n  collapseThreshold: 320,\n  leftColumnWidth: '50%',\n  trackId: 'c8y-sv-resizable-default',\n  collapsible: true\n});\n\n/**\n * A responsive split view layout component with automatic selection management and resizable panes.\n *\n * #### Basic usage\n *\n *\n * ```typescript\n * export class MyComponent {\n *   items: Device[] = [];\n *   selectedItem?: Device;\n *\n *   onSelectionChange(item: Device | null) {\n *     this.selectedItem = item || undefined;\n *   }\n * }\n * ```\n *\n * ```html\n * <c8y-sv (selectionChange)=\"onSelectionChange($event)\">\n *   <c8y-sv-list [title]=\"'Devices'\">\n *     <c8y-sv-header-actions>\n *       <button class=\"btn btn-primary\">Add Device</button>\n *     </c8y-sv-header-actions>\n *\n *     @for (item of items; track item.id) {\n *       <c8y-li [c8ySvListItem]=\"item\">\n *         {{ item.name }}\n *       </c8y-li>\n *     }\n *\n *     <c8y-sv-footer>\n *       Total: {{ items.length }}\n *     </c8y-sv-footer>\n *   </c8y-sv-list>\n *\n *   <c8y-sv-details\n *     emptyStateIcon=\"c8y-devices\"\n *     emptyStateTitle=\"No device selected\"\n *     emptyStateSubtitle=\"Select a device to view details\">\n *     @if (selectedItem) {\n *       <c8y-sv-extra-header>\n *         <c8y-icon-panel [sections]=\"sections\"></c8y-icon-panel>\n *       </c8y-sv-extra-header>\n *     }\n *\n *     @if (selectedItem) {\n *       <h3>{{ selectedItem.name }}</h3>\n *       <p>{{ selectedItem.description }}</p>\n *     }\n *   </c8y-sv-details>\n * </c8y-sv>\n * ```\n *\n * #### Router-Outlet integration\n *\n * For components using Angular router:\n *\n * ```html\n * <c8y-sv>\n *   <c8y-alarms-list>...</c8y-alarms-list>\n *\n *   <c8y-sv-details (backClick)=\"handleBackClick()\">\n *     <router-outlet></router-outlet>\n *   </c8y-sv-details>\n * </c8y-sv>\n * ```\n *\n * ```typescript\n * async handleBackClick(): Promise<void> {\n *   await this.alarmsViewService.closeDetailsView(this.activatedRoute);\n * }\n * ```\n *\n * #### Resizable configuration\n *\n * ```html\n * <c8y-sv\n *   [isResizable]=\"true\"\n *   [resizableBreakpoint]=\"991\"\n *   [resizableConfig]=\"{\n *     trackId: 'my-split-view',\n *     leftColumnWidth: '40%',\n *     collapseThreshold: 320,\n *     collapsible: false\n *   }\"\n *   [initialSelection]=\"items[0]\"\n *   (selectionChange)=\"onSelectionChange($event)\">\n *   <!-- content -->\n * </c8y-sv>\n * ```\n *\n * #### List-Only mode\n *\n * Omit `<c8y-sv-details>` for a simple list view:\n * ```html\n * <c8y-sv>\n *   <c8y-sv-list [title]=\"'Items'\">\n *     @for (item of items; track item.id) {\n *       <c8y-li>{{ item.name }}</c8y-li>\n *     }\n *   </c8y-sv-list>\n * </c8y-sv>\n * ```\n *\n */\n@Component({\n  selector: 'c8y-sv',\n  templateUrl: './split-view.component.html',\n  standalone: true,\n  imports: [CommonModule, RouterOutlet, C8yTranslatePipe, ResizableGridComponent],\n  providers: [SplitViewSelectionService]\n})\nexport class SplitViewComponent<T = unknown> implements OnInit, OnDestroy {\n  private readonly destroyRef = inject(DestroyRef);\n\n  /**\n   * Whether to show a default router outlet in right-view if no right-view slot content provided.\n   * @default true\n   */\n  @Input() showDefaultRouterOutlet = true;\n\n  /**\n   * Enable resizable grid functionality with draggable divider.\n   * When `true`, users can resize the split panes by dragging the divider.\n   * Above `resizableBreakpoint`, the resizable grid is active.\n   * Below `resizableBreakpoint`, falls back to CSS-based responsive layout.\n   * @default true\n   */\n  @Input() isResizable = true;\n\n  /**\n   * Initial item to select when the component is initialized.\n   * If provided, this item will be automatically selected on component load.\n   *\n   * @example\n   * ```html\n   * <c8y-sv [initialSelection]=\"items[0]\">\n   * ```\n   *\n   */\n  @Input() initialSelection?: T;\n\n  /**\n   * Minimum window width (in pixels) required for resizable grid to be active.\n   * Below this width, the component switches to a stacked mobile layout.\n   * @default 991\n   */\n  @Input() resizableBreakpoint = 991;\n\n  /**\n   * Emits when the selected item changes.\n   * The event emits the selected item or `null` when selection is cleared.\n   *\n   * @example\n   * ```html\n   * <c8y-sv (selectionChange)=\"onSelectionChange($event)\">\n   * ```\n   *\n   * ```typescript\n   * onSelectionChange(item: Device | null) {\n   *   this.selectedItem = item || undefined;\n   * }\n   * ```\n   */\n  @Output() selectionChange = new EventEmitter<T | null>();\n\n  /**\n   * Internal flag to track if current viewport width allows resizable grid\n   */\n  private _isResizableAtCurrentWidth = true;\n\n  /**\n   * Configuration for resizable grid behavior.\n   *\n   * @property trackId - Unique ID for persisting column widths in localStorage\n   * @property leftColumnWidth - Initial width of left column (default: '50%')\n   * @property collapseThreshold - Width threshold (in px) for collapsing columns (default: 320)\n   * @property collapsible - Whether columns can collapse below threshold (default: true)\n   *\n   * @example\n   * ```html\n   * <c8y-sv [resizableConfig]=\"{\n   *   trackId: 'device-list-view',\n   *   leftColumnWidth: '40%',\n   *   collapseThreshold: 320,\n   *   collapsible: false\n   * }\">\n   * ```\n   */\n  @Input()\n  set resizableConfig(config: ResizableGridConfig) {\n    this._resizableConfig = config ?? {};\n    this.updateMemoizedResizableConfig();\n  }\n\n  get resizableConfig(): ResizableGridConfig {\n    return this._resizableConfig;\n  }\n\n  private _resizableConfig: ResizableGridConfig = {};\n  private _memoizedResizableConfig: Required<ResizableGridConfig> = {\n    collapseThreshold: DEFAULT_RESIZABLE_CONFIG.collapseThreshold,\n    leftColumnWidth: DEFAULT_RESIZABLE_CONFIG.leftColumnWidth,\n    trackId: DEFAULT_RESIZABLE_CONFIG.trackId,\n    collapsible: DEFAULT_RESIZABLE_CONFIG.collapsible\n  };\n\n  /**\n   * Detect if details are projected to decide on router-outlet fallback\n   */\n  @ContentChild(SplitViewDetailsComponent) private _detailsComp?: SplitViewDetailsComponent;\n\n  constructor(public selectionService: SplitViewSelectionService<T>) {\n    this._checkViewportWidth();\n  }\n\n  ngOnInit(): void {\n    // Subscribe to selection changes and emit them\n    // Ignore the initial BehaviorSubject emission (null) so consumers only see\n    // real selection changes triggered by user interaction or inputs.\n    this.selectionService.selectedItem$\n      .pipe(skip(1), takeUntilDestroyed(this.destroyRef))\n      .subscribe(item => {\n        this.selectionChange.emit(item);\n      });\n\n    // Set initial selection if provided\n    if (this.initialSelection) {\n      this.selectionService.select(this.initialSelection);\n    }\n\n    // Debounced resize listener to prevent excessive change detection\n    fromEvent(window, 'resize')\n      .pipe(debounceTime(200), takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => {\n        this._checkViewportWidth();\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.selectionChange.complete();\n  }\n\n  /**\n   * Checks if a details component is projected.\n   *\n   * Returns `true` when `<c8y-sv-details>` is present in the template.\n   * Returns `false` when `<c8y-sv-details>` is not present.\n   *\n   * @internal Used by the template to determine layout mode\n   */\n  get hasProjectedDetails(): boolean {\n    return !!this._detailsComp;\n  }\n\n  /**\n   * Determines if the resizable grid should be active.\n   *\n   * Returns `true` when all conditions are met:\n   * - `isResizable` is `true`\n   * - Current viewport width is above `resizableBreakpoint`\n   * - Details component is projected\n   *\n   * When `false`, falls back to CSS-based responsive layout.\n   *\n   * @internal Used by the template to conditionally render resizable grid\n   */\n  get shouldUseResizableGrid(): boolean {\n    return this.isResizable && this._isResizableAtCurrentWidth && this.hasProjectedDetails;\n  }\n\n  /**\n   * Returns the effective resizable configuration with all defaults applied.\n   * The configuration is memoized and updated only when inputs change.\n   *\n   * @internal Used by the template to pass config to resizable-grid component\n   */\n  get effectiveResizableConfig(): Required<ResizableGridConfig> {\n    return this._memoizedResizableConfig;\n  }\n\n  /**\n   * Returns CSS classes for the split view container element.\n   *\n   * Always includes: `['card', 'content-fullpage', 'grid__row--1']`\n   *\n   * Conditionally adds `'split-view--5-7'` when:\n   * - Details component is projected\n   * - Resizable grid is not active (below breakpoint or disabled)\n   *\n   * @returns Array of CSS class names\n   */\n  getContainerClasses(): string[] {\n    const classes = ['card', 'content-fullpage', 'grid__row--1'];\n\n    if (this.hasProjectedDetails && (!this.isResizable || !this._isResizableAtCurrentWidth)) {\n      classes.push('split-view--5-7');\n    }\n\n    return classes;\n  }\n\n  private _checkViewportWidth(): void {\n    this._isResizableAtCurrentWidth = window.innerWidth > this.resizableBreakpoint;\n  }\n\n  private updateMemoizedResizableConfig(): void {\n    const collapseThreshold =\n      this._resizableConfig.collapseThreshold ?? DEFAULT_RESIZABLE_CONFIG.collapseThreshold;\n    const leftColumnWidth =\n      this._resizableConfig.leftColumnWidth ?? DEFAULT_RESIZABLE_CONFIG.leftColumnWidth;\n    const trackId = this._resizableConfig.trackId ?? DEFAULT_RESIZABLE_CONFIG.trackId;\n    const collapsible = this._resizableConfig.collapsible ?? DEFAULT_RESIZABLE_CONFIG.collapsible;\n\n    const current = this._memoizedResizableConfig;\n    if (\n      current.collapseThreshold !== collapseThreshold ||\n      current.leftColumnWidth !== leftColumnWidth ||\n      current.trackId !== trackId ||\n      current.collapsible !== collapsible\n    ) {\n      this._memoizedResizableConfig = { collapseThreshold, leftColumnWidth, trackId, collapsible };\n    }\n  }\n}\n","<div\n  [attr.aria-label]=\"'Split view interface' | translate\"\n  tabindex=\"-1\"\n  role=\"main\"\n  [ngClass]=\"getContainerClasses()\"\n  data-cy=\"c8y-sv\"\n>\n  @if (shouldUseResizableGrid) {\n    <c8y-resizable-grid\n      [collapseThreshold]=\"effectiveResizableConfig.collapseThreshold\"\n      [collapsible]=\"effectiveResizableConfig.collapsible\"\n      [leftColumnWidth]=\"effectiveResizableConfig.leftColumnWidth\"\n      [trackId]=\"effectiveResizableConfig.trackId\"\n    >\n      <div left-pane>\n        <ng-container *ngTemplateOutlet=\"listContent\"></ng-container>\n      </div>\n      <div right-pane>\n        <ng-container *ngTemplateOutlet=\"detailsContent\"></ng-container>\n      </div>\n    </c8y-resizable-grid>\n  } @else {\n    <ng-container *ngTemplateOutlet=\"listContent\"></ng-container>\n    <ng-container *ngTemplateOutlet=\"detailsContent\"></ng-container>\n    @if (showDefaultRouterOutlet && !hasProjectedDetails) {\n      <router-outlet class=\"d-contents\"></router-outlet>\n    }\n  }\n\n  <ng-template #listContent>\n    <ng-content select=\":not(c8y-sv-details)\"></ng-content>\n  </ng-template>\n\n  <ng-template #detailsContent>\n    @if (hasProjectedDetails) {\n      <ng-content select=\"c8y-sv-details\"></ng-content>\n    }\n  </ng-template>\n</div>\n","import { Component } from '@angular/core';\n\n/**\n * Marker component for alert content in split-view lists.\n * Provides a named slot for displaying alerts above the list items.\n *\n * The parent split-view-list component detects this component via @ContentChild\n * and conditionally renders the alert section when present.\n *\n * This is a purely structural component with no logic or styling - all content\n * is projected and styled by the consumer.\n *\n * @example\n * ```html\n * <c8y-sv-list [title]=\"'Alarms'\">\n *   <c8y-sv-alerts>\n *     @if (hasWarning) {\n *       <div class=\"alert alert-warning\" role=\"alert\">\n *         The selected item is not currently in the list.\n *       </div>\n *     }\n *   </c8y-sv-alerts>\n *   <!-- list items -->\n *   @for (item of items; track item.id) {\n *     <c8y-li>{{ item.name }}</c8y-li>\n *   }\n * </c8y-sv-list>\n * ```\n *\n * @example Multiple alerts\n * ```html\n * <c8y-sv-list [title]=\"'Items'\">\n *   <c8y-sv-alerts>\n *     @if (hasInfo) {\n *       <div class=\"alert alert-info\" role=\"alert\">\n *         Information message\n *       </div>\n *     }\n *     @if (hasWarning) {\n *       <div class=\"alert alert-warning\" role=\"alert\">\n *         Warning message\n *       </div>\n *     }\n *   </c8y-sv-alerts>\n *   <!-- list content -->\n * </c8y-sv-list>\n * ```\n */\n@Component({\n  selector: 'c8y-sv-alerts',\n  template: `<ng-content></ng-content>`,\n  standalone: true\n})\nexport class SplitViewAlertsComponent {}\n","import { NgClass } from '@angular/common';\nimport { Component, ContentChild, ElementRef, inject, Input, ViewChild } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { EmptyStateComponent } from '../common/empty-state/empty-state.component';\nimport { LoadingComponent } from '../common/loading.component';\nimport { GuideDocsComponent, GuideHrefDirective } from '../docs';\nimport { C8yTranslateDirective, C8yTranslatePipe } from '../i18n';\nimport { SplitViewAlertsComponent } from './split-view-alerts.component';\nimport { SplitViewComponent } from './split-view.component';\n\n@Component({\n  selector: 'c8y-sv-list',\n  templateUrl: './split-view-list.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [\n    NgClass,\n    LoadingComponent,\n    EmptyStateComponent,\n    C8yTranslatePipe,\n    C8yTranslateDirective,\n    GuideDocsComponent,\n    GuideHrefDirective\n  ]\n})\nexport class SplitViewListComponent {\n  /**\n   * Optional parent split view component.\n   * Used to determine if a details panel is present for automatic background styling.\n   */\n  private readonly parentSplitView = inject(SplitViewComponent, { optional: true });\n  /**\n   * Title for the list section.\n   * Also used as aria-label if provided.\n   */\n  @Input() title = gettext('Split view list') as string;\n\n  /**\n   * Whether the list is currently loading\n   */\n  @Input() loading = false;\n\n  /**\n   * Whether to show empty state\n   */\n  @Input() showEmptyState = true;\n\n  /**\n   * Custom empty state icon\n   */\n  @Input() emptyStateIcon = 'c8y-alert-idle' as string;\n\n  /**\n   * Custom empty state title\n   */\n  @Input() emptyStateTitle = gettext('No items to display.') as string;\n\n  /**\n   * Custom empty state subtitle\n   */\n  @Input() emptyStateSubtitle?: string;\n\n  /**\n   * Documentation URL to display in the empty state.\n   * When provided, a link to the documentation will be shown.\n   */\n  @Input() docsUrl?: string;\n\n  /**\n   * Whether to show the title in the list header.\n   * If not provided, automatically detected based on parent split view presence:\n   * - Inside `<c8y-sv>`: shows the title (full page context)\n   * - Outside `<c8y-sv>`: hides the title (widget context where widget provides its own title bar)\n   */\n  @Input() showTitle?: boolean;\n\n  /**\n   * Opacity for the list content (CSS opacity: 0-1 scale).\n   *\n   * Use this to dim the list during loading states while showing a loading indicator.\n   * Defaults to 1 (fully opaque).\n   *\n   * @example\n   * ```html\n   * <!-- Dim list to 20% opacity during initial load -->\n   * <c8y-sv-list [listOpacity]=\"isLoading ? 0.2 : 1\">\n   * ```\n   */\n  @Input() listOpacity = 1;\n\n  /**\n   * Reference to the inner scroll div element.\n   * Available after `ngAfterViewInit` lifecycle hook.\n   */\n  @ViewChild('innerScrollDiv') innerScrollDiv?: ElementRef<HTMLDivElement>;\n\n  @ContentChild(SplitViewAlertsComponent) readonly alertsComp?: SplitViewAlertsComponent;\n\n  get hasAlerts(): boolean {\n    return !!this.alertsComp;\n  }\n\n  /**\n   * Computed property that determines if the title should be shown.\n   * Uses the explicit `showTitle` input if provided, otherwise falls back to automatic detection.\n   *\n   * Automatic detection logic:\n   * - Inside `<c8y-sv>`: shows the title (full page context)\n   * - Outside `<c8y-sv>`: hides the title (widget context where widget provides its own title bar)\n   */\n  get shouldShowTitle(): boolean {\n    return this.showTitle !== undefined ? this.showTitle : !!this.parentSplitView;\n  }\n\n  /**\n   * Determines if split view layout styles should be applied based on the presence of a details panel.\n   *\n   * When a details panel (`<c8y-sv-details>`) is present alongside the list:\n   * - Returns `true` → applies `split-view__list bg-level-1` classes (lighter background for contrast)\n   *\n   * When no details panel is present (single column or widget usage):\n   * - Returns `false` → applies `bg-component` class (standard component background)\n   *\n   * This detection is automatic and based on the actual layout structure.\n   */\n  get isSplitView(): boolean {\n    return !!this.parentSplitView?.hasProjectedDetails;\n  }\n}\n","<div\n  class=\"inner-scroll fit-h\"\n  [attr.aria-label]=\"title | translate\"\n  role=\"region\"\n  [ngClass]=\"{ 'split-view__list bg-level-1': isSplitView, 'bg-component': !isSplitView }\"\n  data-cy=\"c8y-sv-list\"\n  #innerScrollDiv\n>\n  @if (title || hasAlerts) {\n    <div\n      class=\"flex-wrap flex-no-shrink sticky-top gap-8\"\n      [ngClass]=\"{\n        'card-header separator': title && shouldShowTitle\n      }\"\n    >\n      @if (title && shouldShowTitle) {\n        <h4 class=\"card-title\">\n          {{ title | translate }}\n        </h4>\n      }\n      <ng-content select=\"c8y-sv-header-actions\"></ng-content>\n      @if (hasAlerts) {\n        <ng-content select=\"c8y-sv-alerts\"></ng-content>\n      }\n    </div>\n  }\n  <div data-cy=\"c8y-sv-list--group\">\n    @if (loading && !showEmptyState) {\n      <div class=\"p-absolute fit-w overflow-hidden p-b-4\">\n        <c8y-loading\n          [layout]=\"'page'\"\n          data-cy=\"c8y-sv-list--loading\"\n        ></c8y-loading>\n      </div>\n    }\n    <ng-content></ng-content>\n\n    @if (showEmptyState) {\n      <div class=\"p-relative p-l-24\">\n        <c8y-ui-empty-state\n          [icon]=\"emptyStateIcon\"\n          [title]=\"emptyStateTitle\"\n          [subtitle]=\"emptyStateSubtitle\"\n          data-cy=\"c8y-sv-list--empty-state\"\n        >\n          @if (docsUrl) {\n            <p c8y-guide-docs>\n              <small\n                translate\n                [translateParams]=\"{ docsUrl }\"\n                ngNonBindable\n              >\n                Find out more in the\n                <a c8y-guide-href=\"{{ docsUrl }}\">user documentation</a>.\n              </small>\n            </p>\n          }\n        </c8y-ui-empty-state>\n      </div>\n    }\n  </div>\n\n  <ng-content select=\"c8y-sv-footer\"></ng-content>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { SplitViewListComponent } from './split-view-list.component';\n\n@Component({\n  selector: 'c8y-sv-header-actions',\n  templateUrl: './split-view-header-actions.component.html',\n  host: { class: 'd-contents' },\n  standalone: true,\n  imports: [NgClass]\n})\nexport class SplitViewHeaderActionsComponent {\n  /**\n   * Parent list component reference to automatically detect if title is shown.\n   * This allows automatic adjustment of spacing based on parent's showTitle setting.\n   */\n  private readonly parentList = inject(SplitViewListComponent);\n\n  /**\n   * Whether the parent list shows a title.\n   * Automatically inherited from parent, used to adjust spacing.\n   */\n  get showTitle(): boolean {\n    return this.parentList.shouldShowTitle;\n  }\n}\n","<div\n  [ngClass]=\"{ 'd-flex a-i-center fit-w': !showTitle, 'm-l-auto': showTitle }\"\n  data-cy=\"c8y-sv-header-actions\"\n>\n  <ng-content></ng-content>\n</div>\n","import { Directive, HostListener, Input, Optional, HostBinding } from '@angular/core';\nimport { SplitViewSelectionService } from './split-view-selection.service';\n\n/**\n * Directive to handle item selection in split-view list.\n * Automatically selects the item on click and applies the 'active' class.\n *\n * Usage:\n * ```html\n * @for (device of devices; track device.id) {\n *   <c8y-li [c8ySvListItem]=\"device\">\n *     {{ device.name }}\n *   </c8y-li>\n * }\n * ```\n */\n@Directive({\n  selector: '[c8ySvListItem]',\n  standalone: true,\n  host: { class: 'pointer' }\n})\nexport class SplitViewListItemDirective<T = unknown> {\n  /**\n   * The item data to be selected.\n   * Can be set via the directive attribute: [c8ySvListItem]=\"item\"\n   */\n  @Input({ alias: 'c8ySvListItem' }) item?: T;\n\n  constructor(@Optional() private readonly selectionService: SplitViewSelectionService<T> | null) {}\n\n  @HostBinding('class.active')\n  get isActive(): boolean {\n    return !!(this.item && this.selectionService?.isSelected(this.item));\n  }\n\n  @HostBinding('attr.role')\n  get role(): string {\n    return 'button';\n  }\n\n  @HostListener('click')\n  onClick(): void {\n    if (this.item && this.selectionService) {\n      this.selectionService.select(this.item);\n    }\n  }\n}\n","/**\n * Barrel to export /core\n */\nexport * from './core/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_throttle","gettext","i1","i1.PropertyValueTransformService","i1.OptionsService","i2.CachedLocaleDictionaryService","i3.PluginsResolveService","TranslateService","i1.PluginsResolveService","i2.OptionsService","i2","i3.OptionsService","i1.RealtimeSubjectService","i2.AppStateService","i3.RealtimeSubjectService","i1.AssetTypesRealtimeService","isNaN","NgxTranslateService","startWith","filter","tap","i5","i1.AppStateService","NgDatePipe","i3.DateFormatService","OwnEntryPointGettext","map","i1.FilesService","i1.GroupService","_memoize","i1.Permissions","memoize","i1.MoNameCacheService","NgDecimalPipe","_isDate","i1.DatePipe","first","i3.AlertService","NgCommonModule","DOCUMENT","i3.CookieBannerService","i4.UserPreferencesService","i1.GainsightService","Document","i1.UserPreferencesService","i2.GainsightService","i4.UserEngagementsService","i1.AppSwitcherService","i2.PluginsResolveService","i1.ActionBarService","RouterModule","i1.ActionService","i1.AlertService","i2.HumanizeAppNamePipe","i3.DrawerService","i4.ServiceRegistry","i1.StepperService","i2.Permissions","i4.AppStateService","i5.PluginsResolveService","i4.PluginsResolveService","i3","i1.HeaderService","sortBy","i1.DrawerService","i2.ActionService","i3.BreadcrumbService","i4.SearchService","i5.AppStateService","i6.UserMenuService","i7.DocsService","i8","i9","i2.HeaderService","i3.TabsService","i4","i1.C8yStepper","i3.GainsightService","i2.StepperService","i3.AppStateService","i4.AlertService","i5.Permissions","i6.SetupService","FormsModule","i1.CookieBannerService","i2.CookieBannerService","i1.TabsService","i3.NavigatorService","i4.ActionBarService","i5.HeaderService","i6.OptionsService","i7.SetupService","i8.SimplifiedAuthService","i1.BreadcrumbService","i2.BreadcrumbService","i2.NavigatorService","isEmpty","BsModalModule","i1.NavigatorService","i1.SearchService","distinctUntilChanged","takeUntil","i1.SelectKeyboardService","catchError","i3.InventorySearchService","NgFormsModule","i1.TranslateService","i3.UserPreferencesService","i4.ModalService","i6.ThemeSwitcherService","i7","i1.UserMenuService","i2.AlertService","i2.ModalService","i4.SimplifiedAuthService","i1.PasswordStrengthService","i2.PasswordService","i2.PasswordValidationService","i2.TranslateService","i6","i5.UserPreferencesService","i6.ModalService","i7.GainsightService","i8.CookieBannerService","i9.PasswordService","i10.UserEngagementsService","i3.SimplifiedAuthService","i4.UserMenuService","i1.PasswordService","i1.VersionService","saveAs","i3.ClipboardService","i5.PlatformDetailsService","i6.HeaderService","i2.PluginsService","i3.SetupComponent","assign","i1.BottomDrawerRef","CommonModule","i2.ThemeSwitcherService","i1.NavigatorBottomService","i3.BytesPipe","i4.IconDirective","i5.C8yTranslateDirective","i7.LoadingComponent","i8.C8yTranslatePipe","C8yFormsModule","C8yCommonModule","withLatestFrom","mergeMap","every","merge","i1.RouterTabsResolver","i2.TabsService","i2.ScopedContextRouteService","i3.ContextRouteService","rxjsMap","_filter","i2.ContextRouteService","i4.OptionsService","NgRouterModule","i1.RouterService","i1.DocsService","i2.C8yTranslateDirective","i3.HeaderService","i3.ModalService","i6.AlertService","i7.HeaderService","i1.DateFormatService","TimePicker","get","C8YCommonModule","set","i2.DynamicResolverService","i1.DynamicComponentService","i1.DynamicResolverService","i4.MOChunkLoaderService","i1.DynamicManagedObjectResolver","i2.DatapointSyncService","i1.DashboardComponent","i2.WidgetTimeContextHelperService","i1.WidgetsDashboardEventService","i2.DashboardChildComponent","i4.WidgetTimeContextQueryService","i5.WidgetTimeContextHelperService","i7.ActionBarService","i8.AggregationService","i10","i5.WidgetGlobalAutoRefreshService","i2.HelpService","i1.WidgetTimeContextMediatorService","i1.FilteringFormRendererContext","i2.C8yJSONSchema","shareReplay","i1.AssetPropertyService","i2.BottomDrawerService","i3.FilterMapperFactory","i1.FilterMapperService","findIndex","i1.DataGridService","i5.ActionControlsExtensionService","i2.WizardService","i1.WizardService","i1.WizardComponent","i2.PreviewService","i3.Permissions","switchMap","i1.PreviewService","i3.C8yTranslateDirective","i4.C8yTranslatePipe","i1.IconDirective","c8yFormsModule","c8yStepperModule","ɵdefineHiddenProp","i5.ProviderDefinitionsService","i6.ProviderConfigurationService","i7.C8yJSONSchema","i2.DataGridService","i2.LegacyGridConfigMapperService","i1.SplitViewSelectionService","skip","debounceTime"],"mappings":"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"}