{"version":3,"file":"c8y-ngx-components.mjs","sources":["../../core/common/icon.directive.ts","../../core/common/ApplicationOptions.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/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/languages.ts","../../core/i18n/locale.path.ts","../../core/i18n/patterns-message.hook.ts","../../core/i18n/pattern-messages.service.ts","../../core/i18n/missing-translation-custom.handler.ts","../../core/i18n/gettext.ts","../../core/i18n/pattern-messages.data.ts","../../core/i18n/datahub.pattern-messages.data.ts","../../core/i18n/translation-utils.ts","../../core/i18n/translate.parser.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/i18n.module.ts","../../core/i18n/load-locale.ts","../../core/i18n/translate.service.ts","../../core/common/component-outlet.directive.ts","../../core/common/date.pipe.ts","../../core/common/dropdown-direction.directive.ts","../../core/common/empty-state/empty-state-context.directive.ts","../../core/i18n/cached-locale-dictionary.service.ts","../../core/plugins/plugins.model.ts","../../core/plugins/plugins-resolve.service.ts","../../core/plugins/plugins.service.ts","../../core/plugins/plugins.module.ts","../../core/plugins/plugin-loaded.pipe.ts","../../core/i18n/translation-loader.service.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/common/user-preferences/user-preferences.service.ts","../../core/common/common.module.ts","../../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/zip.service.ts","../../core/alert/alert.service.ts","../../core/common/inter-app.service.ts","../../core/common/interval-based-reload.abstract.ts","../../core/application/app-switcher.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/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/product-experience/user-engagements.service.ts","../../core/product-experience/product-experience.module.ts","../../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/modal/modal-confirm.component.ts","../../core/modal/modal-confirm.component.html","../../core/modal/modal.service.ts","../../core/login/login.service.ts","../../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/search/search-outlet.component.ts","../../core/search/search-outlet.component.html","../../core/breadcrumb/breadcrumb-outlet.component.ts","../../core/breadcrumb/breadcrumb-outlet.component.html","../../core/drawer/drawer-outlet/drawer-outlet.component.ts","../../core/drawer/drawer-outlet/drawer-outlet.component.html","../../core/header/title/title-outlet.component.ts","../../core/header/title/title-outlet.component.html","../../core/header/header-bar/header-bar.component.ts","../../core/header/header-bar/header-bar.component.html","../../core/login/login.model.ts","../../core/login/credentials-from-query-params.service.ts","../../core/forms/message.directive.ts","../../core/forms/validation-pattern.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/required-input-placeholder.directive.ts","../../core/authentication/sms-challenge.component.ts","../../core/authentication/sms-challenge.component.html","../../core/forms/phone-validation.directive.ts","../../core/authentication/provide-phone-number.component.ts","../../core/authentication/provide-phone-number.component.html","../../core/login/recover-password.component.ts","../../core/login/recover-password.component.html","../../core/modal/modal.component.ts","../../core/modal/modal.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/password-check-list.component.ts","../../core/authentication/password-check-list.component.html","../../core/authentication/password-confirm.directive.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/authentication/password-strength-checker.service.ts","../../core/authentication/password-strength.component.ts","../../core/authentication/password-strength.component.html","../../core/forms/default-validation.directive.ts","../../core/authentication/password-input.component.ts","../../core/authentication/password-input.component.html","../../core/authentication/new-password.component.ts","../../core/authentication/new-password.component.html","../../core/modal/popover-confirm.component.ts","../../core/modal/popover-confirm.component.html","../../core/modal/modal.module.ts","../../core/forms/emails-validator.directive.ts","../../core/forms/filter-input.component.ts","../../core/forms/filter-input.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/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/authentication/authentication.module.ts","../../core/login/strength-validator-service.ts","../../core/login/password-strength-validator.directive.ts","../../core/login/change-password.component.ts","../../core/login/change-password.component.html","../../core/login/credentials.component.ts","../../core/login/credentials.component.html","../../core/login/totp-auth.component.ts","../../core/login/totp-auth.component.html","../../core/login/tenant-id-setup.component.ts","../../core/login/tenant-id-setup.component.html","../../core/login/login.component.ts","../../core/login/login.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.component.ts","../../core/setup/setup.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/bootstrap/message-banner/message-banner.service.ts","../../core/bootstrap/message-banner/message-banner.component.ts","../../core/bootstrap/message-banner/message-banner.component.html","../../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/navigator/navigator-node.component.ts","../../core/navigator/navigator-node.component.html","../../core/navigator/navigator-outlet.component.ts","../../core/navigator/navigator-outlet.component.html","../../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/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/select/select-keyboard.service.ts","../../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/typeahead.component.ts","../../core/select/typeahead.component.html","../../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/select/select-item.directive.ts","../../core/select/selected-items.directive.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/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/user/user-totp-setup.component.ts","../../core/user/user-totp-setup.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/login/login.module.ts","../../core/user/user-menu-outlet.component.ts","../../core/user/user-menu-outlet.component.html","../../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/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/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.component.ts","../../core/bottom-drawer/bottom-drawer.component.html","../../core/bottom-drawer/bottom-drawer-ref.ts","../../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/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/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/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/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/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/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/dynamic-forms/date-time/date-time.type.component.ts","../../core/dynamic-forms/date-time/date-time.type.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/typeahead/typeahead.type.component.ts","../../core/dynamic-forms/typeahead/typeahead.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/legend-wrapper/legend.wrapper.component.ts","../../core/dynamic-forms/legend-wrapper/legend.wrapper.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.model.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/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/aggregation/aggregation.model.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-child.component.ts","../../core/dashboard/dashboard-child.component.html","../../core/aggregation/aggregation.service.ts","../../core/dashboard/widgets-dashboard-event.service.ts","../../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/realtime-control/realtime-control.component.ts","../../core/dashboard/wiget-time-context/realtime-control/realtime-control.component.html","../../core/dashboard/wiget-time-context/widget-time-context-date-range.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/widget-time-context.component.ts","../../core/dashboard/wiget-time-context/widget-time-context.component.html","../../core/dashboard/dashboard.model.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/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/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/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/dashboard.module.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/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/grid-data-source.ts","../../core/data-grid/product-experience.constants.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/visible-controls.pipe.ts","../../core/data-grid/data-grid.component.ts","../../core/data-grid/data-grid.component.html","../../core/data-grid/abstract-configuration-strategy.ts","../../core/data-grid/filter-chip/filter-mapper-impl.service.ts","../../core/data-grid/legacy-grid-config-mapper.service.ts","../../core/data-grid/user-preferences-configuration-strategy.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/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/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/asset-types/asset-types.service.ts","../../core/color-input/color-validator.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  @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  name: string;\n  contextPath: string;\n  key: string;\n  version: string;\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  /** 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. */\n  faviconUrl?: string;\n  /** URL to *.css file which will replace default branding. */\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. */\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   * Example:\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. */\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. */\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  /** 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   * @example\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. Software AG 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\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","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  ExistingProvider,\n  InjectOptions,\n  InjectFlags,\n  InjectionToken,\n  Injector,\n  Provider,\n  StaticProvider,\n  Type,\n  ValueProvider\n} from '@angular/core';\nimport { ActivatedRoute, NavigationEnd, 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';\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): Observable<T[]> {\n  return merge(...castArray(refresh)).pipe(\n    startWith(1),\n    switchMap(() => fromFactories<T>(factories, router))\n  );\n}\n\nexport enum InjectionType {\n  COMPONENT,\n  ROUTE\n}\n\nexport class StandalonePluginInjector extends Injector {\n  /**\n   * @deprecated Use `constructor` instead.\n   */\n  static create(..._args: any[]): StandalonePluginInjector {\n    throw Error('Not implemented');\n  }\n\n  private injector: Injector;\n\n  constructor(\n    private options: {\n      providers: Array<Provider | StaticProvider>;\n      parent?: Injector;\n      name?: string;\n    }\n  ) {\n    super();\n    this.injector = Injector.create(options);\n  }\n\n  get name(): string | undefined {\n    return this.options.name;\n  }\n\n  get<T>(\n    token: Type<T> | InjectionToken<T>,\n    notFoundValue?: T,\n    options?: InjectOptions | InjectFlags\n  ): T {\n    return this.injector.get(token, notFoundValue, options);\n  }\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        if (injector instanceof StandalonePluginInjector) {\n          // No need to set injector for items retrieved from standalone plugins\n          return factories;\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              (factory as any)._injector = injector;\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, isDevMode } from '@angular/core';\nimport {\n  FetchClient,\n  IApplication,\n  TenantLoginOptionsService,\n  ApplicationService,\n  ICurrentTenant,\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 { 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';\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    app: {\n      name: this.options.name,\n      contextPath: this.getCurrentContextPath() || this.options.contextPath,\n      icon: this.options.icon\n    },\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 | 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  ) {\n    super();\n    // in case of noLogin being truthy `loadManifest` is never called.\n    if (this.options.noLogin) {\n      this.currentApplication.next(this.state.app);\n    }\n    this.apiService.isLoading$.subscribe(isLoading => {\n      this.state.isLoading = isLoading;\n    });\n\n    this.assignApplicationKeyToDefaultHeaders();\n    this.currentAppsOfUser = this.currentAppsOfUser$();\n  }\n\n  assignApplicationKeyToDefaultHeaders() {\n    if (!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   * Loads the app manifest. If no access -> throw an error to verify app access.\n   */\n  async loadManifest() {\n    try {\n      const normalizedContextPath = this.state.app.contextPath?.split('@')[0];\n      const { data: application } =\n        await this.applicationService.getManifestOfContextPath(normalizedContextPath);\n      this.state.app.manifest = application;\n      this.state.app.id = application.id;\n      const { data } = await this.applicationService.detail(application.id);\n      this.currentApplication.next(data);\n      await this.loadDefaultOptions();\n    } catch (ex) {\n      this.currentApplication.next(this.state.app);\n      throw ex;\n    }\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; 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  /**\n   * @returns The current contextPath.\n   */\n  getCurrentContextPath() {\n    const match = window.location.pathname.match(/\\/apps\\/(public\\/){0,1}(.+?)(\\/|\\?|#|$)/);\n    return match && match[2];\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  private async loadDefaultOptions() {\n    this.state.supportUrl = await this.options.getSupportUrl();\n    this.state.activateSupportUserAvailable = await this.options.getActivateSupportUser();\n    this.state.versions.backend = await this.options.getSystemOption('system', 'version');\n    this.emitNewState();\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 {string | number | IIdentified} 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 {string | number | IIdentified} 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 {string | number | IIdentified} 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 {string | number | IIdentified} 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: \"${channel}\" after reconnect.`, 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 { AssetType } from './asset-type.model';\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, AssetType>>;\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<AssetType> {\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<AssetType> {\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, AssetType>> {\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(assetType => assetType?.c8y_IsAssetType?.icon?.name || this.DEFAULT_ASSET_ICON)\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, AssetType>> {\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, AssetType>> {\n    const assetTypesCache = {};\n    const { data } = await this.inventory.list({\n      fragmentType: 'c8y_IsAssetType',\n      withChildren: false,\n      pageSize: 2000\n    });\n\n    data.forEach((assetType: AssetType) => {\n      assetTypesCache[assetType.name] = assetType;\n    });\n\n    return assetTypesCache;\n  }\n\n  private getAssetTypes$(): Observable<Record<string, AssetType>> {\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 contents of a managed object.\n   * It takes into account factors such as type, and specific fragments.\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\n    if (genericMoType === 'asset') {\n      return await this.getAssetCustomIcon(mo.type);\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 { Pipe, PipeTransform } from '@angular/core';\nimport { isNaN, isFinite } from 'lodash-es';\n\n/**\n * Converts the file size to a readable format.\n * Usage:\n *\n * ```html\n *  {{ myData | bytes }} <!-- e.g. 100.1 MB -->\n * ```\n *\n * Default precision is set to 1 decimal place.\n * To change the precision, pass an additional argument to pipe.\n\n * ```html\n * {{ myData | bytes: 5 }} <!-- e.g. 100.12345 MB -->\n * ```\n */\n@Pipe({ name: 'bytes', standalone: true })\nexport class BytesPipe implements PipeTransform {\n  static bytes(bytes: number, precision: number): string | number {\n    if (isNaN(bytes) || !isFinite(bytes)) {\n      return '-';\n    }\n    if (bytes === 0) {\n      return 0;\n    }\n    const units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'];\n    const num = Math.floor(Math.log(bytes) / Math.log(1024));\n    // eslint-disable-next-line no-mixed-operators\n    const result = (bytes / 1024 ** Math.floor(num)).toFixed(precision);\n\n    return `${result} ${units[num]}`;\n  }\n\n  transform(value: number, precision = 1): string | number {\n    return BytesPipe.bytes(value, precision);\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","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 { 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 { Injectable, Inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { mapValues, each } from 'lodash-es';\nimport { HOOK_PATTERN_MESSAGES } from './patterns-message.hook';\nimport { formatDate } from '@angular/common';\n\n/**\n * A service to translate messages by using regexp patterns.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class PatternMessagesService {\n  translateService: TranslateService;\n  patterns: any = {};\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(@Inject(HOOK_PATTERN_MESSAGES) patterns) {\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.translateService.store.translations[currentLang];\n    const defaultTranslations = this.translateService.store.translations[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      translations[key] = compiler.compile(value, currentLang);\n    }\n    return this.translateService.instant(key, interpolateParams);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { PatternMessagesService } from './pattern-messages.service';\nimport {\n  MissingTranslationHandler,\n  MissingTranslationHandlerParams,\n  TranslateParser,\n  TranslateService\n} from '@ngx-translate/core';\n\n@Injectable()\nexport class MissingTranslationCustomHandler implements MissingTranslationHandler {\n  translateService: TranslateService;\n  cache = new Map<string, Map<string, string>>();\n\n  constructor(\n    private parser: TranslateParser,\n    private patternMessagesService: PatternMessagesService\n  ) {}\n\n  handle(params: MissingTranslationHandlerParams) {\n    const { key: messageKey, interpolateParams, translateService } = params;\n    this.translateService = translateService;\n\n    let translation = this.getFromCache(messageKey, interpolateParams);\n\n    if (!translation) {\n      const patternMessageTranslation = this.getPatternMessageTranslation(\n        messageKey,\n        interpolateParams\n      );\n      if (patternMessageTranslation) {\n        translation = patternMessageTranslation;\n      } else {\n        translation = this.parser.interpolate(messageKey, interpolateParams);\n      }\n\n      translation = this.removeContextIndicators(translation);\n\n      this.addToCache(messageKey, interpolateParams, translation);\n    }\n\n    return translation;\n  }\n\n  private getFromCache(messageKey: string, interpolateParams: object): string {\n    const { currentLang } = this.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(messageKey: string, interpolateParams: object, translation: string) {\n    const { currentLang } = this.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(messageKey: string, interpolateParams: object): string {\n    const shouldTryPatternMessages =\n      !interpolateParams || !(interpolateParams as any).noPatternMessages;\n\n    if (shouldTryPatternMessages) {\n      if (!this.patternMessagesService.translateService) {\n        this.patternMessagesService.translateService = this.translateService;\n      }\n      return this.patternMessagesService.translate(messageKey);\n    }\n\n    return undefined;\n  }\n\n  private removeContextIndicators(translation: string): string {\n    return translation.replace(/`[^`]*`/g, '');\n  }\n}\n","// kept here for backwards compatibility\n// gettext was moved into separate entry point\nexport * from '@c8y/ngx-components/gettext';\n","/* tslint:disable:max-line-length */\nimport { gettext } from './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 MESSAGES_CORE_I18N = {\n  '^Access is denied$': {\n    gettext: gettext('Access denied.')\n  },\n  '^Alarm created$': {\n    gettext: gettext('Alarm created')\n  },\n  '^Alarm updated$': {\n    gettext: gettext('Alarm updated')\n  },\n  '^API is not available with the new domain$': {\n    gettext: gettext('Could not activate custom domain. DNS setup is incorrect.')\n  },\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  '^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  '^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  '^(.+)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  '^Authentication failed! : User account is locked$': {\n    gettext: gettext('Authentication failed due to: user account is locked.')\n  },\n  '^Availability monitoring record$': {\n    gettext: gettext('Availability monitoring record')\n  },\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 change password. : Provided token does not exist.$': {\n    gettext: gettext('Cannot change password: provided token is invalid.')\n  },\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  \"^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 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  '^Cannot reschedule bulk operation. All its operations are successful$': {\n    gettext: gettext('Cannot reschedule bulk operation. All its operations are already successful.')\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  '^Cannot update/delete application binary via this endpoint$': {\n    gettext: gettext('Cannot update/delete application binary via this endpoint')\n  },\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  '^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  '^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  '^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 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 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  '^Could not update user. : Error persisting user (.+?)!$': {\n    gettext: gettext('Could not update user \"{{username}}\".'),\n    placeholders: {\n      username: '$1'\n    }\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  '^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  '^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  '^Creating device on LoRa platform failed$': {\n    gettext: gettext('Could not create the device in the LoRa platform.')\n  },\n  '^CSV file contained empty dataset$': {\n    gettext: gettext('No entries found in uploaded CSV file.')\n  },\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  '^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  \"^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 name: '(.+?)', alarm text: '(.+?)'$\": {\n    gettext: gettext('Device name: \"{{deviceName}}\", alarm text: \"{{alarmText | translate}}\"'),\n    placeholders: {\n      deviceName: '$1',\n      alarmText: '$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  '^Display name$': {\n    gettext: gettext('Login alias')\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  '^Domain name is already in use by another tenant!$': {\n    gettext: gettext('Domain name is already used by another tenant.')\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  '^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  '^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  \"^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  '^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  '^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  '^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  '^Failed to delete application.  : Cannot remove application assigned to other tenants.$': {\n    gettext: gettext('Could not delete application assigned to other tenants.')\n  },\n  '^Failed to extract certificate from PKCS12$': {\n    gettext: gettext('Failed to extract certificate from PKCS12.')\n  },\n  '^Failed to update domain at the platform$': {\n    gettext: gettext('Failed to update domain at the platform.')\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  '^Following mandatory fields should be included: (.+?)$': {\n    gettext: gettext('Following mandatory fields should be included: {{fields}}'),\n    placeholders: {\n      fields: '$1'\n    }\n  },\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: {\n              list: '$1'\n            }\n          },\n          'applications \\\\[([^\\\\]]+?)\\\\] removed': {\n            gettext: gettext('applications {{list}} removed'),\n            placeholders: {\n              list: '$1'\n            }\n          },\n          'roles \\\\[([^\\\\]]+?)\\\\] added': {\n            gettext: gettext('roles {{list}} added'),\n            placeholders: {\n              list: '$1'\n            }\n          },\n          'roles \\\\[([^\\\\]]+?)\\\\] removed': {\n            gettext: gettext('roles {{list}} removed'),\n            placeholders: {\n              list: '$1'\n            }\n          }\n        }\n      }\n    }\n  },\n  '^Global Roles$': {\n    gettext: gettext('Global roles')\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  '^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  '^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  '^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  '^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  \"^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  \"^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  '^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  '^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  '^Not within any context!$': {\n    gettext: gettext('A problem occurred with microservice subscription.')\n  },\n  '^Maximum age cannot be bigger than 10 years.$': {\n    gettext: gettext('Maximum age cannot be bigger than 10 years.')\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  '^Microservice not available.*$': {\n    gettext: gettext('Microservice is not available.')\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  '^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  '^Owner field error. : Cannot introduce cyclic dependency.$': {\n    gettext: gettext('Could not introduce cyclic ownership dependency.')\n  },\n  '^Password change is temporary blocked.$': {\n    gettext: gettext('Password change is temporarily blocked.')\n  },\n  '^Password cipher does not match$': {\n    gettext: gettext('Password cipher does not match.')\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  '^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  '^Private key cipher does not match$': {\n    gettext: gettext('Private key cipher does not match')\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  '^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  '^pulling image \"(.+)\"$': {\n    gettext: gettext('Pulling image: \"{{imageName}}\".'),\n    placeholders: {\n      imageName: '$1'\n    }\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  '^RESTART (.+?)$': {\n    gettext: gettext('RESTART`verb, action` {{service}}'),\n    placeholders: {\n      service: '$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  '^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  '^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  '^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        }\n      }\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  '^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  '^START (.+?)$': {\n    gettext: gettext('START`verb, action` {{service}}'),\n    placeholders: {\n      service: '$1'\n    }\n  },\n  '^Started container$': {\n    gettext: gettext('Container started.')\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  '^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  '^Too Many Requests$': {\n    gettext: gettext('Too many requests. Try again later.')\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 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  '^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  '^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  '^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  '^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  '^(.+) succeeded for volume \"(.+)\"$': {\n    gettext: gettext('Operation \"{{operation}}\" succeeded for volume \"{{volume}}\".'),\n    placeholders: {\n      operation: '$1',\n      volume: '$2'\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  '^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  '^Error syncing pod$': {\n    gettext: gettext('Pod synchronization error.')\n  },\n  '^Failed create pod sandbox.$': {\n    gettext: gettext('Pod sandbox creation failed.')\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  \"^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  '^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  '^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  '^Send message \"(.+)\".$': {\n    gettext: gettext('Send message \"{{str}}\".'),\n    placeholders: {\n      str: '$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  '^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  '^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  '^Update configuration to (.+).$': {\n    gettext: gettext('Update configuration to: {{ name }}.'),\n    placeholders: {\n      name: '$1'\n    }\n  },\n  '^Apply device profile: (.+).?$': {\n    gettext: gettext('Apply device profile: {{ 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  '^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  // TODO: remove if we decide not to translate such messages:\n  // '^Killing container with id (.+):Need to kill Pod$': {\n  //   gettext: gettext('Killing container with ID \"{{containerId}}\". Need to kill Pod.'),\n  //   placeholders: {\n  //     containerId: '$1'\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  '^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  '^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  // Translations for audit logs\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  '^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  '^(.+?) 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  \"^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  '^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  '^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: basic.$': {\n    gettext: gettext('Configuration type: Basic Auth.')\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  '^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  '^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  '^Can read all data of the asset and manage all inventory data, but cannot perform operations. Can also acknowledge and clear alarms. Can create and updates dashboards.$':\n    {\n      gettext: gettext(\n        'Can read all data of the asset and manage all inventory data, but cannot perform operations. Can also acknowledge and clear alarms. Can create and updates dashboards.'\n      )\n    },\n\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  '^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  // Default global roles' names and descriptions:\n  // Description for 'admins' role\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\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  '^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  '^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  '^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 from all devices$': {\n    gettext: gettext('Can read all data from all devices.')\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  // '^readers$': {\n  //   gettext: gettext('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  '^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  '^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  // DataHub global roles' names and descriptions:\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\n  '^DATAHUB_MANAGER$': {\n    gettext: gettext('DataHub Manager')\n  },\n  '^Can manage offloading pipelines$': {\n    gettext: gettext('Can manage offloading pipelines.')\n  },\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  '^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\n  // LWM2M strings (move to submodule when it's migrated from ng1)\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  // LPWAN device registration and connectivity strings\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} as const;\n","import { gettext } from './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","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","import { Injectable } from '@angular/core';\nimport { TranslateDefaultParser } from '@ngx-translate/core';\nimport { get } from 'lodash-es';\nimport { trimTranslationKey } from './translation-utils';\n\n@Injectable()\nexport class TranslateParserCustom extends TranslateDefaultParser {\n  getValue(target: any, key: string): any {\n    const trimmedKey = trimTranslationKey(key);\n    let translated = get(target, [trimmedKey]);\n    if (!translated) {\n      const keys = key.split('.');\n      if (keys.length > 1) {\n        translated = get(target, key);\n      }\n    }\n    return translated;\n  }\n}\n","import { 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(translateService, element, _ref);\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  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.currentParams || {}\n    );\n  }\n\n  private updateHtmlContent(): void {\n    this._elementRef.nativeElement.innerHTML = this.lastTranslation;\n  }\n}\n","import { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ChangeDetectorRef, Pipe } from '@angular/core';\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  // Somehow required to fix translation issues after ng-cli/ng16 changes\n  constructor(translate: TranslateService, _ref: ChangeDetectorRef) {\n    super(translate, _ref);\n  }\n}\n","import { gettext } from './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 { TranslateModule } from '@ngx-translate/core';\nimport { 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 extends TranslateModule {}\n","import { LOCALE_ID, ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport {\n  MissingTranslationHandler,\n  TranslateService as NgxTranslateService,\n  TranslateCompiler,\n  TranslateFakeCompiler,\n  TranslateParser,\n  TranslateStore,\n  USE_DEFAULT_LANG,\n  USE_STORE,\n  USE_EXTEND,\n  DEFAULT_LANGUAGE,\n  TranslateLoader\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 { TranslateParserCustom } from './translate.parser';\nimport { C8yTranslateModule } from './c8y-translate.module';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { of } from 'rxjs';\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/**\n * The angular module definition for i18n (translation).\n * @exports I18nModule\n */\n@NgModule({\n  exports: [C8yTranslateModule],\n  imports: [BsDatepickerModule]\n})\nexport class I18nModule {\n  static providers(): 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\n      // Extracted from projects/ngx-translate/core/src/public_api.ts\n      {\n        provide: TranslateLoader,\n        // just a dummy TranslateLoader implementation. The actual translations are loaded by TranslationLoaderService.\n        useFactory: () => ({ getTranslation: () => of({}) }) as TranslateLoader\n      },\n      { provide: TranslateCompiler, useClass: TranslateFakeCompiler },\n      { provide: TranslateParser, useClass: TranslateParserCustom },\n      { provide: MissingTranslationHandler, useClass: MissingTranslationCustomHandler },\n      TranslateStore,\n      NgxTranslateService,\n      { provide: USE_STORE, useValue: undefined },\n      { provide: USE_DEFAULT_LANG, useValue: undefined },\n      { provide: USE_EXTEND, useValue: false },\n      { provide: DEFAULT_LANGUAGE, useValue: undefined }\n    ];\n  }\n  static forRoot(): ModuleWithProviders<I18nModule> {\n    return {\n      ngModule: I18nModule,\n      providers: I18nModule.providers()\n    };\n  }\n}\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}.mjs`);\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 { DOCUMENT, registerLocaleData } from '@angular/common';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { TranslateService as NgxTranslateService } from '@ngx-translate/core';\nimport { keys } from 'lodash-es';\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';\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: any = this.options.get('languages', {});\n  langs: any = 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    @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    try {\n      await this.loadLocales(ngxLocaleCode);\n    } catch (e) {\n      if (ngxLocaleCodeFallback !== ngxLocaleCode) {\n        await this.loadLocales(ngxLocaleCodeFallback);\n      } else {\n        throw e;\n      }\n    }\n\n    const { langCode: bsLocaleCode, langCountryCode: ngxTranslateLocaleCode } =\n      this.parseLocaleCode(localeCode);\n    this.setBsLocale(bsLocaleCode);\n    this.setLanguage(ngxTranslateLocaleCode);\n  }\n\n  async loadLocales(moduleLang) {\n    const module: any = await loadLocale(getAngularLocalesLanguageString(moduleLang));\n    registerLocaleData(module.default);\n  }\n\n  setLanguage(lang: string) {\n    this.ngxTranslate.setDefaultLang(this.options.get('defaultLanguage', 'en'));\n    this.ngxTranslate.use(lang).subscribe(() => {\n      this.ui.state$.next({ ...this.ui.state, lang });\n    });\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 = (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) {\n    if (!localeCode) {\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 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 window.localStorage.getItem(TranslateService.SAVE_LANGUAGE_KEY);\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    // TODO: replace this with URLSearchParams, ie 11 still doesn't support :()\n    const query = window.location.search.substring(1);\n    let result;\n    query.split('&').find(pair => {\n      const [key, value] = pair.split('=');\n      if (key === queryKey) {\n        result = value;\n      }\n      return result;\n    });\n    return result;\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  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  private _componentRef: ComponentRef<any> | undefined;\n\n  private environment = inject(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: [],\n          parent: this.c8yComponentOutletInjector || this.__viewContainerRef.injector,\n          name: 'c8yComponentOutletInjector'\n        });\n        this._componentRef = this.__viewContainerRef.createComponent(this.c8yComponentOutlet, {\n          injector: injector,\n          environmentInjector: this.c8yComponentOutletEnvironmentInjector || this.environment\n        });\n      }\n    }\n  }\n\n  ngOnDestroy() {\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    );\n  }\n}\n","import {\n  DatePipe as NgDatePipe,\n  DatePipeConfig,\n  DATE_PIPE_DEFAULT_OPTIONS,\n  DATE_PIPE_DEFAULT_TIMEZONE\n} from '@angular/common';\nimport { Inject, LOCALE_ID, Optional, Pipe } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '../i18n/gettext';\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]{@link 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 * ```\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    @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 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, locale);\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({ selector: '[dropdown][c8yBsDropdownDirection],[dropdown][c8yDropdownDirection]' })\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 { 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 { 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 Software AG 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}\n","import {\n  Injectable,\n  NgModuleRef,\n  EnvironmentInjector,\n  Type,\n  createNgModule,\n  Injector,\n  Provider\n} from '@angular/core';\nimport { ApplicationRemotePlugins } from '@c8y/client';\nimport { reduce, forEach, get, union, camelCase } from 'lodash-es';\nimport { BehaviorSubject, Observable, Subject } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\nimport { StandalonePluginInjector } from '../common';\nimport { cloneDeep } from 'lodash-es';\n\ntype Scope = unknown;\ntype Factory = () => any;\n\ndeclare const __webpack_init_sharing__: (shareScope: string) => Promise<void>;\ndeclare const __webpack_share_scopes__: { default: Scope };\ndeclare const __ORIGINAL_CONTEXT_PATH__: string;\n\ninterface Container {\n  init(shareScope: Scope): void;\n  get(module: string): Factory;\n}\n@Injectable({\n  providedIn: 'root'\n})\nexport class PluginsResolveService {\n  /**\n   * Takes a list of remotes and turns it into an object containing union of corresponding remotes.\n   * @param remotes List of the remotes.\n   * @returns Returns object with merged remotes.\n   *\n   * **Example**\n   * ```typescript\n   * const remotesA:ApplicationRemotePlugins = { contextPathA: ['moduleA', 'moduleB'] };\n   * const remotesB:ApplicationRemotePlugins = { contextPathA: ['moduleA'], contextPathB: ['moduleZ'] };\n   * const mergedRemotes:ApplicationRemotePlugins = mergeRemotes([remotesA, remotesB]);\n   * // Result\n   * {\n   *  contextPathA: ['moduleA', 'moduleB'],\n   *  contextPathB: ['moduleZ']\n   * }\n   *\n   * ```\n   */\n  static mergeRemotes(remotes: ApplicationRemotePlugins[]): ApplicationRemotePlugins {\n    return reduce(\n      remotes,\n      (allRemotes: ApplicationRemotePlugins, mfRemote: ApplicationRemotePlugins) => {\n        forEach(mfRemote, (remoteModules: string[], remoteContextPath: string) => {\n          const currentRemotes = get(allRemotes, remoteContextPath, []);\n          allRemotes[remoteContextPath] = union(currentRemotes, remoteModules);\n        });\n\n        return allRemotes;\n      },\n      {}\n    );\n  }\n\n  static removeRemotes(\n    remotesToRemoveFrom: ApplicationRemotePlugins,\n    remotesToRemove?: ApplicationRemotePlugins\n  ): ApplicationRemotePlugins {\n    const keysToRemove = Object.keys(remotesToRemove || {});\n    if (!keysToRemove.length) {\n      return remotesToRemoveFrom;\n    }\n    const currentKeys = Object.keys(remotesToRemoveFrom);\n    const keysPresentInBoth = currentKeys.filter(key => keysToRemove.includes(key));\n    if (!keysPresentInBoth.length) {\n      return remotesToRemoveFrom;\n    }\n    remotesToRemoveFrom = cloneDeep(remotesToRemoveFrom);\n    for (const remoteContextPath of keysPresentInBoth) {\n      const remoteModulesToBeRemoved = remotesToRemove[remoteContextPath];\n      if (!Array.isArray(remoteModulesToBeRemoved) || !remoteModulesToBeRemoved?.length) {\n        continue;\n      }\n\n      let currentModules = remotesToRemoveFrom[remoteContextPath];\n      if (!Array.isArray(currentModules) || !currentModules?.length) {\n        delete remotesToRemoveFrom[remoteContextPath];\n        continue;\n      }\n\n      currentModules = currentModules.filter(module => !remoteModulesToBeRemoved.includes(module));\n      if (currentModules.length) {\n        remotesToRemoveFrom[remoteContextPath] = currentModules;\n      } else {\n        delete remotesToRemoveFrom[remoteContextPath];\n      }\n    }\n\n    return remotesToRemoveFrom;\n  }\n\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 urlRemotesCache: ApplicationRemotePlugins = null;\n  private remoteScriptSet = new Set<string>();\n  private _injectors$ = new Subject<EnvironmentInjector | Injector>();\n  private _refresh$ = new Subject<void>();\n  private _pluginDetails$ = new Subject<{\n    remoteNgModule: NgModuleRef<unknown> | Type<unknown>;\n    moduleRef: NgModuleRef<unknown>;\n  }>();\n  private _allPluginsLoaded$ = new BehaviorSubject<boolean>(false);\n  private _contextPathsFromWhereRemotesHaveBeenLoaded$ = new BehaviorSubject<string[]>([]);\n  private _loadedPluginNames$ = new BehaviorSubject<string[]>([]);\n\n  constructor(private injector: EnvironmentInjector) {\n    this.injectors$ = this._injectors$.asObservable().pipe(\n      // not specifying the bufferSize of shareReplay so all injectors are received on subscription\n      shareReplay()\n    );\n    this.refresh$ = this._refresh$.asObservable().pipe(shareReplay(1));\n    this.pluginDetails$ = this._pluginDetails$.asObservable().pipe(\n      // not specifying the bufferSize of shareReplay so all details are received on subscription\n      shareReplay()\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   * Loads plugins by resolving the remote NgModules and injecting it. Also attaching\n   * the hooks onto the root injector.\n   * @param remoteModules The remote plugins to load as factory name mapping array.\n   */\n  resolveRemotePlugins(remoteModules: Array<{ factory; name: string }>) {\n    this.loadModulesDynamically(remoteModules);\n    this.refreshHooks();\n    this.markPluginsAsLoaded();\n  }\n\n  /**\n   * Loads modules and handles hooking correctly.\n   * @param remoteNgModules The modules to load.\n   */\n  loadModulesDynamically(remoteModules: Array<{ factory; name: string }>) {\n    for (const { factory, name } of remoteModules) {\n      try {\n        const moduleOrProviders = factory[name];\n        if (Array.isArray(moduleOrProviders)) {\n          this.loadProviders(moduleOrProviders, name);\n          continue;\n        } else {\n          this.loadModule(moduleOrProviders);\n        }\n        const newLoadedPluginNames = [...this._loadedPluginNames$.value, name];\n        this._loadedPluginNames$.next(newLoadedPluginNames);\n      } catch (ex) {\n        console.error(`Failed to load ${name}`, ex);\n      }\n    }\n  }\n\n  loadProviders(providers: Provider[], name: string) {\n    const injector = new StandalonePluginInjector({\n      providers: providers,\n      name: `pluginsInjector-${name}`,\n      parent: this.injector\n    });\n    this._injectors$.next(injector);\n  }\n\n  loadModule<T = unknown>(remoteNgModule: NgModuleRef<T> | Type<T>) {\n    let moduleRef: NgModuleRef<T>;\n    if (remoteNgModule instanceof NgModuleRef) {\n      // AOT\n      moduleRef = remoteNgModule;\n    } else {\n      // JIT\n      moduleRef = createNgModule(remoteNgModule, this.injector);\n    }\n    this._injectors$.next(moduleRef.injector);\n    this._pluginDetails$.next({ moduleRef, remoteNgModule });\n    return moduleRef;\n  }\n\n  /**\n   * Will refresh all current registered hooks.\n   */\n  refreshHooks() {\n    this._refresh$.next();\n  }\n\n  markPluginsAsLoaded() {\n    this._allPluginsLoaded$.next(true);\n  }\n\n  /**\n   * Loads a list of remotes so that a particular application can use them.\n   * The request is made to the following address: /apps/<contextPath>/remoteEntry.js\n   * @param remotes List of remotes to be loaded.\n   * @returns Returns the list of loaded modules from remotes.\n   */\n  async loadRemotes(remotes: ApplicationRemotePlugins) {\n    if (!remotes) {\n      return [];\n    }\n    const date = new Date();\n    const remoteModules = [];\n    for (const pluginId in remotes) {\n      if (remotes.hasOwnProperty(pluginId)) {\n        const moduleNames = remotes[pluginId];\n        const url = `/apps/${pluginId}/remoteEntry.js?nocache=${date.getTime()}`;\n        let atLeastOneModuleLoadedSuccessfully = false;\n        for (const moduleName of moduleNames) {\n          try {\n            remoteModules.push(await this.loadRemoteModule(url, pluginId, moduleName));\n            atLeastOneModuleLoadedSuccessfully = true;\n          } catch (ex) {\n            console.warn(`Could not load remote module '%s' from url:`, moduleName, url);\n          }\n        }\n\n        // Only add successfully loaded remotes to the list\n        if (atLeastOneModuleLoadedSuccessfully) {\n          this._contextPathsFromWhereRemotesHaveBeenLoaded$.next(\n            this._contextPathsFromWhereRemotesHaveBeenLoaded$.value.concat(pluginId)\n          );\n        }\n      }\n    }\n    return remoteModules;\n  }\n\n  /**\n   * Takes a list of remotes and turns it into an object containing union of corresponding remotes.\n   * @param mfRemotes List of the remotes.\n   * @returns Returns object with merged remotes.\n   * @deprecated Use the static function mergeRemotes as this is a pure function.\n   *\n   * **Example**\n   * ```typescript\n   * const remotesA:ApplicationRemotePlugins = { contextPathA: ['moduleA', 'moduleB'] };\n   * const remotesB:ApplicationRemotePlugins = { contextPathA: ['moduleA'], contextPathB: ['moduleZ'] };\n   * const mergedRemotes:ApplicationRemotePlugins = mergeMFRemotes([remotesA, remotesB]);\n   * // Result\n   * {\n   *  contextPathA: ['moduleA', 'moduleB'],\n   *  contextPathB: ['moduleZ']\n   * }\n   *\n   * ```\n   */\n  mergeMFRemotes(mfRemotes: ApplicationRemotePlugins[]): ApplicationRemotePlugins {\n    return PluginsResolveService.mergeRemotes(mfRemotes);\n  }\n\n  /**\n   * Clears URL remotes cache.\n   */\n  clearURLRemotesCache() {\n    this.urlRemotesCache = null;\n  }\n\n  /**\n   * Retrieves the remotes list from the URL.\n   * @returns Returns the list of remotes.\n   */\n  loadUrlRemotes() {\n    if (!this.urlRemotesCache) {\n      const params = new URLSearchParams(window.location.search);\n      const remotes = params.get('remotes');\n      if (remotes) {\n        try {\n          this.urlRemotesCache = JSON.parse(decodeURIComponent(remotes));\n        } catch (error) {\n          console.warn(`Failed to parse remotes: ${error}`);\n        }\n      }\n    }\n    return this.urlRemotesCache;\n  }\n\n  private async loadRemoteModule(\n    remoteEntryUrl: string,\n    remoteContextPath: string,\n    exposedModule: string\n  ): Promise<{ name: string; factory: Factory }> {\n    if (!this.remoteScriptSet.has(remoteEntryUrl)) {\n      this.remoteScriptSet.add(remoteEntryUrl);\n      await this.loadRemoteEntry(remoteEntryUrl);\n    }\n    let contextPath: string = remoteContextPath;\n    if (contextPath.includes('@')) {\n      contextPath = remoteContextPath.split('@')[0];\n    }\n    return await this.lookupExposedModule(camelCase(contextPath), exposedModule);\n  }\n\n  private loadRemoteEntry(remoteEntryUrl: string): Promise<void> {\n    return new Promise<void>((resolve, reject) => {\n      const script = document.createElement('script');\n      script.src = remoteEntryUrl;\n\n      script.onerror = reject;\n\n      script.onload = () => {\n        resolve(); // window is the global namespace\n      };\n\n      document.body.append(script);\n    });\n  }\n\n  private async lookupExposedModule(\n    remoteName: string,\n    exposedModule: string\n  ): Promise<{ name: string; factory: Factory }> {\n    // Initializes the share scope. This fills it with known provided modules from this build and all remotes\n    try {\n      await __webpack_init_sharing__('default');\n    } catch (ex) {\n      console.error(\n        `Module %s could not be loaded. Module Federation is not enabled in this application.`,\n        exposedModule,\n        ex\n      );\n    }\n    let container: Container = window[remoteName];\n\n    /**\n     * MTM-60850: In case of e.g. the cockpit app being cloned to a different context path\n     * the self scoped plugins of cockpit will be loaded from the new context path.\n     * But the remoteEntry.js will still register the remotes with the original context path,\n     * as this is hardcoded during compile time.\n     *\n     * We therefore add a fallback to the original context path in case there is no container for the remoteName\n     */\n    if (!container) {\n      const fallbackRemoteName: string = camelCase(__ORIGINAL_CONTEXT_PATH__);\n      console.warn(\n        `Attribute \"%s\" not defined on window object while trying to load \"%s\". Using \"%s\" as fallback.`,\n        remoteName,\n        exposedModule,\n        fallbackRemoteName\n      );\n      container = window[fallbackRemoteName];\n    }\n\n    // Initialize the container, it may provide shared modules\n    let factory: Factory;\n    try {\n      await container.init(__webpack_share_scopes__.default);\n      factory = (await container.get(exposedModule))();\n    } catch (ex) {\n      console.error(`Module %s could not be loaded.`, exposedModule, ex);\n    }\n    return { name: exposedModule, factory };\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  ApplicationAvailability,\n  ApplicationRemotePlugins,\n  IApplication,\n  IApplicationVersion,\n  IManifest\n} from '@c8y/client';\nimport { ApplicationService } from '@c8y/client';\nimport { cloneDeep, get, uniqBy } from 'lodash-es';\nimport { coerce, compare } from 'semver';\nimport { AppStateService } from '../common/ui-state.service';\nimport { groupBy } from 'lodash-es';\nimport { ApplicationPlugin, PackageType, PluginsConfig } from './plugins.model';\nimport { PluginsExportScopes } from '../common/ApplicationOptions';\nimport { PluginsResolveService } from './plugins-resolve.service';\n\n@Injectable()\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  ) {}\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 = PluginsResolveService.mergeRemotes([\n        { [application.contextPath]: selfRemotes },\n        remotes\n      ]);\n    }\n\n    remotes = PluginsResolveService.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  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 { contextPath, moduleName } = this.parsePluginId(plugin.id);\n      if (!contextPath || !moduleName || !remotesCopy[contextPath]) {\n        return;\n      }\n      remotesCopy[contextPath] = remotesCopy[contextPath].filter(p => p !== moduleName);\n      remotesCopy[contextPath] = [...new Set(remotesCopy[contextPath])];\n      if (remotesCopy[contextPath].length === 0) {\n        delete remotesCopy[contextPath];\n      }\n    });\n    return remotesCopy;\n  }\n\n  private parsePluginId(id: string): { contextPath: string; moduleName: string } {\n    const [contextPath, moduleName] = id.split('/');\n    return { contextPath, moduleName };\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { PluginsService } from './plugins.service';\n\n@NgModule({\n  providers: [PluginsService]\n})\nexport class PluginsModule {}\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 { Inject, Injectable } from '@angular/core';\nimport { OptionsService } from '../common';\nimport { CachedLocaleDictionaryService } from './cached-locale-dictionary.service';\nimport { PluginsResolveService } from '../plugins';\nimport { LOCALE_PATH } from './locale.path';\nimport { LANGUAGES } from './languages';\nimport { BehaviorSubject, combineLatest, defer, Observable, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { TranslateService } from '@ngx-translate/core';\nimport { getDictionaryWithTrimmedKeys } from './translation-utils';\n\n/**\n * A service to load translations from different sources.\n * It combines translations from the app, user-defined translations, and plugins.\n * It also caches translations to avoid unnecessary requests.\n *\n * Is used instead of the default TranslateLoader functionality that ngx-translate provides as otherwise only the first translations from TranslateLoader observable would have been picked up.\n * This would have been problematic, as we can only load the plugin translations after the login and we need to have at least the basic translations already on the login screen.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class TranslationLoaderService {\n  private cache = new Map<string, Observable<{ [key: string]: string }>>();\n  private reloadTrigger$ = new BehaviorSubject<void>(null);\n\n  constructor(\n    private optionsService: OptionsService,\n    private cachedLocaleDictionaryService: CachedLocaleDictionaryService,\n    private pluginResolverService: PluginsResolveService,\n    private translateService: TranslateService,\n    @Inject(LOCALE_PATH) private path: string = null,\n    @Inject(LANGUAGES) private languages: { [key: string]: { url?: string } } | null = null\n  ) {\n    this.translateService.onLangChange\n      .pipe(\n        map(event => event.lang),\n        distinctUntilChanged(),\n        switchMap(lang =>\n          this.getTranslation(lang).pipe(map(translations => ({ lang, translations })))\n        )\n      )\n      .subscribe(({ lang, translations }) => {\n        this.translateService.setTranslation(lang, translations, true);\n      });\n  }\n\n  getTranslation(lang: string): Observable<{ [key: string]: string }> {\n    const translations$ = combineLatest([\n      defer(() => this.getTranslationsFromApp(lang)),\n      defer(() => this.getUserDefinedTranslations(lang)),\n      defer(() => this.optionsService.get$('langsDetails', {})),\n      defer(() => this.getTranslationsForPugins(lang))\n    ]).pipe(\n      map(([appTranslations, userDefinedTranslations, langsDetails, pluginTranslations]) => {\n        const translationsFromBranding = (langsDetails && langsDetails[lang]) || {};\n        return {\n          ...appTranslations,\n          ...pluginTranslations,\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 this.reloadTrigger$.pipe(switchMap(() => translations$));\n  }\n\n  triggerReload() {\n    this.clearCache();\n    this.reloadTrigger$.next();\n  }\n\n  clearCache() {\n    this.cache.clear();\n  }\n\n  protected getTranslationsForPugins(lang: string) {\n    return this.pluginResolverService.contextPathsFromWhereRemotesHaveBeenLoaded$.pipe(\n      switchMap(plugins => {\n        // no need to load translations for self scoped plugins\n        plugins = 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, pluginId: string) {\n    const url = `/apps/${pluginId}/${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","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';\n\n@Component({\n  selector: 'c8y-load-more',\n  templateUrl: './load-more.component.html'\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})\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 { Component, Input, TemplateRef } from '@angular/core';\nimport { Observable, of, pipe } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\n\n@Component({\n  selector: 'c8y-virtual-scroller-wrapper',\n  templateUrl: './virtual-scroller-wrapper.component.html'\n})\nexport class VirtualScrollerWrapperComponent {\n  @Input() items;\n  @Input() itemHeight;\n  @Input() containerHeight;\n  @Input() template: TemplateRef<any>;\n\n  items$: Observable<unknown>;\n\n  @Input() filterPipe = pipe(tap());\n\n  @Input()\n  strategy: 'fixed' | 'window';\n\n  @Input() trackByFn = (i, item) => {\n    return item.id;\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 *ngIf=\"items$ |async as items\" [ngSwitch]=\"strategy\">\n    <ng-container *ngSwitchCase=\"'window'\">\n      <cdk-virtual-scroll-viewport windowVirtualScrollStrategy [itemSizePx]=\"itemHeight\" class=\"inner-scroll\">\n        <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\">\n          <ng-container *ngTemplateOutlet=\"template; context: {$implicit: item, index: i}\"></ng-container>\n        </div>\n      </cdk-virtual-scroll-viewport>\n    </ng-container>\n\n    <ng-container *ngSwitchCase=\"'fixed'\">\n      <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.height]=\"containerHeight + 'px'\" class=\"inner-scroll\">\n        <div *cdkVirtualFor=\"let item of items; index as i; trackBy: trackByFn\" >\n          <ng-container *ngTemplateOutlet=\"template; context: {$implicit: item, index: i}\"></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})\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]) => item)\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        window.scrollTo({ top: 0 });\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}\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  } 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({ name: 'fileIcon' })\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 } from '@c8y/client';\nimport { GroupService } from './group.service';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n@Pipe({\n  name: 'getGroupIcon'\n})\nexport class GetGroupIconPipe implements PipeTransform {\n  constructor(private groupService: GroupService) {}\n\n  async transform(\n    mo: IManagedObject,\n    open = false,\n    defaultIcon?: SupportedIconsSuggestions\n  ): Promise<string> {\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} 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 * Usage:\n *   appNameOrApp | humanizeAppName | async\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 * Humanize any string\n * Usage:\n *   'something' | humanize\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 { 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_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    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})\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@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 { hostname, protocol } = window.location;\n              const localLink = href.startsWith(`${protocol}//${hostname}`);\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: If template is instance of HTMLElement (for example, node compiled by angularJS) then there can be\n * only single instance rendered, as only one instance of HTMLElement can exist in DOM.\n * If there is need for displaying same element multiple times, please make sure to inject into\n * this element createCopy function, which should return another instance of given element.\n *\n */\n@Directive({\n  selector: '[c8yOutlet]'\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 '../i18n/gettext';\n\n/**\n * @deprecated Use `c8y-loading` instead.\n */\n@Component({\n  selector: 'c8y-progress-bar',\n  templateUrl: './progress-bar.component.html'\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})\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({ name: 'showIfFilter' })\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})\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({ name: 'stringifyObject' })\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})\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})\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@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","import { of } from 'rxjs';\n\nexport 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  get(key) {\n    return of(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 { Injectable } from '@angular/core';\nimport { InventoryService, IUser, UserService } from '@c8y/client';\nimport { concat, 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';\n\n@Injectable({ providedIn: 'root' })\nexport class UserPreferencesService {\n  currentUser: Observable<IUser>;\n  preferenceChanges$: Subject<UserPreference> = new Subject();\n  private storage: {\n    local: UserPreferencesStorageLocal;\n    inventory: UserPreferencesStorageInventory;\n  };\n\n  constructor(\n    private user: UserService,\n    private inventory: InventoryService,\n    private appState: AppStateService\n  ) {\n    this.storage = {\n      local: new UserPreferencesStorageLocal(),\n      inventory: new UserPreferencesStorageInventory(this.inventory)\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.getForUser(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    return new Promise((resolve, reject) => {\n      this.currentUser.pipe(first()).subscribe(user => {\n        this.preferenceChanges$.next({ key, value });\n        resolve(this.setForUser(key, value, user));\n      }, reject);\n    });\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  getForUser(key: string, user: IUser): Observable<any> {\n    const rawKey = this.getRawKey(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  setForUser(key: string, value: any, user: IUser): Promise<any> {\n    const rawKey = this.getRawKey(key, user);\n    const storage = this.getStorage(user);\n    return Promise.resolve(storage.set(rawKey, value));\n  }\n\n  /**\n   * Get a string of key concatenated with username.\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): string {\n    const username = user.userName.replace(/\\./g, '__');\n    return `${key}${username}`;\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(user: IUser): 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","import { ScrollingModule } from '@angular/cdk/scrolling';\nimport { CommonModule as NgCommonModule } from '@angular/common';\nimport { APP_INITIALIZER, ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { DataModule } from '@c8y/ngx-components/api';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { setTheme } from 'ngx-bootstrap/utils';\nimport { distinctUntilChanged, filter, map, startWith, switchMap } from 'rxjs/operators';\nimport { I18nModule } 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 { hookOptions } from './options.service';\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';\n\nexport function initializeServices(\n  translateService: TranslateService,\n  state: AppStateService,\n  userPreferences: UserPreferencesService\n) {\n  const initialize = () => {\n    const queryStringLanguage = translateService.queryStringLang();\n    const firstLanguage = translateService.firstSupportedLanguage();\n\n    /*\n      The ?lang parameter will prevent the user preference language from being activated\n    */\n    if (queryStringLanguage && translateService.getSupported(queryStringLanguage)) {\n      translateService.switchToLanguage(queryStringLanguage);\n    } else {\n      state.currentUser\n        .pipe(\n          map(user => user && user.userName),\n          filter(u => !!u),\n          distinctUntilChanged(),\n          switchMap(() => userPreferences.get('language')),\n          startWith(firstLanguage),\n          filter(lang => !!lang),\n          distinctUntilChanged()\n        )\n        .subscribe(lang => {\n          translateService.switchToLanguage(lang);\n        });\n    }\n  };\n  return initialize;\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  ],\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  declarations: [\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  providers: [AssetLinkPipe]\n})\nexport class CommonModule {\n  static providers(): Provider[] {\n    return [\n      ...DataModule.providers(),\n      // TODO: maybe we can think of a way to remove this C8Y_APP global\n      // tslint:disable-next-line\n      hookOptions((window as any).C8Y_APP || {}),\n      {\n        provide: APP_INITIALIZER,\n        useFactory: initializeServices,\n        deps: [TranslateService, AppStateService, UserPreferencesService],\n        multi: true\n      },\n      ...I18nModule.providers(),\n      HumanizePipe,\n      ShouldShowMoPipe,\n      GetGroupIconPipe,\n      HumanizeAppNamePipe,\n      ShortenUserNamePipe,\n      MapFunctionPipe,\n      DatePipe,\n      BytesPipe\n    ];\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 } 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 '../i18n/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';\nimport { 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>(extensionKey: T, service: Type<CumulocityServiceRegistry.ExtensionKeys[T]>) {\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);\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  TenantLoginOptionType,\n  UserManagementSource,\n  UserService\n} from '@c8y/client';\nimport { get } from 'lodash-es';\nimport { AppStateService } from './ui-state.service';\nimport { take } from 'rxjs/operators';\nimport { Permissions } from '../common/permissions.service';\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  ) {}\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 = {\n      type: TenantLoginOptionType.BASIC,\n      userManagementSource: UserManagementSource.INTERNAL\n    };\n    if (!loginOptions) {\n      return defaultFallback;\n    } else {\n      const visibleLoginOptions = loginOptions.filter(this.isVisibleOnLoginPage);\n\n      return (\n        visibleLoginOptions.find(this.isOauthInternal) ||\n        visibleLoginOptions.find(this.isBasic) ||\n        visibleLoginOptions.find(this.isOauth2) ||\n        defaultFallback\n      );\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  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 { 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 { Alert } from './alert.model';\nimport { BehaviorSubject } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { StateService } from '../common/state-service.abstract';\nimport { gettext } from '../i18n/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   */\n  add(alert: Alert) {\n    this.addAlert(alert);\n  }\n\n  /**\n   * Adds a alert by text.\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   */\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   */\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 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 object which was created.\n   * @return A function that can be executed to show the msg.\n   */\n  createSuccess(createdObject) {\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 {IResult}  error The error from server.\n   * @param {alertType} 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   */\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 { 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 { EventEmitter } from '@angular/core';\nimport { BehaviorSubject, filter, Subscription, tap } from 'rxjs';\nimport { CountdownIntervalComponent } from '../countdown-interval';\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  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   */\n  onToggleCountdownButtonState($event: MouseEvent): 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      return;\n    }\n\n    const onRefreshToggleOn = this.isIntervalRefreshToggleOn && this.countdownSubscription.closed;\n\n    if (onRefreshToggleOn) {\n      this.enableCountdown();\n      this.manuallyDisabledCountdown = false;\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","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 { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { OptionsService } from '../../common/options.service';\nimport { gettext } from '../../i18n/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    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 } 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  ) {}\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, 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 requiredIdentify = {\n      /**\n       * Email was not mandatory form field until 10.14\n       */\n      id: email ? email : `${userId}_${tenantID}_${instanceId}`,\n      isUserCreatedAfterAnonymizationWasActivated: true,\n      tenantID: tenantID,\n      email: '--',\n      userName: '--',\n      firstName: '--',\n      lastName: '--',\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    if (sendPiiData) {\n      const { userName, firstName, lastName } = identifyData.user;\n\n      const extendedIdentify = {\n        ...requiredIdentify,\n        email,\n        userName,\n        firstName,\n        lastName\n      };\n\n      windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', extendedIdentify, {\n        id: `${tenantID}_${instanceId}`,\n        instanceId\n      });\n\n      return;\n    }\n    windowRef[this.GAINSIGHT_GLOBAL_SCOPE]('identify', requiredIdentify);\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.translateService.store.translations[currentLang];\n\n    if (!translations) {\n      return {};\n    }\n    const swappedKeysWithValues = {};\n    Object.keys(translations).forEach(key => {\n      swappedKeysWithValues[translations[key]] = key;\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})\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 { 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})\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})\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';\n@Component({\n  selector: 'c8y-app-switcher-inline',\n  templateUrl: './app-switcher-inline.component.html'\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';\n@Component({\n  selector: 'c8y-app-switcher',\n  templateUrl: './app-switcher.component.html'\n})\nexport class AppSwitcherComponent {}\n","<div\n  class=\"app-switcher-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 { Inject, Injectable } from '@angular/core';\nimport { DOCUMENT as Document } from '@angular/common';\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  declarations: [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 { 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: [CommonModule, BsDropdownModule, A11yModule, ProductExperienceModule, AppIconComponent],\n  declarations: [AppSwitcherComponent, AppSwitcherInlineComponent, AppHrefPipe, IsActiveAppPipe],\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';\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})\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    <ng-container *ngFor=\"let item of left$ | async\">\n      <ng-container\n        *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n      ></ng-container>\n    </ng-container>\n  </ul>\n  <ul class=\"nav navbar-nav navbar-right gap-sm-8\">\n    <ng-container *ngFor=\"let item of right$ | async\">\n      <ng-container\n        *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n      ></ng-container>\n    </ng-container>\n    <li *ngIf=\"(more$ | async).length === 1; else moreWithMultipleOptions\">\n      <ng-container *ngFor=\"let item of more$ | async\">\n        <ng-container\n          *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n        ></ng-container>\n      </ng-container>\n    </li>\n    <ng-template #moreWithMultipleOptions>\n      <li\n        class=\"no-remove more-wrapper\"\n        *ngIf=\"(more$ | async).length > 1\"\n      >\n        <div\n          class=\"dropdown\"\n          dropdown\n        >\n          <c8y-action-bar-item\n            [placement]=\"'right'\"\n          >\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              <ng-container *ngFor=\"let item of more$ | async\">\n                <ng-container\n                  *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n                ></ng-container>\n              </ng-container>\n            </ul>\n            <ul\n              class=\"dropdown-menu dropdown-menu-right hidden-xs\"\n              *dropdownMenu\n            >\n              <ng-container *ngFor=\"let item of more$ | async\">\n                <ng-container\n                  *c8yOutlet=\"item.component || item.template; injector: item.injector\"\n                ></ng-container>\n              </ng-container>\n            </ul>\n          </c8y-action-bar-item>\n        </div>\n      </li>\n    </ng-template>\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  declarations: [ActionBarComponent],\n  imports: [\n    BsDropdownModule,\n    CommonModule,\n    CollapseModule,\n    RouterModule.forChild([]),\n    ActionBarItemComponent\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';\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})\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})\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  declarations: [ActionOutletComponent, ActionComponent],\n  imports: [CommonModule, BsDropdownModule, RouterModule.forChild([])],\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})\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';\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})\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 title=\"{{ 'Close' | translate }}\" type=\"button\" class=\"close\" (click)=\"close(alert)\">\n    <span aria-hidden=\"true\"><i c8yIcon=\"times\"></i></span>\n    <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n  </button>\n\n  <div *ngIf=\"!isTemplateRef(alert.text); else template(alert.text)\">\n    <strong *ngIf=\"!alert.allowHtml\" [textContent]=\"alert.text | translate\" class=\"message\"></strong>\n    <strong *ngIf=\"alert.allowHtml\" [innerHTML]=\"alert.text | translate\" class=\"message\"></strong>\n  </div>\n  <p *ngIf=\"hasDetails(alert) && !isDetailsShow(alert)\" class=\"text-muted m-t-8\">\n    <button\n      title=\"{{ 'Show details' | translate }}\"\n      class=\"btn btn-clean\"\n      (click)=\"showDetails(alert)\"\n    >\n      <i c8yIcon=\"chevron-down\"></i>\n      {{ 'Show details' | translate }}\n    </button>\n  </p>\n  <p *ngIf=\"hasDetails(alert) && isDetailsShow(alert)\" class=\"text-muted m-t-8\">\n    <button title=\"{{ 'Hide details' | translate }}\" class=\"btn btn-clean\" (click)=\"closeDetails()\">\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})\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})\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: [CommonModule],\n  exports: [AlertOutletComponent, AlertComponent, AlertDetailsComponent, AlertTextComponent],\n  declarations: [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';\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 } from 'rxjs';\nimport { map, debounceTime, distinctUntilChanged, delay } 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';\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  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  ) {\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\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 { matches, snakeCase } from 'lodash-es';\nimport { NavigatorNodeData } from './navigator-node-data';\nimport { PopoverConfirmComponent } from '../modal/popover-confirm.component';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\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  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 { Router } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, map, shareReplay } from 'rxjs/operators';\nimport {\n  ExtensionFactory,\n  fromTriggerOnce,\n  GenericHookType,\n  hookGeneric,\n  getInjectedHooks,\n  sortByPriority,\n  stateToFactory,\n  ExtensionPointForPlugins,\n  GenericHookOptions\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\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","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';\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    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  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, ViewContainerRef } 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';\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 ViewContainerRef ? tab.template : undefined;\n          return tab;\n        })\n        .filter(\n          (tab, index, self) =>\n            tab.component || index === self.findIndex(t => t.path === tab.path) || !!tab.tabsOutlet\n        )\n    );\n  }\n\n  sortTabs(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  /**\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","import { Component, Input, OnDestroy } 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';\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})\nexport class ConfirmModalComponent implements 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() 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  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        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  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","<div\n  class=\"c8y-prompt alert\"\n  [ngClass]=\"[classAlert]\"\n  data-cy=\"prompt-alert\"\n>\n  <h3\n    class=\"m-b-16 d-flex a-i-center\"\n    *ngIf=\"title\"\n  >\n    <i\n      class=\"dlt-c8y-icon\"\n      [ngClass]=\"[classIcon]\"\n    ></i>\n    <span id=\"modal-title\">{{ title | translate }}</span>\n  </h3>\n  <div id=\"modal-body\">\n    <p\n      class=\"text-break-word m-b-16\"\n      *ngIf=\"!isHtml(body)\"\n    >\n      {{ body | translate }}\n    </p>\n    <div\n      class=\"text-break-word m-b-16\"\n      *ngIf=\"isHtml(body)\"\n      [innerHTML]=\"body | translate\"\n    ></div>\n    <div\n      class=\"c8y-checkbox plain m-b-8\"\n      *ngFor=\"let co of confirmOptions | showIfFilter | async | keyvalue\"\n    >\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 class=\"text-muted\">{{ co.value.text | translate }}</span>\n      </label>\n    </div>\n    <ng-content></ng-content>\n  </div>\n  <div class=\"alert-footer\">\n    <button\n      class=\"btn btn-default\"\n      title=\"{{ labels.cancel | translate }}\"\n      type=\"button\"\n      *ngIf=\"labels.cancel !== null\"\n      (click)=\"dismiss()\"\n      data-cy=\"c8y-confirm-modal--cancel\"\n    >\n      {{ labels.cancel | translate }}\n    </button>\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    >\n      {{ labels.ok | translate }}\n    </button>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Status, StatusType } from '../common/status.model';\nimport { gettext } from '../i18n/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   */\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  ) {\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: { title, body, labels: modalLabels, status, confirmOptions },\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, Injector, Optional } from '@angular/core';\nimport {\n  BasicAuth,\n  BearerAuthFromSessionStorage,\n  CookieAuth,\n  FetchClient,\n  IAuthentication,\n  ICredentials,\n  IFetchResponse,\n  ITenantLoginOption,\n  Realtime,\n  TenantLoginOptionsService,\n  TenantService,\n  UserService\n} from '@c8y/client';\nimport { AppStateService } from '../common/ui-state.service';\nimport { AlertService } from '../alert/alert.service';\nimport { gettext } from '../i18n/gettext';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { TenantUiService } from '../common/tenant-ui.service';\nimport { switchMap } from 'rxjs/operators';\nimport { BehaviorSubject, EMPTY } from 'rxjs';\nimport { LocationStrategy } from '@angular/common';\nimport { get, isEmpty, isString } from 'lodash-es';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ModalService } from '../modal/modal.service';\nimport { Status } from '../common/status.model';\nimport { SsoData } from './login.model';\n\n/**\n * Service to manage the login.\n */\n@Injectable()\nexport class LoginService {\n  rememberMe = false;\n  TOKEN_KEY = '_tcy8';\n  TFATOKEN_KEY = 'TFAToken';\n  loginMode: ITenantLoginOption;\n  managementLoginMode: ITenantLoginOption;\n  oauthOptions: ITenantLoginOption;\n  isFirstLogin = true;\n  GREEN_MIN_LENGTH_DEFAULT = 8;\n  automaticLoginInProgress$ = new BehaviorSubject(false);\n\n  // tslint:disable:max-line-length\n  ERROR_MESSAGES = {\n    minlength: gettext('Password must have at least 8 characters and no more than 32.'),\n    password_missmatch: gettext('Passwords do not match.'),\n    maxlength: gettext('Password must have at least 8 characters and no more than 32.'),\n    password_strength: gettext(\n      'Your password is not strong enough. Please include numbers, lower and upper case characters'\n    ),\n    remote_error: gettext('Server error occurred.'),\n    email: gettext('Invalid email address.'),\n    password_change: gettext('Your password is expired. Please set a new password.'),\n    password_reset_token_expired: gettext(\n      'Password reset link expired. Please enter your email address to receive a new one.'\n    ),\n    tfa_pin_invalid: gettext('The code you entered is invalid. Please try again.'),\n    pattern_newPassword: this.translateService.instant(\n      gettext(\n        'Password must have at least 8 characters and no more than 32 and can only contain letters, numbers and following symbols: {{ symbols }}'\n      ),\n      { symbols: '`~!@#$%^&*()_|+-=?;:\\'\",.<>{}[]\\\\/' }\n    ),\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    phone_number_error: gettext('Could not update phone number.'),\n    pinAlreadySent: gettext(\n      'The verification code was already sent. For a new verification code, please click on the link above.'\n    ),\n    passwordConfirm: gettext('Passwords do not match.'),\n    tfaExpired: gettext('Two-factor authentication token expired.')\n  };\n  // tslint:enable:max-line-length\n\n  private SUCCESS_MESSAGES = {\n    password_changed: gettext('Password changed. You can now log in using new password.'),\n    password_reset_requested: gettext(\n      'Password reset request has been sent. Please check your email.'\n    ),\n    resend_sms: gettext('Verification code SMS resent.'),\n    send_sms: gettext('Verification code SMS sent.')\n  };\n\n  private passwordStrengthSetting = {\n    enforcePasswordStrength: false,\n    greenMinLength: this.GREEN_MIN_LENGTH_DEFAULT,\n    passwordStrengthValidity: false\n  };\n\n  private localhostRegExp = new RegExp('localhost');\n  private localhostIpRegExp = new RegExp('127.0.0.1');\n  private showTenantRegExp = new RegExp('showTenant');\n\n  constructor(\n    private injector: Injector,\n    private client: FetchClient,\n    private basicAuth: BasicAuth,\n    private cookieAuth: CookieAuth,\n    private ui: AppStateService,\n    private user: UserService,\n    private tenant: TenantService,\n    private realtime: Realtime,\n    private alert: AlertService,\n    private api: ApiService,\n    private tenantUiService: TenantUiService,\n    private tenantLoginOptionsService: TenantLoginOptionsService,\n    private translateService: TranslateService,\n    private modalService: ModalService,\n    @Optional() private location: LocationStrategy\n  ) {\n    this.autoLogout();\n    this.initLoginOptions();\n  }\n\n  /**\n   * Returns the current tenant.\n   * @return The tenant name.\n   */\n  getTenant() {\n    return this.client.tenant;\n  }\n\n  initLoginOptions() {\n    const loginOptions = this.ui.state.loginOptions || [];\n    this.loginMode = this.tenantUiService.getPreferredLoginOption(loginOptions);\n    this.oauthOptions =\n      this.tenantUiService.getOauth2Option(loginOptions) || ({} as ITenantLoginOption);\n  }\n\n  redirectToOauth() {\n    const { initRequest, flowControlledByUI } = this.oauthOptions;\n    const fullPath = `${window.location.origin}${window.location.pathname}`;\n    const redirectUrl = encodeURIComponent(fullPath);\n    const originUriParam = `${initRequest.includes('?') ? '&' : '?'}originUri=${redirectUrl}`;\n    const urlObject = new URL(initRequest);\n\n    if (flowControlledByUI) {\n      this.client\n        .fetch(`/tenant/oauth${urlObject.search}${originUriParam}`)\n        .then(res => this.handleErrorStatusCodes(res))\n        .then(res => res.json())\n        .then((res: any) => (window.location.href = res.redirectTo))\n        .catch(ex => this.showSsoError(ex));\n    } else {\n      window.location.href = `${initRequest}${originUriParam}`;\n    }\n  }\n\n  loginBySso({ code, sessionState }: SsoData) {\n    const params = {\n      method: 'GET',\n      headers: {\n        Accept: 'text/html,application/xhtml+xml'\n      }\n    };\n    let url = `/tenant/oauth?code=${encodeURIComponent(code)}`;\n    if (sessionState) {\n      url += `&session_state=${encodeURIComponent(sessionState)}`;\n    }\n\n    return this.client\n      .fetch(url, params)\n      .then(res => this.handleErrorStatusCodes(res))\n      .catch(ex => {\n        this.showSsoError(ex);\n        throw new Error();\n      });\n  }\n\n  autoLogout() {\n    const errorPattern = /invalid\\scredentials.*pin.*generate/i;\n    const isTfaExpired = data =>\n      data && typeof data.message === 'string' && errorPattern.test(data.message);\n    this.ui.currentUser\n      .pipe(\n        switchMap(u =>\n          u ? this.api.hookResponse(({ response }) => response.status === 401) : EMPTY\n        )\n      )\n      .subscribe(async (apiCall: any) => {\n        const { response } = apiCall;\n        let willLogout = false;\n        if (isTfaExpired(response.data)) {\n          willLogout = true;\n        } else {\n          if (typeof response.json === 'function') {\n            const data = await response.clone().json();\n            if (isTfaExpired(data)) {\n              willLogout = true;\n            }\n          }\n        }\n        if (willLogout) {\n          this.logout(false);\n          setTimeout(() => this.alert.danger(this.ERROR_MESSAGES.tfaExpired), 500);\n        }\n      });\n  }\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    return this.getBasicAuthLoginOption(refresh).then(loginOption => {\n      const enforcePasswordStrength = get(loginOption, 'enforceStrength');\n      if (isString(enforcePasswordStrength)) {\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  /**\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?) {\n    return this.getBasicAuthLoginOption(refresh).then(loginOption => {\n      const strengthValidity = get(loginOption, 'strengthValidity');\n      if (isString(strengthValidity)) {\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  /**\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?) {\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  /**\n   * Clears all backend errors.\n   */\n  cleanMessages() {\n    this.alert.clearAll();\n  }\n\n  /**\n   * Adds a new success message\n   * @param successKey The key of the success message as used in SUCCESS_MESSAGES\n   */\n  addSuccessMessage(successKey: string) {\n    const successMessage = this.SUCCESS_MESSAGES[successKey];\n    if (successMessage) {\n      this.alert.add({\n        text: successMessage,\n        type: 'success',\n        timeout: 0\n      });\n    }\n  }\n\n  /**\n   * Returns the current strategy. Defaults to cookie, if a token\n   * is found in local or session storage we switch to basic auth.\n   * @returns The current auth strategy.\n   */\n  getAuthStrategy(): IAuthentication {\n    try {\n      const authStrategy = new BearerAuthFromSessionStorage();\n      console.log(`Using BearerAuthFromSessionStorage`);\n      return authStrategy;\n    } catch (e) {\n      // do nothing\n    }\n    let authStrategy: IAuthentication = this.cookieAuth;\n    const token = this.getStoredToken();\n    const tfa = this.getStoredTfaToken();\n    if (token) {\n      authStrategy = this.basicAuth;\n      this.setCredentials({ token, tfa }, this.basicAuth);\n    }\n    return authStrategy;\n  }\n\n  /**\n   * Forces the use of basic auth as strategy with this credentials.\n   * @param credentials The credentials to use.\n   */\n  useBasicAuth(credentials: ICredentials) {\n    this.setCredentials(credentials, this.basicAuth);\n    return this.basicAuth;\n  }\n\n  /**\n   * Tries to login a user with the given credentials.\n   * If successful, the current tenant and user is set. If not an error\n   * is thrown. It also verifies if the user is allowed to open the\n   * current app.\n   * @param auth The authentication strategy used.\n   * @param credentials The credentials to try to login.\n   */\n  async login(\n    auth: IAuthentication = this.getAuthStrategy(),\n    credentials?: ICredentials\n  ): Promise<void> {\n    // To ensure backward compatibility, we need to verify whether the backend supports TFA\n    // without requiring the use of /tenant with auth: base64. The tfaSupported flag indicates\n    // whether authentication is possible exclusively via OAI-SECURE.\n    // TfaSupported flag should be removed during: MTM-62641\n    const isOAISecureAndTFAIsSupported =\n      (this.tenantUiService.isOauthInternal(this.loginMode) && this.loginMode.tfaSupported) ||\n      false;\n\n    if (isOAISecureAndTFAIsSupported && (await this.switchLoginMode(credentials))) {\n      auth = this.cookieAuth;\n    } else {\n      this.client.setAuth(auth);\n    }\n\n    const tenantRes = await this.tenant.current({ withParent: true });\n    const tenant = tenantRes.data;\n\n    if (credentials) {\n      credentials.tenant = tenant.name;\n    }\n\n    if (!isOAISecureAndTFAIsSupported && (await this.switchLoginMode(credentials))) {\n      auth = this.cookieAuth;\n    }\n\n    const userRes = await this.user.current();\n    const user = userRes.data;\n    await this.verifyAppAccess();\n\n    const supportUserName = this.getSupportUserName(credentials);\n    const token = this.setCredentials(\n      {\n        tenant: tenant.name,\n        user: (supportUserName ? `${supportUserName}$` : '') + user.userName\n      },\n      auth\n    );\n\n    if (token) {\n      this.storeBasicAuthToken(token);\n    }\n\n    await this.authFulfilled(tenant, user, supportUserName);\n  }\n\n  /**\n   * Saves tenant, user and support user info to the app state.\n   * @param tenant The current tenant object.\n   * @param user The current user object.\n   * @param supportUserName The current support user name.\n   */\n  async authFulfilled(tenant?, user?, supportUserName?) {\n    if (!tenant) {\n      const { data } = await this.tenant.current({ withParent: true });\n      tenant = data;\n      this.client.tenant = tenant.name;\n    }\n\n    if (!user) {\n      const { data } = await this.user.current();\n      user = data;\n    }\n\n    if (!supportUserName) {\n      supportUserName = null;\n    }\n\n    this.ui.setUser({ user, supportUserName });\n    this.ui.currentTenant.next(tenant);\n  }\n\n  /**\n   * Switch the login mode to CookieAuth if the\n   * user has configured to use it in loginOptions.\n   * @param credentials The credentials for that login\n   */\n  async switchLoginMode(credentials?: ICredentials) {\n    const isPasswordGrantLogin = await this.isPasswordGrantLogin(credentials);\n    if (isPasswordGrantLogin && credentials) {\n      const res = await this.generateOauthToken(credentials);\n      if (!(res as Response).ok) {\n        try {\n          const data = await res.json();\n          throw { res, data };\n        } catch (ex) {\n          throw ex;\n        }\n      }\n      this.client.setAuth(this.cookieAuth);\n      this.cleanLocalStorage();\n      this.basicAuth.logout();\n    }\n    return isPasswordGrantLogin;\n  }\n\n  async generateOauthToken(credentials?: ICredentials) {\n    if ((await this.isPasswordGrantLogin(credentials)) && credentials) {\n      const params = new URLSearchParams({\n        grant_type: 'PASSWORD',\n        username: credentials.user,\n        password: credentials.password,\n        ...(credentials.tfa !== undefined && { tfa_code: credentials.tfa })\n      });\n      return await new FetchClient().fetch(this.getUrlForOauth(credentials), {\n        method: 'POST',\n        body: params.toString(),\n        headers: {\n          'content-type': 'application/x-www-form-urlencoded;charset=UTF-8'\n        }\n      });\n    }\n  }\n\n  async isPasswordGrantLogin(credentials?: ICredentials) {\n    let loginMode = this.loginMode;\n\n    if (this.isSupportUser(credentials)) {\n      if (!this.managementLoginMode) {\n        this.managementLoginMode = await this.getManagementLoginMode();\n      }\n      loginMode = this.managementLoginMode;\n    }\n\n    return this.tenantUiService.isOauthInternal(loginMode);\n  }\n\n  /**\n   * Verifies if the provided credentials use a support user to log in or not.\n   * @param credentials Credentials to check.\n   * @returns {boolean} Returns true if user is a support user.\n   */\n  isSupportUser(credentials?: ICredentials): boolean {\n    return credentials && credentials.user.includes('$');\n  }\n\n  /**\n   * Verifies if the tenant input field should be shown\n   * or not.\n   * @returns If true, show the tenant input.\n   */\n  showTenant(): boolean {\n    return !this.ui.state.loginOptions || this.isLocal() || this.isShowTenant();\n  }\n\n  /**\n   * Verifies if the tenant setup should be shown\n   * or not.\n   * @returns If true, show the tenant input.\n   */\n  showTenantSetup(): boolean {\n    return !this.ui.state.loginOptions && !this.isLocal();\n  }\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([this.basicAuth.logout(), this.cookieAuth.logout()]);\n  }\n\n  /**\n   * Saves the TFA token to local or session storage.\n   * @param tfaToken The tfa token to save.\n   * @param storage The storage to use (local or session).\n   */\n  saveTFAToken(tfaToken: string, storage: Storage) {\n    storage.setItem(this.TFATOKEN_KEY, tfaToken);\n  }\n\n  /**\n   * Request the manifest -> on 401 user has no access to that application\n   * and we throw the error up to the login form.\n   */\n  async verifyAppAccess() {\n    try {\n      await this.ui.loadManifest();\n    } catch (ex) {\n      if (!(ex.res && ex.res.status === 404 && this.isLocal())) {\n        throw ex;\n      }\n    }\n  }\n\n  redirectToDomain(domain) {\n    const originUrl = new URL(window.location.href);\n    const redirectUrl = originUrl.href.replace(originUrl.hostname, domain);\n    window.location.href = redirectUrl;\n  }\n\n  showSsoError(error): void {\n    const body = error\n      ? this.translateService.instant(\n          gettext(\n            '<p><strong>The following error was returned from the external authentication service:</strong></p><p><code>{{ error }}</code></p>.'\n          ),\n          { error }\n        )\n      : gettext('SSO login failed. Contact the administrator.');\n\n    this.modalService.acknowledge(gettext('Login error'), body, Status.DANGER, gettext('OK'));\n  }\n\n  /**\n   * Sets the tenant to the client and updates the credentials on the\n   * auth strategy.\n   * @param credentials The name of the tenant.\n   * @param authStrategy The authentication strategy used.\n   * @return Returns the token if basic auth, otherwise undefined.\n   */\n  private setCredentials(credentials: ICredentials, authStrategy: IAuthentication) {\n    if (credentials.tenant) {\n      this.client.tenant = credentials.tenant;\n    }\n    // Check if a token is already set (case for support user login)\n    // if yes -> we just need to update the user, and reuse the token\n    // of the support user.\n    // Therefore we need to pass user and tenant, to get\n    // just the stored token and nothing else (see BasicAuth.ts:31).\n    const token = this.basicAuth.updateCredentials({\n      tenant: credentials.tenant,\n      user: credentials.user\n    });\n    const newCredentials = { token, ...credentials };\n\n    return authStrategy.updateCredentials(newCredentials);\n  }\n\n  /**\n   * Verifies if the current user is a developer or not.\n   * Running on localhost means development mode.\n   */\n  private isLocal(): boolean {\n    const hostname = window.location.hostname;\n    return this.localhostIpRegExp.test(hostname) || this.localhostRegExp.test(hostname);\n  }\n\n  /**\n   * Save the token to local or session storage.\n   * @param token The token to save.\n   * @param storage The storage to use (local or session).\n   */\n  private saveToken(token: string, storage: Storage) {\n    storage.setItem(this.TOKEN_KEY, token);\n  }\n\n  private storeBasicAuthToken(token: string) {\n    this.saveToken(token, sessionStorage);\n    if (this.rememberMe) {\n      this.saveToken(token, localStorage);\n    }\n  }\n\n  private cleanLocalStorage() {\n    localStorage.removeItem(this.TOKEN_KEY);\n    localStorage.removeItem(this.TFATOKEN_KEY);\n  }\n\n  private cleanSessionStorage() {\n    sessionStorage.removeItem(this.TOKEN_KEY);\n    sessionStorage.removeItem(this.TFATOKEN_KEY);\n  }\n\n  private isShowTenant(): boolean {\n    return this.showTenantRegExp.test(window.location.href);\n  }\n\n  private redirect(url: string) {\n    window.location.href = url;\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 Promise.resolve(basicAuthLoginOption);\n  }\n\n  /**\n   * Gets support user name from credentials.\n   * @param credentials Credentials object (defaults to the stored one).\n   * @returns Support user name.\n   */\n  private getSupportUserName(credentials: ICredentials = this.getStoredCredentials()): string {\n    if (!credentials) {\n      return null;\n    }\n    const supportUserName = credentials.user.match(/^(.+\\/)?((.+)\\$)?(.+)?$/)[3];\n    return supportUserName;\n  }\n\n  /**\n   * Gets credentials object from the stored token.\n   * @returns Credentials object.\n   */\n  private getStoredCredentials(): ICredentials {\n    const token = this.getStoredToken();\n    if (!token) {\n      return null;\n    }\n    return this.decodeToken(token);\n  }\n\n  /**\n   * Gets stored token from local storage or session storage.\n   * @returns Stored token.\n   */\n  private getStoredToken(): string {\n    return localStorage.getItem(this.TOKEN_KEY) || sessionStorage.getItem(this.TOKEN_KEY);\n  }\n\n  /**\n   * Gets stored TFA token from local storage or session storage.\n   * @returns Stored TFA token.\n   */\n  private getStoredTfaToken(): string {\n    return localStorage.getItem(this.TFATOKEN_KEY) || sessionStorage.getItem(this.TFATOKEN_KEY);\n  }\n\n  /**\n   * Decodes token to credentials object.\n   * @param token Token to decode.\n   * @returns Credentials object.\n   */\n  private decodeToken(token: string): ICredentials {\n    const decoded = decodeURIComponent(escape(window.atob(token)));\n    const split = decoded.match(/(([^/]*)\\/)?([^/:]+):(.+)/);\n\n    return {\n      tenant: split[2],\n      user: split[3],\n      password: split[4]\n    };\n  }\n\n  private getUrlForOauth(credentials: ICredentials) {\n    if (isEmpty(credentials.tenant) && this.loginMode.initRequest) {\n      const urlParams = new URLSearchParams(this.loginMode.initRequest.split('?').pop());\n      credentials.tenant = urlParams.get('tenant_id');\n    }\n    return !isEmpty(credentials.tenant)\n      ? `tenant/oauth?tenant_id=${credentials.tenant}`\n      : `tenant/oauth`;\n  }\n\n  private async getManagementLoginMode() {\n    const managementLoginOptions = (await this.tenantLoginOptionsService.listForManagement()).data;\n    return this.tenantUiService.getPreferredLoginOption(managementLoginOptions);\n  }\n\n  private async handleErrorStatusCodes(response: IFetchResponse): Promise<IFetchResponse> {\n    if (response.status >= 400) {\n      const data = await response.json();\n      const error = data.message || data.error_description || data.error;\n      throw error;\n    }\n    return response;\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() {\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) {\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(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 '../i18n/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`KEEP_ORIGINAL`'),\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  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   */\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';\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  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';\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}\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';\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, Input } from '@angular/core';\nimport { Search } from './search.model';\nimport { sortBy } from 'lodash';\nimport { AlertService } from '../alert/alert.service';\n\n@Component({\n  selector: 'c8y-search-outlet',\n  templateUrl: './search-outlet.component.html'\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 } from '@angular/core';\nimport { Breadcrumb } from './breadcrumb.model';\n\n@Component({\n  selector: 'c8y-breadcrumb-outlet',\n  templateUrl: './breadcrumb-outlet.component.html'\n})\nexport class BreadcrumbOutletComponent {\n  showAll = false;\n  @Input() breadcrumbs: Breadcrumb[] = [];\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","<div\n  class=\"breadcrumbs-container\"\n  [ngClass]=\"{\n    multiple: breadcrumbs.length > 1,\n    open: showAll\n  }\"\n  *ngIf=\"breadcrumbs && breadcrumbs.length > 0\"\n>\n  <button\n    class=\"btn-show-all-breadcrumbs pull-left\"\n    type=\"button\"\n    title=\"{{ 'Expand/collapse all breadcrumbs' | translate }}\"\n    *ngIf=\"breadcrumbs.length > 1\"\n    (click)=\"showAll = !showAll\"\n  >\n    <i\n      *ngIf=\"!showAll\"\n      [c8yIcon]=\"'caret-right'\"\n      tooltip=\"{{ 'Show all breadcrumbs' | translate }}\"\n      container=\"body\"\n      placement=\"top\"\n    ></i>\n    <i\n      *ngIf=\"showAll\"\n      [c8yIcon]=\"'caret-down'\"\n      tooltip=\"{{ 'Expand breadcrumbs' | translate }}\"\n      container=\"body\"\n      placement=\"top\"\n    ></i>\n  </button>\n\n  <ul class=\"breadcrumbs text-muted\" *ngFor=\"let breadcrumb of breadcrumbs; let first = first\">\n    <ng-container *ngIf=\"first || showAll\">\n      <li class=\"text-muted\" *ngFor=\"let item of breadcrumb.items; let firstItem = first\">\n        <span *ngIf=\"!firstItem\">></span>\n        <ng-container\n          *c8yOutlet=\"item.component || item.template; injector: breadcrumb.injector\"\n        ></ng-container>\n        <ng-container *ngIf=\"item.label && item.path\">\n          <a\n            [routerLink]=\"normalizePath(item.path)\"\n            class=\"word-break\"\n            title=\"{{ item.label | translate }}\"\n          >\n            <i [c8yIcon]=\"item.icon\" *ngIf=\"firstItem\" class=\"m-r-4\"></i>\n            <span>{{ item.label | translate }}</span>\n          </a>\n        </ng-container>\n        <ng-container *ngIf=\"item.label && !item.path\">\n          <i [c8yIcon]=\"item.icon\" *ngIf=\"firstItem\" class=\"m-r-4\"></i>\n          <span title=\"{{ item.label | translate }}\">{{ item.label | translate }}</span>\n        </ng-container>\n      </li>\n    </ng-container>\n  </ul>\n</div>\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';\n\n@Component({\n  selector: 'c8y-drawer-outlet',\n  templateUrl: './drawer-outlet.component.html'\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 { Component, ElementRef, NgZone } from '@angular/core';\nimport { HeaderService } from '../header.service';\nimport { debounceTime, map, filter } from 'rxjs/operators';\n\n@Component({\n  selector: 'c8y-title-outlet',\n  templateUrl: './title-outlet.component.html'\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 { 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';\n\n@Component({\n  selector: 'c8y-header-bar',\n  templateUrl: './header-bar.component.html'\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  /**\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    <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      *ngIf=\"(headerService.canToggleNavigator$ | async) && !simple\"\n    >\n      <i\n        [c8yIcon]=\"'outdent'\"\n        *ngIf=\"!(headerService.navigatorOpen$ | async)\"\n      ></i>\n      <i\n        [c8yIcon]=\"'dedent-right'\"\n        *ngIf=\"headerService.navigatorOpen$ | async\"\n      ></i>\n    </button>\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        <c8y-breadcrumb-outlet\n          class=\"app-breadcrumbs\"\n          *ngIf=\"!simple\"\n          [breadcrumbs]=\"breadcrumbService.items$ | async\"\n        ></c8y-breadcrumb-outlet>\n      </span>\n    </div>\n    <c8y-search-outlet\n      class=\"main-header-item\"\n      title=\"{{ 'Search' | translate }}\"\n      *ngIf=\"!simple\"\n      [search]=\"searchService.items$ | async\"\n    ></c8y-search-outlet>\n    <c8y-action-outlet\n      *ngIf=\"!simple\"\n      [items]=\"actionService.items$ | async\"\n    ></c8y-action-outlet>\n    <c8y-app-switcher\n      class=\"main-header-item\"\n      title=\"{{ 'Application switcher' | translate }}\"\n      *ngIf=\"appState.currentUser.value\"\n    ></c8y-app-switcher>\n\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      <span\n        class=\"user-dot\"\n        title=\"{{ appState.currentUser | async | shortenUserName }}\"\n        *ngIf=\"appState.currentUser | async\"\n        data-cy=\"header-bar--user-dot\"\n      >\n        {{ appState.currentUser | async | userNameInitials }}\n      </span>\n      <span class=\"close-dot\">&times;</span>\n    </button>\n  </div>\n  <div class=\"head-toggler\">\n    <button\n      title=\"{{ 'Toggle' | translate }}\"\n      type=\"button\"\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","export interface LoginMessage {\n  message: string;\n  type: string;\n}\n\nexport enum LoginViews {\n  None,\n  Credentials,\n  RecoverPassword,\n  SmsChallenge,\n  ChangePassword,\n  TotpChallenge,\n  TotpSetup,\n  ProvidePhoneNumber,\n  TenantIdSetup\n}\n\nexport type SsoData = {\n  code: string;\n  sessionState?: string;\n};\n\nexport type SsoError = {\n  ssoError: string;\n  ssoErrorDescription: string;\n};\n","import { Injectable } from '@angular/core';\nimport { ICredentials } from '@c8y/client';\n\n@Injectable()\nexport class CredentialsFromQueryParamsService {\n  private readonly queryParamsToHandle: Array<keyof ICredentials> = ['tenant', 'user'];\n\n  /**\n   * Retrieves any subset of credentials provided via queryParams\n   * @return ICredentials found in queryParams.\n   */\n  getCredentialsFromQueryParams(): ICredentials {\n    const credentials: ICredentials = {};\n    try {\n      const params = new URLSearchParams(window.location.search);\n      this.queryParamsToHandle.forEach(param => {\n        const value = this.getParameterFromQueryParams(params, param);\n        if (value) {\n          credentials[param] = value;\n        }\n      });\n    } catch (e) {\n      // URLSearchParams probably not available in all browsers (https://caniuse.com/urlsearchparams)\n    }\n    return credentials;\n  }\n\n  /**\n   * Removes credentials from the queryParameters if any are present.\n   * In case some credentials were present, this method will cause a page reload.\n   * @return boolean if credentials were found.\n   */\n  removeCredentialsFromQueryParams(): boolean {\n    try {\n      const params = new URLSearchParams(window.location.search);\n      const hasRemovedAtLeastOneParam = this.queryParamsToHandle\n        .map(param => this.removeParameterFromQueryParameters(params, param))\n        .reduceRight((prev, curr) => prev || curr, false);\n      if (hasRemovedAtLeastOneParam) {\n        window.location.search = params.toString();\n        return true;\n      }\n    } catch (e) {\n      // URLSearchParams probably not available in all browsers (https://caniuse.com/urlsearchparams)\n    }\n    return false;\n  }\n\n  /**\n   * Looks for the specified key in the provided URLSearchParams.\n   * If the specified key was found, it will be removed.\n   * @return boolean if key was found.\n   */\n  private removeParameterFromQueryParameters(\n    params: URLSearchParams,\n    key: keyof ICredentials\n  ): boolean {\n    const keyAsString = `${key}`;\n    if (!params.has(keyAsString)) {\n      return false;\n    }\n    params.delete(keyAsString);\n    return true;\n  }\n\n  /**\n   * Looks for the specified key in the provided URLSearchParams.\n   * If the specified key was found, it's value will be returned.\n   * Otherwise null will be returned.\n   * @return string/null.\n   */\n  private getParameterFromQueryParams(\n    params: URLSearchParams,\n    key: keyof ICredentials\n  ): string | null {\n    const keyAsString = `${key}`;\n    if (!params.has(keyAsString)) {\n      return null;\n    }\n    const value = params.get(keyAsString);\n    if (!value) {\n      return null;\n    }\n    return value;\n  }\n}\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","// tslint:disable: max-line-length\nimport { gettext } from '../i18n/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 8 characters and no more than 32 and can only contain letters, numbers and following symbols: `~!@#$%^&*()_|+-=?;:\\'\",.<>{}[]\\\\/'\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    noWhiteSpaceAtBeginning: gettext(\n      'Name must not contain white spaces at the beginning or ending.'\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  } 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      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    noWhiteSpaceAtBeginning: {\n      pattern: /^[^\\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  };\n\n  static get(key: string) {\n    const pattern = this.rules[key];\n    return pattern as ValidationRules;\n  }\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 { NgFor, NgIf } from '@angular/common';\nimport { C8yTranslatePipe } from '../i18n';\n\n@Component({\n  selector: 'c8y-messages',\n  templateUrl: './messages.component.html',\n  standalone: true,\n  imports: [NgIf, NgFor, 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  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    let message = this.messageMap[key];\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        message = 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  <div\n    class=\"d-block\"\n    *ngFor=\"let msg of messages\"\n  >\n    {{ msg | translate }}\n  </div>\n  <div\n    class=\"help-block\"\n    *ngIf=\"!messages.length && helpMessage\"\n  >\n    {{ helpMessage | translate }}\n  </div>\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 { AfterViewChecked, Directive, ElementRef, Optional, Renderer2 } from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '../i18n/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 { Component, Output, EventEmitter, Input } from '@angular/core';\nimport { UserService, ICredentials } from '@c8y/client';\nimport { LoginService } from '../login/login.service';\nimport { AlertService } from '../alert/alert.service';\nimport { gettext } from '../i18n/gettext';\n\n@Component({\n  selector: 'c8y-sms-challenge',\n  templateUrl: './sms-challenge.component.html',\n  styles: []\n})\nexport class SmsChallengeComponent {\n  @Input() credentials: ICredentials;\n  @Output() onCancel = new EventEmitter();\n\n  model = {\n    smsToken: ''\n  };\n  isLoading = false;\n\n  private resendTfa = '0';\n\n  constructor(\n    public loginService: LoginService,\n    private users: UserService,\n    private alert: AlertService\n  ) {}\n\n  async verifyTFACode() {\n    this.isLoading = true;\n    if (await this.usesOAuthInternal()) {\n      await this.verifyCodeWithOauth();\n    } else {\n      await this.verifyCodeWithBasicAuth();\n    }\n    this.isLoading = false;\n  }\n\n  async resendTFASms() {\n    try {\n      this.isLoading = true;\n      await this.users.verifyTFACode(this.resendTfa);\n    } catch (e) {\n      if (e.res.status === 403) {\n        this.loginService.cleanMessages();\n        this.loginService.addSuccessMessage('resend_sms');\n      } else {\n        this.alert.addServerFailure(e);\n      }\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  private async usesOAuthInternal() {\n    return this.loginService.isPasswordGrantLogin(this.credentials);\n  }\n\n  private async verifyCodeWithOauth() {\n    try {\n      const { credentials } = this;\n      await this.loginService.switchLoginMode({ ...credentials, tfa: this.model.smsToken });\n      await this.loginService.verifyAppAccess();\n      await this.loginService.authFulfilled();\n    } catch (e) {\n      const resStatus = e.res && e.res.status;\n      if (resStatus === 401) {\n        // it is assumed that the user and password are correct so it must be the tfa code\n        this.alert.danger(gettext('Invalid code'));\n      } else {\n        this.alert.addServerFailure(e);\n      }\n    }\n  }\n\n  private async verifyCodeWithBasicAuth() {\n    try {\n      const { res } = await this.users.verifyTFACode(this.model.smsToken);\n      const tfaToken = res.headers.get('tfatoken');\n      this.credentials.tfa = tfaToken;\n      await this.loginWithTFA(tfaToken);\n    } catch (e) {\n      const resStatus = e.res && e.res.status;\n      // BE returns 403 in case of invalid tfa code\n      if (resStatus === 403) {\n        this.alert.danger(gettext('Invalid code'));\n      } else {\n        this.alert.addServerFailure(e);\n      }\n    }\n  }\n\n  private async loginWithTFA(tfaToken) {\n    try {\n      await this.loginService.login(\n        this.loginService.useBasicAuth({ tfa: tfaToken }),\n        this.credentials\n      );\n      this.loginService.saveTFAToken(tfaToken, sessionStorage);\n      if (this.loginService.rememberMe) {\n        this.loginService.saveTFAToken(tfaToken, localStorage);\n      }\n    } catch (e) {\n      this.alert.addServerFailure(e);\n    }\n  }\n}\n","<form #twoFactorForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"verifyTFACode()\" novalidate>\n  <div class=\"legend form-block center\" translate>Two-factor authentication</div>\n\n  <c8y-form-group>\n    <label translate>Verification code</label>\n    <input\n      [(ngModel)]=\"model.smsToken\"\n      #sms_token=\"ngModel\"\n      type=\"text\"\n      name=\"sms_token\"\n      autofocus\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      class=\"form-control\"\n      placeholder=\"{{ 'e.g.' | translate }} 624327\"\n      required\n    />\n    <p *ngIf=\"!twoFactorForm.form.valid || isLoading\" class=\"help-block\" translate>\n      Insert the code received via SMS.\n    </p>\n  </c8y-form-group>\n\n  <button\n    title=\"{{ 'Verify' | translate }}\"\n    [disabled]=\"!twoFactorForm.form.valid || isLoading\"\n    class=\"btn btn-primary btn-lg btn-block form-group\"\n  >\n    {{ 'Verify' | translate }}\n  </button>\n\n  <div class=\"d-flex m-t-8\">\n    <button\n      type=\"button\"\n      title=\"{{ 'Send new code' | translate }}\"\n      [ngClass]=\"{ disabled: isLoading }\"\n      class=\"btn btn-link btn-sm\"\n      (click)=\"resendTFASms()\"\n    >\n      {{ 'Send new code' | translate }}\n    </button>\n    <button\n      type=\"button\"\n      title=\"{{ 'Log in' | translate }}\"\n      class=\"btn btn-link btn-sm\"\n      (click)=\"onCancel.emit()\"\n    >\n      {{ 'Log in' | translate }}\n    </button>\n  </div>\n</form>\n","import { NG_VALIDATORS, AbstractControl, Validator } 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})\nexport class PhoneValidationDirective implements Validator {\n  allowedCharactersPattern = /^[/\\d\\-+ ]*$/;\n\n  validate(control: AbstractControl): { [key: string]: any } | null {\n    const valid = this.validateInternationalPhoneNumber(control);\n    return valid ? null : { internationalPhoneNumber: true };\n  }\n\n  private validateInternationalPhoneNumber(control: AbstractControl) {\n    let numberValid;\n    try {\n      const phoneNumber = parsePhoneNumberFromString(control.value);\n      numberValid = this.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    return numberValid;\n  }\n}\n","import { Component, Output, EventEmitter, Input } from '@angular/core';\nimport { LoginService } from '../login/login.service';\nimport { AlertService } from '../alert/alert.service';\nimport { LoginViews } from '../login/login.model';\nimport { ICredentials, UserService } from '@c8y/client';\n\n@Component({\n  selector: 'c8y-provide-phone-number',\n  templateUrl: './provide-phone-number.component.html'\n})\nexport class ProvidePhoneNumberComponent {\n  @Input() credentials: ICredentials;\n  @Output() onCancel = new EventEmitter();\n  @Output() onChangeView = new EventEmitter();\n\n  phoneNumber: string;\n  requestInProgress = false;\n  private readonly sendTfa: string = '0';\n\n  constructor(\n    public loginService: LoginService,\n    public alert: AlertService,\n    private userService: UserService\n  ) {}\n\n  async save() {\n    try {\n      this.requestInProgress = true;\n      await this.userService.savePhoneNumber(this.phoneNumber);\n      await this.sendTFASms();\n      this.onChangeView.emit({\n        view: LoginViews.SmsChallenge,\n        credentials: this.credentials\n      });\n    } catch (e) {\n      this.alert.addServerFailure(e);\n    } finally {\n      this.requestInProgress = false;\n    }\n  }\n\n  private async sendTFASms() {\n    try {\n      await this.userService.verifyTFACode(this.sendTfa);\n    } catch (e) {\n      if (e.res.status === 403) {\n        this.loginService.cleanMessages();\n        this.loginService.addSuccessMessage('send_sms');\n      } else {\n        throw e;\n      }\n    }\n  }\n}\n","<form #twoFactorForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"save()\" novalidate>\n  <div class=\"legend form-block center\" translate>Two-factor authentication</div>\n\n  <c8y-form-group [ngClass]=\"requestInProgress || twoFactorForm.invalid ? 'p-b-8' : ''\">\n    <label translate>Provide your phone number</label>\n\n    <input\n      class=\"form-control\"\n      [(ngModel)]=\"phoneNumber\"\n      #contactPhone=\"ngModel\"\n      type=\"text\"\n      name=\"phone\"\n      autocomplete=\"off\"\n      placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n      c8yPhoneValidation\n      required\n    />\n  </c8y-form-group>\n\n  <button\n    title=\"{{ 'Save and continue' | translate }}\"\n    type=\"submit\"\n    class=\"btn btn-primary btn-lg btn-block form-group\"\n    [disabled]=\"requestInProgress || twoFactorForm.invalid\"\n  >\n    {{ 'Save and continue' | translate }}\n  </button>\n\n  <div class=\"d-flex m-t-8\">\n    <a\n      title=\"{{ 'Login' | translate }}\"\n      class=\"small pointer m-l-auto\"\n      href=\"#\"\n      (click)=\"onCancel.emit()\"\n    >\n      {{ 'Login' | translate }}\n    </a>\n  </div>\n</form>\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { UserService } from '@c8y/client';\nimport { LoginService } from './login.service';\nimport { LoginViews } from './login.model';\n\n@Component({\n  selector: 'c8y-recover-password',\n  templateUrl: './recover-password.component.html',\n  styles: []\n})\nexport class RecoverPasswordComponent implements OnInit {\n  @Output() onChangeView = new EventEmitter();\n  LOGIN_VIEWS = LoginViews;\n  isLoading = false;\n  model = {\n    email: '',\n    tenantId: ''\n  };\n\n  constructor(private users: UserService, public loginService: LoginService) {}\n\n  ngOnInit() {\n    this.model.tenantId = this.loginService.getTenant();\n  }\n\n  async resetPassword() {\n    try {\n      this.isLoading = true;\n      const { res } = await this.users.sendPasswordResetMail(this.model.email, this.model.tenantId);\n      if (res.status === 200) {\n        this.loginService.addSuccessMessage('password_reset_requested');\n      }\n    } finally {\n      this.loginService.reset();\n      this.isLoading = false;\n    }\n  }\n}\n","<form #resetForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"resetPassword()\" novalidate>\n  <div class=\"legend form-block center\" translate>Forgot password?</div>\n  <c8y-form-group class=\"tenantField\" id=\"tenantField\" *ngIf=\"loginService.showTenant()\">\n    <label translate>Tenant ID</label>\n    <input\n      [(ngModel)]=\"model.tenantId\"\n      #tenantId=\"ngModel\"\n      type=\"text\"\n      name=\"tenantId\"\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      class=\"form-control\"\n      placeholder=\"{{ 'Tenant ID' | translate }}\"\n      required\n    />\n  </c8y-form-group>\n\n  <c8y-form-group>\n    <label translate>Email address</label>\n    <input\n      [(ngModel)]=\"model.email\"\n      #email=\"ngModel\"\n      type=\"text\"\n      name=\"email\"\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      class=\"form-control\"\n      placeholder=\"{{ 'Email address' | translate }}\"\n      email\n      required\n    />\n  </c8y-form-group>\n\n  <button\n    title=\"{{ 'Reset password' | translate }}\"\n    [disabled]=\"!resetForm.form.valid || isLoading\"\n    type=\"submit\"\n    class=\"btn btn-primary btn-lg btn-block form-group\"\n  >\n    {{ 'Reset password' | translate }}\n  </button>\n  <div class=\"text-center m-t-8\">\n    <button\n      type=\"submit\"\n      title=\"{{ 'Login' | translate }}\"\n      class=\"btn btn-link btn-sm\"\n      (click)=\"onChangeView.emit({ view: LOGIN_VIEWS.Credentials })\"\n    >\n      {{ 'Login' | translate }}\n    </button>\n  </div>\n</form>\n","import { Component, Input, Optional, Output, EventEmitter, HostListener } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { gettext } from '../i18n/gettext';\nimport { isEmpty } from 'lodash';\nimport { ModalLabels } from '../select-modal/select-modal.model';\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})\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 { Component, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { UserService, ICredentials, FetchClient, Client, IAuthentication } from '@c8y/client';\nimport { AppStateService } from '../common/ui-state.service';\nimport { AlertService } from '../alert/alert.service';\nimport { ModalComponent } from '../modal/modal.component';\nimport { LoginService } from '../login/login.service';\nimport { clone } from 'lodash-es';\nimport { gettext } from '../i18n/gettext';\n\n@Component({\n  selector: 'c8y-password-confirm-modal',\n  templateUrl: './password-confirm-modal.component.html'\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    private loginService: LoginService\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 strategy = clone(this.loginService.useBasicAuth({}));\n        delete credentials.tfa;\n        strategy.updateCredentials(credentials);\n        const newClient = this.createNewClient(strategy, 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(strategy: IAuthentication, baseUrl: string) {\n    return new Client(strategy, 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';\n\n@Component({\n  selector: 'c8y-current-password-modal',\n  templateUrl: './current-password-modal.component.html'\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 '../i18n/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()\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    return password.search(/[^0-9a-zA-Z]+/) !== -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, Input, Output, EventEmitter } from '@angular/core';\nimport { PasswordService } from './password.service';\nimport { LoginService } from '../login/login.service';\nimport { assign } from 'lodash-es';\nimport { gettext } from '../i18n/gettext';\n\n@Component({\n  selector: 'c8y-password-check-list',\n  templateUrl: './password-check-list.component.html',\n  styles: []\n})\nexport class PasswordCheckListComponent implements OnInit {\n  @Input()\n  strengthEnforced = false;\n\n  @Input('password')\n  set password(password: string) {\n    if (typeof password === 'string') {\n      this.onPasswordChange(password);\n    }\n  }\n  @Output()\n  onRequirementsFulfilled = new EventEmitter<boolean>();\n\n  minGreenLength = 8;\n\n  enhancedStrengthCheckList = [\n    {\n      label: gettext('Include lowercase characters (for example, abcdef)'),\n      check: this.passwordStrengthChecker.hasLowerCase,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    },\n    {\n      label: gettext('Include uppercase characters (for example, ABCDEF)'),\n      check: this.passwordStrengthChecker.hasUpperCase,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    },\n    {\n      label: gettext('Include numbers (for example, 123456)'),\n      check: this.passwordStrengthChecker.hasNumbers,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    },\n    {\n      label: gettext('Include symbols (for example, !@#$%^)'),\n      check: this.passwordStrengthChecker.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 => password.length >= this.minGreenLength,\n      icon: '',\n      contextualColor: '',\n      textColor: ''\n    }\n  ];\n  combinedChecklist = [];\n\n  constructor(\n    public loginService: LoginService,\n    private passwordStrengthChecker: PasswordService,\n    private passwordService: PasswordService\n  ) {}\n\n  async ngOnInit() {\n    this.minGreenLength = await this.loginService.getGreenMinLength();\n    if (!this.minGreenLength) {\n      this.minGreenLength = this.passwordService.getDefaultPasswordMinLength();\n    }\n    this.onPasswordChange('');\n  }\n\n  get translateParams() {\n    return {\n      length: this.minGreenLength\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) {\n    this.basicChecklist.forEach(requirement => {\n      this.checkRequirement(requirement, password);\n    });\n    this.enhancedStrengthCheckList.forEach(requirement => {\n      this.checkRequirement(requirement, password);\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","<div *ngIf=\"strengthEnforced\">\n  <div class=\"m-b-8\">{{ 'Password must meet the requirements below:' | translate }}</div>\n  <ul class=\"list-unstyled\">\n    <li\n      class=\"small d-flex\"\n      *ngFor=\"let requirement of combinedChecklist\"\n    >\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  </ul>\n</div>\n\n<div *ngIf=\"!strengthEnforced\">\n  <div class=\"m-b-8\">{{ 'Password must meet the requirements below:' | translate }}</div>\n  <ul class=\"list-unstyled\">\n    <li\n      class=\"small d-flex\"\n      *ngFor=\"let requirement of basicChecklist\"\n    >\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  </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    <li\n      class=\"small d-flex\"\n      *ngFor=\"let requirement of enhancedStrengthCheckList\"\n    >\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  </ul>\n</div>\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})\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 { Component, OnInit } from '@angular/core';\nimport { ITotp, UserService } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\nimport { gettext } from '../i18n';\n\n@Component({\n  selector: 'c8y-totp-setup',\n  templateUrl: './totp-setup.component.html'\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 } from '@angular/forms';\nimport { LoginService } from '../login/login.service';\nimport { UserService } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\nimport { ModalComponent } from '../modal/modal.component';\n\n@Component({\n  selector: 'c8y-totp-challenge',\n  templateUrl: './totp-challenge.component.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\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    public loginService: LoginService,\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 { Injectable } from '@angular/core';\nimport { PasswordStrength } from '@c8y/client';\nimport { filter } from 'lodash-es';\nimport { PasswordStrengthColor } from './password.model';\nimport { gettext } from '../i18n/gettext';\n\n@Injectable()\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    return password.search(/[^0-9a-zA-Z]+/) !== -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 { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PasswordService } from './password.service';\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})\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 { 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})\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 { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\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})\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  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 class=\"input-group input-group-password\">\n  <input\n    class=\"form-control\"\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    <button\n      *ngIf=\"type === 'password'\"\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    <button\n      *ngIf=\"type === 'text'\"\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  </span>\n</div>\n","import {\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  OnInit,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { NewPassword } from './password.model';\nimport { ControlContainer, NgForm, NgModel, ValidatorFn } from '@angular/forms';\nimport { LoginService } from '../login/login.service';\n\n@Component({\n  selector: 'c8y-new-password',\n  templateUrl: './new-password.component.html',\n  viewProviders: [{ provide: ControlContainer, useExisting: NgForm }]\n})\nexport class NewPasswordComponent implements OnInit {\n  @Output() password = new EventEmitter<NewPassword | object>();\n  model: any = {};\n  changePassword = false;\n  passwordEnforced = false;\n  minlength: number;\n  requirementsFulfilled: boolean;\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 loginService: LoginService,\n    private cdRef: ChangeDetectorRef\n  ) {}\n\n  passwordChecklistValidator: ValidatorFn = () =>\n    this.requirementsFulfilled ? null : { passwordStrengthChecklist: true };\n\n  ngOnInit() {\n    this.loadPasswordStrengthSettings();\n    this.loginService.getGreenMinLength().then(value => {\n      this.minlength = value;\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    this.newPasswordModel.control.updateValueAndValidity();\n    // There are two validators checking password validity, but we only want to show one of these errors at a time,\n    // where checklist validator takes priority.\n    if (!this.requirementsFulfilled) {\n      delete this.newPasswordModel.control.errors['password'];\n    }\n  }\n\n  async loadPasswordStrengthSettings() {\n    this.passwordEnforced = await this.loginService.getPasswordStrengthEnforced({ refresh: true });\n  }\n\n  toggleChangePassword() {\n    this.changePassword = !this.changePassword;\n    if (!this.changePassword) {\n      this.password.emit({});\n      this.model = {};\n    }\n  }\n}\n","<div class=\"form-group\">\n  <button\n    class=\"btn btn-default\"\n    type=\"button\"\n    (click)=\"toggleChangePassword()\"\n  >\n    <ng-container *ngIf=\"!changePassword\">\n      {{ 'Change password' | translate }}\n    </ng-container>\n    <ng-container *ngIf=\"changePassword\">\n      {{ 'Cancel password change' | translate }}\n    </ng-container>\n  </button>\n</div>\n\n<div\n  class=\"row content-flex-50\"\n  *ngIf=\"changePassword\"\n>\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        c8yDefaultValidation=\"password\"\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","import { Component, Input, ViewChild } from '@angular/core';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\nimport { StatusType } from '../common/status.model';\nimport { gettext } from '../i18n/gettext';\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})\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","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 { ModalService } from './modal.service';\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: [BsModalModule.forRoot(), CommonModule, PopoverModule.forRoot()],\n  exports: [ConfirmModalComponent, ModalComponent, PopoverConfirmComponent],\n  declarations: [ConfirmModalComponent, ModalComponent, PopoverConfirmComponent],\n  providers: [ModalService]\n})\nexport class ModalModule {}\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})\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';\n\n@Component({\n  selector: 'c8y-filter',\n  templateUrl: './filter-input.component.html'\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 { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'c8y-input-group-list',\n  templateUrl: 'input-group-list.component.html'\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})\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})\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';\n\n@Component({\n  selector: 'c8y-ip-range-input-list',\n  templateUrl: './ip-range-input-list.component.html'\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 '../i18n/index';\n\n@Directive({\n  selector: 'textarea[prettyValidJson]'\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})\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 { Directive, ElementRef } from '@angular/core';\n\n@Directive({\n  selector: 'input[type=\"range\"]'\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';\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})\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})\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})\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(private elem: ElementRef, private renderer: Renderer2) {}\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})\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})\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})\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})\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    RequiredInputPlaceholderDirective,\n    MessagesComponent\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  declarations: [\n    PhoneValidationDirective,\n    DefaultValidationDirective,\n    MinValidationDirective,\n    MaxValidationDirective,\n    InputGroupListComponent,\n    InputGroupListContainerDirective,\n    JsonValidationPrettifierDirective,\n    TextAreaRowHeightDirective,\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 { 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 { PasswordStrengthCheckerService } from './password-strength-checker.service';\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 { SmsChallengeComponent } from './sms-challenge.component';\nimport { TotpSetupComponent } from './totp-setup.component';\nimport { PasswordService } from './password.service';\nimport { QRCodeModule } from 'angularx-qrcode';\nimport { ProvidePhoneNumberComponent } from './provide-phone-number.component';\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  declarations: [\n    TotpChallengeComponent,\n    PasswordConfirm,\n    PasswordStrengthComponent,\n    PasswordCheckListComponent,\n    NewPasswordComponent,\n    PasswordConfirmModalComponent,\n    CurrentPasswordModalComponent,\n    SmsChallengeComponent,\n    TotpSetupComponent,\n    ProvidePhoneNumberComponent,\n    PasswordInputComponent\n  ],\n  imports: [FormsModule, TooltipModule, CommonModule, ModalModule, QRCodeModule],\n  exports: [\n    TotpChallengeComponent,\n    PasswordStrengthComponent,\n    PasswordCheckListComponent,\n    PasswordConfirm,\n    NewPasswordComponent,\n    PasswordConfirmModalComponent,\n    CurrentPasswordModalComponent,\n    SmsChallengeComponent,\n    TotpSetupComponent,\n    ProvidePhoneNumberComponent,\n    PasswordInputComponent\n  ],\n  providers: [PasswordStrengthCheckerService, PasswordService]\n})\nexport class AuthenticationModule {}\n","import { Injectable } from '@angular/core';\nimport { PasswordService } from '../authentication';\nimport { PasswordStrength } from '@c8y/client';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class StrengthValidatorService {\n  constructor(private passwordService: PasswordService) {}\n\n  isStrong(password: string): boolean {\n    return this.isPasswordGreen(this.passwordService.getStrengthColor(password).passwordStrength);\n  }\n\n  private isPasswordGreen(strength: PasswordStrength) {\n    return (strength as PasswordStrength) === (PasswordStrength.GREEN as PasswordStrength);\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\nimport { StrengthValidatorService } from './strength-validator-service';\n\n@Directive({\n  selector: '[passwordStrengthEnforced]',\n  providers: [\n    { provide: NG_VALIDATORS, useExisting: PasswordStrengthValidatorDirective, multi: true }\n  ]\n})\nexport class PasswordStrengthValidatorDirective implements Validator {\n  private forced: boolean;\n\n  @Input() set passwordStrengthEnforced(value) {\n    this.forced = value;\n  }\n\n  constructor(public passwordService: StrengthValidatorService) {}\n\n  validate(control: AbstractControl): ValidationErrors | null {\n    const strengthFulfilled = this.passwordService.isStrong(control.value || '');\n    const enforcementForcedAndNotFulfilled = this.forced && !strengthFulfilled;\n    return enforcementForcedAndNotFulfilled ? { passwordStrength: true } : null;\n  }\n}\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\nimport { LoginService } from './login.service';\nimport { IResetPassword, ICredentials, UserService, PasswordStrength } from '@c8y/client';\nimport { OptionsService } from '../common/options.service';\nimport { AlertService } from '../alert/alert.service';\nimport { LoginViews } from './login.model';\n\n@Component({\n  selector: 'c8y-change-password',\n  templateUrl: './change-password.component.html',\n  styles: []\n})\nexport class ChangePasswordComponent implements OnInit {\n  @Input() credentials: ICredentials;\n  @Output() onChangeView = new EventEmitter();\n\n  passwordPattern = /^[a-zA-Z0-9`~!@#$%^&*()_|+\\-=?;:'\",.<>{}[\\]\\\\/]{8,32}$/;\n  isLoading = false;\n  model = {\n    tenantId: '',\n    email: '',\n    newPassword: '',\n    newPasswordConfirm: ''\n  };\n  emailReadOnly = false;\n  passwordStrengthEnforced = false;\n\n  private TOKEN_PARAM = 'token';\n  private EMAIL_PARAM = 'email';\n\n  constructor(\n    public loginService: LoginService,\n    private users: UserService,\n    private options: OptionsService,\n    private alert: AlertService\n  ) {}\n\n  async ngOnInit() {\n    this.model.tenantId = this.loginService.getTenant();\n    this.model.email = this.options.get(this.EMAIL_PARAM, '');\n    this.emailReadOnly = !!this.model.email;\n    this.passwordStrengthEnforced = await this.loginService.getPasswordStrengthEnforced();\n  }\n\n  async changePassword() {\n    const resetPassword: IResetPassword = {\n      token: this.credentials.token,\n      email: this.model.email,\n      newPassword: this.model.newPassword,\n      passwordStrength: PasswordStrength.GREEN // @TODO: MTM-58234 - Deprecated - currently Backend requires this parameter.\n    };\n    try {\n      this.isLoading = true;\n      const { res } = await this.users.resetPassword(resetPassword, this.model.tenantId);\n      if (res.status === 200) {\n        this.loginService.addSuccessMessage('password_changed');\n        this.credentials.token = undefined;\n        this.options.set(this.TOKEN_PARAM, undefined);\n        if (this.loginService.showTenantSetup()) {\n          this.onChangeView.emit({ view: LoginViews.TenantIdSetup });\n        } else {\n          this.onChangeView.emit({ view: LoginViews.Credentials });\n        }\n      }\n    } catch (e) {\n      this.alert.addServerFailure(e);\n    } finally {\n      this.loginService.reset();\n      this.isLoading = false;\n    }\n  }\n}\n","<form class=\"loginForm\" (ngSubmit)=\"changePassword()\" #changePasswordForm=\"ngForm\" novalidate>\n  <div class=\"legend form-block center\" translate>Change password</div>\n\n  <c8y-form-group class=\"tenantField\" id=\"tenantField\" *ngIf=\"loginService.showTenant()\">\n    <label translate>Tenant ID</label>\n    <input\n      [(ngModel)]=\"model.tenantId\"\n      #tenantId=\"ngModel\"\n      type=\"text\"\n      name=\"tenantId\"\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      class=\"form-control\"\n      placeholder=\"{{ 'Tenant ID' | translate }}\"\n      required\n    />\n  </c8y-form-group>\n\n  <c8y-form-group>\n    <label translate>Email address</label>\n    <input\n      [(ngModel)]=\"model.email\"\n      #email=\"ngModel\"\n      type=\"text\"\n      name=\"email\"\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      class=\"form-control\"\n      placeholder=\"{{ 'Email address' | translate }}\"\n      email\n      required\n      [readonly]=\"emailReadOnly\"\n    />\n  </c8y-form-group>\n\n  <div class=\"row content-flex-50\">\n    <div class=\"col-6\">\n      <c8y-form-group>\n        <label translate>New password</label>\n        <input\n          [(ngModel)]=\"model.newPassword\"\n          #newPassword=\"ngModel\"\n          type=\"password\"\n          name=\"newPassword\"\n          class=\"form-control\"\n          placeholder=\"{{ 'New password' | translate }}\"\n          [pattern]=\"passwordPattern\"\n          autocomplete=\"new-password\"\n          [passwordStrengthEnforced]=\"passwordStrengthEnforced\"\n          required\n        />\n        <c8y-messages>\n          <c8y-message\n            name=\"pattern\"\n            [text]=\"loginService.ERROR_MESSAGES.pattern_newPassword\"\n          ></c8y-message>\n        </c8y-messages>\n      </c8y-form-group>\n\n      <c8y-form-group>\n        <label translate>Confirm password</label>\n        <input\n          [(ngModel)]=\"model.newPasswordConfirm\"\n          #newPasswordConfirm=\"ngModel\"\n          type=\"password\"\n          name=\"newPasswordConfirm\"\n          class=\"form-control\"\n          placeholder=\"{{ 'Confirm password' | translate }}\"\n          passwordConfirm=\"newPassword\"\n          autocomplete=\"new-password\"\n          required\n        />\n        <c8y-messages>\n          <c8y-message\n            name=\"passwordConfirm\"\n            [text]=\"loginService.ERROR_MESSAGES.passwordConfirm\"\n          ></c8y-message>\n        </c8y-messages>\n      </c8y-form-group>\n    </div>\n    <div class=\"col-6\">\n      <c8y-password-check-list\n        [password]=\"model.newPassword\"\n        [strengthEnforced]=\"passwordStrengthEnforced\"\n      ></c8y-password-check-list>\n    </div>\n  </div>\n\n  <button\n    title=\"{{ 'Set password' | translate }}\"\n    [disabled]=\"!changePasswordForm.form.valid || isLoading\"\n    type=\"submit\"\n    class=\"btn btn-primary btn-lg btn-block form-group\"\n  >\n    {{ 'Set password' | translate }}\n  </button>\n</form>\n","import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core';\nimport { LoginService } from './login.service';\nimport { ICredentials } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\nimport { gettext } from '../i18n/gettext';\nimport { LoginViews } from './login.model';\nimport { CredentialsFromQueryParamsService } from './credentials-from-query-params.service';\nimport { CredentialsComponentParams } from './credentials-component-params';\n\n@Component({\n  selector: 'c8y-credentials',\n  templateUrl: './credentials.component.html',\n  styles: []\n})\nexport class CredentialsComponent implements OnInit {\n  @Output() onChangeView = new EventEmitter();\n\n  @Input() loginViewParams: CredentialsComponentParams = {\n    disableTenant: false,\n    showTenant: false\n  };\n\n  LOGIN_VIEWS = LoginViews;\n  model: ICredentials = {};\n  isLoading = false;\n  showLoginForm = false;\n  showBasicAuth = false;\n  oauthOptions: any = {};\n  showTenant = false;\n\n  private readonly PASSWORD_RESET_HEADER_NAME = 'passwordresettoken';\n  private readonly NO_PHONE_HEADER_NAME = 'NoPhoneHeader';\n\n  constructor(\n    public loginService: LoginService,\n    public alert: AlertService,\n    private credentialsFromQueryParamsService: CredentialsFromQueryParamsService\n  ) {}\n\n  ngOnInit() {\n    const { oauthOptions, loginMode } = this.loginService;\n    this.model.tenant = this.loginService.getTenant();\n    this.showLoginForm =\n      typeof loginMode.visibleOnLoginPage === 'undefined' || loginMode.visibleOnLoginPage;\n    this.showBasicAuth = loginMode.type === 'BASIC';\n    this.oauthOptions = oauthOptions;\n    const credentialsFromQueryParams =\n      this.credentialsFromQueryParamsService.getCredentialsFromQueryParams();\n    Object.assign(this.model, credentialsFromQueryParams);\n    this.showTenant = this.loginViewParams.showTenant || this.loginService.showTenant();\n  }\n\n  redirectToOauth() {\n    this.loginService.redirectToOauth();\n  }\n\n  /**\n   * Allows to login into the application using basic auth.\n   * If successful logged in the client is set in shared/cumulocity.service.ts\n   */\n  async login() {\n    try {\n      this.isLoading = true;\n      const basicAuth = this.loginService.useBasicAuth(this.model);\n      await this.loginService.login(basicAuth, this.model);\n    } catch (e) {\n      if (e.res && e.res.headers && e.res.headers.get(this.PASSWORD_RESET_HEADER_NAME)) {\n        this.handlePasswordReset(e.res);\n      } else if (e.res && e.res.status === 401 && /pin.*generated/i.test(e.data.message)) {\n        this.handleSmsChallenge(e.data.message);\n      } else if (e.res && e.res.status === 401 && /TOTP/i.test(e.data.message)) {\n        this.handleTotpChallenge(e.data.message);\n      } else if (\n        e.res &&\n        e.res.headers &&\n        e.res.headers.get(this.NO_PHONE_HEADER_NAME) &&\n        !this.loginService.isSupportUser(this.model)\n      ) {\n        this.handleNoPhoneNumberProvided();\n      } else {\n        this.loginService.generateOauthToken(this.model);\n        this.loginService.reset();\n        this.alert.addServerFailure(e);\n      }\n    } finally {\n      this.isLoading = false;\n    }\n  }\n\n  private handlePasswordReset(e: any) {\n    this.alert.removeLastDanger();\n    this.model.token = e.headers.get(this.PASSWORD_RESET_HEADER_NAME);\n    this.onChangeView.emit({ view: LoginViews.ChangePassword, credentials: this.model });\n  }\n\n  private handleTotpChallenge(message) {\n    if (/TOTP setup required/i.test(message)) {\n      this.onChangeView.emit({ view: LoginViews.TotpSetup, credentials: this.model });\n    } else {\n      this.onChangeView.emit({ view: LoginViews.TotpChallenge, credentials: this.model });\n    }\n  }\n\n  private handleSmsChallenge(message: string) {\n    if (/pin has already been generated/i.test(message)) {\n      this.alert.warning(\n        gettext(\n          'The verification code was already sent. For a new verification code, please click on the link above.'\n        )\n      );\n    }\n    this.alert.removeLastDanger();\n    this.onChangeView.emit({ view: LoginViews.SmsChallenge, credentials: this.model });\n  }\n\n  private handleNoPhoneNumberProvided() {\n    this.onChangeView.emit({ view: LoginViews.ProvidePhoneNumber, credentials: this.model });\n    this.alert.warning(\n      gettext(\n        'Two-factor authentication has been turned on for this account. Provide your phone number above to save it in your user profile and start receiving verification codes via SMS.'\n      )\n    );\n  }\n}\n","<div\n  id=\"oauth\"\n  *ngIf=\"oauthOptions.initRequest && oauthOptions.visibleOnLoginPage\"\n>\n  <button\n    class=\"btn btn-default btn-block btn-lg form-group m-t-8\"\n    title=\"{{ oauthOptions.buttonName | translate }}\"\n    type=\"button\"\n    (click)=\"redirectToOauth()\"\n  >\n    <i\n      class=\"pull-left\"\n      [c8yIcon]=\"'sign-in'\"\n    ></i>\n    {{ oauthOptions.buttonName | translate }}\n  </button>\n</div>\n\n<form\n  class=\"loginForm\"\n  (ngSubmit)=\"login()\"\n  #loginForm=\"ngForm\"\n  *ngIf=\"showLoginForm\"\n  novalidate\n>\n  <span\n    class=\"legend form-block center\"\n    *ngIf=\"!(oauthOptions.initRequest && oauthOptions.visibleOnLoginPage); else orLegend\"\n    translate\n  >\n    Login\n  </span>\n\n  <ng-template #orLegend>\n    <div\n      class=\"legend form-block center\"\n      translate\n    >\n      or\n    </div>\n  </ng-template>\n\n  <c8y-form-group\n    class=\"tenantField\"\n    id=\"tenantField\"\n    *ngIf=\"showTenant\"\n  >\n    <label\n      for=\"tenant\"\n      translate\n    >\n      Tenant ID\n    </label>\n    <input\n      class=\"form-control\"\n      id=\"tenant\"\n      placeholder=\"{{ 'e.g.' | translate }} t12345\"\n      name=\"tenant\"\n      type=\"text\"\n      required\n      [(ngModel)]=\"model.tenant\"\n      #tenant=\"ngModel\"\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      placeholder-no-required-hint\n      [readonly]=\"loginViewParams.disableTenant\"\n    />\n  </c8y-form-group>\n  <c8y-form-group>\n    <label\n      for=\"user\"\n      translate\n    >\n      Username\n    </label>\n    <input\n      class=\"form-control\"\n      id=\"user\"\n      placeholder=\"{{ 'e.g. joe or joe.doe@example.com`LOCALIZE`' | translate }}\"\n      name=\"user\"\n      type=\"text\"\n      required\n      [(ngModel)]=\"model.user\"\n      #user=\"ngModel\"\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      placeholder-no-required-hint\n    />\n  </c8y-form-group>\n  <c8y-form-group>\n    <label\n      for=\"password\"\n      translate\n    >\n      Password\n    </label>\n    <c8y-password-input\n      name=\"password\"\n      required\n      [id]=\"'password'\"\n      [(ngModel)]=\"model.password\"\n      [autocomplete]=\"'off'\"\n    ></c8y-password-input>\n  </c8y-form-group>\n  <div\n    class=\"form-group\"\n    *ngIf=\"showBasicAuth\"\n  >\n    <label\n      class=\"c8y-checkbox\"\n      title=\"{{ 'Remember me' | translate }}\"\n    >\n      <input\n        name=\"remember\"\n        type=\"checkbox\"\n        [(ngModel)]=\"loginService.rememberMe\"\n      />\n      <span></span>\n      <span>{{ 'Remember me' | translate }}</span>\n    </label>\n  </div>\n  <button\n    class=\"btn btn-primary btn-lg btn-block form-group\"\n    title=\"{{ 'Log in' | translate }}\"\n    type=\"submit\"\n    [disabled]=\"!loginForm.form.valid || isLoading\"\n  >\n    {{ 'Log in' | translate }}\n  </button>\n  <div class=\"text-center m-t-8\">\n    <button\n      class=\"btn btn-link btn-sm\"\n      title=\"{{ 'Forgot password?' | translate }}\"\n      type=\"button\"\n      (click)=\"onChangeView.emit({ view: LOGIN_VIEWS.RecoverPassword })\"\n    >\n      {{ 'Forgot password?' | translate }}\n    </button>\n  </div>\n</form>\n","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { ICredentials, UserService } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\nimport { LoginService } from './login.service';\nimport { LoginViews } from './login.model';\nimport { gettext } from '../i18n/gettext';\n\n@Component({\n  selector: 'c8y-totp-auth',\n  templateUrl: './totp-auth.component.html'\n})\nexport class TotpAuthComponent implements OnInit {\n  @Input() credentials: ICredentials;\n  @Input() view: LoginViews;\n  @Output() onCancel = new EventEmitter();\n  LOGIN_VIEWS = LoginViews;\n  loading = false;\n  hasError = false;\n  isSetup = false;\n\n  constructor(\n    public loginService: LoginService,\n    private userService: UserService,\n    private alert: AlertService\n  ) {}\n\n  /**\n   * In case of a setup we need the user to be authorized\n   * first.\n   */\n  async ngOnInit() {\n    if (this.view === this.LOGIN_VIEWS.TotpSetup) {\n      await this.loginService.switchLoginMode(this.credentials);\n      this.isSetup = true;\n    }\n  }\n\n  async onTotpSuccess(code) {\n    try {\n      this.loading = true;\n      this.hasError = false;\n      this.credentials.tfa = code;\n      if (this.isSetup) {\n        await this.userService.activateTotp();\n      }\n      await this.loginService.switchLoginMode(this.credentials);\n      await this.loginService.verifyAppAccess();\n      await this.loginService.authFulfilled();\n    } catch (e) {\n      this.alert.removeLastDanger();\n      if (e.data && e.data.message === 'Authentication failed! : User account is locked') {\n        this.alert.warning(gettext('Authentication failed due to: user account is locked.'));\n      } else {\n        this.alert.addServerFailure(e);\n        this.hasError = true;\n      }\n    } finally {\n      this.loading = false;\n    }\n  }\n}\n","<div\n  class=\"legend form-block center\"\n  translate\n>\n  Two-factor authentication\n</div>\n\n<c8y-totp-setup *ngIf=\"isSetup\">\n</c8y-totp-setup>\n<c8y-totp-challenge\n  [isModal]=\"false\"\n  [loading]=\"loading\"\n  [hasError]=\"hasError\"\n  [verify]=\"view === LOGIN_VIEWS.TotpSetup\"\n  (onSuccess)=\"onTotpSuccess($event)\"\n  (totpUnconfirmedEmitter)=\"onCancel.emit()\"\n></c8y-totp-challenge>\n\n","import { Component, Output, EventEmitter } from '@angular/core';\nimport { LoginViews } from './login.model';\nimport { FetchClient } from '@c8y/client';\nimport { AppStateService } from '../common/ui-state.service';\nimport { LoginService } from './login.service';\nimport { AlertService } from '../alert/alert.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { gettext } from '../i18n/gettext';\n\n@Component({\n  selector: 'c8y-tenant-id-setup',\n  templateUrl: './tenant-id-setup.component.html',\n  styles: []\n})\n\n/**\n * `TenantIdSetupComponent` is intended to be shown when tenant's id cannot be determined based on the current URL.\n * It asks the user to provide target tenant's id and then it fetches login options for this tenant.\n * In case of OAI-Secure login mode, login options will contain `domain` property set by backend.\n * The component will redirect user to this domain, preserving URL path and params.\n */\nexport class TenantIdSetupComponent {\n  @Output() onChangeView = new EventEmitter();\n  LOGIN_VIEWS = LoginViews;\n  model = {\n    tenant: ''\n  };\n\n  constructor(\n    private client: FetchClient,\n    private ui: AppStateService,\n    private loginService: LoginService,\n    private alert: AlertService,\n    private translateService: TranslateService\n  ) {}\n\n  /**\n   * Sets up login mode for particular tenant. In case of OAI-Secure will redirect user to tenant domain.\n   */\n  async setupLoginMode() {\n    this.client.tenant = this.model.tenant;\n    try {\n      await this.ui.refreshLoginOptions();\n      this.loginService.initLoginOptions();\n      this.redirectToCorrectDomain();\n    } catch (e) {\n      if (e.res && e.res.status === 401) {\n        this.alert.danger(\n          this.translateService.instant(\n            gettext('Could not find tenant with ID \"{{ tenantId }}\".'),\n            { tenantId: this.model.tenant }\n          )\n        );\n      } else {\n        this.alert.addServerFailure(e);\n      }\n    }\n  }\n\n  /**\n   * Redirects to tenant domain when login mode contains domain.\n   */\n  redirectToCorrectDomain() {\n    const loginRedirectDomain = this.loginService.loginMode.loginRedirectDomain;\n    if (loginRedirectDomain) {\n      const alreadyOnCorrectDomain = window.location.href.includes(loginRedirectDomain);\n      if (!alreadyOnCorrectDomain) {\n        this.loginService.redirectToDomain(loginRedirectDomain);\n      } else {\n        this.onChangeView.emit({\n          view: LoginViews.Credentials,\n          loginViewParams: { showTenant: true, disableTenant: true }\n        });\n      }\n    } else {\n      this.onChangeView.emit({ view: LoginViews.Credentials });\n    }\n  }\n}\n","<form #tenantIdSetupForm=\"ngForm\" class=\"loginForm\" (ngSubmit)=\"setupLoginMode()\" novalidate>\n  <div class=\"legend form-block center\" translate>Tenant setup</div>\n  <c8y-form-group class=\"tenantField\" id=\"tenantField\">\n    <label for=\"tenant\" translate>Tenant ID</label>\n    <input\n      [(ngModel)]=\"model.tenant\"\n      #tenant=\"ngModel\"\n      type=\"text\"\n      name=\"tenant\"\n      id=\"tenant\"\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      class=\"form-control\"\n      placeholder=\"{{ 'e.g.' | translate }} t12345\"\n      placeholder-no-required-hint\n      required\n    />\n  </c8y-form-group>\n\n  <button\n    title=\"{{ 'Apply' | translate }}\"\n    type=\"submit\"\n    class=\"btn btn-primary btn-lg btn-block form-group\"\n    [disabled]=\"!tenantIdSetupForm.form.valid\"\n  >\n    {{ 'Apply' | translate }}\n  </button>\n</form>\n","import { Component, Input, OnInit, HostListener, OnDestroy } from '@angular/core';\nimport { ICredentials, TenantLoginOptionType } from '@c8y/client';\nimport { LoginService } from './login.service';\nimport { OptionsService } from '../common/options.service';\nimport { LoginViews, SsoData, SsoError } from './login.model';\nimport { AlertService } from '../alert/alert.service';\nimport { gettext } from '../i18n/gettext';\nimport { CredentialsFromQueryParamsService } from './credentials-from-query-params.service';\nimport { CredentialsComponentParams } from './credentials-component-params';\nimport { AppStateService } from '../common/ui-state.service';\n\n@Component({\n  selector: 'c8y-login',\n  templateUrl: './login.component.html',\n  styles: []\n})\nexport class LoginComponent implements OnInit, OnDestroy {\n  currentView: LoginViews = LoginViews.None;\n  LOGIN_VIEWS = LoginViews;\n\n  disabled = false;\n\n  @Input() name: string;\n\n  credentials: ICredentials = {};\n  loginViewParams: CredentialsComponentParams | { [key: string]: any } = {};\n  displayAlerts = false;\n  private TOKEN_PARAM = 'token';\n\n  /**\n   * Just DI.\n   */\n  constructor(\n    public loginService: LoginService,\n    private options: OptionsService,\n    private alert: AlertService,\n    private credentialsFromQueryParamsService: CredentialsFromQueryParamsService,\n    public ui: AppStateService\n  ) {}\n\n  ngOnInit() {\n    const token = this.getParamAndClear(this.TOKEN_PARAM);\n    const ssoData = this.getSsoData();\n    if (ssoData) {\n      this.handleSso(ssoData);\n    } else if (this.loginService.isFirstLogin) {\n      if (!token) {\n        this.loginAutomatically();\n      } else {\n        this.credentials.token = token;\n        this.reset();\n      }\n    }\n    this.loginService.isFirstLogin = false;\n  }\n\n  ngOnDestroy(): void {\n    // make sure that we do not have any queryParameters related to credentials after logging in or even if we were already logged in.\n    this.credentialsFromQueryParamsService.removeCredentialsFromQueryParams();\n  }\n\n  handleLoginTemplate(event: {\n    view: LoginViews;\n    credentials?: ICredentials;\n    loginViewParams?: CredentialsComponentParams | { [key: string]: any };\n  }) {\n    this.currentView = event.view;\n    this.credentials = event.credentials || {};\n    this.loginViewParams = event.loginViewParams || {};\n  }\n\n  @HostListener('keyup', ['$event']) onkeyup(event: KeyboardEvent) {\n    if (event.key !== 'Enter') {\n      this.loginService.cleanMessages();\n    }\n  }\n\n  reset() {\n    this.loginService.reset();\n    this.setView();\n    this.loginService.cleanMessages();\n  }\n\n  private async loginAutomatically() {\n    this.loginService.automaticLoginInProgress$.next(true);\n    try {\n      await this.loginService.login();\n    } catch (e) {\n      const preferredLoginOptionType = this.loginService.loginMode.type;\n      if (preferredLoginOptionType === TenantLoginOptionType.OAUTH2) {\n        this.loginService.redirectToOauth();\n      } else {\n        this.reset();\n        if (\n          preferredLoginOptionType === TenantLoginOptionType.OAUTH2_INTERNAL &&\n          window.location.protocol !== 'https:'\n        ) {\n          this.alert.danger(gettext('Current login mode only supports HTTPS.'));\n        } else if (e.res && e.res.status === 403) {\n          this.alert.addServerFailure(e);\n        }\n      }\n    }\n    this.loginService.automaticLoginInProgress$.next(false);\n  }\n\n  private setView() {\n    if (this.credentials && this.credentials.token) {\n      this.handleLoginTemplate({ view: LoginViews.ChangePassword, credentials: this.credentials });\n    } else if (this.loginService.showTenantSetup()) {\n      this.handleLoginTemplate({ view: LoginViews.TenantIdSetup });\n    } else {\n      this.handleLoginTemplate({ view: LoginViews.Credentials });\n    }\n  }\n\n  private getParamAndClear(paramName: string): string | undefined {\n    const paramValue = this.options.get<string>(paramName);\n    if (paramValue) {\n      this.options.set(paramName, undefined); // only use once\n    }\n    return paramValue;\n  }\n\n  private getSsoData(): SsoData | SsoError {\n    const code = this.getParamAndClear('code');\n    const sessionState = this.getParamAndClear('session_state');\n    if (code) {\n      return { sessionState, code };\n    }\n\n    const ssoError = this.getParamAndClear('error');\n    const ssoErrorDescription = this.getParamAndClear('error_description');\n    if (ssoError && ssoErrorDescription) {\n      return { ssoError, ssoErrorDescription };\n    }\n  }\n\n  private handleSso(ssoData: SsoData | SsoError) {\n    if ('ssoError' in ssoData) {\n      this.loginService.showSsoError(\n        decodeURIComponent(ssoData.ssoErrorDescription).replace(/\\+/g, '%20')\n      );\n      this.reset();\n    } else {\n      this.loginService\n        .loginBySso(ssoData)\n        .then(() => this.loginService.login())\n        .catch(e => {\n          this.reset();\n          if (e.res?.status) {\n            this.alert.addServerFailure(e);\n          }\n        });\n    }\n  }\n}\n","<div\n  class=\"loading card fadeInUp animated elevation-lg\"\n  *ngIf=\"currentView !== LOGIN_VIEWS.None\"\n  [ngSwitch]=\"currentView\"\n>\n  <main class=\"card-block p-b-0\">\n    <span class=\"mainlogo\"></span>\n\n    <c8y-credentials\n      *ngSwitchCase=\"LOGIN_VIEWS.Credentials\"\n      (onChangeView)=\"handleLoginTemplate($event)\"\n      [loginViewParams]=\"loginViewParams\"\n    ></c8y-credentials>\n    <c8y-recover-password\n      *ngSwitchCase=\"LOGIN_VIEWS.RecoverPassword\"\n      (onChangeView)=\"handleLoginTemplate($event)\"\n    ></c8y-recover-password>\n    <c8y-change-password\n      *ngSwitchCase=\"LOGIN_VIEWS.ChangePassword\"\n      (onChangeView)=\"handleLoginTemplate($event)\"\n      [credentials]=\"credentials\"\n    ></c8y-change-password>\n    <c8y-totp-auth\n      *ngSwitchCase=\"LOGIN_VIEWS.TotpChallenge\"\n      (onCancel)=\"reset()\"\n      [view]=\"currentView\"\n      [credentials]=\"credentials\"\n    ></c8y-totp-auth>\n    <c8y-totp-auth\n      *ngSwitchCase=\"LOGIN_VIEWS.TotpSetup\"\n      (onCancel)=\"reset()\"\n      [view]=\"currentView\"\n      [credentials]=\"credentials\"\n    ></c8y-totp-auth>\n    <c8y-sms-challenge\n      *ngSwitchCase=\"LOGIN_VIEWS.SmsChallenge\"\n      (onCancel)=\"reset()\"\n      [credentials]=\"credentials\"\n    ></c8y-sms-challenge>\n\n    <c8y-provide-phone-number\n      *ngSwitchCase=\"LOGIN_VIEWS.ProvidePhoneNumber\"\n      (onCancel)=\"reset()\"\n      (onChangeView)=\"handleLoginTemplate($event)\"\n      [credentials]=\"credentials\"\n    ></c8y-provide-phone-number>\n    <c8y-tenant-id-setup\n      *ngSwitchCase=\"LOGIN_VIEWS.TenantIdSetup\"\n      (onChangeView)=\"handleLoginTemplate($event)\"\n    ></c8y-tenant-id-setup>\n\n    <div\n      class=\"text-center m-t-8\"\n      *ngIf=\"!!(ui.state$ | async).loginExtraLink\"\n    >\n      <div *ngIf=\"!!(ui.state$ | async).loginExtraLink.length; else singleExtraLink\">\n        <a\n          class=\"small d-block m-t-8\"\n          title=\"{{ link.label }}\"\n          role=\"button\"\n          *ngFor=\"let link of (ui.state$ | async).loginExtraLink\"\n          [href]=\"link.url\"\n        >\n          {{ link.label }}\n        </a>\n      </div>\n      <ng-template #singleExtraLink>\n        <a\n          class=\"small\"\n          title=\"{{ (ui.state$ | async).loginExtraLink.label }}\"\n          role=\"button\"\n          [href]=\"(ui.state$ | async).loginExtraLink.url\"\n        >\n          {{ (ui.state$ | async).loginExtraLink.label }}\n        </a>\n      </ng-template>\n    </div>\n\n    <c8y-alert-outlet position=\"static\"></c8y-alert-outlet>\n  </main>\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 { ActivatedRoute, NavigationExtras, Router } from '@angular/router';\nimport { Tab } from './tab.model';\nimport { HeaderService } from '../header/header.service';\nimport { TabsService } from './tabs.service';\n\n@Component({\n  selector: 'c8y-tabs-outlet,c8y-ui-tabs',\n  templateUrl: './tabs-outlet.component.html'\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    this.header.toggle();\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  <button\n    class=\"tabs-slider tabs-slider-left\"\n    title=\"{{ 'Scroll to the left' | translate }}\"\n    type=\"button\"\n    #left\n    *ngIf=\"showLeft || showRight\"\n    [disabled]=\"!showLeft\"\n    (click)=\"scroll('left')\"\n  >\n    <i [c8yIcon]=\"'chevron-left'\"></i>\n  </button>\n  <button\n    class=\"tabs-slider tabs-slider-right\"\n    title=\"{{ 'Scroll to the right' | translate }}\"\n    type=\"button\"\n    #right\n    *ngIf=\"showRight || showLeft\"\n    [disabled]=\"!showRight\"\n    (click)=\"scroll('right')\"\n  >\n    <i [c8yIcon]=\"'chevron-right'\"></i>\n  </button>\n  <ng-container *ngIf=\"!outletName\">\n    <div\n      class=\"nav nav-tabs nav-tabsc8y\"\n      role=\"list\"\n      #tabsContainer\n    >\n      <ng-container *ngFor=\"let tab of tabs\">\n        <div\n          role=\"listitem\"\n          [ngClass]=\"{ active: rla?.isActive }\"\n          *ngIf=\"!tab.component && !tab.hide\"\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            <i\n              [c8yIcon]=\"tab?.icon\"\n              *ngIf=\"!tab.template && tab?.icon\"\n            ></i>\n            <span\n              title=\"{{ tab?.label | translate }}\"\n              *ngIf=\"!tab.template && !tab.component\"\n            >\n              {{ tab?.label | translate }}\n            </span>\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              *ngIf=\"!tab.template && tab?.badge\"\n            ></span>\n          </a>\n          <ng-container *ngTemplateOutlet=\"tab.template; injector: tab.injector\"></ng-container>\n        </div>\n        <ng-container *ngComponentOutlet=\"tab.component; injector: tab.injector\"></ng-container>\n      </ng-container>\n    </div>\n  </ng-container>\n\n  <div\n    class=\"component-tabs nav nav-tabs nav-tabsc8y\"\n    *ngIf=\"outletName\"\n    #tabsContainer\n  >\n    <ng-container *ngFor=\"let tab of tabs; trackBy: trackByPath\">\n      <div\n        [ngClass]=\"{ active: tab.isActive }\"\n        [routerLink]=\"tab.path\"\n        [routerLinkActive]=\"tab.path ? 'active' : ''\"\n        [queryParamsHandling]=\"'preserve'\"\n      >\n        <a\n          class=\"pointer\"\n          title=\"{{ tab?.label | translate }}\"\n          (click)=\"tab.onSelect?.emit()\"\n        >\n          <i [c8yIcon]=\"tab?.icon\"></i>\n          <span>\n            {{ tab?.label | translate }}\n          </span>\n        </a>\n      </div>\n    </ng-container>\n  </div>\n</div>\n\n<div\n  class=\"visible-xs mobile-tabs\"\n  *ngIf=\"!outletName\"\n>\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        <ng-container *ngFor=\"let tab of tabs\">\n          <option\n            *ngIf=\"!tab.component\"\n            [value]=\"tab.path\"\n            [selected]=\"isActive(tab)\"\n          >\n            {{ tab?.label | translate }}\n          </option>\n        </ng-container>\n      </select>\n    </li>\n    <ng-container *ngFor=\"let tab of tabs\">\n      <ng-container *ngIf=\"tab.component\">\n        <ng-container\n          *c8yComponentOutlet=\"tab.component; environmentInjector: tab.injector\"\n        ></ng-container>\n      </ng-container>\n    </ng-container>\n  </ul>\n</div>\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  @Input() pageTitleUpdate = true;\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})\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';\n\n@Component({\n  selector: 'c8y-stepper-progress',\n  templateUrl: './stepper-progress.component.html'\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';\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})\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 stepState = this._getIndicatorType(index, state);\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","<ul *ngIf=\"!hideStepProgress\" class=\"c8y-stepper\" [ngClass]=\"customClasses\">\n  <li *ngFor=\"let step of steps; let i = index\">\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    <div *ngIf=\"!useStepLabelsAsTitlesOnly\" class=\"c8y-step__label\"  title=\"{{ step.label | translate }}\">\n      {{ step.label | translate }}\n    </div>\n  </li>\n</ul>\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';\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})\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';\n\n@Component({\n  selector: 'c8y-stepper-outlet',\n  templateUrl: './stepper-outlet.component.html'\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 { 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})\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, 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 '../i18n/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';\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})\nexport class SetupComponent implements OnInit {\n  /**\n   * A subject which can be used to exchange data between\n   * steps.\n   */\n  data$ = new BehaviorSubject<any>({});\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<div\n  class=\"card content-fullpage fadeInRightBig animated\"\n  *ngIf=\"currentSetupState !== setupState.START\"\n>\n  <c8y-stepper-outlet\n    [showDefaultButtons]=\"false\"\n    [steps]=\"steps\"\n    class=\"d-contents\"\n  ></c8y-stepper-outlet>\n</div>\n\n<div\n  class=\"card content-fullpage d-flex d-col zoomIn animated\"\n  *ngIf=\"currentSetupState === setupState.START\"\n>\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          <svg\n            viewBox=\"0 0 1046 770\"\n            fill=\"none\"\n            style=\"max-width: 330px; margin: auto\"\n            xmlns=\"http://www.w3.org/2000/svg\"\n          >\n            <g clip-path=\"url(#clip0_701_64)\">\n              <path\n                d=\"M277.838 568.674C124.637 568.674 0 443.786 0 290.277C0 136.768 124.637 11.8799 277.838 11.8799C322.352 11.9257 366.206 22.6646 405.724 43.1962C445.242 63.7278 479.271 93.4536 504.959 129.881L502.33 131.742C476.94 95.7356 443.305 66.3533 404.244 46.0589C365.184 25.7646 321.837 15.1497 277.838 15.1043C126.413 15.1043 3.2179 138.547 3.2179 290.277C3.2179 442.007 126.413 565.449 277.838 565.449C320.02 565.587 361.659 555.923 399.486 537.217C437.312 518.511 470.295 491.271 495.844 457.639L498.396 459.601C472.548 493.627 439.179 521.186 400.91 540.111C362.641 559.036 320.514 568.813 277.838 568.674V568.674Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M392.7 243.656C389.654 243.656 386.676 242.751 384.144 241.055C381.611 239.36 379.637 236.95 378.471 234.13C377.306 231.31 377.001 228.207 377.595 225.214C378.189 222.22 379.656 219.471 381.81 217.312C383.964 215.154 386.708 213.684 389.696 213.089C392.683 212.494 395.779 212.799 398.594 213.967C401.408 215.135 403.813 217.113 405.505 219.651C407.198 222.189 408.101 225.172 408.101 228.224C408.101 232.317 406.478 236.242 403.59 239.136C400.702 242.03 396.785 243.656 392.7 243.656V243.656Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M398.071 231.454L394.849 228.225L398.071 224.995C398.213 224.854 398.326 224.686 398.403 224.501C398.48 224.316 398.519 224.118 398.52 223.918C398.52 223.718 398.481 223.519 398.405 223.334C398.328 223.149 398.216 222.981 398.075 222.839C397.933 222.697 397.765 222.585 397.581 222.508C397.396 222.432 397.198 222.393 396.998 222.393C396.798 222.393 396.6 222.433 396.416 222.51C396.231 222.587 396.064 222.7 395.923 222.842L392.7 226.072L389.477 222.842C389.192 222.557 388.806 222.397 388.403 222.397C388 222.397 387.614 222.557 387.329 222.842C387.044 223.128 386.884 223.515 386.884 223.919C386.884 224.323 387.044 224.71 387.329 224.995L390.551 228.224L387.329 231.454C387.045 231.739 386.887 232.126 386.887 232.529C386.888 232.932 387.048 233.318 387.332 233.603C387.617 233.888 388.002 234.048 388.404 234.049C388.806 234.05 389.192 233.89 389.477 233.607L392.7 230.377L395.923 233.607C396.064 233.748 396.231 233.86 396.416 233.936C396.6 234.013 396.798 234.052 396.997 234.052C397.197 234.052 397.394 234.013 397.578 233.936C397.763 233.86 397.93 233.748 398.071 233.607C398.212 233.465 398.324 233.297 398.401 233.113C398.477 232.928 398.516 232.73 398.516 232.53C398.516 232.33 398.477 232.132 398.401 231.948C398.324 231.763 398.212 231.595 398.071 231.454Z\"\n                fill=\"white\"\n              />\n              <path\n                d=\"M316.107 61.4203C333.034 61.4203 346.756 47.6709 346.756 30.7102C346.756 13.7494 333.034 0 316.107 0C299.18 0 285.459 13.7494 285.459 30.7102C285.459 47.6709 299.18 61.4203 316.107 61.4203Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M311.926 46.6933C311.397 46.6933 310.875 46.5698 310.401 46.3326C309.928 46.0954 309.516 45.751 309.199 45.3266L300.837 34.1555C300.569 33.7966 300.373 33.3882 300.262 32.9537C300.151 32.5191 300.127 32.0669 300.19 31.6228C300.253 31.1787 300.403 30.7515 300.631 30.3655C300.86 29.9795 301.161 29.6422 301.519 29.3731C301.878 29.104 302.285 28.9081 302.719 28.7968C303.153 28.6855 303.604 28.6609 304.047 28.7243C304.49 28.7878 304.917 28.9381 305.302 29.1667C305.687 29.3952 306.024 29.6976 306.292 30.0565L311.763 37.3643L325.812 16.2476C326.317 15.5003 327.095 14.9833 327.979 14.8093C328.862 14.6353 329.778 14.8185 330.528 15.3189C331.277 15.8193 331.798 16.5963 331.977 17.4803C332.157 18.3643 331.98 19.2835 331.486 20.0374L314.763 45.172C314.46 45.6266 314.054 46.0019 313.576 46.2664C313.099 46.5309 312.566 46.6769 312.021 46.6922L311.926 46.6933Z\"\n                fill=\"white\"\n              />\n              <path\n                d=\"M353.635 86.1143H279.933C275.428 86.1143 271.776 89.7734 271.776 94.2873V97.2286C271.776 101.742 275.428 105.402 279.933 105.402H353.635C358.139 105.402 361.791 101.742 361.791 97.2286V94.2873C361.791 89.7734 358.139 86.1143 353.635 86.1143Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M399.35 124.689H234.217C229.712 124.689 226.061 128.348 226.061 132.862V135.803C226.061 140.317 229.712 143.976 234.217 143.976H399.35C403.855 143.976 407.507 140.317 407.507 135.803V132.862C407.507 128.348 403.855 124.689 399.35 124.689Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M399.35 163.264H234.217C229.712 163.264 226.061 166.923 226.061 171.437V174.378C226.061 178.892 229.712 182.551 234.217 182.551H399.35C403.855 182.551 407.507 178.892 407.507 174.378V171.437C407.507 166.923 403.855 163.264 399.35 163.264Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M298.909 574.554C295.863 574.554 292.885 573.649 290.353 571.953C287.82 570.257 285.846 567.847 284.68 565.027C283.515 562.208 283.21 559.105 283.804 556.111C284.398 553.118 285.865 550.368 288.019 548.21C290.173 546.052 292.917 544.582 295.904 543.986C298.892 543.391 301.988 543.697 304.802 544.865C307.617 546.033 310.022 548.011 311.714 550.548C313.406 553.086 314.31 556.07 314.31 559.122C314.31 563.215 312.687 567.14 309.799 570.034C306.911 572.928 302.993 574.554 298.909 574.554V574.554Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M304.28 562.351L301.057 559.122L304.28 555.893C304.565 555.607 304.725 555.22 304.725 554.816C304.725 554.412 304.565 554.025 304.28 553.74C303.995 553.454 303.609 553.294 303.206 553.294C302.803 553.294 302.416 553.454 302.132 553.74L298.909 556.969L295.686 553.74C295.401 553.454 295.015 553.294 294.612 553.294C294.209 553.294 293.823 553.454 293.538 553.74C293.253 554.025 293.093 554.412 293.093 554.816C293.093 555.22 293.253 555.607 293.538 555.893L296.76 559.122L293.538 562.351C293.253 562.636 293.093 563.024 293.093 563.427C293.093 563.831 293.253 564.218 293.538 564.504C293.823 564.789 294.209 564.95 294.612 564.95C295.015 564.95 295.401 564.789 295.686 564.504L298.909 561.275L302.132 564.504C302.416 564.789 302.803 564.95 303.206 564.95C303.609 564.95 303.995 564.789 304.28 564.504C304.565 564.218 304.725 563.831 304.725 563.427C304.725 563.024 304.565 562.636 304.28 562.351V562.351Z\"\n                fill=\"white\"\n              />\n              <path\n                d=\"M222.316 392.318C239.243 392.318 252.964 378.568 252.964 361.608C252.964 344.647 239.243 330.897 222.316 330.897C205.389 330.897 191.667 344.647 191.667 361.608C191.667 378.568 205.389 392.318 222.316 392.318Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M218.135 377.591C217.606 377.591 217.084 377.467 216.61 377.23C216.137 376.993 215.725 376.648 215.408 376.224L207.046 365.053C206.778 364.694 206.582 364.286 206.471 363.851C206.36 363.417 206.336 362.964 206.399 362.52C206.462 362.076 206.612 361.649 206.84 361.263C207.068 360.877 207.37 360.54 207.728 360.271C208.086 360.002 208.494 359.806 208.928 359.694C209.361 359.583 209.813 359.558 210.256 359.622C210.699 359.685 211.126 359.836 211.511 360.064C211.896 360.293 212.232 360.595 212.501 360.954L217.971 368.262L232.021 347.145C232.268 346.769 232.587 346.445 232.959 346.192C233.332 345.94 233.75 345.763 234.191 345.674C234.631 345.584 235.085 345.582 235.526 345.669C235.968 345.756 236.387 345.929 236.762 346.179C237.136 346.429 237.457 346.75 237.706 347.125C237.956 347.5 238.129 347.92 238.216 348.362C238.302 348.804 238.301 349.259 238.212 349.701C238.122 350.142 237.946 350.562 237.695 350.935L220.972 376.07C220.669 376.524 220.262 376.899 219.785 377.164C219.308 377.428 218.775 377.574 218.23 377.59L218.135 377.591Z\"\n                fill=\"white\"\n              />\n              <path\n                d=\"M259.843 417.012H186.142C181.637 417.012 177.985 420.671 177.985 425.185V428.126C177.985 432.64 181.637 436.299 186.142 436.299H259.843C264.348 436.299 268 432.64 268 428.126V425.185C268 420.671 264.348 417.012 259.843 417.012Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M305.559 455.586H140.426C135.921 455.586 132.269 459.246 132.269 463.759V466.701C132.269 471.215 135.921 474.874 140.426 474.874H305.559C310.064 474.874 313.715 471.215 313.715 466.701V463.759C313.715 459.246 310.064 455.586 305.559 455.586Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M305.559 494.161H140.426C135.921 494.161 132.269 497.82 132.269 502.334V505.276C132.269 509.789 135.921 513.448 140.426 513.448H305.559C310.064 513.448 313.715 509.789 313.715 505.276V502.334C313.715 497.82 310.064 494.161 305.559 494.161Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M617.498 508.712C613.292 508.712 609.18 507.462 605.682 505.121C602.185 502.779 599.459 499.451 597.85 495.557C596.24 491.663 595.819 487.379 596.639 483.245C597.46 479.111 599.485 475.314 602.46 472.334C605.434 469.354 609.223 467.324 613.349 466.502C617.474 465.68 621.75 466.101 625.636 467.714C629.523 469.327 632.844 472.059 635.181 475.563C637.518 479.068 638.765 483.188 638.765 487.402C638.765 493.054 636.524 498.474 632.536 502.471C628.548 506.467 623.138 508.712 617.498 508.712V508.712Z\"\n                fill=\"var(--c8y-brand-70)\"\n              />\n              <path\n                d=\"M624.915 491.861L620.465 487.402L624.915 482.943C625.308 482.549 625.529 482.014 625.529 481.457C625.529 480.899 625.308 480.364 624.915 479.97C624.522 479.576 623.988 479.354 623.432 479.354C622.875 479.354 622.342 479.576 621.948 479.97L617.498 484.43L613.047 479.97C612.654 479.576 612.12 479.354 611.564 479.354C611.008 479.354 610.474 479.576 610.081 479.97C609.687 480.364 609.466 480.899 609.466 481.457C609.466 482.014 609.687 482.549 610.081 482.943L614.531 487.402L610.081 491.862C609.687 492.256 609.466 492.791 609.466 493.348C609.466 493.906 609.687 494.44 610.081 494.834C610.474 495.229 611.008 495.45 611.564 495.45C612.12 495.45 612.654 495.229 613.047 494.834L617.498 490.375L621.948 494.834C622.341 495.229 622.875 495.45 623.431 495.45C623.988 495.45 624.521 495.229 624.915 494.834C625.308 494.44 625.529 493.906 625.529 493.348C625.529 492.791 625.308 492.256 624.915 491.862L624.915 491.861Z\"\n                fill=\"white\"\n              />\n              <path\n                d=\"M524.838 257.062C548.212 257.062 567.161 238.075 567.161 214.654C567.161 191.233 548.212 172.246 524.838 172.246C501.464 172.246 482.516 191.233 482.516 214.654C482.516 238.075 501.464 257.062 524.838 257.062Z\"\n                fill=\"var(--c8y-brand-primary)\"\n              />\n              <path\n                d=\"M519.065 236.725C518.334 236.725 517.613 236.555 516.959 236.227C516.306 235.899 515.737 235.424 515.299 234.838L503.753 219.412C503.382 218.916 503.112 218.352 502.958 217.752C502.805 217.152 502.771 216.527 502.858 215.914C502.946 215.301 503.153 214.711 503.468 214.178C503.783 213.645 504.2 213.179 504.694 212.807C505.189 212.436 505.752 212.165 506.35 212.012C506.949 211.858 507.573 211.824 508.185 211.912C508.797 211.999 509.385 212.207 509.917 212.522C510.449 212.838 510.914 213.256 511.285 213.751L518.839 223.843L538.24 194.682C538.583 194.167 539.024 193.724 539.538 193.379C540.052 193.034 540.628 192.794 541.234 192.672C541.841 192.551 542.465 192.55 543.072 192.67C543.678 192.79 544.255 193.029 544.77 193.373C545.284 193.717 545.726 194.158 546.07 194.673C546.414 195.188 546.654 195.766 546.775 196.373C546.896 196.981 546.897 197.607 546.777 198.214C546.656 198.822 546.418 199.4 546.075 199.916L522.982 234.624C522.564 235.252 522.003 235.77 521.344 236.135C520.685 236.501 519.948 236.702 519.196 236.723C519.152 236.724 519.108 236.725 519.065 236.725Z\"\n                fill=\"white\"\n              />\n              <path\n                d=\"M579.767 291.162H471.778C467.273 291.162 463.621 294.821 463.621 299.335V309.623C463.621 314.136 467.273 317.796 471.778 317.796H579.767C584.272 317.796 587.924 314.136 587.924 309.623V299.335C587.924 294.821 584.272 291.162 579.767 291.162Z\"\n                fill=\"var(--c8y-brand-30)\"\n              />\n              <path\n                d=\"M642.896 344.43H408.649C404.145 344.43 400.493 348.089 400.493 352.603V362.891C400.493 367.405 404.145 371.064 408.649 371.064H642.896C647.4 371.064 651.052 367.405 651.052 362.891V352.603C651.052 348.089 647.4 344.43 642.896 344.43Z\"\n                fill=\"var(--c8y-brand-30)\"\n              />\n              <path\n                d=\"M642.896 397.698H408.649C404.145 397.698 400.493 401.357 400.493 405.871V416.159C400.493 420.673 404.145 424.332 408.649 424.332H642.896C647.4 424.332 651.052 420.673 651.052 416.159V405.871C651.052 401.357 647.4 397.698 642.896 397.698Z\"\n                fill=\"var(--c8y-brand-30)\"\n              />\n              <path\n                d=\"M725.115 747.47L704.591 747.468L694.826 668.144L725.12 668.145L725.115 747.47Z\"\n                fill=\"#EDC9AB\"\n              />\n              <path\n                d=\"M724.568 740.753L702.654 731.821L702.026 731.563L689.927 740.753C683.096 740.754 676.544 743.474 671.714 748.314C666.883 753.154 664.169 759.719 664.168 766.564V767.402H730.344V740.753H724.568Z\"\n                fill=\"#011F3D\"\n              />\n              <path\n                d=\"M898.592 730.244L878.992 736.346L846.172 663.497L875.101 654.492L898.592 730.244Z\"\n                fill=\"#EDC9AB\"\n              />\n              <path\n                d=\"M896.079 723.992L872.507 721.98L871.831 721.92L862.999 734.293C856.475 736.326 851.025 740.871 847.845 746.93C844.666 752.989 844.018 760.065 846.045 766.602L846.293 767.402L909.488 747.723L901.595 722.275L896.079 723.992Z\"\n                fill=\"#011F3D\"\n              />\n              <path\n                d=\"M816.472 341.116L824.819 364.905V377.764L823.656 391.905L836.576 439.067L846.711 543.067L897.716 697.017L858.607 708.302L758.756 456.763L727.218 711.187L691.453 710.231C691.453 710.231 685.334 695.405 686.943 687.344C688.552 679.283 688.552 688.956 688.552 679.283C688.552 669.61 681.577 673.812 686.674 666.068C691.77 658.325 691.136 651.546 691.453 646.874C691.77 642.203 688.552 453.577 688.552 447.128C688.552 440.679 687.437 442.092 687.995 435.743C688.552 429.394 695.624 432.004 693.697 421.026C691.77 410.048 691.136 411.967 691.453 403.752C691.77 395.538 696.204 347.374 696.204 347.374L816.472 341.116Z\"\n                fill=\"#011F3D\"\n              />\n              <path\n                d=\"M682.617 348.855L754.315 279.572L774.187 223.19L744.875 210.418C729.819 224.87 713.544 269.883 713.544 269.883L664.205 332.779C663.821 332.911 663.437 333.051 663.059 333.219C660.836 334.2 658.904 335.74 657.45 337.689C655.995 339.637 655.066 341.929 654.754 344.343C654.441 346.756 654.755 349.209 655.665 351.465C656.575 353.722 658.051 355.705 659.949 357.222C661.848 358.74 664.105 359.742 666.503 360.13C668.9 360.518 671.357 360.28 673.636 359.439C675.915 358.598 677.939 357.182 679.512 355.328C681.085 353.474 682.155 351.244 682.617 348.855V348.855Z\"\n                fill=\"#EDC9AB\"\n              />\n              <path\n                d=\"M736.627 216.714L773.808 228.541L773.948 228.517C787.786 226.195 799.27 203.547 806.465 184.957C808.833 178.826 808.789 172.022 806.342 165.922C803.895 159.821 799.227 154.879 793.283 152.095C788.885 150.071 784.009 149.32 779.206 149.927C774.404 150.534 769.867 152.475 766.108 155.531L747.015 171.163L736.627 216.714Z\"\n                fill=\"var(--c8y-brand-primary)\"\n              />\n              <path\n                d=\"M822.788 371.677L823.005 371.387C834.606 355.971 818.74 317.794 816.341 312.258L827.127 309.056L825.247 288.478L824.342 279.301L832.728 271.321L832.757 271.117L838.524 229.989L846.071 202.768C848.915 192.477 848.975 181.613 846.245 171.291C843.515 160.97 838.092 151.562 830.534 144.034L815.107 128.686L796.624 99.6977L765.635 98.896L754.491 118.732C744.128 120.851 734.836 126.546 728.232 134.824C721.628 143.103 718.132 153.441 718.353 164.036L719.402 216.843L708.283 282.27L707.971 294.155L697.057 305.695L699.075 317.362L690.911 320.62L686.916 337.198C685.39 339.111 675.316 351.87 675.225 355.428C675.211 355.962 675.591 356.488 676.421 357.082C682.941 361.757 719.388 371.887 735.791 365.797C753.264 359.316 821.742 371.488 822.432 371.612L822.788 371.677Z\"\n                fill=\"var(--c8y-brand-primary)\"\n              />\n              <path\n                d=\"M746.822 204.276L730.992 172.653C708.015 174.226 662.413 200.846 662.413 200.846L576.13 219.176C573.574 218.192 570.805 217.899 568.1 218.328C565.395 218.757 562.851 219.893 560.724 221.62C558.596 223.348 556.96 225.606 555.981 228.169C555.001 230.731 554.713 233.507 555.144 236.216C555.576 238.926 556.712 241.474 558.438 243.603C560.165 245.733 562.421 247.37 564.979 248.348C567.538 249.326 570.308 249.612 573.012 249.177C575.715 248.741 578.257 247.599 580.38 245.867L690.136 237.984L746.822 204.276Z\"\n                fill=\"#EDC9AB\"\n              />\n              <path\n                d=\"M740.437 209.469L781.779 178.684L789.062 152.388C790.473 147.22 790.413 141.76 788.889 136.625C787.366 131.489 784.439 126.883 780.441 123.327V123.327C774.987 118.543 767.925 116.012 760.681 116.246C753.436 116.481 746.551 119.462 741.417 124.589C725.86 140.149 708.115 161.856 711.927 176.909L711.965 177.061L740.437 209.469Z\"\n                fill=\"var(--c8y-brand-primary)\"\n              />\n              <path\n                d=\"M782.15 91.7081C802.453 91.7081 818.913 75.2158 818.913 54.8716C818.913 34.5274 802.453 18.0352 782.15 18.0352C761.847 18.0352 745.388 34.5274 745.388 54.8716C745.388 75.2158 761.847 91.7081 782.15 91.7081Z\"\n                fill=\"#EDC9AB\"\n              />\n              <path\n                d=\"M806.343 93.3962C800.194 90.5021 793.012 92.2609 786.224 92.5285C779.436 92.7962 771.211 90.232 769.77 83.5795C768.705 78.6607 771.906 73.2693 769.889 68.6597C767.69 63.6328 761.087 62.9173 755.793 61.5098C749.156 59.5883 743.303 55.5974 739.083 50.1164C734.864 44.6354 732.497 37.9496 732.327 31.0294C731.959 33.776 736.65 34.6782 738.19 32.3767C739.731 30.0752 738.67 26.8898 736.971 24.7029C735.272 22.516 732.98 20.7695 731.699 18.3134C730.418 15.8574 730.667 12.2099 733.168 11.028C734.45 13.6209 736.266 15.9121 738.496 17.7504C740.726 19.5886 743.32 20.9322 746.107 21.6924C744.969 18.2291 746.578 14.3355 749.167 11.7739C751.918 9.3738 755.088 7.50347 758.516 6.25695C766.991 2.57611 776.885 -1.08673 785.091 3.1601C787.21 4.27737 789.049 5.85981 790.472 7.78924C791.894 9.71866 792.863 11.9452 793.306 14.3026C808.487 15.5887 824.074 32.0655 823.21 47.3059C822.28 63.7125 821.601 65.04 807.971 92.6487\"\n                fill=\"#011F3D\"\n              />\n              <path\n                d=\"M990.501 768.347H937.106L936.876 767.93C936.194 766.69 935.534 765.375 934.919 764.024C929.418 752.226 927.094 738.731 925.043 726.826L923.498 717.852C923.311 716.765 923.452 715.647 923.903 714.641C924.353 713.635 925.094 712.786 926.028 712.204C926.963 711.622 928.05 711.332 929.15 711.373C930.25 711.413 931.313 711.782 932.203 712.431C940.317 718.348 948.435 724.258 956.556 730.163C959.631 732.405 963.143 735 966.506 737.804C966.83 736.225 967.17 734.641 967.509 733.079C967.743 732.001 968.293 731.017 969.088 730.254C969.884 729.49 970.888 728.982 971.973 728.794C973.059 728.606 974.175 728.747 975.18 729.198C976.185 729.65 977.033 730.391 977.615 731.329L983.862 741.386C988.418 748.73 992.44 755.968 991.621 763.774C991.625 763.869 991.617 763.964 991.599 764.057C991.435 765.339 991.131 766.6 990.693 767.815L990.501 768.347Z\"\n                fill=\"var(--c8y-brand-60)\"\n              />\n              <path\n                d=\"M1041.62 769.543L-124.619 770C-125.783 769.998 -126.897 769.81 -127.718 769.478C-128.539 769.146 -129 768.697 -129 768.229C-129 767.76 -128.539 767.311 -127.718 766.979C-126.897 766.647 -125.783 766.46 -124.619 766.457L1041.62 766C1042.78 766.002 1043.9 766.19 1044.72 766.522C1045.54 766.854 1046 767.303 1046 767.771C1046 768.24 1045.54 768.689 1044.72 769.021C1043.9 769.353 1042.78 769.54 1041.62 769.543V769.543Z\"\n                fill=\"var(--c8y-brand-50)\"\n              />\n            </g>\n            <defs>\n              <clipPath id=\"clip0_701_64\">\n                <rect\n                  width=\"1046\"\n                  height=\"770\"\n                  fill=\"white\"\n                />\n              </clipPath>\n            </defs>\n          </svg>\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          <p class=\"lead text-normal\" translate *ngIf=\"hasRole\">\n            This application (or any plugin that you added recently) has pre-requirements that needs\n            to be configured first. This wizard will guide you through the steps that are necessary\n            to get your customized application up and running.\n          </p>\n          <div class=\"flex-grow\" *ngIf=\"properties.length > 0\">\n            <c8y-properties-list\n              icon=\"info\"\n              [properties]=\"properties\"\n              [data]=\"options\"\n              [title]=\"'Application properties' | translate\"\n            ></c8y-properties-list>\n          </div>\n          <div class=\"alert alert-danger m-32\" *ngIf=\"!hasRole\">\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          <div class=\"alert alert-danger m-32\" *ngIf=\"!isOwner\">\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        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"card-footer separator d-flex j-c-center\">\n    <button\n      class=\"btn btn-default\"\n      (click)=\"skip()\"\n      translate\n      *ngIf=\"canSkip\"\n      data-cy=\"c8y-setup--skip-setup-button\"\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    >\n      Skip\n    </button>\n\n    <button\n      class=\"btn btn-primary\"\n      (click)=\"start()\"\n      translate\n      [disabled]=\"!hasRole || !isOwner\"\n      data-cy=\"c8y-setup--start-setup-button\"\n      [title]=\"'Start the setup wizard.' | translate\"\n    >\n      Start\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 '../../../i18n/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';\n\n@Component({\n  selector: 'c8y-cookie-banner-preferences-modal',\n  templateUrl: './cookie-banner-preferences-modal.component.html'\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  cookieBannerTitle: gettext('About cookies on this website'),\n  cookieBannerText: gettext(\n    'Cookies are important to the proper functioning of a site. To improve your website experience, we use cookies to remember log-in details and provide secure log-in, 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';\n\n@Component({\n  selector: 'c8y-cookie-banner',\n  templateUrl: './cookie-banner.component.html'\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            class=\"text-primary\"\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 { 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 options = inject(OptionsService);\n  showBanner$ = new Subject<boolean>();\n\n  settings$(): Observable<Partial<MessageBannerSettings>> {\n    return this.options.get$(this.MESSAGE_BANNER);\n  }\n\n  showBanner(): void {\n    this.showBanner$.next(true);\n  }\n\n  dismiss(): void {\n    this.showBanner$.next(false);\n  }\n\n  currentValue() {\n    return this.options.get(this.MESSAGE_BANNER);\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';\n\n@Component({\n  selector: 'c8y-message-banner',\n  templateUrl: './message-banner.component.html'\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        return this.messageBannerService.showBanner$.pipe(\n          startWith(settings?.messageBannerEnabled)\n        );\n      })\n    );\n  }\n\n  dismiss() {\n    this.messageBannerService.dismiss();\n  }\n}\n","<ng-container *ngIf=\"settings$ | async as settings\">\n  <div *ngIf=\"showBanner$ | async\">\n    <div\n      class=\"alert d-flex\"\n      [class]=\"'alert-' + settings.messageBannerType\"\n    >\n      <span\n        class=\"flex-grow\"\n        [innerHTML]=\"settings.messageBannerContent | translate | markdownToHtml | async\"\n      ></span>\n      <button\n        class=\"close a-s-start\"\n        [attr.aria-label]=\"'Close' | translate\"\n        type=\"button\"\n        (click)=\"dismiss()\"\n      >\n        <i\n          c8yIcon=\"times\"\n          aria-hidden=\"true\"\n        ></i>\n        <span class=\"sr-only\">Close</span>\n      </button>\n    </div>\n  </div>\n</ng-container>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ApplicationRemotePlugins } from '@c8y/client';\nimport { Observable, Subject, combineLatest, of } from 'rxjs';\nimport { delay, distinctUntilChanged, map, startWith, switchMap, 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 { PluginsResolveService } from '../plugins/plugins-resolve.service';\nimport { PluginsConfig } from '../plugins/plugins.model';\nimport { SetupService } from '../setup/setup.service';\nimport { TabsService } from '../tabs/tabs.service';\nimport { isEmpty } from 'lodash-es';\nimport { LoginService } from '../login/login.service';\nimport { TranslationLoaderService } from '../i18n/translation-loader.service';\n\n@Component({\n  selector: 'c8y-bootstrap',\n  templateUrl: './bootstrap.template.html'\n})\nexport class BootstrapComponent implements OnDestroy, OnInit {\n  navigatorOpen$: Observable<boolean>;\n  noAppsMargin$: Observable<boolean>;\n  tabsOrientation: string;\n  showPoweredBy = true;\n  showLogin$: Observable<boolean>;\n  showLoadingIndicator$: Observable<boolean>;\n  showMainView$: Observable<boolean>;\n  showSetup$: Observable<boolean>;\n  private destroy$: Subject<void> = new Subject<void>();\n  private loadedRemotesContextPathCache = new Map<string, boolean>();\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    private pluginsResolve: PluginsResolveService,\n    public setupService: SetupService,\n    public loginService: LoginService,\n    // only here to ensure the service is instantiated\n    public translationLoaderService: TranslationLoaderService\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    const noLogin$ = of(this.options.get('noLogin', false));\n    this.showLogin$ = combineLatest([noLogin$, this.ui.currentUser]).pipe(\n      map(([noLogin, currentUser]) => !noLogin && !currentUser)\n    );\n    this.showLoadingIndicator$ = combineLatest([\n      noLogin$,\n      this.ui.currentUser,\n      this.loginService.automaticLoginInProgress$,\n      this.pluginsResolve.allPluginsLoaded$\n    ]).pipe(\n      delay(0), // delay to avoid ExpressionChangedAfterItHasBeenCheckedError\n      map(\n        ([noLogin, currentUser, automaticLoginInProgress, allPluginsLoaded]) =>\n          (!noLogin && automaticLoginInProgress) || (currentUser && !allPluginsLoaded)\n      ),\n      startWith(true)\n    );\n    this.showMainView$ = noLogin$.pipe(\n      switchMap(noLogin => {\n        if (noLogin) {\n          return of(true);\n        }\n        return combineLatest([\n          this.ui.currentUser,\n          this.setupService.isSetupNeeded$,\n          this.pluginsResolve.allPluginsLoaded$\n        ]).pipe(\n          map(([currentUser, isSetupNeeded, allPluginsLoaded]) => {\n            return currentUser && !isSetupNeeded && allPluginsLoaded;\n          })\n        );\n      })\n    );\n    this.showSetup$ = combineLatest([this.ui.currentUser, this.setupService.isSetupNeeded$]).pipe(\n      map(([currentUser, isSetupNeeded]) => currentUser && isSetupNeeded)\n    );\n  }\n\n  async ngOnInit() {\n    this.subscribeToLoadRemotes();\n  }\n\n  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  private getRemotes(config: PluginsConfig): ApplicationRemotePlugins | undefined {\n    let selfRemotes: ApplicationRemotePlugins;\n\n    // We need to import the self imports, as this app is not configured at all\n    if (this.options?.exports) {\n      const selfModuleNames: string[] = this.options.exports\n        .filter(plugin => plugin.scope === 'self')\n        .map(plugin => plugin.module || plugin.name);\n      selfRemotes = { [this.options.contextPath]: selfModuleNames };\n    }\n\n    // Merge plugins config remotes and remotes passed in the URL.\n    // Remotes in the URL are used in the development process.\n    let remotes = PluginsResolveService.mergeRemotes([\n      selfRemotes,\n      // if the config remotes are not present we fall back to the application remotes\n      config?.remotes || this.options?.remotes || {},\n      // url remotes should always be loaded\n      this.pluginsResolve.loadUrlRemotes()\n    ]);\n\n    // remove remotes that are on the exclude list\n    remotes = PluginsResolveService.removeRemotes(remotes, config?.excludedRemotes);\n\n    // Block the possibility of loading plugins multiple times.\n    Object.keys(remotes || {}).forEach(contextPath => {\n      if (this.loadedRemotesContextPathCache.get(contextPath)) {\n        delete remotes[contextPath];\n      }\n    });\n    return isEmpty(remotes) ? undefined : remotes;\n  }\n\n  private async loadRemotes(remotes: ApplicationRemotePlugins) {\n    if (!remotes) {\n      this.ensureWeMarkPluginsAsLoaded();\n      return;\n    }\n    const remoteModules = await this.pluginsResolve.loadRemotes(remotes);\n\n    // Cache loaded remotes.\n    Object.keys(remotes).forEach(contextPath =>\n      this.loadedRemotesContextPathCache.set(contextPath, true)\n    );\n\n    if (remoteModules.length) {\n      this.pluginsResolve.resolveRemotePlugins(remoteModules);\n    } else {\n      // in case loading all modules via pluginsResolve.loadRemotes failed\n      // (e.g. all plugins that were installed have been deleted from the tenant)\n      // we still need to mark loading the plugins as successful.\n      this.ensureWeMarkPluginsAsLoaded();\n    }\n  }\n\n  private subscribeToLoadRemotes(): void {\n    if (this.options.get('noPlugins', false)) {\n      this.ensureWeMarkPluginsAsLoaded();\n      return;\n    }\n\n    if (this.options.get('forceUrlRemotes', false)) {\n      const remotes = this.pluginsResolve.loadUrlRemotes();\n      this.loadRemotes(remotes);\n      return;\n    }\n\n    if (this.options.get('noLogin', false)) {\n      this.loadRemotes(this.getRemotes(null));\n      return;\n    }\n\n    this.ui.currentApplicationConfig\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((config: PluginsConfig) => this.loadRemotes(this.getRemotes(config)));\n  }\n\n  private ensureWeMarkPluginsAsLoaded(): void {\n    // ensure we call markPluginsAsLoaded on the DynamicComponentService\n    this.pluginsResolve.markPluginsAsLoaded();\n  }\n}\n","<c8y-message-banner\n  *ngIf=\"!(showLogin$ | async)\"\n  class=\"c8y-message-banner\"\n></c8y-message-banner>\n<c8y-login *ngIf=\"showLogin$ | async\"></c8y-login>\n\n<div\n  class=\"init-load\"\n  *ngIf=\"showLoadingIndicator$ | async\"\n>\n  <div class=\"spinner-snake\"></div>\n  <div class=\"mainlogo-placeholder mainlogo\"></div>\n</div>\n\n<div\n  [class.head-open]=\"headerService.headerOpen\"\n  *ngIf=\"showMainView$ | async\"\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<div *ngIf=\"showSetup$ | async\">\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\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],\n  declarations: [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})\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})\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 BreadcrumbComponent\n * @exports BreadcrumbItemComponent\n * @exports BreadcrumbOutletComponent\n */\n@NgModule({\n  declarations: [BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbOutletComponent],\n  imports: [RouterModule.forChild([]), CommonModule, TooltipModule.forRoot()],\n  exports: [BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbOutletComponent]\n})\nexport class BreadcrumbModule {}\n","import { Component, Input } from '@angular/core';\nimport { NavigatorNode } from './navigator-node';\n\n/**\n * Navigator node icon component.\n */\n@Component({\n  selector: 'c8y-navigator-icon',\n  template: `<i class=\"icon\" [c8yIcon]=\"icon\"></i>`\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","// tslint:disable-next-line:max-line-length\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 } from '@angular/router';\nimport { isUndefined } from 'lodash-es';\nimport { Subject, merge } from 'rxjs';\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\nimport { PopoverConfirmComponent } from '../modal/popover-confirm.component';\nimport { NavigatorIconComponent } from './navigator-icon.component';\nimport { ClickOptions, NavigatorNode } from './navigator-node';\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})\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 oulet 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(private router: Router) {}\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  }\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    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","<ng-container *ngIf=\"node.component\">\n  <ng-container *c8yComponentOutlet=\"node.component; environmentInjector: node.injector\"></ng-container>\n</ng-container>\n\n<div\n  class=\"slot\"\n  *ngIf=\"!node.component\"\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\n  <div\n    class=\"children panel-expand expand\"\n    *ngIf=\"node.children.length\"\n    [collapse]=\"!node.open\"\n    [isAnimated]=\"true\"\n  >\n    <c8y-navigator-node\n      *ngFor=\"let childNode of node.children\"\n      [node]=\"childNode\"\n      (nodeClick)=\"nodeClick.emit($event)\"\n    ></c8y-navigator-node>\n  </div>\n</div>\n\n<!-- icon -->\n<ng-template #navicon>\n  <!-- loader -->\n  <i\n    class=\"icon-spin loadingIndicator\"\n    [c8yIcon]=\"'circle-o-notch'\"\n    [ngClass]=\"{ 'm-l-16' : isRoot, 'm-l-8': !isRoot }\"\n    *ngIf=\"node.loading && !isRoot\"\n  ></i>\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  <i\n    class=\"expander\"\n    [c8yIcon]=\"'chevron-down'\"\n    [attr.aria-label]=\"expandTitle\"\n    role=\"button\"\n    *ngIf=\"node.hasChildren\"\n    (click)=\"click('expander', $event)\"\n    data-cy=\"c8y-navigator-node--expander\"\n  ></i>\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';\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})\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 { 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  declarations: [NavigatorOutletComponent, NavigatorNodeComponent, NavigatorIconComponent],\n  imports: [RouterModule, CollapseModule.forRoot(), CommonModule, ModalModule],\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})\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})\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 '../i18n/gettext';\r\n\r\n@Component({\r\n  selector: 'c8y-search-result-empty',\r\n  templateUrl: './search-result-empty.component.html'\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 {\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 { 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})\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})\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';\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})\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';\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})\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      <div\n        class=\"c8y-list__item__footer\"\n        *ngIf=\"showFooter\"\n      >\n        <ng-content select=\"c8y-list-item-footer, c8y-li-footer\"></ng-content>\n      </div>\n    </div>\n\n    <div\n      class=\"c8y-list__item__actions\"\n      *ngIf=\"(showCollapse && itemCollapse && itemCollapse.collapseWay === 'button') || showActions\"\n    >\n      <button\n        class=\"collapse-btn\"\n        title=\"{{ 'Expand' | translate }}\"\n        [attr.aria-expanded]=\"!collapsed\"\n        type=\"button\"\n        (click)=\"toggleCollapsed($event)\"\n        *ngIf=\"showCollapse && itemCollapse.collapseWay === 'button'\"\n        data-cy=\"c8y-li--collapse-btn\"\n      >\n        <i [c8yIcon]=\"'chevron-down'\"></i>\n      </button>\n      <div\n        class=\"dropdown\"\n        #liDropdownActions=\"bs-dropdown\"\n        [cdkTrapFocus]=\"liDropdownActions.isOpen\"\n        dropdown\n        c8yDropdownDirection\n        #dropDirection=\"bs-dropdown\"\n        [cdkTrapFocus]=\"dropDirection.isOpen\"\n        *ngIf=\"showActions\"\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          <ng-container *ngFor=\"let action of actions\">\n            <ng-container *ngTemplateOutlet=\"action.template\"></ng-container>\n          </ng-container>\n        </ul>\n      </div>\n\n      <ng-content\n        select=\"c8y-list-item-action, c8y-li-action\"\n        *ngIf=\"showActions\"\n      ></ng-content>\n    </div>\n  </div>\n\n  <div\n    *ngIf=\"showCollapse\"\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</div>\n","import { Injectable, QueryList } from '@angular/core';\nimport {\n  Observable,\n  Subject,\n  combineLatest,\n  distinctUntilChanged,\n  fromEvent,\n  map,\n  merge,\n  of,\n  startWith,\n  switchMap,\n  takeUntil\n} from 'rxjs';\nimport { ListItemComponent } from '../list-group';\nimport { findIndex } from 'lodash';\nimport { BsDropdownDirective } from 'ngx-bootstrap/dropdown';\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\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    return list.changes.pipe(\n      startWith(list),\n      switchMap((items: QueryList<ListItemComponent>) =>\n        combineLatest([\n          merge(\n            fromEvent<KeyboardEvent>(input, 'keyup'),\n            fromEvent<KeyboardEvent>(input, 'keydown')\n          ),\n          of(items.toArray())\n        ])\n      ),\n      map(([e, items]) => this.handleKeyboard(e, input, items, 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    if (index > -1) {\n      items.forEach(item => (item.highlighted = false));\n      items[index].highlighted = true;\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) {\n    item.highlighted = true;\n    item.element.nativeElement.scrollIntoView({ block: 'nearest' });\n  }\n}\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})\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})\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 {\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  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  Validator\n} from '@angular/forms';\nimport { IIdentified } from '@c8y/client';\nimport { get, isEqual, set } from 'lodash-es';\nimport { BsDropdownDirective } from 'ngx-bootstrap/dropdown';\nimport { fromEvent, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\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})\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  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        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  dropdown\n  [container]=\"container\"\n  placement=\"bottom left\"\n  #dropdown=\"bs-dropdown\"\n  [autoClose]=\"true\"\n  (onShown)=\"onShown()\"\n  [isDisabled]=\"disabled\"\n  dropdownToggle\n>\n  <div role=\"button\" class=\"input-group input-group-dropdown\">\n    <input\n      #searchControl\n      #searchControlModel=\"ngModel\"\n      type=\"text\"\n      class=\"form-control text-truncate\"\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    <span\n      class=\"label label-info p-absolute\"\n      style=\"top: 10px; right: 40px; z-index: 10\"\n      *ngIf=\"\n        !hideNew &&\n        (selected\n          ? selected.id === null && getDisplayProperty()?.length > 0 && allowFreeEntries\n          : false)\n      \"\n    >\n      {{ 'New' | translate }}\n    </span>\n\n    <span class=\"input-group-btn\">\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=\"typeahead-button\"\n      >\n        <i [c8yIcon]=\"icon\" class=\"text-primary\"></i>\n      </button>\n    </span>\n  </div>\n\n  <c8y-list-group\n    class=\"dropdown-menu dropdown-menu--modal\"\n    data-cy=\"typeahead--dropdown-menu\"\n    role=\"menu\"\n    *dropdownMenu\n    [style.width]=\"container === 'body' ? searchControl.clientWidth + 'px' : undefined\"\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 { IManagedObject, InventoryService, QueriesUtil } from '@c8y/client';\nimport { Pagination } from '../data-grid';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class InventorySearchService {\n  protected DEFAULT_PAGE_SIZE = 50;\n  private queriesUtil: QueriesUtil;\n  constructor(private inventoryService: InventoryService) {\n    this.queriesUtil = new QueriesUtil();\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  search(\n    term: string,\n    pagination: Pagination = { currentPage: 1, pageSize: this.DEFAULT_PAGE_SIZE }\n  ) {\n    const searchFilterQuery = this.getDefaultSearchQuery();\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  searchGroups(\n    term: string,\n    pagination: Pagination = { currentPage: 1, pageSize: this.DEFAULT_PAGE_SIZE }\n  ) {\n    const searchFilterQuery = this.getGroupsSearchFilterQuery();\n    const query = this.queriesUtil.addAndFilter(searchFilterQuery, { name: `*${term}*` });\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  /**\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 { 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})\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 '../i18n/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';\n\n@Component({\n  selector: 'device-status, c8y-device-status',\n  templateUrl: './device-status.component.html'\n})\nexport class DeviceStatusComponent implements AfterContentInit, OnChanges {\n  @Input('mo') set node(value) {\n    this._mo = value.mo || value;\n  }\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","<ng-container *ngIf=\"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' + ( status().pushStatus.tooltip | translate ) }}\"\n    placement=\"right\"\n    container=\"body\"\n    [adaptivePosition]=\"false\"\n    [delay]=\"500\"\n  >\n    <svg\n      style=\"max-width: {{ size }}px; min-width: 20px; pointer-events: none;\"\n      viewBox=\"0 0 90 90\"\n      fill=\"none\"\n    >\n      <g *ngIf=\"!status().maintenanceStatus\">\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 *ngIf=\"!status().maintenanceStatus\">\n        <path\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          class=\"pushStatus\"\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      <g *ngIf=\"!!status().maintenanceStatus\">\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      <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</ng-container>\n<ng-container *ngIf=\"size >=32\">\n  <svg\n    style=\"max-width: {{ size }}px; min-width: 20px;\"\n    viewBox=\"0 0 90 90\"\n    class=\"d-inline-block\"\n    fill=\"none\"\n  >\n    <g\n      tooltip=\"{{ status().sendStatus.tooltip | translate }}\"\n      [delay]=\"500\"\n      container=\"body\"\n      *ngIf=\"!status().maintenanceStatus\"\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      [delay]=\"500\"\n      container=\"body\"\n      *ngIf=\"!status().maintenanceStatus\"\n    >\n      <path\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        class=\"pushStatus\"\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        style=\"pointer-events: none;\"\n      />\n    </g>\n    <g\n      tooltip=\"{{ status().maintenanceStatus.tooltip | translate }}\"\n      [delay]=\"500\"\n      container=\"body\"\n      *ngIf=\"!!status().maintenanceStatus\"\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        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        style=\"pointer-events: none;\"\n      />\n    </g>\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</ng-container>\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 '../i18n/gettext';\nimport { BsDropdownDirective } 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';\n\n@Component({\n  selector: 'c8y-search-input',\n  templateUrl: './search-input.component.html'\n})\nexport class SearchInputComponent {\n  @Input()\n  mode: 'search' | 'select' = '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  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  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    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    if (term) {\n      this.selected = mo;\n      this.term = term;\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    this.hideDropdown();\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'\"\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' }\"\n    novalidate\n    #searchForm=\"ngForm\"\n  >\n    <c8y-typeahead\n      (onIconClick)=\"onReset($event)\"\n      [icon]=\"term ? 'times' : 'search'\"\n      title=\"Search\"\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    >\n      <div\n        class=\"c8y-list__item p-b-8 separator-bottom sticky-top p-t-4\"\n        *ngIf=\"enableCustomTemplatePlaceholder && mode === 'search'\"\n      >\n        <ng-content></ng-content>\n      </div>\n\n      <!-- filter buttons -->\n      <c8y-li\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        *ngIf=\"term.length === 0 && recentSearchResults.length > 0\"\n        [selectable]=\"false\"\n      >\n        <div class=\"legend form-block\">\n          <span translate>Recent search views</span>\n        </div>\n      </c8y-li>\n      <c8y-li\n        class=\"c8y-list__item--link m-l-16 m-r-16\"\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        *ngIf=\"\n          term.length === 0 && (recentlyRegisteredResults$ | async)?.data?.length > 0 && !groupsOnly\n        \"\n        [selectable]=\"false\"\n      >\n        <div class=\"legend form-block\">\n          <span translate>Recently registered devices</span>\n        </div>\n      </c8y-li>\n      <c8y-li\n        class=\"c8y-list__item--link m-l-16 m-r-16\"\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        *ngIf=\"term.length !== 0\"\n        [selectable]=\"false\"\n      >\n        <div class=\"legend form-block m-0\">\n          <span translate>Search results</span>\n        </div>\n      </c8y-li>\n      <c8y-li\n        class=\"c8y-list__item--link m-l-16 m-r-16\"\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' }\"\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'\"\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'\"\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 } from 'ngx-bootstrap/dropdown';\nimport { gettext } from '../i18n/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';\n\n@Component({\n  selector: 'c8y-select-legacy',\n  templateUrl: './select-legacy.component.html'\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';\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})\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';\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})\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})\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';\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})\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: [CommonModule, CollapseModule.forRoot(), BsDropdownModule, A11yModule],\n  declarations: [\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","import { Directive, Input, TemplateRef } from '@angular/core';\n\n@Directive({\n  selector: '[c8ySelectItem]'\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})\nexport class SelectedItemsDirective {\n  selectedItems: SelectableItem[] = [];\n\n  constructor(public templateRef: TemplateRef<unknown>) {}\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 } 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';\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})\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 = '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.map(item => {\n      return this._items.find(i => i.value === item.value);\n    });\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 deselect an item.\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   * 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: true,\n      keyboardSearch: true,\n      spaceSelect: this.canSelectWithSpace\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) {\n      this.selectKeyboardService.options = {\n        emptyInput: true,\n        keyboardSearch: true,\n        spaceSelect: changes.canSelectWithSpace.currentValue\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\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    const index = this._selected.indexOf(item);\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      *ngIf=\"true\"\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      <div\n        class=\"selected-items\"\n        *ngIf=\"projectedSelectedItems\"\n      >\n        <ng-container *ngFor=\"let selectedItem of selected\">\n          <ng-container\n            *ngTemplateOutlet=\"\n              projectedSelectedItems.templateRef;\n              context: { $implicit: selectedItem }\n            \"\n          ></ng-container>\n        </ng-container>\n        <i\n          class=\"text-muted\"\n          *ngIf=\"selected.length === 0 && !searchHasFocus && searchControl.value.length === 0\"\n        >\n          {{ placeholder | translate }}\n        </i>\n      </div>\n\n      <!-- rendering of selected items (default) -->\n      <div\n        class=\"selected-items\"\n        *ngIf=\"!projectedSelectedItems\"\n      >\n        <span *ngIf=\"!multi\">\n          <span *ngIf=\"searchHasFocus && preselectedItem\">\n            {{ preselectedItem.label | translate }}\n          </span>\n          <span *ngIf=\"!searchHasFocus && selected.length === 1\">\n            {{ selected[0].label | translate }}\n          </span>\n        </span>\n        <i\n          class=\"text-muted\"\n          *ngIf=\"selected.length === 0 && !preselectedItem && searchControl.value.length === 0\"\n        >\n          {{ placeholder | translate }}\n        </i>\n        <ng-container *ngIf=\"multi\">\n          <span class=\"m-r-4\">{{ searchControl.value }}</span>\n          <span\n            class=\"tag tag--info chip\"\n            *ngFor=\"let selectedItem of selected\"\n          >\n            <button\n              class=\"btn btn-xs btn-clean text-10 m-r-4\"\n              title=\"{{ selectedItem.label | translate }}\"\n              type=\"button\"\n              (click)=\"$event.preventDefault(); $event.stopPropagation(); deselect(selectedItem)\"\n            >\n              <i c8yIcon=\"times\"></i>\n            </button>\n            {{ selectedItem.label | translate }}\n          </span>\n        </ng-container>\n      </div>\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      <button\n        class=\"btn btn-dot\"\n        title=\"{{ 'Deselect' | translate }}\"\n        type=\"button\"\n        *ngIf=\"canDeselect && selected.length > 0\"\n        [disabled]=\"disabled\"\n        (click)=\"$event.preventDefault(); $event.stopPropagation(); deselectAll()\"\n      >\n        <i c8yIcon=\"times\"></i>\n      </button>\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\"\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    <c8y-li\n      style=\"cursor: pointer\"\n      *ngFor=\"let item of items\"\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      <c8y-li-checkbox\n        *ngIf=\"multi\"\n        [selected]=\"selected.indexOf(item) > -1\"\n        (click)=\"$event.preventDefault();\"\n      ></c8y-li-checkbox>\n      <c8y-li-body\n        *ngIf=\"!item.template\"\n      >\n        {{ item.label | translate }}\n      </c8y-li-body>\n      <ng-container\n        *ngTemplateOutlet=\"item?.template\"\n        ngProjectAs=\"c8y-li-body\"\n      ></ng-container>\n    </c8y-li>\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})\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  ],\n  exports: [\n    SelectComponent,\n    SelectLegacyComponent,\n    TypeaheadComponent,\n    SelectedItemsComponent,\n    SelectItemDirective,\n    SelectedItemsDirective\n  ],\n  declarations: [\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],\n  exports: [DeviceStatusComponent],\n  declarations: [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  declarations: [\n    SearchOutletComponent,\n    SearchComponent,\n    HighlightComponent,\n    SearchResultEmptyComponent,\n    SearchInputComponent\n  ],\n  imports: [\n    A11yModule,\n    FormsModule,\n    BsDropdownModule,\n    CommonModule,\n    SelectModule,\n    ListGroupModule,\n    DeviceStatusModule,\n    RouterModule.forChild([])\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 { 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 '../i18n/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';\n\n@Component({\n  selector: 'c8y-ui-settings',\n  templateUrl: './ui-settings.component.html'\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  declarations: [UiSettingsComponent],\n  imports: [CommonModule, FormsModule],\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 { 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})\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 } from '@angular/core';\nimport { UserService } from '@c8y/client';\nimport { Status } from '../common/status.model';\nimport { gettext } from '../i18n/gettext';\nimport { ModalService } from '../modal/modal.service';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { LoginService } from '../login/login.service';\n\n@Component({\n  selector: 'c8y-user-totp-setup',\n  templateUrl: './user-totp-setup.component.html'\n})\nexport class UserTotpSetupComponent {\n  constructor(\n    private user: UserService,\n    private modalService: ModalService,\n    private modal: BsModalRef,\n    private loginService: LoginService\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.loginService.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, EventEmitter, Input, OnInit, Output } 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';\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})\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  @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  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\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 {\n  BasicAuth,\n  FetchClient,\n  ICredentials,\n  IUser,\n  TenantLoginOptionType,\n  UserService\n} 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 '../i18n/gettext';\nimport { LoginService } from '../login/login.service';\nimport { ModalService } from '../modal/modal.service';\nimport { GainsightService } from '../product-experience/gainsight.service';\nimport { UserEngagementsService } from '../product-experience/user-engagements.service';\n\n@Component({\n  selector: 'c8y-user-edit-modal',\n  templateUrl: './user-edit-modal.component.html'\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\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 loginService: LoginService,\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 usesBasic = this.loginService.loginMode.type === TenantLoginOptionType.BASIC;\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        if (usesBasic) {\n          this.updateCredentials(user.password);\n        }\n      }\n\n      await this.updateProductExperienceOptions();\n\n      if (user.customProperties.userOrigin !== 'OAUTH2') {\n        await this.user.updateCurrent(omit(user, 'password'));\n        await this.updateUserInAppState();\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    (onUsageTrackingChange)=\"onUsageTrackingChange($event)\"\n    (onUserEngagementPreferenceChange)=\"onUserEngagementPreferenceChange($event)\"\n    (onUser)=\"updateAndClose($event)\"\n    (onCancel)=\"onDismiss()\"\n  ></c8y-user-edit>\n</c8y-modal>\n","import { ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { FormsModule as C8yFormsModule } from '../forms/forms.module';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { CommonModule } from '../common/common.module';\nimport { ChangePasswordComponent } from './change-password.component';\nimport { CredentialsComponent } from './credentials.component';\nimport { LoginComponent } from './login.component';\nimport { LoginService } from './login.service';\nimport { RecoverPasswordComponent } from './recover-password.component';\nimport { AuthenticationModule } from '../authentication/authentication.module';\nimport { AlertModule } from '../alert/alert.module';\nimport { TotpAuthComponent } from './totp-auth.component';\nimport { PasswordStrengthValidatorDirective } from './password-strength-validator.directive';\nimport { TenantIdSetupComponent } from './tenant-id-setup.component';\nimport { CredentialsFromQueryParamsService } from './credentials-from-query-params.service';\n\n/**\n * The angular module definition for the login.\n * @exports LoginComponent\n */\n@NgModule({\n  declarations: [\n    LoginComponent,\n    RecoverPasswordComponent,\n    ChangePasswordComponent,\n    CredentialsComponent,\n    TotpAuthComponent,\n    PasswordStrengthValidatorDirective,\n    TenantIdSetupComponent\n  ],\n  imports: [\n    FormsModule,\n    TooltipModule,\n    CommonModule,\n    AuthenticationModule,\n    AlertModule,\n    C8yFormsModule\n  ],\n  exports: [LoginComponent]\n})\nexport class LoginModule {\n  static forRoot(): ModuleWithProviders<LoginModule> {\n    return {\n      ngModule: LoginModule,\n      providers: LoginModule.providers()\n    };\n  }\n  static providers(): Provider[] {\n    return [LoginService, CredentialsFromQueryParamsService];\n  }\n}\n","import { Component } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { LoginService } from '../login';\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';\n\n@Component({\n  selector: 'c8y-user-menu-outlet',\n  templateUrl: './user-menu-outlet.component.html'\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 loginService: LoginService,\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.loginService.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, Input, Output, EventEmitter } from '@angular/core';\nimport { IUser, UserService } from '@c8y/client';\nimport { AlertService } from '../alert/alert.service';\nimport { gettext } from '../i18n/gettext';\n\n@Component({\n  selector: 'c8y-user-totp-revoke',\n  templateUrl: './user-totp.component.html'\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 '../i18n';\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) {\n    try {\n      await navigator.clipboard.writeText(text);\n      this.alertService.success(gettext('Copied to clipboard.'));\n    } catch (e) {\n      this.alertService.danger(gettext('Could not copy to clipboard.'));\n    }\n  }\n\n  async readText(): Promise<string> {\n    try {\n      const text = await navigator.clipboard.readText();\n      this.alertService.success(gettext('Pasted from clipboard.'));\n      return text;\n    } catch (e) {\n      this.alertService.danger(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})\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';\n\n@Component({\n  selector: 'c8y-user-details-drawer',\n  templateUrl: './user-details-drawer.component.html',\n  host: { class: 'd-contents' }\n})\nexport class UserDetailsDrawerComponent {\n  constructor(public appState: AppStateService, public headerService: HeaderService) {}\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>\n","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],\n  declarations: [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  declarations: [\n    UserMenuOutletComponent,\n    UserEditComponent,\n    UserEditModalComponent,\n    UserMenuItemComponent,\n    UserTotpSetupComponent,\n    UserTotpRevokeComponent\n  ],\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  ],\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 { 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 '../i18n';\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';\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';\n\n@Component({\n  selector: 'c8y-version-list',\n  templateUrl: './version-list.component.html'\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-cumulocity-iot\"></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        translate\n        (click)=\"downloadPlatformDetails()\"\n      >\n        Download platform details\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 { 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';\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 '../i18n/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],\n  declarations: [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  declarations: [HeaderBarComponent, TitleOutletComponent],\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  ],\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  declarations: [PropertiesListComponent],\n  imports: [CommonModule],\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: [CommonModule, CdkStepperModule, TooltipModule, FormsModule],\n  declarations: [\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 '../i18n/gettext';\n\n@Component({\n  selector: 'c8y-setup-completed',\n  templateUrl: './setup-completed.component.html',\n  host: { class: 'd-contents' }\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(public stepper: C8yStepper, public step: CdkStep, public setup: SetupComponent) {}\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 translate class=\"text-medium l-h-base\" data-cy=\"c8y-setup--completed-header-title\">Summary</h3>\n      <p translate class=\"lead text-normal p-t-8 p-b-8\">\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\" [ngSwitch]=\"status\">\n          <c8y-operation-result\n            *ngSwitchCase=\"'done'\"\n            text=\"{{ 'Setup completed' | translate }}\"\n            [size]=\"120\"\n            [vertical]=\"true\"\n            type=\"success\"\n          ></c8y-operation-result>\n          <c8y-operation-result\n            *ngSwitchCase=\"'warning'\"\n            text=\"{{ 'Setup completed with warnings' | translate }}\"\n            [size]=\"120\"\n            [vertical]=\"true\"\n            type=\"warning\"\n          ></c8y-operation-result>\n          <c8y-operation-result\n            *ngSwitchCase=\"'error'\"\n            text=\"{{ 'Setup not completed' | translate }}\"\n            [size]=\"120\"\n            [vertical]=\"true\"\n            type=\"error\"\n          ></c8y-operation-result>\n        </div>\n        <ul class=\"list-unstyled m-t-16 separator-top\">\n          <li\n            class=\"p-t-4 p-b-4 d-flex a-i-center separator-bottom text-nowrap l-h-1\"\n            *ngFor=\"let step of setup.steps.slice(0, setup.steps.length - 1)\"\n            (click)=\"gotoStep(step.index)\"\n            style=\"cursor: pointer\"\n          >\n            <span *ngIf=\"step.label\">\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            <span *ngIf=\"!step.label\">\n              <span translate>Step</span>\n              {{ ' ' + (step.index + 1) }}\n            </span>\n            <span class=\"m-l-auto icon-20 l-h-1\">\n              <i\n                *ngIf=\"step.completed\"\n                [c8yIcon]=\"'success'\"\n                class=\"text-success\"\n                [title]=\"'Completed' | translate\"\n              ></i>\n              <i\n                *ngIf=\"!step.completed && step.required\"\n                [c8yIcon]=\"'error'\"\n                class=\"text-danger\"\n                [title]=\"\n                  'Not completed and required. Go to the step and fulfill the setup.' | translate\n                \"\n              ></i>\n              <i\n                *ngIf=\"!step.completed && !step.required\"\n                [c8yIcon]=\"'warning'\"\n                class=\"text-warning\"\n                [title]=\"'This step was not completed but it is also not required.' | translate\"\n              ></i>\n            </span>\n          </li>\n        </ul>\n      </div>\n    </div>\n  </div>\n</div>\n<div class=\"card-footer separator d-flex j-c-center\">\n  <button\n    translate\n    class=\"btn btn-default\"\n    type=\"button\"\n    (click)=\"back()\"\n    *ngIf=\"stepper.selectedIndex !== 0\"\n    [disabled]=\"\n      setup.currentSetupState === setup.setupState.FINALIZING ||\n      setup.currentSetupState === setup.setupState.RELOADING\n    \"\n  >\n    Back\n  </button>\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    <span *ngIf=\"setup.currentSetupState === setup.setupState.WIZARD\" translate>\n      Save and reload\n    </span>\n    <span *ngIf=\"setup.currentSetupState === setup.setupState.FINALIZING\" translate>\n      Getting things ready…\n    </span>\n    <span *ngIf=\"setup.currentSetupState === setup.setupState.RELOADING\" translate>\n      Done. Reloading the application.\n    </span>\n  </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { gettext } from '../i18n/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  declarations: [SetupComponent, SetupCompletedComponent],\n  imports: [CommonModule, HeaderModule, StepperModule, PluginsModule, PropertiesListModule],\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  ViewContainerRef,\n  AfterContentInit,\n  OnDestroy,\n  Injector,\n  EnvironmentInjector,\n  Output,\n  EventEmitter\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})\nexport class TabComponent implements AfterContentInit, OnDestroy, TabWithTemplate<string> {\n  @ViewChild('tpl', { static: false }) template: ViewContainerRef;\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  @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 } 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})\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  declarations: [ConditionalTabsOutletComponent, TabsOutletComponent, TabComponent],\n  imports: [CommonModule, RouterModule.forChild([]), TooltipModule.forRoot(), HeaderModule],\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 { LoginModule } from '../login/login.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  declarations: [\n    BootstrapComponent,\n    CookieBannerComponent,\n    CookieBannerPreferencesModalComponent,\n    MessageBannerComponent\n  ],\n  imports: [\n    FormsModule,\n    CommonModule,\n    HeaderModule,\n    LoginModule,\n    RouterModule,\n    TabsModule,\n    ActionBarModule,\n    AlertModule,\n    NavigatorModule,\n    TooltipModule,\n    ModalModule,\n    SetupModule,\n    DrawerModule\n  ],\n  exports: [BootstrapComponent],\n  providers: [CookieBannerService]\n})\nexport class BootstrapModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, ViewChild, ViewContainerRef } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { delay, shareReplay } from 'rxjs/operators';\n\n@Component({\n  standalone: true,\n  selector: 'c8y-bottom-drawer',\n  imports: [CommonModule],\n  templateUrl: './bottom-drawer.component.html'\n})\nexport class BottomDrawerComponent {\n  @ViewChild('drawerHost', { read: ViewContainerRef })\n  drawerHost: ViewContainerRef;\n\n  get drawerOpen$() {\n    return this.drawerOpenObs$;\n  }\n\n  private drawerOpenSubject$ = new BehaviorSubject(true);\n  private drawerOpenObs$ = this.drawerOpenSubject$.asObservable().pipe(delay(0), shareReplay());\n\n  hide() {\n    this.drawerOpenSubject$.next(false);\n    this.drawerOpenSubject$.complete();\n  }\n}\n","<div [ngClass]=\"{ drawerOpen: drawerOpen$ | async }\">\n  <div class=\"bottom-drawer\">\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 {\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 { Observable, Subject } from 'rxjs';\nimport { filter, shareReplay, take, takeUntil } from 'rxjs/operators';\nimport { BottomDrawerComponent } from './bottom-drawer.component';\nimport { 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  private drawerComponentRef: ComponentRef<BottomDrawerComponent>;\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 applicationRef: ApplicationRef,\n    private router: Router,\n    private options?: DrawerOptions<C>\n  ) {\n    this.attachDrawerToView(component);\n  }\n\n  /**\n   * Closes the bottom drawer behind the reference.\n   */\n  close() {\n    this.detachDrawerFromView();\n    this.closedSubject$.next();\n    this.closedSubject$.complete();\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(BottomDrawerComponent, {\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    this.drawerComponentRef.changeDetectorRef.detectChanges();\n\n    this.handleNavigation();\n  }\n\n  private detachDrawerFromView(): void {\n    this.drawerComponentRef.instance.hide();\n    this.detachDrawerWithAnimationDelay();\n  }\n\n  private detachDrawerWithAnimationDelay(): void {\n    setTimeout(() => {\n      this.applicationRef.detachView(this.drawerComponentRef.hostView);\n      this.drawerComponentRef.destroy();\n      this.drawerComponentRef = null;\n    }, DRAWER_ANIMATION_TIME);\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          take(1),\n          takeUntil(this.onClosed$)\n        )\n        .subscribe(() => this.close());\n    }\n  }\n}\n","import { ApplicationRef, Injectable, Type } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { BottomDrawerRef } from './bottom-drawer-ref';\nimport { DrawerOptions } from './bottom-drawer.model';\n\n/**\n * Allows to open a component in a bottom drawer.\n */\n@Injectable({ providedIn: 'root' })\nexport class BottomDrawerService {\n  constructor(\n    private applicationRef: ApplicationRef,\n    private router: Router\n  ) {}\n\n  /**\n   * Opens the provided component in a bottom drawer.\n   *\n   * @param component The component type to render in a bottom drawer.\n   * @param options (optional) Additional options to configure bottom drawer.\n   * @returns A reference to the bottom drawer.\n   */\n  openDrawer<C>(component: Type<C>, options?: DrawerOptions<C>): BottomDrawerRef<C> {\n    return new BottomDrawerRef(component, this.applicationRef, this.router, options);\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';\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})\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],\n  declarations: [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 { 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(private options: OptionsService) {}\n\n  hasHidePoweredSet(): Observable<boolean> {\n    return this.options.get$('hidePowered').pipe(map(hidePowered => !!hidePowered));\n  }\n\n  hasCustomNavigatorLogoSet(): Observable<boolean> {\n    return this.options.get$('brandingCSSVars').pipe(\n      map(vars => {\n        if (!vars || typeof vars !== 'object') {\n          return false;\n        }\n\n        if (typeof vars[this.navigatorLogoVariable] === '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 {\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 '../i18n/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\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  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 }\"\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 *ngIf=\"!errors\">\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\"\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 { isEmpty } from 'lodash-es';\nimport { DropAreaComponent, DroppedFile } from '../drop-area/drop-area.component';\nimport { ValidationPattern } from '../forms/validation-pattern';\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})\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' = 'uploadBinary';\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\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","<div class=\"form-group\">\n  <label title=\"{{ 'Upload a binary' | translate }}\" class=\"c8y-radio radio-inline\">\n    <input\n      #radio\n      type=\"radio\"\n      value=\"uploadBinary\"\n      name=\"uploadChoice-{{filePickerIndex}}\"\n      [(ngModel)]=\"uploadChoice\"\n      (click)=\"clearInputFromUrl()\"\n    />\n    <span></span>\n    <span>{{ 'Upload a binary' | translate }}</span>\n  </label>\n  <label\n    title=\"{{ 'Provide a file path' | translate }}\"\n    class=\"c8y-radio radio-inline m-l-8\"\n    data-cy=\"file-picker--file-path-input\"\n  >\n    <input\n      #radio\n      type=\"radio\"\n      value=\"uploadUrl\"\n      name=\"uploadChoice-{{filePickerIndex}}\"\n      [(ngModel)]=\"uploadChoice\"\n      (click)=\"clearSelectedFiles()\"\n    />\n    <span></span>\n    <span>\n      {{ 'Provide a file path' | translate }}\n    </span>\n    <button\n      class=\"btn-help\"\n      type=\"button\"\n      [attr.aria-label]=\"'Help' | translate\"\n      popover=\"{{ fileUrlPopover | translate }}\"\n      placement=\"top\"\n      triggers=\"focus\"\n      container=\"body\"\n      placement=\"top\"\n      *ngIf=\"isPopoverUsed()\"\n    ></button>\n  </label>\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      (dropped)=\"onFileDropped($event)\"\n      [title]=\"'Drop file or click to browse' | translate\"\n      [attr.aria-label]=\"'Drop file or click to browse' | translate\"\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          type=\"text\"\n          class=\"form-control\"\n          name=\"fileUrl\"\n          data-cy=\"file-picker--fileUrl\"\n          [(ngModel)]=\"fileUrl\"\n          (ngModelChange)=\"onFileUrlChange($event)\"\n          placeholder=\"{{ 'e.g.' | translate }} http://example.com/binary.zip\"\n          maxlength=\"{{ config.maxlength }}\"\n          required\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  ],\n  exports: [FilePickerComponent],\n  declarations: [FilePickerComponent]\n})\nexport class FilePickerModule {}\n","import { BytesPipe, FilesService } from '../common';\nimport { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { gettext } from '../i18n';\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 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 '../i18n';\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})\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: [C8yFormsModule, CommonModule, FormsModule, C8yCommonModule, TooltipModule],\n  exports: [FilePickerFormControlComponent],\n  declarations: [FilePickerFormControlComponent]\n})\nexport class FilePickerFormControlModule {}\n","import { Component, EventEmitter, OnInit, Input, Output } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PickedDates } from './date-picker.model';\nimport { gettext } from '../i18n';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { IconDirective } from '../common/icon.directive';\nimport { NgIf, DatePipe } 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';\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\n  dateFrom: string;\n  dateTo: string;\n  fgDatePicker: FormGroup;\n\n  ngOnInit() {\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 | date }}\n      </span>\n      <span *ngIf=\"dateTo\">\n        <span class=\"text-label-small\">{{ 'To`date`' | translate }}</span>\n        {{ dateTo | date }}\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 }\"\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 }\"\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 { 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}\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 is added to a certain view context.\n */\nexport type ViewContextRoute = Route & { context: 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/**\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'>,\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, ProviderToken, runInInjectionContext } from '@angular/core';\nimport {\n  ActivatedRouteSnapshot,\n  Router,\n  CanActivateFn,\n  Routes,\n  UrlSegment,\n  CanActivate,\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                } 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: Array<CanActivateFn | ProviderToken<CanActivate>> = 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  } 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  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 } from 'rxjs';\nimport { filter, map, 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 { 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(e => e instanceof ActivationEnd),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe((e: ActivationEnd) => this.redirectToFirstTab(e));\n\n    route.data\n      .pipe(\n        merge(this.updatedContext(route), this.refreshTrigger$),\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  /**\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.redirectToFirstTab();\n  }\n\n  private redirectToFirstTab(event?: ActivationEnd) {\n    const currentQueryParams = this.router.routerState.snapshot.root.queryParams;\n    const queryParamsString = new URLSearchParams(currentQueryParams).toString();\n    const queryParamsSuffix = queryParamsString ? `?${queryParamsString}` : '';\n\n    if (event) {\n      if (this.needsRedirect(event)) {\n        const tab = this.tabsService.sortTabs(event.snapshot.data.tabs)?.[0];\n        if (!tab) {\n          return;\n        }\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    } else {\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\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 } 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';\n\n@Component({\n  selector: 'c8y-context-route',\n  templateUrl: './context-route.component.html',\n  providers: [ScopedContextRouteService]\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({ selector: 'empty', template: '' })\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 { flatten } from 'lodash';\nimport { Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, shareReplay, take } 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';\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\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    // 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      plugins.allPluginsLoaded$\n        .pipe(\n          filter(tmp => !!tmp),\n          take(1)\n        )\n        .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>(this.router, this.refresh$, [\n      getInjectedHooks<Route>(HOOK_ROUTE, this.injectors, InjectionType.ROUTE),\n      () => this.factories\n    ]).pipe(distinctUntilChanged(), shareReplay(1));\n  }\n\n  private addRoutes(routes) {\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\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 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    path: 'tenants/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  declarations: [ContextRouteComponent, EmptyComponent],\n  imports: [NgRouterModule, HeaderModule, CommonModule],\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})\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 { takeUntil } from 'rxjs/operators';\n\n@Component({\n  selector: '[c8y-guide-docs]',\n  templateUrl: './guide-docs.component.html'\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.pipe(takeUntil(this.destroyed$)).subscribe(() => {\n        this.replaceAnchorAttributes();\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","<ng-container *ngIf=\"!!baseUrl\">\n  <ng-content></ng-content>\n</ng-container>\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';\n\n@Component({\n  selector: 'c8y-help-and-support-outlet',\n  templateUrl: './help-and-support-outlet.component.html'\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, OptionsService, Status } from '../../common';\nimport { PRODUCT_EXPERIENCE_CORE_SHARED } from '../../shared/core.model';\nimport { gettext } from '../../i18n';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ModalService } from '../../modal';\nimport { TenantService, UserService } from '@c8y/client';\nimport { AlertService } from '../../alert';\nimport { HeaderService } from '../../header/header.service';\nimport { Permissions } from '../../common/permissions.service';\nimport { map } from 'rxjs/operators';\n\n@Component({\n  selector: 'c8y-support-outlet',\n  templateUrl: './support-outlet.component.html'\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: [CommonModule, CollapseModule, ProductExperienceModule, UserModule],\n  declarations: [SupportOutletComponent],\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: [CommonModule, CollapseModule, ProductExperienceModule, SupportOutletModule],\n  declarations: [HelpAndSupportOutletComponent]\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';\n\n@Component({\n  selector: 'c8y-legal-notices-outlet',\n  templateUrl: './legal-notices-outlet.component.html'\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-8 m-t-auto\" *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],\n  declarations: [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  declarations: [GuideHrefDirective, GuideDocsComponent],\n  imports: [CommonModule, HelpAndSupportOutletModule, LegalNoticesOutletModule],\n  exports: [GuideHrefDirective, GuideDocsComponent]\n})\nexport class DocsModule {\n  static providers() {\n    return [...HelpAndSupportOutletModule.providers(), ...LegalNoticesOutletModule.providers()];\n  }\n}\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})\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';\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})\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 === '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          (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';\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})\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';\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})\nexport class FieldDate extends FieldType {}\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: 'YYYY-MM-DD' }\"\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';\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})\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';\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})\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';\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    })\n  );\n\n@Component({\n  selector: 'c8y-field-input',\n  templateUrl: './input.type.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FieldInput extends FieldType {\n  get type() {\n    return this.to.type || 'text';\n  }\n}\n","<input\n  *ngIf=\"type !== 'number'; else numberTmp\"\n  [type]=\"type\"\n  [formControl]=\"formControl\"\n  class=\"form-control\"\n  [formlyAttributes]=\"field\"\n  [required]=\"to.required\"\n  [attr.autocomplete]=\"to.autocomplete ? to.autocomplete : null\"\n  [class.is-invalid]=\"showError\"\n/>\n<ng-template #numberTmp>\n  <input\n    type=\"number\"\n    [formControl]=\"formControl\"\n    class=\"form-control\"\n    [formlyAttributes]=\"field\"\n    [required]=\"to.required\"\n    [attr.autocomplete]=\"to.autocomplete ? to.autocomplete : null\"\n    [class.is-invalid]=\"showError\"\n  />\n</ng-template>\n","import { Component, EnvironmentProviders, importProvidersFrom } from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\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})\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';\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})\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 { 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  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnDestroy,\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 '../i18n';\nimport { BsDatepickerDirective, BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { PickedDates } from '../date-picker';\nimport { NgSwitch, NgSwitchCase } from '@angular/common';\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';\n\ninterface DateAndTime {\n  date: Date;\n  time: Date;\n}\n\ninterface 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    NgSwitch,\n    NgSwitchCase,\n    CloseDatePickerDirective,\n    BsDatepickerModule,\n    FormsModule,\n    ReactiveFormsModule,\n    TimepickerModule,\n    DatePickerComponent,\n    C8yTranslatePipe\n  ]\n})\nexport class DateTimePickerComponent implements ControlValueAccessor, Validator, OnDestroy {\n  minDate: Date;\n\n  @Input('minDate')\n  set _minDate(value: string) {\n    this.minDate = value ? new Date(value) : undefined;\n  }\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  @Input()\n  dateInputFormat = 'YYYY-MM-DD';\n\n  @Input()\n  adaptivePosition = false;\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    showMeridian: false,\n    showMinutes: true,\n    showSeconds: false,\n    showSpinners: false\n  };\n\n  @Output()\n  onDateSelected: EventEmitter<PickedDates> = new EventEmitter();\n\n  date: Date;\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(private cd: ChangeDetectorRef) {\n    this.form = new FormGroup({});\n    this.form.addControl('date', new FormControl(null));\n    this.form.addControl('time', new FormControl(null));\n    this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value: DateAndTime) => {\n      this.setDatetime(value);\n      this.previousValue = value;\n    });\n    this.form.statusChanges\n      .pipe(first())\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => {\n        this.onTouched();\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  ngOnDestroy() {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  ngAfterViewInit() {\n    this.cd.detectChanges();\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.form.setValue(\n        {\n          date: new Date(value),\n          time: this.date\n        },\n        { emitEvent: false }\n      );\n    } else {\n      this.form.setValue({ date: null, time: null }, { emitEvent: false });\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.form.get('time').setValue(undefined, { emitEvent: false });\n      this.onChange(null);\n      return;\n    }\n\n    // if both date and time is invalid, do set form value to null and stop:\n    if (!this.verifyDate(dateTime.date) && !this.verifyDate(dateTime.time)) {\n      this.onChange(null);\n      return;\n    }\n    // If only time is provided, set Date to today:\n    if (!this.verifyDate(dateTime.date) && this.verifyDate(dateTime.time)) {\n      dateTime.date = new Date(dateTime.time);\n    }\n\n    // If only date is provided, set time to 00:00:\n    if (this.verifyDate(dateTime.date) && !this.verifyDate(dateTime.time)) {\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.form.get('time').setValue(dateTime.time, { emitEvent: false });\n    }\n\n    // Merge date and time, and emit as new form value:\n    this.date = new Date(dateTime.date);\n    this.date.setHours(dateTime.time.getHours(), dateTime.time.getMinutes());\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\n  class=\"datetime-picker\"\n  [ngSwitch]=\"dateType\"\n>\n  <div\n    class=\"d-contents\"\n    *ngSwitchCase=\"'DateAndTime'\"\n    [closeDatepicker]=\"datepicker\"\n  >\n    <div class=\"form-group datepicker {{ size ? 'form-group-' + size : '' }}\">\n      <input\n        class=\"form-control\"\n        style=\"min-width: 120px\"\n        [placeholder]=\"placeholder || defaultPlaceholder | translate\"\n        bsDatepicker\n        [outsideClick]=\"false\"\n        [bsConfig]=\"{\n          customTodayClass: 'today',\n          dateInputFormat: dateInputFormat,\n          adaptivePosition: adaptivePosition\n        }\"\n        [formControl]=\"form.get('date')\"\n        (blur)=\"onTouched()\"\n        [minDate]=\"minDate\"\n        [maxDate]=\"maxDate\"\n      />\n    </div>\n    <timepicker\n      class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n      [formControl]=\"form.get('time')\"\n      [showSeconds]=\"config.showSeconds\"\n      [showSpinners]=\"config.showSpinners\"\n      [showMeridian]=\"config.showMeridian\"\n      (wheel)=\"handleMouseWheel($event)\"\n    ></timepicker>\n  </div>\n\n  <div\n    class=\"d-contents\"\n    *ngSwitchCase=\"'Date'\"\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]=\"form.get('date')\"\n        (blur)=\"onTouched()\"\n        [minDate]=\"minDate\"\n        [maxDate]=\"maxDate\"\n      />\n    </div>\n  </div>\n\n  <div\n    class=\"d-contents\"\n    *ngSwitchCase=\"'DateRange'\"\n  >\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]=\"form.get('date')\"\n        [bsConfig]=\"{\n          customTodayClass: 'today',\n          adaptivePosition: true,\n          rangeInputFormat: dateInputFormat\n        }\"\n        bsDaterangepicker\n      />\n    </div>\n  </div>\n\n  <div\n    class=\"d-contents\"\n    *ngSwitchCase=\"'Time'\"\n  >\n    <timepicker\n      class=\"form-group {{ size ? 'form-group-' + size : '' }}\"\n      [formControl]=\"form.get('time')\"\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  <div *ngSwitchCase=\"'SingleDateRequired'\">\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</div>\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EnvironmentProviders,\n  importProvidersFrom\n} from '@angular/core';\nimport { FieldType, FormlyModule } from '@ngx-formly/core';\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})\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  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  forwardRef,\n  Input,\n  OnDestroy,\n  Output\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { Subject } from 'rxjs';\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})\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  ],\n  exports: [TimePickerComponent],\n  declarations: [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 {\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 '../../i18n';\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})\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 {\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 '../../i18n';\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})\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]=\"properties.required || (!properties.acceptUndefined ?? true)\"\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';\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})\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 { Component, EnvironmentProviders, importProvidersFrom } from '@angular/core';\nimport { FieldWrapper, FormlyModule } from '@ngx-formly/core';\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})\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 { 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 { DropAreaModule } from '../drop-area/drop-area.module';\nimport { FormsModule } from '../forms/index';\nimport { ListGroupModule } from '../list-group/list-group.module';\nimport { CoreSearchModule } from '../search/search.module';\nimport { SelectModule } from '../select/select.module';\nimport { C8yTranslateModule } from '../i18n/c8y-translate.module';\nimport { ArrayTypeComponent } from './array/array.type.component';\nimport { FieldCheckbox } from './checkbox/checkbox.type.component';\nimport { FieldDate } from './date/date.type.component';\nimport { FieldFile } from './file/file.type.component';\nimport { WrapperFormField } from './form-field/form-field.wrapper.component';\nimport { FieldInput } from './input/input.type.component';\nimport { ObjectTypeComponent } from './object/object.type.component';\nimport { FieldRadio } from './radio/radio.type.component';\nimport { FieldDateTime } from './date-time/date-time.type.component';\nimport { DateTimePickerModule } from '../date-time-picker/date-time-picker.module';\nimport { TypeaheadTypeComponent } from './typeahead/typeahead.type.component';\nimport { C8yArrayTypeInjectTemplatePipe } from './array/array-type-inject-template.pipe';\nimport { arrayTypeConfig } from './array/array.type.component';\nimport { fieldCheckboxTypeConfig } from './checkbox/checkbox.type.component';\nimport { fieldDateTypeConfig } from './date/date.type.component';\nimport { fieldDateTimeTypeConfig } from './date-time/date-time.type.component';\nimport { fieldFileTypeConfig } from './file/file.type.component';\nimport { wrapperFormFieldConfig } from './form-field/form-field.wrapper.component';\nimport { fieldInputTypeConfig } from './input/input.type.component';\nimport { objectTypeConfig } from './object/object.type.component';\nimport { fieldRadioTypeConfig } from './radio/radio.type.component';\nimport { SelectTypeComponent, selectTypeConfig } from './select/select.type.component';\nimport { typeaheadTypeConfig } from './typeahead/typeahead.type.component';\nimport { FieldTextArea, fieldTextareaTypeConfig } from './textarea/textarea.type.component';\nimport { TextFieldModule } from '@angular/cdk/text-field';\nimport {\n  LegendFieldWrapper,\n  wrapperLegendFieldConfig\n} from './legend-wrapper/legend.wrapper.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];\n\n/**\n * This module declares field type components for dynamic forms that match C8Y styleguide.\n *\n * @dynamic\n */\n@NgModule({\n  declarations: [...FIELD_TYPES, C8yArrayTypeInjectTemplatePipe],\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  ],\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  ]\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 '../../i18n';\n\nexport class TranslateExtension {\n  constructor(private translate: TranslateService, private parser: TranslateParser) {}\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 '../../i18n/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';\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 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\nexport interface WidgetSettings {\n  /**\n   * Avoids to show the widget in the \"add widget\" modal\n   */\n  noNewWidgets?: boolean;\n  upgrade?: boolean;\n  widgetDefaults?: {\n    _width?: number;\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      [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   */\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   */\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 */\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   */\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';\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 { TemplateRef } from '@angular/core';\nimport { DynamicBulkRetrievalError } from './dynamic-bulk-retrieval-error.model';\nimport { Alert, AlertType } from '../alert';\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  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","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      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';\n\n@Component({\n  selector: 'c8y-dynamic-component-alerts',\n  templateUrl: './dynamic-component-alerts.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush\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(public alertService: AlertService, private ref: ChangeDetectorRef) {\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 { 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';\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})\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() {\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      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  declarations: [DynamicComponentComponent, DynamicComponentAlertsComponent],\n  imports: [CommonModule, CollapseModule, RouterModule.forChild([]), I18nModule],\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';\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(protected dynamicResolver: DynamicResolverService) {\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 } from './dynamic-component-alert.model';\nimport { DynamicBulkDetailsResolver } from './dynamic-details-resolver';\nimport { DynamicResolverService } from './dynamic-resolver.service';\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 set to managedObject, for events e.g. to event.\n   */\n  protected abstract readonly typeForErrorMessage: string;\n\n  constructor(\n    protected dynamicResolver: DynamicResolverService,\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);\n  }\n\n  buildRetrievalAlert(\n    entity: Partial<T>,\n    errors: DynamicBulkRetrievalError[]\n  ): DynamicComponentAlert {\n    const moError = `\"${entity.name || entity.text || '-'}\" (${entity.id})`;\n\n    let details = '';\n    let foundErrorForId: DynamicBulkRetrievalError;\n    if (errors?.length) {\n      foundErrorForId = errors.find(tmp => tmp.id === entity.id);\n      if (foundErrorForId) {\n        details = `. ${foundErrorForId.status}: ${foundErrorForId.statusText}`;\n      }\n    }\n\n    const alert = new DynamicComponentAlert({\n      text: `Unable to retrieve the following ${this.typeForErrorMessage}: ${moError}${details}`,\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 { flatten, pick } from 'lodash';\nimport { Observable } from 'rxjs';\nimport { DynamicBulkRetrievalError } from './dynamic-bulk-retrieval-error.model';\nimport { DynamicBulkIIdentifiedResolver } from './abstract-id-resolver';\nimport { DynamicResolverService } from './dynamic-resolver.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 typeForErrorMessage = 'managedObject';\n  protected readonly maxNumberOfManagedObjectsPerRequest = 50;\n  protected queryFilter: any = {};\n\n  constructor(\n    protected dynamicResolver: DynamicResolverService,\n    protected inventory: InventoryService\n  ) {\n    super(dynamicResolver);\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(\n    uniqIds: string[],\n    bulkRequestId: number\n  ): Promise<{\n    result: IManagedObject[];\n    bulkRequestId: number;\n    errors: DynamicBulkRetrievalError[];\n  }> {\n    if (!uniqIds.length) {\n      return { result: [], bulkRequestId, errors: [] };\n    }\n    const promiseArray = new Array<\n      Promise<{ managedObjects: IManagedObject[]; errors: DynamicBulkRetrievalError[] }>\n    >();\n    while (uniqIds.length) {\n      const idsToProcess = uniqIds.splice(0, this.maxNumberOfManagedObjectsPerRequest);\n      promiseArray.push(this.loadAChunkOfManagedObjects(idsToProcess));\n    }\n\n    const result = await Promise.all(promiseArray);\n    const managedObjects = flatten(result.map(tmp => tmp.managedObjects));\n    const errors = flatten(result.map(tmp => tmp.errors));\n\n    return { result: managedObjects, bulkRequestId, errors };\n  }\n\n  protected async loadAChunkOfManagedObjects(\n    uniqIds: string[]\n  ): Promise<{ managedObjects: IManagedObject[]; errors: DynamicBulkRetrievalError[] }> {\n    const { data: managedObjects } = await this.inventory.list(\n      Object.assign({}, this.queryFilter || {}, {\n        ids: uniqIds.join(),\n        pageSize: this.maxNumberOfManagedObjectsPerRequest\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 => this.getStatusDetails(id));\n      const res = await Promise.all(promArray);\n      return { managedObjects, errors: res };\n    }\n\n    return { managedObjects, errors: [] };\n  }\n\n  protected 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 { IManagedObject } from '@c8y/client';\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';\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(protected moResolver: DynamicManagedObjectResolver) {}\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 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    const moIds = [...templateIds, ...targetIds];\n\n    this.moResolver.addIdsToBeLoaded(bulkRequestId, ...moIds);\n\n    return this.moResolver\n      .getResult$(bulkRequestId)\n      .pipe(\n        map(({ result: updatedMos, errors: _errors }) =>\n          this.assignUpdatedValues(datapoints, updatedMos)\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  protected assignUpdatedValues(\n    oldDatapoints: any[],\n    currentManagedObjects: IManagedObject[]\n  ): any[] {\n    return oldDatapoints.map(dp =>\n      this.assignUpdatedValuesToSingleDatapoint(dp, currentManagedObjects)\n    );\n  }\n\n  protected assignUpdatedValuesToSingleDatapoint(\n    datapoint: any,\n    currentManagedObjects: IManagedObject[]\n  ): any {\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\n      Object.assign(datapoint, updatedDatapoint);\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      }\n    }\n    return datapoint;\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})\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})\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;\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 { Component } from '@angular/core';\nimport { gettext } from '../../i18n';\n\n@Component({\n  selector: 'c8y-widget-auto-refresh-context-icon-bar',\n  templateUrl: './widget-auto-refresh-context-icon-bar.component.html'\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 { aggregationType } from '@c8y/client';\nimport { gettext } from '../i18n';\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 { Component, Input } from '@angular/core';\nimport { AGGREGATION_ICONS, AGGREGATION_TEXTS } from '../../../aggregation/aggregation.model';\nimport { gettext } from '../../../i18n';\n\n@Component({\n  selector: 'c8y-widget-time-context-icon-bar',\n  templateUrl: './widget-time-context-icon-bar.component.html'\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 { CdkDrag, CdkDragEnd, CdkDragStart } 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 { 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, Widget } from './dashboard.model';\nimport { debounceTime, map, startWith } from 'rxjs/operators';\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})\nexport class DashboardChildComponent implements DashboardChildDimension {\n  actions: DashboardChildActionComponent[] = [];\n  @ContentChildren(DashboardChildActionComponent) set templateActions(\n    actions: DashboardChildActionComponent[]\n  ) {\n    this.addActions(actions, true);\n  }\n  dragSource: CdkDrag;\n  isResize = false;\n  isDragging = false;\n  klasses = {};\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.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 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  <div\n    class=\"card-placeholder\"\n    *ngIf=\"isResize\"\n  ></div>\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      <div\n        class=\"header-actions d-flex a-i-center\"\n        *ngIf=\"actions.length > 0\"\n      >\n        <c8y-widget-time-context-icon-bar\n          *ngIf=\"\n            data?.config?.displaySettings &&\n            (data?.config?.widgetInstanceGlobalTimeContext ||\n              data?.config?.widgetInstanceGlobalAutoRefreshContext)\n          \"\n          [config]=\"data.config\"\n        ></c8y-widget-time-context-icon-bar>\n        <c8y-widget-auto-refresh-context-icon-bar\n          *ngIf=\"\n            data?.config?.widgetInstanceGlobalAutoRefreshContext &&\n            data?.config?.displaySettings.globalAutoRefreshContext\n          \"\n        ></c8y-widget-auto-refresh-context-icon-bar>\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          [delay]=\"500\"\n          container=\"body\"\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        <div\n          class=\"optionsBtn dropdown\"\n          placement=\"bottom right\"\n          dropdown\n          [container]=\"'body'\"\n        >\n          <button\n            class=\"btn btn-icon c8y-dropdown\"\n            title=\"{{ 'Settings' | translate }}\"\n            aria-haspopup=\"true\"\n            *ngIf=\"editMode\"\n            data-cy=\"c8y-dashboard-child--settings\"\n            (click)=\"(false)\"\n            dropdownToggle\n          >\n            <i [c8yIcon]=\"'cog'\"></i>\n          </button>\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            *ngIf=\"!editMode\"\n            (click)=\"(false)\"\n            data-cy=\"c8y-dashboard-child--settings-locked\"\n          >\n            <i [c8yIcon]=\"'lock'\"></i>\n          </button>\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            <ng-container *ngFor=\"let action of actions\">\n              <ng-container *ngTemplateOutlet=\"action.template\"></ng-container>\n            </ng-container>\n          </ul>\n        </div>\n      </div>\n    </div>\n    <div class=\"card-inner-scroll\">\n      <ng-content></ng-content>\n    </div>\n    <div\n      class=\"resize-handle hidden-xs\"\n      *ngIf=\"editMode && !isDragging && !fullscreen\"\n      cdkDrag\n      [cdkDragDisabled]=\"!editMode || fullscreen\"\n      (cdkDragStarted)=\"resizeStarted($event)\"\n      (cdkDragEnded)=\"reset($event)\"\n    ></div>\n    <div\n      class=\"resize-icon hidden-xs\"\n      *ngIf=\"editMode && !isDragging && !fullscreen\"\n    ></div>\n\n    <div\n      class=\"card-placeholder\"\n      *cdkDragPlaceholder\n    ></div>\n  </div>\n</div>\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 { 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  #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 { Component, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { gettext } from '../../../i18n';\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 { Injectable, signal } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WidgetTimeContextDateRangeService {\n  timeContextChange = signal<any>(null);\n  initialTimeRange = signal<any>(null);\n\n  emitPropertyUpdate(data: any) {\n    this.timeContextChange.set(data);\n  }\n\n  updateInitialTimeRange(data: any) {\n    this.initialTimeRange.set(data);\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 { NgClass, NgIf, NgTemplateOutlet } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  effect,\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 {\n  Interval,\n  INTERVAL_TITLES,\n  IntervalPickerComponent\n} from '@c8y/ngx-components/interval-picker';\nimport { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { interval, Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\nimport { ActionBarService } from '../../action-bar';\nimport { ActionBarItemComponent } from '../../action-bar/action-bar-item.component';\nimport { AGGREGATION_LIMITS } from '../../aggregation/aggregation.model';\nimport { AggregationService } from '../../aggregation/aggregation.service';\nimport { DatePipe } from '../../common/date.pipe';\nimport { IconDirective } from '../../common/icon.directive';\nimport { DateTimePickerComponent } from '../../date-time-picker';\nimport { FormGroupComponent } from '../../forms/form-group.component';\nimport { MessageDirective } from '../../forms/message.directive';\nimport { MessagesComponent } from '../../forms/messages.component';\nimport { gettext } from '../../i18n';\nimport { C8yTranslateDirective } from '../../i18n/c8y-translate.directive';\nimport { C8yTranslatePipe } from '../../i18n/c8y-translate.pipe';\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 { AggregationPickerComponent } from './aggregation-picker/aggregation-picker.component';\nimport { RealtimeControlComponent } from './realtime-control/realtime-control.component';\nimport { WidgetTimeContextDateRangeService } from './widget-time-context-date-range.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';\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    MessagesComponent,\n    MessageDirective,\n    RealtimeControlComponent,\n    AggregationPickerComponent,\n    C8yTranslatePipe,\n    DatePipe,\n    DashboardChildActionComponent,\n    DateTimePickerComponent\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  sliderChange: 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    private widgetTimeContextDateRangeService: WidgetTimeContextDateRangeService\n  ) {\n    effect(() => {\n      const data = this.widgetTimeContextDateRangeService.timeContextChange();\n      if (data) {\n        const updatedFormData = {\n          date: [new Date(data.dateFrom), new Date(data.dateTo)],\n          interval: data.interval,\n          realtime: false,\n          aggregation: this.form.value.aggregation\n        } as WidgetTimeContextState;\n        this.sliderChange = true;\n        this.dateContextChange.emit({ ...updatedFormData, sliderChange: true });\n        this.stopRealtime();\n        this.updateFormValues(updatedFormData);\n      }\n    });\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        if (this.sliderChange) {\n          this.sliderChange = false;\n          return;\n        }\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 { 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 the application check if a translation is present for the\n   * widget title.\n   */\n  translateWidgetTitle: 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 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","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 { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { BehaviorSubject, fromEvent, Observable, of, Subject, Subscription, timer } from 'rxjs';\nimport { debounceTime, filter, first, mapTo, switchMap, takeUntil, tap } from 'rxjs/operators';\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})\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\n  get countdownInterval(): number {\n    return this._countdownInterval || this.MINIMUM_INTERVAL;\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\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$\n      .pipe(debounceTime(100), takeUntil(this.destroy$))\n      .subscribe(() => this.initializeCountdownInterval());\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  start(): void {\n    this.countdownSubscription?.unsubscribe();\n    this.start$.next(null);\n  }\n\n  stop(stopAtZero = false): void {\n    this.countdownSubscription?.unsubscribe();\n    this.runSpinner$.next(false);\n    if (stopAtZero) {\n      this.secondsUntilRefresh$.next('0');\n    } else {\n      this.secondsUntilRefresh$.next(`${Math.floor(this.countdownInterval / 1000)}`);\n    }\n  }\n\n  reset(): void {\n    this.stop();\n    this.start();\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\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 remainingSeconds = Math.floor(this.countdownInterval / this.ONE_SECOND - value);\n    this.secondsUntilRefresh$.next(`${remainingSeconds}`);\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","<div\n  class=\"time-elapsed\"\n  data-cy=\"c8y-countdown-interval--countdown\"\n  [style.--timescope]=\"countdownInterval + 'ms'\"\n  [title]=\"'{{ secondsLeft }} s / {{ interval }} s' | translate: { secondsLeft: secondsUntilRefresh$ | async, interval: countdownInterval / 1000 }\"\n>\n  <svg\n    [ngClass]=\"{ 'time-on': runSpinner$ | async }\"\n    viewBox=\"0 0 40 40\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <circle\n      cx=\"20\"\n      cy=\"20\"\n      r=\"15.8\"\n      stroke=\"var(--c8y-brand-primary)\"\n      stroke-width=\"6\"\n    />\n  </svg>\n\n  <span>{{ secondsUntilRefresh$ | async }}</span>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { CountdownIntervalComponent } from './countdown-interval.component';\n\n@NgModule({\n  imports: [CommonModule, TranslateModule],\n  exports: [CountdownIntervalComponent],\n  declarations: [CountdownIntervalComponent]\n})\nexport class CountdownIntervalModule {}\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 '../../i18n';\nimport { DEFAULT_INTERVAL_VALUE } from './widget-auto-refresh-context.model';\nimport { WidgetGlobalAutoRefreshService } from './widget-global-auto-refresh.service';\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})\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","<div class=\"input-group\">\n  <button\n    class=\"toggle-countdown\"\n    [attr.aria-label]=\"\n      ((showIntervalRefresh$ | async) ? DISABLE_AUTO_REFRESH : ENABLE_AUTO_REFRESH) | translate\n    \"\n    [tooltip]=\"\n      ((showIntervalRefresh$ | async) ? DISABLE_AUTO_REFRESH : ENABLE_AUTO_REFRESH) | translate\n    \"\n    placement=\"bottom\"\n    (click)=\"toggleIntervalRefresh()\"\n    [adaptivePosition]=\"false\"\n    mode\n    [delay]=\"500\"\n    [disabled]=\"isBtnDisabled$ | async\"\n  >\n    <c8y-countdown-interval\n      [hidden]=\"!(showIntervalRefresh$ | async)\"\n      [countdownInterval]=\"(autoRefreshSeconds$ | async) ?? DEFAULT_INTERVAL_VALUE\"\n    ></c8y-countdown-interval>\n    <i\n      c8yIcon=\"pause\"\n      *ngIf=\"!(showIntervalRefresh$ | async)\"\n    ></i>\n  </button>\n  <span></span>\n</div>\n","import { Component, forwardRef } from '@angular/core';\nimport { gettext } from '../../i18n';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  DEFAULT_INTERVAL_VALUE,\n  DEFAULT_INTERVAL_VALUES\n} from './widget-auto-refresh-context.model';\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})\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 { AfterViewInit, Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\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})\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 { 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, 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 '../i18n';\nimport { RevertChangeType } from './widget-change-event.model';\nimport { ModalService } from '../modal';\nimport { Status } from '../common';\nimport { WidgetGlobalAutoRefreshService } from './widget-auto-refresh-context';\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})\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  settings: DashboardSettings = {\n    isFrozen: false,\n    isDisabled: false,\n    widgetMargin: 12,\n    translateWidgetTitle: false,\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  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  ) {\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    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","<c8y-title *ngIf=\"!!settings.title\">\n  {{ settings.title | translate }}\n</c8y-title>\n\n<c8y-breadcrumb *ngIf=\"!!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<c8y-action-bar-item\n  [placement]=\"'left'\"\n  [priority]=\"ACTION_BAR_EDIT_WIDGETS_PRIORITY\"\n  *ngIf=\"!(editMode$ | async)\"\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<c8y-action-bar-item\n  [placement]=\"'left'\"\n  *ngIf=\"editMode$ | async\"\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]=\"'left'\"\n  itemClass=\"d-flex a-i-center gap-8\"\n  *ngIf=\"editMode$ | async\"\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\"\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<c8y-action-bar-item\n  [placement]=\"'right'\"\n  *ngIf=\"onEditDashboard.observers.length\"\n>\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<c8y-action-bar-item\n  [placement]=\"'right'\"\n  *ngIf=\"settings.allowFullscreen\"\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<c8y-action-bar-item\n  [placement]=\"'more'\"\n  [priority]=\"-2000\"\n  *ngIf=\"settings.canCopy\"\n>\n  <div\n    [ngStyle]=\"{\n      display: 'flex',\n      flexDirection: 'row',\n      alignItems: 'center'\n    }\"\n  >\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    <button\n      class=\"btn-help btn-help--sm m-r-16 hidden-xs\"\n      [attr.aria-label]=\"'Help' | translate\"\n      [popover]=\"copyDisabledPopoverMsg | translate\"\n      placement=\"right\"\n      triggers=\"focus\"\n      container=\"body\"\n      type=\"button\"\n      *ngIf=\"!isCopyDisabled?.state && copyDisabledPopoverMsg\"\n      data-cy=\"widgets-dashboard--info-copy-dashboard\"\n      (click)=\"$event.stopPropagation()\"\n    ></button>\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<c8y-action-bar-item\n  [placement]=\"'more'\"\n  [priority]=\"-3000\"\n  *ngIf=\"settings.canDelete && onDeleteDashboard.observers.length\"\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<ng-template #loadingIndicator>\n  <c8y-loading\n    class=\"col-xs-12 text-center\"\n    *ngIf=\"isLoadingWidgets$ | async\"\n  ></c8y-loading>\n</ng-template>\n\n<ng-container *ngIf=\"!(isLoadingWidgets$ | async); else loadingIndicator\">\n  <ng-container *ngIf=\"resolvedWidgets$ | async as widgetsToDisplay\">\n    <!-- empty state -->\n    <c8y-ui-empty-state\n      [icon]=\"'c8y-device'\"\n      [title]=\"'No widgets to display.' | translate\"\n      *ngIf=\"widgetsToDisplay?.length === 0\"\n    >\n      <div *ngIf=\"onAddWidget.observers.length\">\n        <p\n          translate\n          *ngIf=\"editMode$ | async\"\n        >\n          Add widgets to this dashboard.\n        </p>\n        <p\n          translate\n          *ngIf=\"!(editMode$ | async)\"\n        >\n          Click \"Edit widgets\" to unlock\n        </p>\n        <div>\n          <button\n            class=\"btn btn-primary m-t-16\"\n            title=\"{{ 'Add widget' | translate }}\"\n            type=\"button\"\n            [disabled]=\"settings.isDisabled || !(editMode$ | async)\"\n            (click)=\"onAddWidget.emit()\"\n            data-cy=\"c8y-widgets-dashboard--add-widget\"\n            translate\n          >\n            Add widget\n          </button>\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            .\n          </small>\n        </p>\n      </div>\n    </c8y-ui-empty-state>\n\n    <c8y-dashboard\n      [columns]=\"settings.columns\"\n      (dashboardChange)=\"onChangeDashboard.emit($event)\"\n      #dashboard\n    >\n      <c8y-dashboard-child\n        [class]=\"widget.classes\"\n        *ngFor=\"let widget of widgetsToDisplay\"\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)=\"onChangeStart.emit({ widget: widget, source: child, dashboard: dashboard })\"\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          <span\n            data-cy=\"c8y-dashboard-list--device-widget\"\n            *ngIf=\"settings.translateWidgetTitle\"\n          >\n            {{ widget.title | translate }}\n          </span>\n          <span *ngIf=\"!settings.translateWidgetTitle\">\n            {{ widget.title }}\n          </span>\n        </c8y-dashboard-child-title>\n        <c8y-dashboard-child-action *ngIf=\"onEditWidget.observers.length\">\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        <c8y-dashboard-child-action *ngIf=\"onDeleteWidget.observers.length\">\n          <button\n            title=\"{{ 'Remove widget' | translate }}\"\n            type=\"button\"\n            data-cy=\"c8y-widgets-dashboard--remove-widget\"\n            (click)=\"onDeleteWidget.emit({ widget: widget, source: child, dashboard: dashboard })\"\n          >\n            <i c8yIcon=\"delete\"></i>\n            <span translate>Remove</span>\n          </button>\n        </c8y-dashboard-child-action>\n\n        <c8y-widget-time-context\n          *ngIf=\"\n            (widget.config?.displaySettings?.globalTimeContext ||\n              widget.config?.displaySettings?.globalRealtimeContext) &&\n            (widget.config.widgetInstanceGlobalTimeContext ||\n              widget.config.widgetInstanceGlobalAutoRefreshContext)\n          \"\n          (dateContextChange)=\"updateWidgetConfig($event, widget)\"\n          [canDecouple]=\"widget.config.canDecoupleGlobalTimeContext\"\n          [displaySettings]=\"widget.config.displaySettings\"\n          [hidden]=\"editMode$ | async\"\n        ></c8y-widget-time-context>\n\n        <c8y-widget-auto-refresh-context\n          *ngIf=\"\n            widget?.config?.widgetInstanceGlobalAutoRefreshContext &&\n            widget.config?.displaySettings.globalAutoRefreshContext\n          \"\n          [editMode$]=\"editMode$\"\n        ></c8y-widget-auto-refresh-context>\n\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          *ngIf=\"child.intersected\"\n          (updateWidgetClasses)=\"updateWidgetClasses(widget, $event)\"\n        ></c8y-dynamic-component>\n      </c8y-dashboard-child>\n    </c8y-dashboard>\n  </ng-container>\n</ng-container>\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';\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})\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","<c8y-action-bar-item\n  [placement]=\"'right'\"\n  itemClass=\"pull-right m-l-md-8\"\n  [priority]=\"priority\"\n  *ngIf=\"!!(helpService.contextHelp | async)\"\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 c8yIcon=\"help-outline\" class=\"text-info\"></i>\n    {{ 'About this page' | translate }}\n  </button>\n</c8y-action-bar-item>\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    <div *ngIf=\"isLoading\">\n      <c8y-loading></c8y-loading>\n    </div>\n\n    <div *ngIf=\"!isLoading\">\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        <div\n          class=\"p-l-16 flex-grow\"\n          *ngIf=\"!hasError\"\n        >\n          <div\n            class=\"alert alert-info m-b-16\"\n            *ngIf=\"\n              !helpService.isSupportedLanguage() &&\n              !showLangWarning &&\n              !helpService.isWarningAlertViewed\n            \"\n          >\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          <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        <div\n          class=\"p-l-16 p-t-16 flex-grow\"\n          *ngIf=\"hasError\"\n        >\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      </div>\n    </div>\n  </div>\n  <div\n    class=\"c8y-help-drawer-footer animated fadeIn\"\n    style=\"animation-delay: 0.35s\"\n    *ngIf=\"!isLoading && !hasError\"\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      (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      <span\n        translate\n        *ngIf=\"!hasError\"\n      >\n        Open the\n        <span>user documentation</span>\n      </span>\n      <span\n        translate\n        *ngIf=\"hasError\"\n      >\n        Check the\n        <span>user documentation</span>\n      </span>\n    </a>\n  </div>\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  declarations: [HelpComponent],\n  imports: [\n    CommonModule,\n    CollapseModule.forRoot(),\n    TooltipModule.forRoot(),\n    ActionBarModule,\n    ProductExperienceModule\n  ],\n  exports: [HelpComponent],\n  providers: [HelpService]\n})\nexport class HelpModule {}\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 { 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';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { AggregationPickerComponent } from './wiget-time-context/aggregation-picker/aggregation-picker.component';\n\n@NgModule({\n  declarations: [\n    DashboardChildComponent,\n    DashboardComponent,\n    DashboardChildTitleComponent,\n    WidgetsDashboardComponent,\n    WidgetAutoRefreshContextComponent,\n    WidgetAutoRefreshContextIconBarComponent,\n    AutoRefreshControlComponent,\n    AutoRefreshSelectControlComponent,\n    WidgetTimeContextIconBar\n  ],\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    TranslateModule,\n    IntervalPickerComponent,\n    PopoverModule,\n    AggregationPickerComponent,\n    RealtimeControlComponent,\n    WidgetTimeContextComponent,\n    DashboardChildActionComponent\n  ],\n  exports: [\n    DashboardComponent,\n    DashboardChildComponent,\n    DashboardChildTitleComponent,\n    DashboardChildActionComponent,\n    WidgetsDashboardComponent,\n    WidgetTimeContextComponent\n  ]\n})\nexport class DashboardModule {}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\nimport { AuditRecordType, AuditService, IAuditRecord, IResultList } from '@c8y/client';\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})\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  declarations: [AuditLogComponent],\n  imports: [CommonModule],\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({ selector: '[c8yFilteringFormRendererDef]' })\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 } 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';\n\n@Component({\n  templateUrl: './base.filtering-form-renderer.component.html',\n  selector: 'c8y-base-filtering-form-renderer'\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 { Column } 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: Column;\n}\n\n@Directive({ selector: '[c8yCellRendererDef]' })\nexport class CellRendererDefDirective implements CellRendererDef {\n  constructor(public template: TemplateRef<any>) {}\n}\n\n@Directive({ selector: '[c8yHeaderCellRendererDef]' })\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';\n\n@Component({\n  selector: 'c8y-cell-renderer',\n  templateUrl: './cell-renderer.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush\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(private injector: Injector, private cd: ChangeDetectorRef) {}\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","<ng-container *ngIf=\"spec.renderer\">\n  <ng-container\n    *ngIf=\"rendererType === 'TEMPLATE'\"\n    [ngTemplateOutlet]=\"spec.renderer\"\n    [ngTemplateOutletContext]=\"{ $implicit: spec.context }\"\n  ></ng-container>\n\n  <ng-container\n    *ngIf=\"rendererType === 'COMPONENT'\"\n    [c8yComponentOutlet]=\"spec.renderer\"\n    [c8yComponentOutletInjector]=\"rendererInjector\"\n  ></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"!spec.renderer\">\n  <span title=\"{{ spec.context.value | stringifyObject }}\">\n    {{ spec.context.value | stringifyObject }}\n  </span>\n</ng-container>\n","import { ContentChild, Directive, Input } from '@angular/core';\n\nimport { CellRendererDefDirective, HeaderCellRendererDefDirective } from './cell-renderer';\nimport { FilteringFormRendererDefDirective } from './filtering-form-renderer';\n\n@Directive({ selector: 'c8y-column' })\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';\n\n@Component({\n  selector: 'c8y-filtering-form-renderer',\n  templateUrl: './filtering-form-renderer.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush\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","<ng-container *ngIf=\"spec.renderer\">\n  <ng-container\n    *ngIf=\"rendererType === 'TEMPLATE'\"\n    [ngTemplateOutlet]=\"spec.renderer\"\n    [ngTemplateOutletContext]=\"{ $implicit: spec.context }\"\n  ></ng-container>\n\n  <ng-container\n    *ngIf=\"rendererType === 'COMPONENT'\"\n    [c8yComponentOutlet]=\"spec.renderer\"\n    [c8yComponentOutletInjector]=\"rendererInjector\"\n  ></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"!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\n  <div class=\"data-grid__dropdown__footer d-flex separator-top\">\n    <button\n      title=\"{{ 'Reset' | translate }}\"\n      class=\"btn btn-default btn-sm flex-grow m-r-8\"\n      (click)=\"defaultRendererFilterText = ''; spec.context.resetFilter()\"\n    >\n      {{ 'Reset' | translate }}\n    </button>\n    <button\n      title=\"{{ 'Apply' | translate }}\"\n      class=\"btn btn-primary btn-sm flex-grow\"\n      (click)=\"\n        spec.context.applyFilter({\n          filterPredicate: defaultRendererFilterText\n        })\n      \"\n    >\n      {{ 'Apply' | translate }}\n    </button>\n  </div>\n</ng-container>\n","import { Component, EventEmitter, Output, ViewChild } from '@angular/core';\nimport { FormBuilder, FormGroup, NgForm, Validators } 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 '../../i18n/gettext';\nimport { Column, CustomColumnConfig } from '../data-grid.model';\n\n@Component({\n  selector: 'c8y-configure-custom-column',\n  templateUrl: './configure-custom-column.component.html'\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(public fb: FormBuilder, public modalRef: BsModalRef) {}\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      custom: true,\n      visible: true\n    };\n    this.onAddCustomColumn.emit(column);\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 id=\"modal-title\" translate>Configure custom column</h3>\n  </div>\n\n  <form class=\"d-contents\" #columnConfigForm=\"ngForm\" [formGroup]=\"formGroup\">\n    <div class=\"modal-inner-scroll\" id=\"modal-body\">\n      <div class=\"modal-body\">\n        <c8y-form-group>\n          <label for=\"header\" translate>Header</label>\n          <input\n            id=\"header\"\n            data-cy=\"configure-custom-column--header\"\n            formControlName=\"header\"\n            class=\"form-control\"\n            autocomplete=\"off\"\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 for=\"fragmentPath\" translate>Fragment path</label>\n          <input\n            id=\"fragmentPath\"\n            data-cy=\"configure-custom-column--fragmentPath\"\n            formControlName=\"path\"\n            class=\"form-control\"\n            autocomplete=\"off\"\n            [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'c8y_Agent.name' }\"\n          />\n        </c8y-form-group>\n        <label class=\"c8y-switch\" [title]=\"'Add another column after saving this one' | translate\">\n          <input type=\"checkbox\" formControlName=\"addAnother\" class=\"form-control\" />\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 title=\"{{ 'Cancel' | translate }}\" class=\"btn btn-default\" (click)=\"modalRef.hide()\">\n        {{ 'Cancel' | translate }}\n      </button>\n      <button\n        title=\"{{ 'Save' | translate }}\"\n        class=\"btn btn-primary\"\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 '../../i18n/gettext';\nimport { ColumnConfig } from '../data-grid.model';\nimport { BaseColumn } from './base.column';\n\nexport class CustomColumn extends BaseColumn {\n  constructor(initialColumnConfig?: ColumnConfig) {\n    super(initialColumnConfig);\n\n    this.name = this.name || 'custom';\n    this.header = this.header || gettext('Custom');\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})\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 '../../../i18n/gettext';\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      <i c8yIcon=\"chevron-right\" *ngIf=\"!loading\"></i>\n      <i class=\"icon-spin\" c8yIcon=\"circle-o-notch\" *ngIf=\"loading\"></i>\n    </button>\n  `,\n  selector: 'c8y-expandable-cell-renderer'\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 '../../../i18n/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 { 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 { FormlyFieldConfig } from '@ngx-formly/core';\nimport { Observable } from 'rxjs';\nimport { ExtensionFactory } from '../common/extension-hooks';\nimport { GridConfigContext } from './data-grid-configuration.model';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\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\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\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/** 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\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\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  /** 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\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\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\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})\nexport class ExpandableRowDirective {\n  constructor(\n    public template: TemplateRef<unknown>,\n    public elementRef: ElementRef,\n    public viewContainer: ViewContainerRef\n  ) {}\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { IResultList } from '@c8y/client';\nimport { chunk, 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, 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\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\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  }\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  }\n\n  loadData({\n    rows,\n    columns,\n    pagination,\n    searchText,\n    serverSideDataCallback,\n    selectable,\n    selectionPrimaryKey,\n    infiniteScroll,\n    reload = false\n  }) {\n    const clientSideData$ = toObservable(rows).pipe(\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        this.dataStatsSubject.next({\n          size: initialData.length,\n          filteredSize,\n          currentPage: pagination.currentPage,\n          currentPageSize: transformedData.length,\n          firstPageSize: pagination.pageSize\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        })\n      )\n    ).pipe(\n      map((result: ServerSideDataResult) => {\n        const { data, paging, size, filteredSize, filteredDataIds } = result;\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        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.loadingSubject.next(true)),\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.loadingSubject.next(false))\n      )\n      .subscribe(result => {\n        const data =\n          infiniteScroll && !reload ? [...this.dataSourceSubject.value, ...result] : result;\n        this.dataSourceSubject.next(data);\n      });\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 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\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 { 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 } 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      delete 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})\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})\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 { 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({ name: 'visibleControls' })\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 { CdkHeaderCell, CdkTable } from '@angular/cdk/table';\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} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { IIdentified, IResultList, Paging } from '@c8y/client';\nimport {\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 } from 'ngx-bootstrap/dropdown';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport {\n  BehaviorSubject,\n  Observable,\n  Subject,\n  UnaryFunction,\n  combineLatest,\n  forkJoin,\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 { LoadMoreComponent } from '../common/load-more.component';\nimport { LoadMoreMode } from '../common/load-more.model';\nimport { gettext } from '../i18n/gettext';\nimport { PopoverConfirmButtons, PopoverConfirmComponent } from '../modal/popover-confirm.component';\nimport { GainsightService } from '../product-experience/gainsight.service';\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 { 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 { ConfigureCustomColumnComponent } from './configure-custom-column';\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 { GridDataSource } from './grid-data-source';\nimport { PX_ACTIONS, PX_EVENT_NAME } from './product-experience.constants';\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})\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\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  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  };\n  /** Sets display options. */\n  @Input('displayOptions')\n  set _displayOptions(displayOptions: 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  /** 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  resizeHandleContainerMouseUp$ = new EventEmitter<MouseEvent>();\n\n  filtersHelpPopoverHtml: string = gettext('Click the column headers to apply filters.');\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 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 bsModalService: BsModalService,\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.searchText$\n      .pipe(\n        takeUntil(this.unsubscribe$),\n        debounceTime(this.SEARCH_DEBOUNCE_TIME),\n        distinctUntilChanged(),\n        tap(searchText => {\n          this.searchText = searchText;\n          this.onBeforeSearch.emit(this.searchText);\n          this.triggerEvent({\n            action: PX_ACTIONS.SEARCH,\n            searchInput: searchText\n          });\n        })\n      )\n      .subscribe(() => {\n        this.reload();\n      });\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  isRowExpanded = (_, row: Row): boolean => {\n    return !!this.expandedRows.get(row);\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  openCustomColumnModal(): void {\n    const modalRef = this.bsModalService.show(ConfigureCustomColumnComponent, {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      ignoreBackdropClick: true,\n      initialState: {\n        columns: this.columns\n      }\n    });\n\n    modalRef.content.onAddCustomColumn\n      .pipe(\n        tap((customColumnConfig: CustomColumnConfig) => {\n          const firstFixedColumPosition = this.columns.indexOf(\n            this.columns.find(column => column.positionFixed)\n          );\n          this.columns.splice(\n            firstFixedColumPosition > -1 ? firstFixedColumPosition : this.columns.length,\n            0,\n            new CustomColumn(customColumnConfig)\n          );\n          this.updateColumns();\n          this.triggerEvent({\n            action: PX_ACTIONS.ADD_CUSTOM_COLUMN,\n            column: customColumnConfig.header || customColumnConfig.name\n          });\n        }),\n        takeUntil(modalRef.onHidden)\n      )\n      .subscribe(event => this.onAddCustomColumn.emit(event));\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  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  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 } = column;\n      config = {\n        visible,\n        sortOrder,\n        name,\n        filter: { externalFilterQuery },\n        header,\n        path,\n        custom: true\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) {\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    });\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 columns = [expandableRowsColumn, selectionColumn, ...this.columns, actionsColumn]\n      .filter(Boolean)\n      .map(this.withColumnDefaults);\n\n    this.columns = uniqBy(columns, 'name');\n    this.updateColumnNames();\n    this.updateGridColumnsSize();\n    this.updateThEls();\n    this.updateFilteringApplied();\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: true,\n      sortable: true,\n      sortOrder: '',\n      filterable: false,\n      ...column,\n      dataType,\n      gridTrackSize:\n        column.gridTrackSize ||\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.resizeHandleContainerMouseUp$)\n        );\n      })\n    );\n\n    resizeHandleDrag$.subscribe((event: MouseEvent) => {\n      requestAnimationFrame(() => {\n        this.columns = this.columns.map((column, i) => {\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          // For the other headers which don't have a set width, fix it to their computed width.\n          if (column.gridTrackSize.startsWith('minmax')) {\n            return {\n              ...column,\n              // isn't fixed yet (it would be a px value)\n              gridTrackSize: `${_parseInt(this.thEls[i].clientWidth)}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    this.resizeHandleContainerMouseUp$.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\n          return column;\n        });\n        this.headerBeingResized = undefined;\n\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","<div\n  class=\"table-data-grid-scroll\"\n  #scroll\n  [ngClass]=\"{\n    'table-data-grid__overlay': (dataSource.loading$ | async) && !loadMoreComponent?.isLoading\n  }\"\n  data-cy=\"c8y-data-grid--table-data-grid-scroll\"\n>\n  <div\n    class=\"table-data-grid__loading--wrapper\"\n    *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent?.isLoading\"\n  >\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  <div\n    class=\"table-data-grid-header separator large-padding\"\n    *ngIf=\"displayOptions.gridHeader\"\n  >\n    <div\n      class=\"h4\"\n      [ngClass]=\"{ 'm-r-16': !!title }\"\n    >\n      {{ title | translate }}\n    </div>\n\n    <ng-container *ngIf=\"displayOptions.filter\">\n      <span *ngIf=\"!filteringApplied\">\n        <small\n          class=\"m-r-4\"\n          *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n          ngNonBindable\n          translate\n          [translateParams]=\"filteringLabelsParams\"\n        >\n          {{ filteredItemsCount }} of {{ allItemsCount }} items\n        </small>\n        <span\n          class=\"label label-default m-r-4\"\n          translate\n        >\n          No filters\n        </span>\n      </span>\n      <span\n        class=\"d-flex a-i-center\"\n        *ngIf=\"filteringApplied\"\n      >\n        <ng-container *ngIf=\"!!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        </ng-container>\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=\"p-relative p-l-4 p-r-16\">\n              <span class=\"badge badge-system p-absolute\">\n                {{ columnsWithFiltersApplied.length }}\n              </span>\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                <li\n                  *ngFor=\"let column of columnsWithFiltersApplied; let last = last\"\n                  [ngClass]=\"{ 'separator-bottom': !last }\"\n                >\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                    <div\n                      class=\"list-group-item borderless d-flex d-col\"\n                      *ngFor=\"\n                        let groupedFilterChips of column\n                          | mapToFilterChips\n                          | async\n                          | groupedFilterChips;\n                        let first = first\n                      \"\n                      [ngClass]=\"{ 'p-t-0': first }\"\n                    >\n                      <p\n                        class=\"small p-b-4\"\n                        *ngIf=\"groupedFilterChips.label\"\n                      >\n                        {{ groupedFilterChips.label | translate }}\n                      </p>\n                      <div class=\"d-flex a-i-center gap-4 flex-wrap\">\n                        <span\n                          class=\"tag tag--info chip\"\n                          *ngFor=\"let chip of groupedFilterChips.chips\"\n                        >\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                      </div>\n                    </div>\n                  </ng-container>\n                </li>\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      <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        *ngIf=\"displayOptions.filter\"\n        data-cy=\"data-grid--help-filters\"\n      >\n        <i c8yIcon=\"question-circle-o\"></i>\n      </button>\n      <ng-template #filtersHelpPopover>\n        <div [innerHtml]=\"filtersHelpPopoverHtml | translate\"></div>\n      </ng-template>\n\n      <button\n        class=\"btn-clean text-primary hidden-xs hidden-sm\"\n        [attr.aria-label]=\"'Help' | translate\"\n        popover=\"{{ 'The counter for the total number of items might be inaccurate.' | translate }}\"\n        placement=\"right\"\n        triggers=\"focus\"\n        type=\"button\"\n        *ngIf=\"showCounterWarning\"\n      >\n        <i c8yIcon=\"warning\"></i>\n      </button>\n    </ng-container>\n\n    <div class=\"m-l-auto\">\n      <div class=\"btnbar d-flex a-i-center\">\n        <ng-container\n          *ngFor=\"let headerActionControl of headerActionControls | visibleControls | async\"\n        >\n          <ng-container *ngIf=\"!headerActionControl.template; else customTemplate\">\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          </ng-container>\n          <ng-template #customTemplate>\n            <ng-container\n              *ngTemplateOutlet=\"\n                headerActionControl.template;\n                context: { headerActionControl: headerActionControl }\n              \"\n            ></ng-container>\n          </ng-template>\n        </ng-container>\n\n        <div\n          class=\"dropdown\"\n          placement=\"bottom left\"\n          *ngIf=\"configureColumnsEnabled\"\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                <div\n                  *ngFor=\"let column of columns\"\n                  cdkDrag\n                  cdkDragLockAxis=\"y\"\n                >\n                  <ng-container *ngIf=\"!column.positionFixed\">\n                    <div class=\"list-group-item draggable-after p-0 a-i-center\">\n                      <label\n                        class=\"c8y-checkbox p-l-16\"\n                        title=\"{{ (column.header | translate) || column.name }}\"\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(); 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                        <span>{{ (column.header | translate) || column.name }}</span>\n                      </label>\n                      <button\n                        class=\"btn btn-dot 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                        *ngIf=\"column.custom\"\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                    </div>\n                  </ng-container>\n                </div>\n              </div>\n            </li>\n            <li\n              class=\"p-8 sticky-bottom separator-top\"\n              *ngIf=\"isConfigContextKnown\"\n            >\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)=\"openCustomColumnModal(); 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          </ul>\n        </div>\n\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        <div\n          class=\"input-group input-group-search m-l-sm-16 data-grid__search-input\"\n          *ngIf=\"!serverSideDataCallback || showSearch\"\n        >\n          <input\n            class=\"form-control\"\n            placeholder=\"{{ 'Search…' | translate }}\"\n            type=\"search\"\n            [ngModel]=\"searchText\"\n            (input)=\"searchText$.emit($event.target.value)\"\n          />\n          <div class=\"input-group-addon\">\n            <i\n              c8yIcon=\"search\"\n              *ngIf=\"searchText.length === 0\"\n            ></i>\n            <i\n              class=\"pointer\"\n              c8yIcon=\"times\"\n              *ngIf=\"searchText.length > 0\"\n              (click)=\"searchText = ''; searchText$.emit('')\"\n              c8yProductExperience\n              inherit\n              [actionData]=\"{ action: PX_ACTIONS.CLEAR_SEARCH }\"\n            ></i>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div\n      class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n      data-cy=\"table-data-grid-header-bulk-actions\"\n      *ngIf=\"selectedItemIds.length !== 0\"\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        <small *ngIf=\"!serverSideDataCallback && selectedItemIds.length >= pagination.pageSize\">\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      </h4>\n      <div class=\"m-l-auto\">\n        <div class=\"btnbar d-flex\">\n          <ng-container\n            *ngFor=\"\n              let bulkActionControl of bulkActionControls | visibleControls: selectedItemIds | async\n            \"\n          >\n            <ng-container [ngSwitch]=\"bulkActionControl.type\">\n              <button\n                class=\"btnbar-btn\"\n                title=\"{{ 'Export' | translate }}\"\n                type=\"button\"\n                (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n                *ngSwitchCase=\"builtInActionType.Export\"\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              <button\n                class=\"btnbar-btn\"\n                title=\"{{ 'Delete' | translate }}\"\n                type=\"button\"\n                (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n                *ngSwitchCase=\"builtInActionType.Delete\"\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              <button\n                class=\"btnbar-btn\"\n                title=\"{{ bulkActionControl.text | translate }}\"\n                type=\"button\"\n                (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n                *ngSwitchDefault\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            </ng-container>\n          </ng-container>\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  </div>\n\n  <table\n    class=\"table table-filtered-sorted table-data-grid large-padding\"\n    [class.table-striped]=\"displayOptions.striped\"\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    (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n    data-cy=\"c8y-data-grid--table\"\n  >\n    <ng-container\n      *ngFor=\"let column of columns; let i = index; trackBy: trackByName\"\n      [cdkColumnDef]=\"column.name\"\n    >\n      <ng-container [ngSwitch]=\"column.name\">\n        <ng-container *ngSwitchCase=\"'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        </ng-container>\n\n        <ng-container *ngSwitchCase=\"'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        </ng-container>\n\n        <ng-container *ngSwitchCase=\"'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            <ng-container\n              *ngFor=\"\n                let actionControl of actionControls\n                  | visibleControls: row\n                  | async\n                  | slice: 0 : ((actionControls | visibleControls: row | async)?.length > 2 ? 1 : 2)\n              \"\n            >\n              <ng-container [ngSwitch]=\"actionControl.type\">\n                <button\n                  class=\"btn btn-dot\"\n                  [attr.aria-label]=\"'Edit' | translate\"\n                  tooltip=\"{{ 'Edit' | translate }}\"\n                  container=\"body\"\n                  type=\"button\"\n                  *ngSwitchCase=\"builtInActionType.Edit\"\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                <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                  *ngSwitchCase=\"builtInActionType.Delete\"\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                <button\n                  class=\"btn btn-dot\"\n                  [attr.aria-label]=\"(actionControl.icon ? actionControl.text : '') | translate\"\n                  tooltip=\"{{ (actionControl.icon ? actionControl.text : '') | translate }}\"\n                  container=\"body\"\n                  type=\"button\"\n                  [ngClass]=\"{ showOnHover: actionControl.showOnHover }\"\n                  [delay]=\"500\"\n                  *ngSwitchDefault\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                  <i\n                    c8yIcon=\"{{ actionControl.icon }}\"\n                    *ngIf=\"actionControl.icon\"\n                  ></i>\n                  <span *ngIf=\"!actionControl.icon\">{{ actionControl.text | translate }}</span>\n                </button>\n              </ng-container>\n            </ng-container>\n\n            <div\n              [ngClass]=\"{\n                'm-l-auto overflow-visible':\n                  (actionControls | visibleControls: row | async)?.length > 2\n              }\"\n            >\n              <div\n                class=\"dropdown\"\n                placement=\"bottom right\"\n                container=\"body\"\n                dropdown\n                *ngIf=\"(actionControls | visibleControls: row | async)?.length > 2\"\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                  <li\n                    *ngFor=\"\n                      let actionControl of actionControls\n                        | visibleControls: row\n                        | async\n                        | slice\n                          : ((actionControls | visibleControls: row | async)?.length > 2 ? 1 : 2)\n                    \"\n                  >\n                    <ng-container [ngSwitch]=\"actionControl.type\">\n                      <button\n                        title=\"{{ 'Edit' | translate }}\"\n                        type=\"button\"\n                        *ngSwitchCase=\"builtInActionType.Edit\"\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                      <button\n                        title=\"{{ 'Delete' | translate }}\"\n                        type=\"button\"\n                        *ngSwitchCase=\"builtInActionType.Delete\"\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                      <button\n                        title=\"{{ 'Export' | translate }}\"\n                        type=\"button\"\n                        *ngSwitchCase=\"builtInActionType.Export\"\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                      <button\n                        title=\"{{ actionControl.text | translate }}\"\n                        type=\"button\"\n                        *ngSwitchDefault\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 c8yIcon=\"{{ actionControl.icon }}\"></i>\n                        {{ actionControl.text | translate }}\n                      </button>\n                    </ng-container>\n                  </li>\n                </ul>\n              </div>\n            </div>\n          </td>\n        </ng-container>\n\n        <ng-container *ngSwitchDefault>\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            <div\n              [title]=\"(column.header | translate) || column.name\"\n              *ngIf=\"!column.filterable\"\n            >\n              <ng-container\n                *ngIf=\"\n                  [\n                    {\n                      columnName: column.name,\n                      value: (column.header | translate) || column.name\n                    }\n                  ] | map: getHeaderCellRendererSpec : this as cellRendererSpec\n                \"\n              >\n                <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n              </ng-container>\n            </div>\n\n            <!-- isDropDownPlacedRight to be removed when columns are transformed to observables. -->\n            <div\n              class=\"dropdown\"\n              placement=\"bottom {{ isDropDownPlacedRight(column) ? 'right' : 'left' }}\"\n              *ngIf=\"column.filterable\"\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                <ng-container\n                  *ngIf=\"\n                    [\n                      {\n                        columnName: column.name,\n                        value: (column.header | translate) || column.name\n                      }\n                    ] | map: getHeaderCellRendererSpec : this as cellRendererSpec\n                  \"\n                >\n                  <c8y-cell-renderer\n                    data-cy=\"c8y-data-grid--c8y-cell-renderer\"\n                    [spec]=\"cellRendererSpec\"\n                  ></c8y-cell-renderer>\n                </ng-container>\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                  <ng-container\n                    *ngIf=\"\n                      [\n                        {\n                          column: column,\n                          dropdown: gridHeaderDropdown\n                        }\n                      ] | map: getFilteringFormRendererSpec : this as filteringFormRendererSpec\n                    \"\n                  >\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                  </ng-container>\n                </li>\n              </ul>\n            </div>\n\n            <button\n              class=\"btn-sort\"\n              [title]=\"sortColumnTitle | translate: { name: column.header | translate }\"\n              type=\"button\"\n              *ngIf=\"column.sortable\"\n              (click)=\"changeSortOrder(column.name)\"\n              data-cy=\"change-sort-order\"\n            >\n              <ng-container [ngSwitch]=\"column.sortOrder\">\n                <i\n                  c8yIcon=\"long-arrow-up\"\n                  *ngSwitchCase=\"'asc'\"\n                ></i>\n                <i\n                  c8yIcon=\"long-arrow-down\"\n                  *ngSwitchCase=\"'desc'\"\n                ></i>\n                <i\n                  c8yIcon=\"exchange\"\n                  *ngSwitchDefault\n                ></i>\n              </ng-container>\n            </button>\n\n            <span\n              class=\"resize-handle\"\n              *ngIf=\"column.resizable\"\n              (mousedown)=\"\n                resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n              \"\n            ></span>\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            <ng-container\n              *ngIf=\"\n                [\n                  {\n                    value: resolveCellValue(row, column.path),\n                    row: row,\n                    columnName: column.name\n                  }\n                ] | map: getCellRendererSpec : this as cellRendererSpec\n              \"\n            >\n              <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n            </ng-container>\n          </td>\n        </ng-container>\n      </ng-container>\n    </ng-container>\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\"\n      [ngClass]=\"[\n        activeClassName && row === lastClickedRow ? activeClassName : '',\n        idx % 2 === 0 ? 'even' : 'odd'\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    <ng-container>\n      <tr\n        [ngClass]=\"{ hidden: !infiniteScroll }\"\n        cdk-footer-row\n        *cdkFooterRowDef=\"['infiniteScrollFooter']\"\n      ></tr>\n    </ng-container>\n  </table>\n\n  <div\n    class=\"d-flex m-0 p-t-40 p-b-40\"\n    *ngIf=\"\n      !(dataSource.loading$ | async) &&\n      ((dataSource.stats$ | async).filteredSize === 0 || (dataSource.data$ | async).length === 0)\n    \"\n  >\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  <div\n    class=\"table-data-grid-footer separator large-padding\"\n    *ngIf=\"pagination && !infiniteScroll\"\n  >\n    <div class=\"col-sm-4 no-gutter\">\n      <div\n        class=\"counter p-t-8 p-b-8\"\n        *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\"\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    </div>\n\n    <div class=\"col-sm-4 no-gutter text-center\">\n      <div\n        class=\"form-group form-inline p-t-8 p-b-8\"\n        *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n      >\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            <option\n              *ngFor=\"let pageSize of possiblePageSizes\"\n              [ngValue]=\"pageSize\"\n            >\n              {{ pageSize }}\n            </option>\n          </select>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"col-sm-4 no-gutter text-right\">\n      <pagination\n        [class.hidden]=\"hidePagination$ | async\"\n        class=\"p-t-8 p-b-8\"\n        *ngIf=\"(dataSource.stats$ | async).filteredSize > 0\"\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\"\n        nextText=\"Next\"\n      ></pagination>\n    </div>\n  </div>\n</div>\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 { 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 { 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 { NgModule } from '@angular/core';\nimport { FilterMapperPipe, GroupedFilterChips } from '..';\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';\n\n@NgModule({\n  providers: [\n    hookFilterMapper(BooleanFilterMapper),\n    hookFilterMapper(RadioFilterMapper),\n    hookFilterMapper(TypeaheadFilterMapper),\n    hookFilterMapper(DateFilterMapper),\n    hookFilterMapper(SelectFilterMapper),\n    hookFilterMapper(StringFilterMapper)\n  ],\n  declarations: [FilterMapperPipe, GroupedFilterChips],\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\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  ],\n  declarations: [\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 } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { pipe } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { gettext } from '../i18n/gettext';\nimport { DisplayOption } from './list-display-switch.model';\n\n@Component({\n  selector: 'c8y-list-display-switch',\n  templateUrl: './list-display-switch.component.html'\n})\nexport class ListDisplaySwitchComponent implements OnInit {\n  @Input() listKey: string;\n  @Input('listLength')\n  set listLength(val: number) {\n    this._listLength = val;\n    this.loadSelectedOption();\n  }\n  @Input() filterPipe = pipe(tap());\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\">\n  <label class=\"m-r-8\" 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  declarations: [ListDisplaySwitchComponent],\n  imports: [CommonModule, FormsModule],\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';\n\n@Component({\n  selector: 'c8y-range-display',\n  templateUrl: './range-display.component.html'\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  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  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],\n  exports: [RangeDisplayComponent],\n  declarations: [RangeDisplayComponent]\n})\nexport class RangeDisplayModule {}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { gettext } from '../i18n/gettext';\nimport { RealtimeService } from './realtime.service';\n\n@Component({\n  selector: 'c8y-realtime-btn',\n  templateUrl: './realtime-button.component.html'\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],\n  declarations: [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})\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 '../i18n/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 { 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})\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  ],\n  exports: [SelectModalComponent, SelectModalFilterPipe],\n  declarations: [SelectModalComponent, SelectModalFilterPipe]\n})\nexport class SelectModalModule {}\n","import { BsDaterangepickerConfig } from 'ngx-bootstrap/datepicker';\nimport { gettext } from '../i18n/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 { AfterViewInit, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BsDatepickerModule } from 'ngx-bootstrap/datepicker';\nimport { CommonModule } from '../common/common.module';\nimport {\n  CUSTOM,\n  DateRangePickerConfig,\n  INTERVAL_OPTIONS,\n  LAST_HOUR,\n  TimeInterval,\n  TimeIntervalOption\n} from './time-interval.model';\n\n@Component({\n  standalone: true,\n  selector: 'c8y-time-interval',\n  templateUrl: './time-interval.component.html',\n  imports: [CommonModule, FormsModule, BsDatepickerModule]\n})\nexport class TimeIntervalComponent implements 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  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';\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(rootInjector: Injector, private router: Router, plugins: PluginsResolveService) {\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';\n\n@Component({\n  selector: 'c8y-wizard-outlet',\n  templateUrl: './wizard-outlet.component.html'\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';\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})\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(public wizardService: WizardService, public bsModalRef: BsModalRef) {}\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})\nexport class WizardBodyComponent implements OnInit {\n  @ViewChild('bodyContent', { static: true }) bodyContent: TemplateRef<any>;\n\n  constructor(private wizard: WizardComponent, private wizardService: WizardService) {}\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})\nexport class WizardFooterComponent implements OnInit {\n  @ViewChild('footerContent', { static: true }) footerContent: TemplateRef<any>;\n\n  constructor(private wizard: WizardComponent, private wizardService: WizardService) {}\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})\nexport class WizardHeaderComponent implements OnInit {\n  @ViewChild('headerContent', { static: true }) headerContent: TemplateRef<any>;\n\n  constructor(private wizard: WizardComponent, private wizardService: WizardService) {}\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: [BsModalModule, CommonModule, C8yCommonModule],\n  exports: [\n    WizardComponent,\n    WizardOutletComponent,\n    WizardHeaderComponent,\n    WizardBodyComponent,\n    WizardFooterComponent\n  ],\n  declarations: [\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 { 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 { LoginModule } from './login/login.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';\n\n@NgModule({\n  imports: [TimeIntervalComponent, ColorInputComponent],\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    LoginModule,\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  ]\n})\nexport class CoreModule {\n  static forRoot(): ModuleWithProviders<CoreModule> {\n    return {\n      ngModule: CoreModule,\n      providers: [\n        ...CommonModule.providers(),\n        ...LoginModule.providers(),\n        ...DocsModule.providers(),\n        ...NavigatorModule.providers(),\n        ...NavigatorBottomModule.providers(),\n        ...NavigatorTopModule.providers(),\n        ...UiSettingsModule.providers(),\n        ...UserModule.providers(),\n        ...VersionModule.providers()\n      ]\n    };\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { kebabCase } from 'lodash-es';\r\n\r\n@Component({\r\n  selector: 'c8y-quick-link',\r\n  templateUrl: './quick-link.component.html'\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  declarations: [QuickLinkComponent],\r\n  imports: [CoreModule],\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 } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { IResult } from '@c8y/client';\nimport { FormlyFieldConfig, FormlyFormOptions, ɵdefineHiddenProp } 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';\n\n@Component({\n  selector: 'c8y-sms-gateway',\n  templateUrl: './provider-configuration.component.html',\n  providers: [ProviderConfigurationService, ProviderDefinitionsService]\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  declarations: [ProviderConfigurationComponent],\n  exports: [ProviderConfigurationComponent],\n  imports: [CoreModule, CommonModule, DynamicFormsModule],\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 { 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  ) {\n    const realtime$ = this.onCreateOfSpecificMeasurement$(fragment, series, entityOrId);\n    const lastMeasurement$ = this.lastMeasurement$(\n      fragment,\n      series,\n      entityOrId,\n      pageSize,\n      emitNullIfInitialValuesWereNotFound\n    );\n    return merge(lastMeasurement$, realtime$);\n  }\n\n  protected lastMeasurement$(\n    fragment: string,\n    series: string,\n    entityOrId: string | number | IIdentified,\n    pageSize: number,\n    emitNullIfInitialValuesWereNotFound = false\n  ) {\n    return from(\n      this.measurementService.list({\n        valueFragmentSeries: series,\n        valueFragmentType: fragment,\n        source: this.getIdString(entityOrId),\n        dateFrom: '1970-01-01',\n        revert: true,\n        pageSize\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 bulk 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 { 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 { AssetType } from './asset-type.model';\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, AssetType> = {};\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, AssetType> {\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 assetType?.c8y_IsAssetType?.icon?.name || this.DEFAULT_ASSET_ICON;\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: AssetType): 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: AssetType): 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: AssetType) => 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: AssetType) {\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","/**\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","i2","i3.OptionsService","i1.RealtimeSubjectService","i2.AppStateService","i3.RealtimeSubjectService","i1.AssetTypesRealtimeService","isNaN","i1","i2.PatternMessagesService","gettext","i1.PropertyValueTransformService","NgxTranslateService","i4","NgDatePipe","map","distinctUntilChanged","i1.PluginsResolveService","i1.OptionsService","i2.CachedLocaleDictionaryService","i3.PluginsResolveService","i2.C8yTranslateDirective","i3.IconDirective","i4.C8yTranslatePipe","i3.VirtualScrollWindowDirective","i1.FilesService","i1.GroupService","_memoize","i1.AppStateService","i1.Permissions","memoize","i1.MoNameCacheService","NgDecimalPipe","i2.C8yTranslatePipe","_isDate","i1.DatePipe","first","NgCommonModule","TranslateService","filter","tap","i2.OptionsService","i3.CookieBannerService","i4.UserPreferencesService","i5","i1.GainsightService","i1.AppSwitcherService","i3.LoadingComponent","i4.ProductExperienceDirective","i5.AppIconComponent","i6.HumanizeAppNamePipe","i7.AppHrefPipe","i8.IsActiveAppPipe","i1.IconDirective","i4.AppSwitcherInlineComponent","i5.C8yTranslatePipe","Document","i1.UserPreferencesService","i2.GainsightService","i4.UserEngagementsService","i2.PluginsResolveService","i1.ActionBarService","i4.OutletDirective","i5.C8yTranslateDirective","i6","i7.ActionBarItemComponent","i8.C8yTranslatePipe","RouterModule","i2.OutletDirective","i3","i4.C8yComponentOutlet","i6.C8yTranslatePipe","i1.ActionService","i1.AlertService","i2.IconDirective","i2.HumanizeAppNamePipe","i3.DrawerService","i1.StepperService","i2.Permissions","i4.AppStateService","i5.PluginsResolveService","i4.PluginsResolveService","i3.C8yTranslatePipe","i4.ShowIfFilterPipe","i3.AlertService","i5.TenantUiService","i7.ModalService","i8","sortBy","i3.OutletDirective","i1.DrawerService","i1.HeaderService","i2.ActionService","i3.BreadcrumbService","i4.SearchService","i5.AppStateService","i6.UserMenuService","i7.DocsService","i9.AppIconComponent","i10.AppSwitcherComponent","i11.SearchOutletComponent","i12.IconDirective","i13","i14.ActionOutletComponent","i15.BreadcrumbOutletComponent","i16","i17.DrawerOutletComponent","i18.TitleOutletComponent","i19.C8yTranslatePipe","i20.ShortenUserNamePipe","i21.UserNameInitialsPipe","i1.LoginService","i5.FormGroupComponent","i6.RequiredInputPlaceholderDirective","i7.C8yTranslateDirective","i9.C8yTranslatePipe","i2.AlertService","i4.PhoneValidationDirective","i6.FormGroupComponent","i7.RequiredInputPlaceholderDirective","i8.C8yTranslateDirective","i9","i10.C8yTranslatePipe","i2.LoginService","i4.C8yTranslateDirective","isEmpty","i4.LoginService","i7.MessageDirective","i8.MessagesComponent","i9.RequiredInputPlaceholderDirective","i10.C8yTranslateDirective","i11.ModalComponent","i12.C8yTranslatePipe","i3.FormGroupComponent","i4.MessageDirective","i5.MessagesComponent","i8.ModalComponent","i2.PasswordService","i3.C8yTranslateDirective","i1.PasswordService","i2.DefaultValidationDirective","i4.FormGroupComponent","i7.PasswordConfirm","i8.PasswordCheckListComponent","i9.PasswordInputComponent","BsModalModule","i4.RequiredInputPlaceholderDirective","i5.MinValidationDirective","i6.InputGroupListComponent","i7.InputGroupListContainerDirective","NgFormsModule","i1.StrengthValidatorService","i4.AlertService","i6.C8yTranslateDirective","i7","i9.PasswordConfirm","i10.FormGroupComponent","i11.MessageDirective","i12.MessagesComponent","i13.RequiredInputPlaceholderDirective","i14.PasswordStrengthValidatorDirective","i15.C8yTranslatePipe","i3.CredentialsFromQueryParamsService","i5.IconDirective","i8.PasswordInputComponent","i9.FormGroupComponent","i10.RequiredInputPlaceholderDirective","i11.C8yTranslatePipe","i6.TotpChallengeComponent","i7.TotpSetupComponent","i3.LoginService","i8.FormGroupComponent","i4.CredentialsFromQueryParamsService","i7.SmsChallengeComponent","i8.ProvidePhoneNumberComponent","i9.AlertOutletComponent","i10.RecoverPasswordComponent","i11.ChangePasswordComponent","i12.CredentialsComponent","i13.TotpAuthComponent","i14.TenantIdSetupComponent","i2.HeaderService","i3.TabsService","i4.IconDirective","i6.C8yComponentOutlet","i3.C8yStepperProgress","i1.C8yStepper","i3.GainsightService","i3.C8yComponentOutlet","i5.C8yStepper","i6.C8yStepperIcon","i7.C8yStepperButtons","i2.StepperService","i3.AppStateService","i5.Permissions","i6.SetupService","i9.TitleComponent","i10.StepperOutletComponent","i11.PropertiesListComponent","i13.HumanizeAppNamePipe","i1.CookieBannerService","i4.ConfirmModalComponent","i6.HumanizePipe","i2.CookieBannerService","i4.MarkdownToHtmlPipe","i1.TabsService","i3.NavigatorService","i4.ActionBarService","i5.HeaderService","i6.OptionsService","i7.PluginsResolveService","i8.SetupService","i9.LoginService","i10.TranslationLoaderService","i11","i12.HeaderBarComponent","i13.LoginComponent","i14","i15.TabsOutletComponent","i16.ActionBarComponent","i17.AlertOutletComponent","i18.SetupComponent","i19.DrawerOutletComponent","i20.CookieBannerComponent","i21.MessageBannerComponent","i1.BreadcrumbService","i7.C8yTranslatePipe","i2.NavigatorService","i5.SkipLinkDirective","i6.NavigatorNodeComponent","i1.NavigatorService","i1.SearchService","escape","i3.DropdownDirectionDirective","startWith","switchMap","takeUntil","i1.SelectKeyboardService","i5.ListGroupComponent","i3.InventorySearchService","i7.EmptyStateComponent","i8.IconDirective","i9.C8yTranslateDirective","i10","i11.ForOfDirective","i12.LoadingComponent","i13.TypeaheadComponent","i14.ListItemComponent","i15.ListItemIconComponent","i16.DeviceStatusComponent","i17.C8yTranslatePipe","i18.ShouldShowMoPipe","i19.GetGroupIconPipe","i4.DropdownDirectionDirective","i7.NameTransformPipe","i1.C8yTranslateDirective","i6.ListItemComponent","i7.ListItemBodyComponent","i8.ListItemCheckboxComponent","FormsModule","i1.TranslateService","i3.UserPreferencesService","i4.ModalService","i6.ThemeSwitcherService","i7.IconDirective","i1.UserMenuService","i2.ModalService","i5.ModalComponent","i2.TranslateService","i6.PhoneValidationDirective","i7.DefaultValidationDirective","i11.C8yTranslateDirective","i12","i13.NewPasswordComponent","i14.C8yTranslatePipe","i5.UserPreferencesService","i6.ModalService","i7.GainsightService","i8.CookieBannerService","i10.PasswordService","i11.UserEngagementsService","i12.ModalComponent","i13.UserEditComponent","i15","C8yFormsModule","i4.UserMenuService","i6.OutletDirective","i8.UserMenuItemComponent","i5.ShortenUserNamePipe","i6.UserNameInitialsPipe","i7.UserRolesListPipe","i1.VersionService","saveAs","i3.ClipboardService","i5.PlatformDetailsService","i6.HeaderService","i2.PluginsService","i3.SetupComponent","i7.OperationResultComponent","CommonModule","assign","i2.AppIconComponent","i4.HumanizeAppNamePipe","i1.NavigatorBottomService","i3.BytesPipe","i7.LoadingComponent","i2.FormGroupComponent","i3.RequiredInputPlaceholderDirective","i5.DropAreaComponent","i6.IconDirective","C8yCommonModule","i3.MessageDirective","i4.MessagesComponent","i8.ExtractArrayValidationErrorsPipe","i9.FilterNonArrayValidationErrorsPipe","i10.HumanizeValidationMessagePipe","i12.BytesPipe","i13.GenericFileIconPipe","DatePipe","every","merge","i1.RouterTabsResolver","i2.TabsService","i2.ScopedContextRouteService","i3.ContextRouteService","i5.LoadingComponent","flatten","i2.ContextRouteService","i4.OptionsService","NgRouterModule","i1.RouterService","i1.DocsService","i3.HeaderService","i8.ProductExperienceDirective","i5.AlertService","i10.ProductExperienceDirective","i5.ProductExperienceDirective","i8.HumanizePipe","i9.C8yArrayTypeInjectTemplatePipe","get","i4.DropAreaComponent","i3.HumanizePipe","i4.HumanizePipe","i2.DateTimePickerComponent","TimePicker","i4.ForOfDirective","i8.TypeaheadComponent","i9.ListItemComponent","i10.HighlightComponent","C8YCommonModule","set","i2.DynamicResolverService","i1.DynamicComponentService","i6.DynamicComponentAlertsComponent","pick","i1.DynamicResolverService","i1.DynamicManagedObjectResolver","i1.DashboardComponent","i8.WidgetAutoRefreshContextIconBarComponent","i9.WidgetTimeContextIconBar","i2.WidgetTimeContextHelperService","i1.WidgetsDashboardEventService","i2.DashboardChildComponent","i4.WidgetTimeContextQueryService","i5.WidgetTimeContextHelperService","i7.ActionBarService","i8.AggregationService","i9.WidgetTimeContextDateRangeService","i4.CountdownIntervalComponent","i3.ActionBarItemComponent","i6.AutoRefreshControlComponent","i7.AutoRefreshSelectControlComponent","i5.WidgetGlobalAutoRefreshService","i6.EmptyStateComponent","i10.LoadingComponent","i11.ActionBarItemComponent","i12.DynamicComponentComponent","i14.TitleComponent","i15.GuideHrefDirective","i16.GuideDocsComponent","i17.BreadcrumbComponent","i18.BreadcrumbItemComponent","i19","i20.WidgetTimeContextComponent","i21.DashboardChildActionComponent","i22.DashboardChildComponent","i23.DashboardComponent","i24.DashboardChildTitleComponent","i25.WidgetAutoRefreshContextComponent","i2.HelpService","i6.LoadingComponent","i9.ActionBarItemComponent","i2.ForOfDirective","i5.DatePipe","i1.FilteringFormRendererContext","i2.C8yJSONSchema","i2.C8yComponentOutlet","i3.StringifyObjectPipe","i5.MessageDirective","i6.MessagesComponent","i8.UniqueInCollectionByPathValidationDirective","shareReplay","reduce","i3.FilterMapperFactory","i1.FilterMapperService","mergeMap","_parseInt","i1.DataGridService","i6.ActionControlsExtensionService","i13.C8yTranslateDirective","i14.LoadingComponent","i15.PopoverConfirmComponent","i17","i18","i20.ProductExperienceDirective","i21","i22.CellRendererComponent","i23.FilteringFormRendererComponent","i24.C8yTranslatePipe","i25.MapFunctionPipe","i26.FilterMapperPipe","i27.GroupedFilterChips","i28.VisibleControlsPipe","i2.DataGridService","i2.LegacyGridConfigMapperService","i4.DatePipe","i7.ListItemIconComponent","i8.ListItemBodyComponent","i9.ListItemCollapseComponent","i10.ListItemRadioComponent","i11.HighlightComponent","i12.FilterInputComponent","i13.ProductExperienceDirective","i15.SelectModalFilterPipe","i2.WizardService","i1.WizardService","i6.WizardOutletComponent","i1.WizardComponent","c8yFormsModule","c8yStepperModule","ɵdefineHiddenProp","i3.ModalService","i5.ProviderDefinitionsService","i6.ProviderConfigurationService","i7.C8yJSONSchema","i8.BreadcrumbComponent","i9.BreadcrumbItemComponent","i11.IfAllowedDirective","i12.TitleComponent","i13.HighlightComponent","i14.TypeaheadComponent","i16.FormGroupComponent","i17.MessageDirective","i18.MessagesComponent","i19.ListItemComponent","i20","i21.C8yTranslatePipe"],"mappings":"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"}