@c8y/ngx-components 1021.70.1 → 1021.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/branding/shared/lazy/branding-import-modal/branding-import-modal.component.d.ts.map +1 -1
  2. package/core/beta-feature/beta-feature-show-notification.service.d.ts +10 -0
  3. package/core/beta-feature/beta-feature-show-notification.service.d.ts.map +1 -0
  4. package/core/beta-feature/beta-feature.providers.d.ts +3 -0
  5. package/core/beta-feature/beta-feature.providers.d.ts.map +1 -0
  6. package/core/beta-feature/beta-preview-button.component.d.ts +17 -0
  7. package/core/beta-feature/beta-preview-button.component.d.ts.map +1 -0
  8. package/core/beta-feature/beta-preview-drawer.factory.d.ts +19 -0
  9. package/core/beta-feature/beta-preview-drawer.factory.d.ts.map +1 -0
  10. package/core/beta-feature/beta-preview.component.d.ts +25 -0
  11. package/core/beta-feature/beta-preview.component.d.ts.map +1 -0
  12. package/core/beta-feature/beta-preview.model.d.ts +24 -0
  13. package/core/beta-feature/beta-preview.model.d.ts.map +1 -0
  14. package/core/beta-feature/beta-preview.service.d.ts +47 -0
  15. package/core/beta-feature/beta-preview.service.d.ts.map +1 -0
  16. package/core/beta-feature/feature-cache.service.d.ts +26 -0
  17. package/core/beta-feature/feature-cache.service.d.ts.map +1 -0
  18. package/core/beta-feature/feature-state.pipe.d.ts +12 -0
  19. package/core/beta-feature/feature-state.pipe.d.ts.map +1 -0
  20. package/core/beta-feature/index.d.ts +7 -0
  21. package/core/beta-feature/index.d.ts.map +1 -0
  22. package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
  23. package/core/bottom-drawer/bottom-drawer.component.d.ts +1 -0
  24. package/core/bottom-drawer/bottom-drawer.component.d.ts.map +1 -1
  25. package/core/bottom-drawer/bottom-drawer.model.d.ts +4 -0
  26. package/core/bottom-drawer/bottom-drawer.model.d.ts.map +1 -1
  27. package/core/common/ApplicationOptions.d.ts +8 -0
  28. package/core/common/ApplicationOptions.d.ts.map +1 -1
  29. package/core/common/index.d.ts +1 -0
  30. package/core/common/index.d.ts.map +1 -1
  31. package/core/common/notification-display.service.d.ts +19 -0
  32. package/core/common/notification-display.service.d.ts.map +1 -0
  33. package/core/core.module.d.ts.map +1 -1
  34. package/core/header/header-bar/header-bar.component.d.ts +1 -0
  35. package/core/header/header-bar/header-bar.component.d.ts.map +1 -1
  36. package/core/header/header.service.d.ts +4 -1
  37. package/core/header/header.service.d.ts.map +1 -1
  38. package/core/index.d.ts +1 -0
  39. package/core/index.d.ts.map +1 -1
  40. package/datapoint-explorer/datapoint-explorer-navigation-factory.d.ts +10 -0
  41. package/datapoint-explorer/datapoint-explorer-navigation-factory.d.ts.map +1 -0
  42. package/datapoint-explorer/datapoint-explorer-route-factory.d.ts +10 -0
  43. package/datapoint-explorer/datapoint-explorer-route-factory.d.ts.map +1 -0
  44. package/datapoint-explorer/datapoint-explorer.module.d.ts.map +1 -1
  45. package/esm2022/branding/shared/lazy/branding-import-modal/branding-import-modal.component.mjs +4 -7
  46. package/esm2022/core/beta-feature/beta-feature-show-notification.service.mjs +17 -0
  47. package/esm2022/core/beta-feature/beta-feature.providers.mjs +9 -0
  48. package/esm2022/core/beta-feature/beta-preview-button.component.mjs +53 -0
  49. package/esm2022/core/beta-feature/beta-preview-drawer.factory.mjs +52 -0
  50. package/esm2022/core/beta-feature/beta-preview.component.mjs +64 -0
  51. package/esm2022/core/beta-feature/beta-preview.model.mjs +2 -0
  52. package/esm2022/core/beta-feature/beta-preview.service.mjs +114 -0
  53. package/esm2022/core/beta-feature/feature-cache.service.mjs +48 -0
  54. package/esm2022/core/beta-feature/feature-state.pipe.mjs +22 -0
  55. package/esm2022/core/beta-feature/index.mjs +7 -0
  56. package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +4 -1
  57. package/esm2022/core/bottom-drawer/bottom-drawer.component.mjs +4 -3
  58. package/esm2022/core/bottom-drawer/bottom-drawer.model.mjs +1 -1
  59. package/esm2022/core/common/ApplicationOptions.mjs +1 -1
  60. package/esm2022/core/common/index.mjs +2 -1
  61. package/esm2022/core/common/notification-display.service.mjs +2 -0
  62. package/esm2022/core/core.module.mjs +4 -2
  63. package/esm2022/core/docs/legal-notices-outlet/legal-notices-outlet.component.mjs +3 -3
  64. package/esm2022/core/header/header-bar/header-bar.component.mjs +4 -3
  65. package/esm2022/core/header/header.service.mjs +12 -6
  66. package/esm2022/core/index.mjs +2 -1
  67. package/esm2022/core/user/user-details-drawer/user-details-drawer.component.mjs +3 -3
  68. package/esm2022/core/version/version-list/version-list.component.mjs +3 -3
  69. package/esm2022/datapoint-explorer/datapoint-explorer-navigation-factory.mjs +31 -0
  70. package/esm2022/datapoint-explorer/datapoint-explorer-route-factory.mjs +37 -0
  71. package/esm2022/datapoint-explorer/datapoint-explorer.module.mjs +22 -48
  72. package/esm2022/register-device/bulk/bulk-device-registration-modal.component.mjs +8 -10
  73. package/esm2022/register-device/general/general-device-registration.component.mjs +8 -10
  74. package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +10 -12
  75. package/esm2022/upgrade/ng1/downgraded.services.mjs +3 -2
  76. package/esm2022/upgrade/ng1/index.mjs +3 -2
  77. package/esm2022/widgets/cockpit-exports/index.mjs +2 -2
  78. package/esm2022/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.mjs +56 -0
  79. package/esm2022/widgets/definitions/datapoints-graph/index.mjs +12 -29
  80. package/esm2022/widgets/definitions/index.mjs +3 -2
  81. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +3 -6
  82. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  83. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs +81 -48
  84. package/fesm2022/c8y-ngx-components-datapoint-explorer.mjs.map +1 -1
  85. package/fesm2022/c8y-ngx-components-register-device.mjs +10 -14
  86. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  87. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +18 -20
  88. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  89. package/fesm2022/c8y-ngx-components-upgrade.mjs +3 -1
  90. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  91. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +1 -1
  92. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  93. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs +65 -28
  94. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-graph.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +2 -1
  96. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  97. package/fesm2022/c8y-ngx-components.mjs +347 -17
  98. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  99. package/locales/locales.pot +31 -8
  100. package/package.json +1 -1
  101. package/register-device/bulk/bulk-device-registration-modal.component.d.ts +5 -5
  102. package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
  103. package/register-device/general/general-device-registration.component.d.ts +5 -5
  104. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  105. package/trusted-certificates/list/trusted-certificate-list.component.d.ts +4 -4
  106. package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
  107. package/upgrade/ng1/downgraded.services.d.ts +1 -0
  108. package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
  109. package/upgrade/ng1/index.d.ts.map +1 -1
  110. package/widgets/cockpit-exports/index.d.ts +1 -1
  111. package/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.d.ts +11 -0
  112. package/widgets/definitions/datapoints-graph/datapoint-graph-widget-factory.d.ts.map +1 -0
  113. package/widgets/definitions/datapoints-graph/index.d.ts +0 -28
  114. package/widgets/definitions/datapoints-graph/index.d.ts.map +1 -1
  115. package/widgets/definitions/index.d.ts +2 -1
  116. package/widgets/definitions/index.d.ts.map +1 -1
@@ -8,7 +8,7 @@ import { castArray, flatten, uniq, sortBy, groupBy, camelCase, isEqual, isUndefi
8
8
  import { merge, of, defer, combineLatest, race, isObservable, from, Subject, BehaviorSubject, NEVER, Observable, firstValueFrom, map as map$1, distinctUntilChanged as distinctUntilChanged$1, fromEvent, pipe, throwError, concat, filter as filter$1, tap as tap$1, EMPTY, timer, fromEventPattern, startWith as startWith$1, switchMap as switchMap$1, takeUntil as takeUntil$1, empty, forkJoin, ReplaySubject, interval, shareReplay as shareReplay$1, mergeMap as mergeMap$1 } from 'rxjs';
9
9
  import { map, distinctUntilChanged, filter, startWith, switchMap, take, shareReplay, scan, debounceTime, share, takeUntil, tap, catchError, first as first$1, retryWhen, delay, concatMap, debounce, sample, withLatestFrom, mergeMap, every as every$1, toArray, merge as merge$1, expand, skip, mapTo, finalize, reduce as reduce$1, combineLatestWith } from 'rxjs/operators';
10
10
  import * as i1 from '@c8y/client';
11
- import { ApplicationAvailability, OperationStatus, TenantLoginOptionType, UserManagementSource, GrantType, ApplicationType, BearerAuthFromSessionStorage, FetchClient, Client, PasswordStrength, QueriesUtil, InventoryService, UserService, ApplicationService, TenantService, AlarmService, aggregationType, Service } from '@c8y/client';
11
+ import { ApplicationAvailability, OperationStatus, TenantLoginOptionType, UserManagementSource, GrantType, ApplicationType, BearerAuthFromSessionStorage, FetchClient, Client, PasswordStrength, QueriesUtil, InventoryService, UserService, ApplicationService, TenantService, AlarmService, aggregationType, FeatureService, Service } from '@c8y/client';
12
12
  import { __decorate, __metadata } from 'tslib';
13
13
  import * as i1$4 from '@angular/router';
14
14
  import { NavigationEnd, RouterModule as RouterModule$1, RouterLink, ActivationEnd, NavigationStart, PRIMARY_OUTLET, ActivatedRoute, ActivationStart, ChildActivationEnd, ROUTES, Router, NavigationCancel, NavigationError } from '@angular/router';
@@ -22,7 +22,7 @@ import { TranslateService as TranslateService$1, TranslateDefaultParser, Transla
22
22
  import * as i2$2 from '@angular/cdk/scrolling';
23
23
  import { VIRTUAL_SCROLL_STRATEGY, ScrollingModule } from '@angular/cdk/scrolling';
24
24
  import * as i2$1 from '@angular/common';
25
- import { formatDate, registerLocaleData, DOCUMENT, DatePipe as DatePipe$1, DATE_PIPE_DEFAULT_TIMEZONE, DATE_PIPE_DEFAULT_OPTIONS, NgIf, NgClass, NgTemplateOutlet, DecimalPipe, NgStyle, CommonModule as CommonModule$1, NgFor, AsyncPipe, NgSwitch, NgSwitchCase } from '@angular/common';
25
+ import { formatDate, registerLocaleData, DOCUMENT, DatePipe as DatePipe$1, DATE_PIPE_DEFAULT_TIMEZONE, DATE_PIPE_DEFAULT_OPTIONS, NgIf, NgClass, NgTemplateOutlet, DecimalPipe, NgStyle, CommonModule as CommonModule$1, NgFor, AsyncPipe, NgSwitch, NgSwitchCase, NgForOf } from '@angular/common';
26
26
  import * as i2$3 from 'ngx-bootstrap/tooltip';
27
27
  import { TooltipModule } from 'ngx-bootstrap/tooltip';
28
28
  import { setTheme } from 'ngx-bootstrap/utils';
@@ -11854,11 +11854,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
11854
11854
  * A service which defines header functions.
11855
11855
  */
11856
11856
  class HeaderService extends StateService {
11857
- constructor(options, humanizeAppName, drawerService) {
11857
+ constructor(options, humanizeAppName, drawerService, serviceRegistry) {
11858
11858
  super();
11859
11859
  this.options = options;
11860
11860
  this.humanizeAppName = humanizeAppName;
11861
11861
  this.drawerService = drawerService;
11862
+ this.serviceRegistry = serviceRegistry;
11862
11863
  this.headerOpen = false;
11863
11864
  this.hideHeader = false;
11864
11865
  this.state$ = new BehaviorSubject({
@@ -11879,6 +11880,9 @@ class HeaderService extends StateService {
11879
11880
  ]).pipe(map(([open, hasItems]) => open && hasItems));
11880
11881
  this.rightDrawerOpen$ = this.map(({ rightDrawer }) => rightDrawer.open).pipe();
11881
11882
  const titleReference = document.querySelector('title');
11883
+ const notificationServices = this.serviceRegistry.get('notificationService');
11884
+ const notificationObservables = notificationServices.map(service => service.shouldShowNotification$);
11885
+ this.showNotification$ = merge(...notificationObservables).pipe(filter(value => value === true), startWith(false));
11882
11886
  this.title = {
11883
11887
  elementRef: titleReference,
11884
11888
  titleSuffix: '',
@@ -11989,7 +11993,7 @@ class HeaderService extends StateService {
11989
11993
  isGlobalTitleValid(globalTitle) {
11990
11994
  return !!globalTitle && typeof globalTitle === 'string' && globalTitle.length > 0;
11991
11995
  }
11992
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderService, deps: [{ token: OptionsService }, { token: HumanizeAppNamePipe }, { token: DrawerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
11996
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderService, deps: [{ token: OptionsService }, { token: HumanizeAppNamePipe }, { token: DrawerService }, { token: ServiceRegistry }], target: i0.ɵɵFactoryTarget.Injectable }); }
11993
11997
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderService, providedIn: 'root' }); }
11994
11998
  }
11995
11999
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderService, decorators: [{
@@ -11997,7 +12001,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
11997
12001
  args: [{
11998
12002
  providedIn: 'root'
11999
12003
  }]
12000
- }], ctorParameters: () => [{ type: OptionsService }, { type: HumanizeAppNamePipe }, { type: DrawerService }] });
12004
+ }], ctorParameters: () => [{ type: OptionsService }, { type: HumanizeAppNamePipe }, { type: DrawerService }, { type: ServiceRegistry }] });
12001
12005
 
12002
12006
  /**
12003
12007
  * Base navigator node. Represents a single entry in the navigator menu.
@@ -14188,6 +14192,7 @@ class HeaderBarComponent {
14188
14192
  this.appState$ = this.appState.state$.asObservable();
14189
14193
  this.headerOpen = false;
14190
14194
  this.loadingClass$ = new Observable();
14195
+ this.showNotification$ = this.headerService.showNotification$;
14191
14196
  /**
14192
14197
  * Can be set to show an header bar with only
14193
14198
  * title, app-switcher and user-menu
@@ -14206,11 +14211,11 @@ class HeaderBarComponent {
14206
14211
  this.headerService.closeRightDrawer();
14207
14212
  }
14208
14213
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderBarComponent, deps: [{ token: HeaderService }, { token: ActionService }, { token: BreadcrumbService }, { token: SearchService }, { token: AppStateService }, { token: UserMenuService }, { token: DocsService }, { token: i4.ApiService }], target: i0.ɵɵFactoryTarget.Component }); }
14209
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderBarComponent, selector: "c8y-header-bar", inputs: { simple: "simple" }, ngImport: i0, template: "<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", dependencies: [{ kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "component", type: AppSwitcherComponent, selector: "c8y-app-switcher" }, { kind: "component", type: SearchOutletComponent, selector: "c8y-search-outlet", inputs: ["search"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ActionOutletComponent, selector: "c8y-action-outlet", inputs: ["items"] }, { kind: "component", type: BreadcrumbOutletComponent, selector: "c8y-breadcrumb-outlet", inputs: ["breadcrumbs"] }, { kind: "directive", type: i2$3.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: DrawerOutletComponent, selector: "c8y-drawer-outlet", inputs: ["position", "open"] }, { kind: "component", type: TitleOutletComponent, selector: "c8y-title-outlet" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: ShortenUserNamePipe, name: "shortenUserName" }, { kind: "pipe", type: UserNameInitialsPipe, name: "userNameInitials" }] }); }
14214
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderBarComponent, selector: "c8y-header-bar", inputs: { simple: "simple" }, ngImport: i0, template: "<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 <ng-container *ngIf=\"showNotification$ | async; else noNotification\">\n <button\n class=\"main-header-button drawer-toggle\"\n [attr.aria-label]=\"appState.currentUser | async | shortenUserName\"\n tooltip=\"{{ appState.currentUser | async | shortenUserName }}\n{{ 'New features available' | translate }}\"\n placement=\"left\"\n [attr.aria-expanded]=\"headerService.rightDrawerOpen$ | async\"\n [attr.aria-controls]=\"'right-drawer'\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleDrawer()\"\n [attr.data-cy]=\"'right-drawer-toggle-button'\"\n >\n <span\n class=\"user-dot user-dot-notification\"\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 class=\"p-relative a-s-stretch no-pointer\"\n *ngIf=\"!(headerService.rightDrawerOpen$ | async)\"\n >\n <span\n class=\"c8y-pulse c8y-pulse--md active\"\n *ngIf=\"showNotification$ | async\"\n ></span>\n </div>\n </ng-container>\n <ng-template #noNotification>\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 user-dot-notification\"\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 </ng-template>\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", dependencies: [{ kind: "component", type: AppIconComponent, selector: "c8y-app-icon", inputs: ["contextPath", "name", "app"] }, { kind: "component", type: AppSwitcherComponent, selector: "c8y-app-switcher" }, { kind: "component", type: SearchOutletComponent, selector: "c8y-search-outlet", inputs: ["search"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ActionOutletComponent, selector: "c8y-action-outlet", inputs: ["items"] }, { kind: "component", type: BreadcrumbOutletComponent, selector: "c8y-breadcrumb-outlet", inputs: ["breadcrumbs"] }, { kind: "directive", type: i2$3.TooltipDirective, selector: "[tooltip], [tooltipHtml]", inputs: ["adaptivePosition", "tooltip", "placement", "triggers", "container", "containerClass", "boundariesElement", "isOpen", "isDisabled", "delay", "tooltipHtml", "tooltipPlacement", "tooltipIsOpen", "tooltipEnable", "tooltipAppendToBody", "tooltipAnimation", "tooltipClass", "tooltipContext", "tooltipPopupDelay", "tooltipFadeDuration", "tooltipTrigger"], outputs: ["tooltipChange", "onShown", "onHidden", "tooltipStateChanged"], exportAs: ["bs-tooltip"] }, { kind: "component", type: DrawerOutletComponent, selector: "c8y-drawer-outlet", inputs: ["position", "open"] }, { kind: "component", type: TitleOutletComponent, selector: "c8y-title-outlet" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: ShortenUserNamePipe, name: "shortenUserName" }, { kind: "pipe", type: UserNameInitialsPipe, name: "userNameInitials" }] }); }
14210
14215
  }
14211
14216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderBarComponent, decorators: [{
14212
14217
  type: Component,
14213
- args: [{ selector: 'c8y-header-bar', template: "<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" }]
14218
+ args: [{ selector: 'c8y-header-bar', template: "<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 <ng-container *ngIf=\"showNotification$ | async; else noNotification\">\n <button\n class=\"main-header-button drawer-toggle\"\n [attr.aria-label]=\"appState.currentUser | async | shortenUserName\"\n tooltip=\"{{ appState.currentUser | async | shortenUserName }}\n{{ 'New features available' | translate }}\"\n placement=\"left\"\n [attr.aria-expanded]=\"headerService.rightDrawerOpen$ | async\"\n [attr.aria-controls]=\"'right-drawer'\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleDrawer()\"\n [attr.data-cy]=\"'right-drawer-toggle-button'\"\n >\n <span\n class=\"user-dot user-dot-notification\"\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 class=\"p-relative a-s-stretch no-pointer\"\n *ngIf=\"!(headerService.rightDrawerOpen$ | async)\"\n >\n <span\n class=\"c8y-pulse c8y-pulse--md active\"\n *ngIf=\"showNotification$ | async\"\n ></span>\n </div>\n </ng-container>\n <ng-template #noNotification>\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 user-dot-notification\"\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 </ng-template>\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" }]
14214
14219
  }], ctorParameters: () => [{ type: HeaderService }, { type: ActionService }, { type: BreadcrumbService }, { type: SearchService }, { type: AppStateService }, { type: UserMenuService }, { type: DocsService }, { type: i4.ApiService }], propDecorators: { simple: [{
14215
14220
  type: Input
14216
14221
  }] } });
@@ -22165,11 +22170,11 @@ class UserDetailsDrawerComponent {
22165
22170
  this.headerService.closeRightDrawer();
22166
22171
  }
22167
22172
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserDetailsDrawerComponent, deps: [{ token: AppStateService }, { token: HeaderService }], target: i0.ɵɵFactoryTarget.Component }); }
22168
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserDetailsDrawerComponent, selector: "c8y-user-details-drawer", host: { classAttribute: "d-contents" }, ngImport: i0, template: "<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", dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: ShortenUserNamePipe, name: "shortenUserName" }, { kind: "pipe", type: UserNameInitialsPipe, name: "userNameInitials" }, { kind: "pipe", type: UserRolesListPipe, name: "userRolesList" }] }); }
22173
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserDetailsDrawerComponent, selector: "c8y-user-details-drawer", host: { classAttribute: "d-contents" }, ngImport: i0, template: "<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>", dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: ShortenUserNamePipe, name: "shortenUserName" }, { kind: "pipe", type: UserNameInitialsPipe, name: "userNameInitials" }, { kind: "pipe", type: UserRolesListPipe, name: "userRolesList" }] }); }
22169
22174
  }
22170
22175
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserDetailsDrawerComponent, decorators: [{
22171
22176
  type: Component,
22172
- args: [{ selector: 'c8y-user-details-drawer', host: { class: 'd-contents' }, template: "<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" }]
22177
+ args: [{ selector: 'c8y-user-details-drawer', host: { class: 'd-contents' }, template: "<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>" }]
22173
22178
  }], ctorParameters: () => [{ type: AppStateService }, { type: HeaderService }] });
22174
22179
 
22175
22180
  class UserDetailsDrawerModule {
@@ -22534,11 +22539,11 @@ class VersionListComponent {
22534
22539
  this.clipboardService.writeText(text);
22535
22540
  }
22536
22541
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VersionListComponent, deps: [{ token: VersionService }, { token: AppStateService }, { token: ClipboardService }, { token: i1$5.BsModalService }, { token: PlatformDetailsService }, { token: HeaderService }], target: i0.ɵɵFactoryTarget.Component }); }
22537
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: VersionListComponent, selector: "c8y-version-list", ngImport: i0, template: "<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", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }] }); }
22542
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: VersionListComponent, selector: "c8y-version-list", ngImport: i0, template: "<div class=\"separator-top p-t-8 p-b-8\">\n <div class=\"c8y-right-drawer__item sticky-top\">\n <i c8yIcon=\"c8y-c8y-c\"></i>\n <span class=\"text-bold\">{{ 'Platform info' | translate }}</span>\n </div>\n\n <ul class=\"list-unstyled\">\n <li\n class=\"c8y-right-drawer__item\"\n *ngIf=\"currentTenantId$ | async as tenantId\"\n >\n <span\n class=\"flex-grow text-muted m-0 text-12 text-truncate\"\n translate\n >\n Tenant ID\n </span>\n <button\n class=\"m-l-auto flex-no-shrink btn-clean p-0 btn-link\"\n title=\"{{ 'Copy tenant ID to the clipboard' | translate }}\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); copyIt(tenantId)\"\n >\n {{ tenantId }}\n <i\n class=\"text-14 m-0\"\n [c8yIcon]=\"'clipboard'\"\n ></i>\n </button>\n </li>\n <li\n class=\"c8y-right-drawer__item\"\n *ngFor=\"let versionEntry of versionsToDirectlyDisplay$ | async\"\n >\n <span\n class=\"flex-no-shrink text-muted text-12 text-truncate m-r-8\"\n [title]=\"versionEntry.label | translate\"\n >\n {{ versionEntry.label | translate }}\n </span>\n <span\n class=\"flex-grow text-right text-truncate\"\n [title]=\"versionEntry.version | translate\"\n >\n {{ versionEntry.version }}\n </span>\n </li>\n <li class=\"c8y-right-drawer__item\">\n <button\n class=\"btn btn-default btn-sm\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n title=\"{{ 'Download platform details' | translate }}\"\n (click)=\"downloadPlatformDetails()\"\n >\n <i c8yIcon=\"download\" class=\"m-t-0 m-b-0 text-14\"></i>\n <span translate>Download platform details</span>\n </button>\n </li>\n </ul>\n</div>\n", dependencies: [{ kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }] }); }
22538
22543
  }
22539
22544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: VersionListComponent, decorators: [{
22540
22545
  type: Component,
22541
- args: [{ selector: 'c8y-version-list', template: "<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" }]
22546
+ args: [{ selector: 'c8y-version-list', template: "<div class=\"separator-top p-t-8 p-b-8\">\n <div class=\"c8y-right-drawer__item sticky-top\">\n <i c8yIcon=\"c8y-c8y-c\"></i>\n <span class=\"text-bold\">{{ 'Platform info' | translate }}</span>\n </div>\n\n <ul class=\"list-unstyled\">\n <li\n class=\"c8y-right-drawer__item\"\n *ngIf=\"currentTenantId$ | async as tenantId\"\n >\n <span\n class=\"flex-grow text-muted m-0 text-12 text-truncate\"\n translate\n >\n Tenant ID\n </span>\n <button\n class=\"m-l-auto flex-no-shrink btn-clean p-0 btn-link\"\n title=\"{{ 'Copy tenant ID to the clipboard' | translate }}\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); copyIt(tenantId)\"\n >\n {{ tenantId }}\n <i\n class=\"text-14 m-0\"\n [c8yIcon]=\"'clipboard'\"\n ></i>\n </button>\n </li>\n <li\n class=\"c8y-right-drawer__item\"\n *ngFor=\"let versionEntry of versionsToDirectlyDisplay$ | async\"\n >\n <span\n class=\"flex-no-shrink text-muted text-12 text-truncate m-r-8\"\n [title]=\"versionEntry.label | translate\"\n >\n {{ versionEntry.label | translate }}\n </span>\n <span\n class=\"flex-grow text-right text-truncate\"\n [title]=\"versionEntry.version | translate\"\n >\n {{ versionEntry.version }}\n </span>\n </li>\n <li class=\"c8y-right-drawer__item\">\n <button\n class=\"btn btn-default btn-sm\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n title=\"{{ 'Download platform details' | translate }}\"\n (click)=\"downloadPlatformDetails()\"\n >\n <i c8yIcon=\"download\" class=\"m-t-0 m-b-0 text-14\"></i>\n <span translate>Download platform details</span>\n </button>\n </li>\n </ul>\n</div>\n" }]
22542
22547
  }], ctorParameters: () => [{ type: VersionService }, { type: AppStateService }, { type: ClipboardService }, { type: i1$5.BsModalService }, { type: PlatformDetailsService }, { type: HeaderService }] });
22543
22548
 
22544
22549
  class VersionDrawerFactory {
@@ -23227,6 +23232,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
23227
23232
 
23228
23233
  class BottomDrawerComponent {
23229
23234
  constructor() {
23235
+ this.disableClickOutside = false;
23230
23236
  this.drawerOpenSubject$ = new BehaviorSubject(true);
23231
23237
  this.drawerOpenObs$ = this.drawerOpenSubject$.asObservable().pipe(delay(0), shareReplay());
23232
23238
  }
@@ -23238,11 +23244,11 @@ class BottomDrawerComponent {
23238
23244
  this.drawerOpenSubject$.complete();
23239
23245
  }
23240
23246
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BottomDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23241
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BottomDrawerComponent, isStandalone: true, selector: "c8y-bottom-drawer", viewQueries: [{ propertyName: "drawerHost", first: true, predicate: ["drawerHost"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<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", dependencies: [{ kind: "ngmodule", type: CommonModule$1 }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }] }); }
23247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BottomDrawerComponent, isStandalone: true, selector: "c8y-bottom-drawer", viewQueries: [{ propertyName: "drawerHost", first: true, predicate: ["drawerHost"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div [ngClass]=\"{ drawerOpen: drawerOpen$ | async }\">\n <div\n class=\"bottom-drawer\"\n [ngClass]=\"{ 'has-backdrop': disableClickOutside }\"\n >\n <div class=\"d-flex d-col no-align-items fit-h\">\n <ng-template #drawerHost></ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule$1 }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }] }); }
23242
23248
  }
23243
23249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BottomDrawerComponent, decorators: [{
23244
23250
  type: Component,
23245
- args: [{ standalone: true, selector: 'c8y-bottom-drawer', imports: [CommonModule$1], template: "<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" }]
23251
+ args: [{ standalone: true, selector: 'c8y-bottom-drawer', imports: [CommonModule$1], template: "<div [ngClass]=\"{ drawerOpen: drawerOpen$ | async }\">\n <div\n class=\"bottom-drawer\"\n [ngClass]=\"{ 'has-backdrop': disableClickOutside }\"\n >\n <div class=\"d-flex d-col no-align-items fit-h\">\n <ng-template #drawerHost></ng-template>\n </div>\n </div>\n</div>\n" }]
23246
23252
  }], propDecorators: { drawerHost: [{
23247
23253
  type: ViewChild,
23248
23254
  args: ['drawerHost', { read: ViewContainerRef }]
@@ -23287,6 +23293,9 @@ class BottomDrawerRef {
23287
23293
  this.drawerComponentRef.instance.drawerHost.clear();
23288
23294
  const contentComponentRef = this.drawerComponentRef.instance.drawerHost.createComponent(component);
23289
23295
  assign$1(contentComponentRef.instance, this.options?.initialState);
23296
+ if (this.options?.disableClickOutside) {
23297
+ this.drawerComponentRef.instance.disableClickOutside = this.options.disableClickOutside;
23298
+ }
23290
23299
  this.drawerComponentRef.changeDetectorRef.detectChanges();
23291
23300
  this.handleNavigation();
23292
23301
  return contentComponentRef.instance;
@@ -25800,11 +25809,11 @@ class LegalNoticesOutletComponent {
25800
25809
  this.drawerOpen$ = this.headerService.rightDrawerOpen$;
25801
25810
  }
25802
25811
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LegalNoticesOutletComponent, deps: [{ token: DocsService }, { token: HeaderService }], target: i0.ɵɵFactoryTarget.Component }); }
25803
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LegalNoticesOutletComponent, selector: "c8y-legal-notices-outlet", ngImport: i0, template: "<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", dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }] }); }
25812
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LegalNoticesOutletComponent, selector: "c8y-legal-notices-outlet", ngImport: i0, template: "<div class=\"separator-top p-t-4 m-t-auto p-b-4\" *ngIf=\"legalNotices$ | async as legalNotices\">\n <ng-container *ngIf=\"legalNotices.component\">\n <ng-container *c8yComponentOutlet=\"legalNotices.component; environmentInjector: legalNotices.injector\"></ng-container>\n </ng-container>\n <a\n *ngIf=\"!legalNotices.component\"\n title=\"{{ legalNotices.label | translate }}\"\n type=\"button\"\n class=\"c8y-right-drawer__link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [href]=\"legalNotices.url\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.QUICK_LINKS.EVENTS.QUICK_LINK_RIGHT_DRAWER\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.QUICK_LINKS.COMPONENTS.RIGHT_DRAWER_COMPONENT,\n action: legalNotices.label\n }\"\n [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n >\n <span title=\"{{ legalNotices.label | translate }}\" class=\"text-truncate text-12\">\n {{ legalNotices.label | translate }}\n </span>\n </a>\n</div>\n", dependencies: [{ kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: C8yComponentOutlet, selector: "[c8yComponentOutlet]", inputs: ["c8yComponentOutlet", "c8yComponentOutletInjector", "c8yComponentOutletEnvironmentInjector"] }, { kind: "directive", type: ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }] }); }
25804
25813
  }
25805
25814
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LegalNoticesOutletComponent, decorators: [{
25806
25815
  type: Component,
25807
- args: [{ selector: 'c8y-legal-notices-outlet', template: "<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" }]
25816
+ args: [{ selector: 'c8y-legal-notices-outlet', template: "<div class=\"separator-top p-t-4 m-t-auto p-b-4\" *ngIf=\"legalNotices$ | async as legalNotices\">\n <ng-container *ngIf=\"legalNotices.component\">\n <ng-container *c8yComponentOutlet=\"legalNotices.component; environmentInjector: legalNotices.injector\"></ng-container>\n </ng-container>\n <a\n *ngIf=\"!legalNotices.component\"\n title=\"{{ legalNotices.label | translate }}\"\n type=\"button\"\n class=\"c8y-right-drawer__link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n [href]=\"legalNotices.url\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.QUICK_LINKS.EVENTS.QUICK_LINK_RIGHT_DRAWER\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.QUICK_LINKS.COMPONENTS.RIGHT_DRAWER_COMPONENT,\n action: legalNotices.label\n }\"\n [tabindex]=\"(drawerOpen$ | async) ? '0' : '-1'\"\n >\n <span title=\"{{ legalNotices.label | translate }}\" class=\"text-truncate text-12\">\n {{ legalNotices.label | translate }}\n </span>\n </a>\n</div>\n" }]
25808
25817
  }], ctorParameters: () => [{ type: DocsService }, { type: HeaderService }] });
25809
25818
 
25810
25819
  class LegalNoticesOutletModule {
@@ -35157,6 +35166,326 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
35157
35166
  ], template: "<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" }]
35158
35167
  }] });
35159
35168
 
35169
+ class FeatureCacheService {
35170
+ constructor(featureService) {
35171
+ this.featureService = featureService;
35172
+ this.refreshTrigger = new BehaviorSubject(undefined);
35173
+ this.features$ = this.refreshTrigger.pipe(switchMap(() => this.loadFeatures()), shareReplay(1));
35174
+ }
35175
+ /**
35176
+ * Needed for the angularJS implmentation to show/hide some old features.
35177
+ * Returns a promise
35178
+ */
35179
+ getFeatureStatePromise(key) {
35180
+ return firstValueFrom(this.getFeatureState(key));
35181
+ }
35182
+ /**
35183
+ *
35184
+ * @param key - The feature key to check
35185
+ * @returns true if the feature key exists in the list of features.
35186
+ */
35187
+ featureExists(key) {
35188
+ return this.features$.pipe(map(features => features.some(feature => feature.key === key)));
35189
+ }
35190
+ getFeatureState(key) {
35191
+ return this.features$.pipe(map(features => {
35192
+ const feature = features.find(f => f.key === key);
35193
+ return feature?.active || false;
35194
+ }));
35195
+ }
35196
+ resetFeatureState() {
35197
+ this.refreshTrigger.next();
35198
+ }
35199
+ async loadFeatures() {
35200
+ const response = await this.featureService.list({ pageSize: 1000 });
35201
+ return response.data || [];
35202
+ }
35203
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureCacheService, deps: [{ token: i1.FeatureService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35204
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureCacheService, providedIn: 'root' }); }
35205
+ }
35206
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureCacheService, decorators: [{
35207
+ type: Injectable,
35208
+ args: [{ providedIn: 'root' }]
35209
+ }], ctorParameters: () => [{ type: i1.FeatureService }] });
35210
+
35211
+ const HOOK_PREVIEW = new InjectionToken('HOOK_PREVIEW');
35212
+ function hookPreview(preview, options) {
35213
+ return hookGeneric(preview, HOOK_PREVIEW, options);
35214
+ }
35215
+ class PreviewService extends ExtensionPointForPlugins {
35216
+ constructor(rootInjector, pluginService) {
35217
+ super(rootInjector, pluginService);
35218
+ this.items$ = this.setupItemsObservable();
35219
+ this.reload$ = new BehaviorSubject(false);
35220
+ this.LOCAL_STORAGE_KEY = 'c8y_beta_features_seen';
35221
+ this.seenFeatures$ = new BehaviorSubject(this.getSeenFeatures());
35222
+ this.hasUnseenFeatures$ = combineLatest([this.items$, this.seenFeatures$]).pipe(map(([features, seen]) => features.some(feature => !seen.includes(feature.label))), distinctUntilChanged());
35223
+ this.featureService = inject(FeatureService);
35224
+ this.featureCacheService = inject(FeatureCacheService);
35225
+ this.optionsService = inject(OptionsService);
35226
+ this.toggledFeaturesWithReload = new Set(); // track features with settings.reload = true
35227
+ }
35228
+ get state() {
35229
+ return this.state$.value;
35230
+ }
35231
+ /**
35232
+ * Get the state of a specific feature.
35233
+ * @param key The unique key for the feature.
35234
+ * @returns Observable<boolean> representing the state of the feature.
35235
+ */
35236
+ getState$(key) {
35237
+ return this.items$.pipe(switchMap(features => this.optionsService.get$('enableAllBetaFeatures').pipe(switchMap(enableAllBetaFeatures => {
35238
+ if (enableAllBetaFeatures) {
35239
+ return of(true);
35240
+ }
35241
+ const feature = features.find(f => f.key === key);
35242
+ if (!feature) {
35243
+ throw new Error(`Feature with key "${key}" does not exist.`);
35244
+ }
35245
+ if (feature.active$) {
35246
+ return feature.active$;
35247
+ }
35248
+ return this.featureCacheService.getFeatureState(key).pipe(distinctUntilChanged());
35249
+ }))), distinctUntilChanged());
35250
+ }
35251
+ /**
35252
+ * Toggle the state of a specific feature.
35253
+ * @param key The unique key or label for the feature. Label is used to find the custom features.
35254
+ * @returns Promise<void> after toggling the state.
35255
+ */
35256
+ async setFeatureActiveState(key, toggleValue) {
35257
+ const features = await firstValueFrom(this.items$);
35258
+ const feature = features.find(f => f.key === key) || features.find(f => f.label === key);
35259
+ if (!feature) {
35260
+ throw new Error(`Feature with key "${key}" does not exist.`);
35261
+ }
35262
+ if (feature.onToggle) {
35263
+ const success = await feature.onToggle(toggleValue);
35264
+ if (!success) {
35265
+ throw new Error(`Failed to toggle feature with key "${key}".`);
35266
+ }
35267
+ return;
35268
+ }
35269
+ const featureToUpdate = { key: feature.key, active: toggleValue };
35270
+ await this.featureService.updateFeature(featureToUpdate);
35271
+ await this.featureCacheService.resetFeatureState();
35272
+ if (feature.settings?.reload) {
35273
+ if (this.toggledFeaturesWithReload.has(key)) {
35274
+ this.toggledFeaturesWithReload.delete(key);
35275
+ }
35276
+ else {
35277
+ this.toggledFeaturesWithReload.add(key);
35278
+ }
35279
+ }
35280
+ this.reload$.next(this.toggledFeaturesWithReload.size > 0);
35281
+ }
35282
+ /**
35283
+ * Marks all features as seen by the user and updates the local storage.
35284
+ * This assumes all features are provided via the `items$` observable.
35285
+ */
35286
+ async markAllFeaturesAsSeen() {
35287
+ const features = await firstValueFrom(this.items$);
35288
+ const featureNames = features.map(feature => feature.label);
35289
+ localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(featureNames));
35290
+ this.seenFeatures$.next(featureNames);
35291
+ }
35292
+ /**
35293
+ *
35294
+ * @returns An array of feature names that have been seen by the user. This is retrieved from local storage.
35295
+ */
35296
+ getSeenFeatures() {
35297
+ const seenFeatures = localStorage.getItem(this.LOCAL_STORAGE_KEY);
35298
+ return seenFeatures ? JSON.parse(seenFeatures) : [];
35299
+ }
35300
+ setupItemsObservable() {
35301
+ return fromTriggerOnce(undefined, this.refresh$, [
35302
+ getInjectedHooks(HOOK_PREVIEW, this.injectors),
35303
+ () => this.factories,
35304
+ stateToFactory(this.state$)
35305
+ ]).pipe(distinctUntilChanged(), map(features => sortByPriority(features)), shareReplay(1));
35306
+ }
35307
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PreviewService, deps: [{ token: i0.Injector }, { token: PluginsResolveService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35308
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PreviewService, providedIn: 'root' }); }
35309
+ }
35310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PreviewService, decorators: [{
35311
+ type: Injectable,
35312
+ args: [{ providedIn: 'root' }]
35313
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: PluginsResolveService }] });
35314
+
35315
+ const SHOW_BETA_PREVIEW = 'showBetaPreview';
35316
+
35317
+ class FeatureStatePipe {
35318
+ constructor(previewService) {
35319
+ this.previewService = previewService;
35320
+ }
35321
+ transform(featureKey) {
35322
+ return this.previewService.getState$(featureKey);
35323
+ }
35324
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureStatePipe, deps: [{ token: PreviewService }], target: i0.ɵɵFactoryTarget.Pipe }); }
35325
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: FeatureStatePipe, isStandalone: true, name: "featureState" }); }
35326
+ }
35327
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureStatePipe, decorators: [{
35328
+ type: Pipe,
35329
+ args: [{
35330
+ name: 'featureState',
35331
+ standalone: true
35332
+ }]
35333
+ }], ctorParameters: () => [{ type: PreviewService }] });
35334
+
35335
+ class BetaPreviewComponent {
35336
+ constructor() {
35337
+ this.description$ = new BehaviorSubject('');
35338
+ this.betaPreviewService = inject(PreviewService);
35339
+ this.featureCacheService = inject(FeatureCacheService);
35340
+ this.markdownToHtmlPipe = inject(MarkdownToHtmlPipe);
35341
+ this.features$ = this.betaPreviewService.items$;
35342
+ this.shouldClose = new Promise(resolve => {
35343
+ this.resolveClose = resolve;
35344
+ });
35345
+ }
35346
+ async ngOnInit() {
35347
+ await this.betaPreviewService.markAllFeaturesAsSeen();
35348
+ const features = await firstValueFrom(this.features$);
35349
+ this.updateSelectedFeature(features[0]);
35350
+ }
35351
+ async updateSelectedFeature(feature) {
35352
+ this.selectedFeature = feature;
35353
+ await this.updateDescription();
35354
+ }
35355
+ async updateDescription() {
35356
+ const description = await this.selectedFeature?.description();
35357
+ if (!this.isComponent(description)) {
35358
+ const html = await firstValueFrom(this.markdownToHtmlPipe.transform(description));
35359
+ this.description$.next(html);
35360
+ }
35361
+ else {
35362
+ this.description$.next(description);
35363
+ }
35364
+ }
35365
+ isComponent(description) {
35366
+ return description instanceof Function;
35367
+ }
35368
+ async onToggle(feature, event) {
35369
+ const isChecked = event.target.checked;
35370
+ await this.betaPreviewService.setFeatureActiveState(feature.key, isChecked);
35371
+ }
35372
+ featureKeyExists(key) {
35373
+ return this.featureCacheService.featureExists(key);
35374
+ }
35375
+ close() {
35376
+ this.resolveClose(true);
35377
+ }
35378
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35379
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BetaPreviewComponent, isStandalone: true, selector: "c8y-beta-preview", host: { classAttribute: "d-contents" }, providers: [MarkdownToHtmlPipe], ngImport: i0, template: "<div class=\"card-block separator-bottom bg-component text-center flex-no-shrink p-24\">\n <div class=\"d-flex fit-w a-i-center j-c-center\">\n <i\n class=\"icon-24 m-r-8\"\n [c8yIcon]=\"'science'\"\n ></i>\n <h3\n class=\"m-0\"\n translate\n >\n Beta features preview\n </h3>\n </div>\n <p class=\"text-16 m-t-8\">\n {{\n 'Select any feature to view additional details and documentation. Toggle features on or off using the switches.'\n | translate\n }}\n </p>\n\n <p>\n {{\n 'These beta capabilities may change or be removed before final release. We value your feedback. The descriptions for the features below are available only in English.'\n | translate\n }}\n </p>\n</div>\n\n<div class=\"card-block p-0\">\n <div class=\"d-flex fit-h\">\n <div class=\"col-md-4 col-lg-3 p-l-0 p-r-0 sticky-top m-t-0 inner-scroll bg-level-1\">\n <div class=\"nav-tabs nav-tabs-vertical nav-tabs-vertical--wide p-t-0\">\n <div\n [class.active]=\"feature === selectedFeature\"\n class=\"d-flex fit-w a-i-center\"\n *ngFor=\"let feature of features$ | async\"\n >\n <ng-container *ngIf=\"feature.key ? (featureKeyExists(feature.key) | async) : true\">\n <button\n class=\"d-flex gap-4 text-truncate flex-grow\"\n title=\"{{ feature.label }}\"\n [ngClass]=\"{\n 'bg-component': feature === selectedFeature,\n 'bg-level-1': feature !== selectedFeature\n }\"\n (click)=\"updateSelectedFeature(feature)\"\n >\n <i\n class=\"m-l-0\"\n [c8yIcon]=\"'science'\"\n ></i>\n {{ feature.label }}\n </button>\n <div\n class=\"a-s-stretch d-flex a-i-center separator-bottom p-r-16\"\n [ngClass]=\"{\n 'bg-component': feature === selectedFeature,\n 'bg-level-1': feature !== selectedFeature\n }\"\n >\n <label\n class=\"c8y-switch c8y-switch--inline m-l-auto\"\n title=\"{{ 'Enable or disable' | translate }}\"\n >\n <input\n [attr.aria-label]=\"feature.label\"\n type=\"checkbox\"\n [checked]=\"feature.key | featureState | async\"\n (change)=\"$event.stopPropagation(); onToggle(feature, $event)\"\n />\n <span class=\"slider round\"></span>\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-md-8 col-lg-9 p-24 inner-scroll\"\n *ngIf=\"selectedFeature\"\n >\n <span class=\"tag tag--primary h4\">\n {{ 'Feature preview' | translate }} \u2014 {{ selectedFeature.label }}\n </span>\n <div *ngIf=\"isComponent(description$.value); else stringDescription\">\n <ng-container *ngComponentOutlet=\"description$.value\"></ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Close' | translate }}\n </button>\n</div>\n\n<ng-template #stringDescription>\n <p [innerHTML]=\"description$.value\"></p>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: ListGroupModule }, { kind: "pipe", type: FeatureStatePipe, name: "featureState" }] }); }
35380
+ }
35381
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewComponent, decorators: [{
35382
+ type: Component,
35383
+ args: [{ selector: 'c8y-beta-preview', host: { class: 'd-contents' }, standalone: true, imports: [NgForOf, NgIf, AsyncPipe, CommonModule, ListGroupModule, FeatureStatePipe], providers: [MarkdownToHtmlPipe], template: "<div class=\"card-block separator-bottom bg-component text-center flex-no-shrink p-24\">\n <div class=\"d-flex fit-w a-i-center j-c-center\">\n <i\n class=\"icon-24 m-r-8\"\n [c8yIcon]=\"'science'\"\n ></i>\n <h3\n class=\"m-0\"\n translate\n >\n Beta features preview\n </h3>\n </div>\n <p class=\"text-16 m-t-8\">\n {{\n 'Select any feature to view additional details and documentation. Toggle features on or off using the switches.'\n | translate\n }}\n </p>\n\n <p>\n {{\n 'These beta capabilities may change or be removed before final release. We value your feedback. The descriptions for the features below are available only in English.'\n | translate\n }}\n </p>\n</div>\n\n<div class=\"card-block p-0\">\n <div class=\"d-flex fit-h\">\n <div class=\"col-md-4 col-lg-3 p-l-0 p-r-0 sticky-top m-t-0 inner-scroll bg-level-1\">\n <div class=\"nav-tabs nav-tabs-vertical nav-tabs-vertical--wide p-t-0\">\n <div\n [class.active]=\"feature === selectedFeature\"\n class=\"d-flex fit-w a-i-center\"\n *ngFor=\"let feature of features$ | async\"\n >\n <ng-container *ngIf=\"feature.key ? (featureKeyExists(feature.key) | async) : true\">\n <button\n class=\"d-flex gap-4 text-truncate flex-grow\"\n title=\"{{ feature.label }}\"\n [ngClass]=\"{\n 'bg-component': feature === selectedFeature,\n 'bg-level-1': feature !== selectedFeature\n }\"\n (click)=\"updateSelectedFeature(feature)\"\n >\n <i\n class=\"m-l-0\"\n [c8yIcon]=\"'science'\"\n ></i>\n {{ feature.label }}\n </button>\n <div\n class=\"a-s-stretch d-flex a-i-center separator-bottom p-r-16\"\n [ngClass]=\"{\n 'bg-component': feature === selectedFeature,\n 'bg-level-1': feature !== selectedFeature\n }\"\n >\n <label\n class=\"c8y-switch c8y-switch--inline m-l-auto\"\n title=\"{{ 'Enable or disable' | translate }}\"\n >\n <input\n [attr.aria-label]=\"feature.label\"\n type=\"checkbox\"\n [checked]=\"feature.key | featureState | async\"\n (change)=\"$event.stopPropagation(); onToggle(feature, $event)\"\n />\n <span class=\"slider round\"></span>\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-md-8 col-lg-9 p-24 inner-scroll\"\n *ngIf=\"selectedFeature\"\n >\n <span class=\"tag tag--primary h4\">\n {{ 'Feature preview' | translate }} \u2014 {{ selectedFeature.label }}\n </span>\n <div *ngIf=\"isComponent(description$.value); else stringDescription\">\n <ng-container *ngComponentOutlet=\"description$.value\"></ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"text-center card-footer p-24 separator\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Close' | translate }}\n </button>\n</div>\n\n<ng-template #stringDescription>\n <p [innerHTML]=\"description$.value\"></p>\n</ng-template>\n" }]
35384
+ }], ctorParameters: () => [] });
35385
+
35386
+ class BetaPreviewButtonComponent {
35387
+ constructor() {
35388
+ this.previewService = inject(PreviewService);
35389
+ this.bottomDrawerService = inject(BottomDrawerService);
35390
+ this.headerService = inject(HeaderService);
35391
+ this.destroy$ = new Subject();
35392
+ }
35393
+ ngOnInit() {
35394
+ this.hasUnseenFeatures$ = this.previewService.hasUnseenFeatures$;
35395
+ this.open$ = this.headerService.rightDrawerOpen$;
35396
+ }
35397
+ async openBetaPreview() {
35398
+ this.headerService.closeRightDrawer();
35399
+ const bottomDrawer = this.bottomDrawerService.openDrawer(BetaPreviewComponent, {
35400
+ closeOnNavigation: false,
35401
+ disableClickOutside: true
35402
+ });
35403
+ bottomDrawer.onClosed$.pipe(takeUntil$1(this.destroy$)).subscribe(() => {
35404
+ if (this.previewService.reload$.value) {
35405
+ window.location.reload();
35406
+ }
35407
+ });
35408
+ try {
35409
+ const result = await bottomDrawer.instance.shouldClose;
35410
+ if (result) {
35411
+ bottomDrawer.close();
35412
+ }
35413
+ }
35414
+ catch (e) {
35415
+ // intended empty
35416
+ }
35417
+ }
35418
+ ngOnDestroy() {
35419
+ this.destroy$.next();
35420
+ this.destroy$.complete();
35421
+ }
35422
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35423
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BetaPreviewButtonComponent, isStandalone: true, selector: "c8y-beta-preview-button", ngImport: i0, template: "<div class=\"separator-top p-t-8 m-t-auto c8y-right-drawer__item sticky-top\">\n <i class=\"dlt-c8y-icon-science\"></i>\n <span\n class=\"text-bold\"\n translate\n >\n Beta features\n </span>\n <span\n class=\"m-l-8 tag tag--primary\"\n *ngIf=\"hasUnseenFeatures$ | async\"\n >\n {{ 'New' | translate }}\n </span>\n</div>\n<ul class=\"list-unstyled\">\n <li class=\"c8y-right-drawer__item\">\n <small translate>\n Enable or disable experimental features. Your feedback helps us improve functionality before\n final release.\n </small>\n </li>\n <li class=\"c8y-right-drawer__item\">\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Manage beta features' | translate }}\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n (click)=\"openBetaPreview()\"\n >\n <i class=\"m-t-0 m-b-9 text-14 dlt-c8y-icon-settings\"></i>\n <span translate>Manage beta features</span>\n </button>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
35424
+ }
35425
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewButtonComponent, decorators: [{
35426
+ type: Component,
35427
+ args: [{ selector: 'c8y-beta-preview-button', standalone: true, imports: [C8yTranslateDirective, C8yTranslatePipe, AsyncPipe, NgIf], template: "<div class=\"separator-top p-t-8 m-t-auto c8y-right-drawer__item sticky-top\">\n <i class=\"dlt-c8y-icon-science\"></i>\n <span\n class=\"text-bold\"\n translate\n >\n Beta features\n </span>\n <span\n class=\"m-l-8 tag tag--primary\"\n *ngIf=\"hasUnseenFeatures$ | async\"\n >\n {{ 'New' | translate }}\n </span>\n</div>\n<ul class=\"list-unstyled\">\n <li class=\"c8y-right-drawer__item\">\n <small translate>\n Enable or disable experimental features. Your feedback helps us improve functionality before\n final release.\n </small>\n </li>\n <li class=\"c8y-right-drawer__item\">\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Manage beta features' | translate }}\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n (click)=\"openBetaPreview()\"\n >\n <i class=\"m-t-0 m-b-9 text-14 dlt-c8y-icon-settings\"></i>\n <span translate>Manage beta features</span>\n </button>\n </li>\n</ul>\n" }]
35428
+ }] });
35429
+
35430
+ class BetaPreviewDrawerFactory {
35431
+ constructor(options, previewService, permissions) {
35432
+ this.options = options;
35433
+ this.previewService = previewService;
35434
+ this.permissions = permissions;
35435
+ this.drawerItem = {
35436
+ component: BetaPreviewButtonComponent,
35437
+ position: 'right',
35438
+ priority: 80,
35439
+ id: 'betaPreview'
35440
+ };
35441
+ }
35442
+ get() {
35443
+ return this.shouldShowBetaPreview$().pipe(distinctUntilChanged(), map(shouldShowBetaPreview => {
35444
+ if (shouldShowBetaPreview) {
35445
+ return this.drawerItem;
35446
+ }
35447
+ return [];
35448
+ }));
35449
+ }
35450
+ shouldShowBetaPreview$() {
35451
+ return combineLatest([this.options.get$('hideBetaPreview'), this.previewService.items$]).pipe(map(([hideBetaPreview, items]) => {
35452
+ const hasItems = items.length > 0;
35453
+ if (!hasItems) {
35454
+ return false;
35455
+ }
35456
+ const hasAdminRole = this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN);
35457
+ if (hideBetaPreview === undefined) {
35458
+ return hasItems && hasAdminRole;
35459
+ }
35460
+ return !hideBetaPreview && hasItems && hasAdminRole;
35461
+ }));
35462
+ }
35463
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewDrawerFactory, deps: [{ token: OptionsService }, { token: PreviewService }, { token: Permissions }], target: i0.ɵɵFactoryTarget.Injectable }); }
35464
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewDrawerFactory, providedIn: 'root' }); }
35465
+ }
35466
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewDrawerFactory, decorators: [{
35467
+ type: Injectable,
35468
+ args: [{ providedIn: 'root' }]
35469
+ }], ctorParameters: () => [{ type: OptionsService }, { type: PreviewService }, { type: Permissions }] });
35470
+
35471
+ class BetaFeatureShowNotification {
35472
+ constructor(previewService) {
35473
+ this.previewService = previewService;
35474
+ this.shouldShowNotification$ = this.previewService.hasUnseenFeatures$;
35475
+ }
35476
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaFeatureShowNotification, deps: [{ token: PreviewService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35477
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaFeatureShowNotification, providedIn: 'root' }); }
35478
+ }
35479
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaFeatureShowNotification, decorators: [{
35480
+ type: Injectable,
35481
+ args: [{ providedIn: 'root' }]
35482
+ }], ctorParameters: () => [{ type: PreviewService }] });
35483
+
35484
+ const BETA_FEATURE_PROVIDERS = [
35485
+ hookDrawer(BetaPreviewDrawerFactory),
35486
+ hookService('notificationService', BetaFeatureShowNotification)
35487
+ ];
35488
+
35160
35489
  class CoreModule {
35161
35490
  static forRoot() {
35162
35491
  return {
@@ -35170,7 +35499,8 @@ class CoreModule {
35170
35499
  ...NavigatorTopModule.providers(),
35171
35500
  ...UiSettingsModule.providers(),
35172
35501
  ...UserModule.providers(),
35173
- ...VersionModule.providers()
35502
+ ...VersionModule.providers(),
35503
+ ...BETA_FEATURE_PROVIDERS
35174
35504
  ]
35175
35505
  };
35176
35506
  }
@@ -36123,5 +36453,5 @@ function colorValidator(allowedModes) {
36123
36453
  * Generated bundle index. Do not edit.
36124
36454
  */
36125
36455
 
36126
- export { ACTIONS_STEPPER, AGGREGATIONS, AGGREGATION_ICONS, AGGREGATION_LABELS, AGGREGATION_LIMITS, AGGREGATION_TEXTS, AGGREGATION_VALUES, AGGREGATION_VALUES_ARR, ARRAY_VALIDATION_PREFIX, ASSET_PATH, AbstractConfigurationStrategy, ActionBarComponent, ActionBarItemComponent, ActionBarModule, ActionBarService, ActionComponent, ActionControlsExtensionService, ActionModule, ActionOutletComponent, ActionService, AggregationPickerComponent, AggregationService, AlarmRealtimeService, AlarmWithChildrenRealtimeService, AlertComponent, AlertDetailsComponent, AlertModule, AlertOutletBase, AlertOutletComponent, AlertService, AlertTextComponent, AppIconComponent, AppStateService, AppSwitcherComponent, AppSwitcherInlineComponent, AppSwitcherService, ApplicationModule, ApplicationPluginStatus, AssetLinkPipe, AssetTypesRealtimeService, AssetTypesService, AuditLogComponent, AuditLogModule, AuthenticationModule, BackendVersionFactory, BaseColumn, BaseFilteringFormRendererComponent, BooleanFilterMapper, BootstrapComponent, BootstrapModule, BottomDrawerComponent, BottomDrawerRef, BottomDrawerService, BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbModule, BreadcrumbOutletComponent, BreadcrumbService, BuiltInActionType, BytesPipe, C8yComponentOutlet, C8yJSONSchema, C8yStepper, C8yStepperButtons, C8yStepperIcon, C8yStepperProgress, C8yTranslateDirective, C8yTranslateModule, C8yTranslatePipe, C8yValidators, CUSTOM, CachedLocaleDictionaryService, CellRendererComponent, CellRendererContext, CellRendererDefDirective, ChangePasswordComponent, ClipboardModule, ClipboardService, ColorInputComponent, ColorService, ColumnDirective, CommonModule, ConditionalTabsOutletComponent, ConfigureCustomColumnComponent, ConfirmModalComponent, ContextRouteComponent, ContextRouteGuard, ContextRouteService, CookieBannerComponent, CopyDashboardDisabledReason, CoreModule, CoreSearchModule, CountdownIntervalComponent, CountdownIntervalModule, CredentialsComponent, CurrentPasswordModalComponent, CustomColumn, DATA_GRID_CONFIGURATION_CONTEXT, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, DATA_GRID_CONFIGURATION_STRATEGY, DEFAULT_INTERVAL_STATE, DEFAULT_INTERVAL_VALUE, DEFAULT_INTERVAL_VALUES, DRAWER_ANIMATION_TIME, DashboardChildActionComponent, DashboardChildChange, DashboardChildComponent, DashboardChildTitleComponent, DashboardComponent, DashboardModule, DataGridComponent, DataGridModule, DataGridService, DatapointLibraryValidationErrors, DateContextQueryParamNames, DateFilterMapper, DateFormatService, DatePickerComponent, DatePickerModule, DatePipe, DateTimePickerComponent, DateTimePickerModule, DefaultValidationDirective, DeviceBootstrapRealtimeService, DeviceService, DeviceStatusComponent, DeviceStatusModule, DismissAlertStrategy, DocsModule, DocsService, DrawerModule, DrawerOutletComponent, DrawerService, DropAreaComponent, DropAreaModule, DropdownDirectionDirective, DynamicBulkDetailsResolver, DynamicBulkIIdentifiedResolver, DynamicComponentAlert, DynamicComponentAlertAggregator, DynamicComponentAlertsComponent, DynamicComponentComponent, DynamicComponentErrorStrategy, DynamicComponentModule, DynamicComponentService, DynamicDatapointsResolver, DynamicFormsModule, DynamicManagedObjectResolver, DynamicResolverService, ES_MAX_TIME_MILLISECONDS, EmailsValidatorDirective, EmptyComponent, EmptyStateComponent, EmptyStateContextDirective, EventRealtimeService, ExpandableRowDirective, ExtensionPointForPlugins, ExtensionPointWithoutStateForPlugins, ExtractArrayValidationErrorsPipe, FilePickerComponent, FilePickerFormControlComponent, FilePickerFormControlModule, FilePickerModule, FilesService, FilterInputComponent, FilterMapperFactory, FilterMapperModule, FilterMapperPipe, FilterMapperService, FilterNonArrayValidationErrorsPipe, FilteringActionType, FilteringFormRendererComponent, FilteringFormRendererContext, FilteringFormRendererDefDirective, ForOfDirective, FormGroupComponent, FormsModule, GENERIC_FILE_TYPE, GLOBAL_CONTEXT_AUTO_REFRESH, GainsightService, GenericFileIconPipe, GeoService, GetGroupIconPipe, GlobalConfigService, GridDataSource, GroupFragment, GroupService, GroupedFilterChips, GuideDocsComponent, GuideHrefDirective, HOOK_ACTION, HOOK_ACTION_BAR, HOOK_BREADCRUMB, HOOK_COMPONENTS, HOOK_DOCS, HOOK_DYNAMIC_PROVIDER_CONFIG, HOOK_NAVIGATOR_NODES, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_ROUTE, HOOK_SEARCH, HOOK_STEPPER, HOOK_TABS, HOOK_VERSION, HOOK_WIZARD, HeaderBarComponent, HeaderCellRendererDefDirective, HeaderModule, HeaderService, HelpComponent, HelpModule, HighlightComponent, HookProviderTypes, HumanizeAppNamePipe, HumanizePipe, HumanizeValidationMessagePipe, I18nModule, INTERVAL_OPTIONS, IconDirective, IfAllowedDirective, InjectionType, InputGroupListComponent, InputGroupListContainerDirective, InterAppService, IntervalBasedReload, InventorySearchService, IpRangeInputListComponent, JsonValidationPrettifierDirective, LANGUAGES, LAST_DAY, LAST_HOUR, LAST_MINUTE, LAST_MONTH, LAST_WEEK, LOCALE_PATH, LegacyGridConfigMapperService, LegendFieldWrapper, ListDisplaySwitchComponent, ListDisplaySwitchModule, ListGroupComponent, ListGroupModule, ListItemActionComponent, ListItemBodyComponent, ListItemCheckboxComponent, ListItemCollapseComponent, ListItemComponent, ListItemDragHandleComponent, ListItemFooterComponent, ListItemIconComponent, ListItemRadioComponent, ListItemTimelineComponent, LoadMoreComponent, LoadingComponent, LoginComponent, LoginModule, LoginService, LoginViews, MAX_PAGE_SIZE, MESSAGES_CORE_I18N, ManagedObjectRealtimeService, ManagedObjectType, MapFunctionPipe, MarkdownToHtmlPipe, MaxValidationDirective, MeasurementRealtimeService, MessageBannerService, MessageDirective, MessagesComponent, MinValidationDirective, MissingTranslationCustomHandler, MoNamePipe, ModalComponent, ModalModule, ModalSelectionMode, ModalService, NEEDED_ROLE_FOR_SETUP, NEW_DASHBOARD_ROUTER_STATE_PROP, NULL_VALUE_PLACEHOLDER, NUMBER_FORMAT_REGEXP, NameTransformPipe, NavigatorBottomModule, NavigatorIconComponent, NavigatorModule, NavigatorNode, NavigatorNodeComponent, NavigatorNodeRoot, NavigatorOutletComponent, NavigatorService, NavigatorTopModule, NewPasswordComponent, NumberPipe, OperationBulkRealtimeService, OperationRealtimeService, OperationResultComponent, OptionsService, OutletDirective, PRODUCT_EXPERIENCE_EVENT_SOURCE, PX_ACTIONS, PX_EVENT_NAME, PackageType, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordInputComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, PasswordStrengthValidatorDirective, PatternMessagesService, Permissions, PhoneValidationDirective, PlatformDetailsService, PluginLoadedPipe, PluginsExportScopes, PluginsModule, PluginsResolveService, PluginsService, PopoverConfirmComponent, ProductExperienceDirective, ProductExperienceModule, ProgressBarComponent, PropertiesListComponent, PropertiesListModule, PropertyValueTransformService, ProvidePhoneNumberComponent, ProviderConfigurationComponent, ProviderConfigurationModule, ProviderConfigurationNodeFactory, ProviderConfigurationRouteFactory, ProviderConfigurationService, ProviderDefinitionsService, PushStatus, PushStatusLabels, QuickLinkComponent, QuickLinkModule, RESOLVING_COMPONENT_WAIT_TIME, RadioFilterMapper, RangeComponent, RangeDirective, RangeDisplayComponent, RangeDisplayModule, RealtimeButtonComponent, RealtimeControlComponent, RealtimeMessage, RealtimeModule, RealtimeService, RealtimeSubjectService, RecoverPasswordComponent, RelativeTimePipe, RequiredInputPlaceholderDirective, RouterModule, RouterService, RouterTabsResolver, SETUP_FINISHED_STEP_ID, SearchComponent, SearchFilters, SearchInputComponent, SearchOutletComponent, SearchResultEmptyComponent, SearchService, SelectComponent, SelectFilterMapper, SelectItemDirective, SelectKeyboardService, SelectLegacyComponent, SelectModalComponent, SelectModalFilterPipe, SelectModalModule, SelectModule, SelectedItemsComponent, SelectedItemsDirective, SendStatus, SendStatusLabels, ServiceRegistry, SetupCompletedComponent, SetupComponent, SetupModule, SetupService, SetupState, SetupStepperFactory, ShortenUserNamePipe, ShouldShowMoPipe, ShowIfFilterPipe, SimpleJsonPathValidatorDirective, SkipLinkDirective, SmsChallengeComponent, StandalonePluginInjector, StateService, Status, StepperModule, StepperOutletComponent, StepperService, Steppers, StrengthValidatorService, StringFilterMapper, StringifyObjectPipe, SupportedApps, TabComponent, TabsModule, TabsOutletComponent, TabsService, TabsetAriaDirective, TenantUiService, TextAreaRowHeightDirective, TextareaAutoresizeDirective, ThemeSwitcherService, TimeIntervalComponent, TimePickerComponent, TimePickerModule, TitleComponent, TitleOutletComponent, TotpAuthComponent, TotpChallengeComponent, TotpSetupComponent, TranslateParserCustom, TranslateService, TranslationLoaderService, TypeaheadComponent, TypeaheadFilterMapper, UiSettingsComponent, UiSettingsModule, UniqueInCollectionByPathValidationDirective, UserEditComponent, UserEditModalComponent, UserEngagementsService, UserMenuItemComponent, UserMenuOutletComponent, UserMenuService, UserModule, UserNameInitialsPipe, UserPreferencesConfigurationStrategy, UserPreferencesService, UserPreferencesStorageInventory, UserPreferencesStorageLocal, UserTotpRevokeComponent, UserTotpSetupComponent, VERSION_MODULE_CONFIG, ValidationPattern, VersionListComponent, VersionModule, VersionService, ViewContext, ViewContextServices, VirtualScrollWindowDirective, VirtualScrollWindowStrategy, VirtualScrollerWrapperComponent, VisibleControlsPipe, WIDGET_TYPE_VALUES, WebSDKVersionFactory, WidgetGlobalAutoRefreshService, WidgetTimeContextActionBarPriority, WidgetTimeContextComponent, WidgetTimeContextDateRangeService, WidgetsDashboardComponent, WizardBodyComponent, WizardComponent, WizardFooterComponent, WizardHeaderComponent, WizardModalService, WizardModule, WizardOutletComponent, WizardService, ZipService, _virtualScrollWindowStrategyFactory, alertOnError, allEntriesAreEqual, asyncValidateArrayElements, colorValidator, deviceAvailabilityIconMap, extraRoutes, fromFactories, fromTrigger, fromTriggerOnce, getActivatedRoute, getAngularLocalesLanguageString, getBasicInputArrayFormFieldConfig, getDictionaryWithTrimmedKeys, getInjectedHooks, globalAutoRefreshLoading, hookAction, hookActionBar, hookBreadcrumb, hookComponent, hookDataGridActionControls, hookDocs, hookDrawer, hookDynamicProviderConfig, hookFilterMapper, hookGeneric, hookNavigator, hookOptions, hookPatternMessages, hookRoute, hookSearch, hookService, hookStepper, hookTab, hookUserMenu, hookVersion, hookWidget, hookWizard, initializeServices, internalApps, isEagerDynamicComponents, isExtensionFactory, isLazyDynamicComponents, isPromise, languagesFactory, loadLocale, localeId, localePathFactory, memoize, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, ratiosByColumnTypes, removeDuplicatesIds, resolveInjectedFactories, retryWithDelay, simpleJsonPathValidator, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, throttle, toObservable, toObservableOfArrays, tooltips, trimTranslationKey, uniqueInCollectionByPathValidator, validateArrayElements, validateInternationalPhoneNumber, viewContextRoutes, wrapperLegendFieldConfig };
36456
+ export { ACTIONS_STEPPER, AGGREGATIONS, AGGREGATION_ICONS, AGGREGATION_LABELS, AGGREGATION_LIMITS, AGGREGATION_TEXTS, AGGREGATION_VALUES, AGGREGATION_VALUES_ARR, ARRAY_VALIDATION_PREFIX, ASSET_PATH, AbstractConfigurationStrategy, ActionBarComponent, ActionBarItemComponent, ActionBarModule, ActionBarService, ActionComponent, ActionControlsExtensionService, ActionModule, ActionOutletComponent, ActionService, AggregationPickerComponent, AggregationService, AlarmRealtimeService, AlarmWithChildrenRealtimeService, AlertComponent, AlertDetailsComponent, AlertModule, AlertOutletBase, AlertOutletComponent, AlertService, AlertTextComponent, AppIconComponent, AppStateService, AppSwitcherComponent, AppSwitcherInlineComponent, AppSwitcherService, ApplicationModule, ApplicationPluginStatus, AssetLinkPipe, AssetTypesRealtimeService, AssetTypesService, AuditLogComponent, AuditLogModule, AuthenticationModule, BETA_FEATURE_PROVIDERS, BackendVersionFactory, BaseColumn, BaseFilteringFormRendererComponent, BetaFeatureShowNotification, BetaPreviewButtonComponent, BooleanFilterMapper, BootstrapComponent, BootstrapModule, BottomDrawerComponent, BottomDrawerRef, BottomDrawerService, BreadcrumbComponent, BreadcrumbItemComponent, BreadcrumbModule, BreadcrumbOutletComponent, BreadcrumbService, BuiltInActionType, BytesPipe, C8yComponentOutlet, C8yJSONSchema, C8yStepper, C8yStepperButtons, C8yStepperIcon, C8yStepperProgress, C8yTranslateDirective, C8yTranslateModule, C8yTranslatePipe, C8yValidators, CUSTOM, CachedLocaleDictionaryService, CellRendererComponent, CellRendererContext, CellRendererDefDirective, ChangePasswordComponent, ClipboardModule, ClipboardService, ColorInputComponent, ColorService, ColumnDirective, CommonModule, ConditionalTabsOutletComponent, ConfigureCustomColumnComponent, ConfirmModalComponent, ContextRouteComponent, ContextRouteGuard, ContextRouteService, CookieBannerComponent, CopyDashboardDisabledReason, CoreModule, CoreSearchModule, CountdownIntervalComponent, CountdownIntervalModule, CredentialsComponent, CurrentPasswordModalComponent, CustomColumn, DATA_GRID_CONFIGURATION_CONTEXT, DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER, DATA_GRID_CONFIGURATION_STRATEGY, DEFAULT_INTERVAL_STATE, DEFAULT_INTERVAL_VALUE, DEFAULT_INTERVAL_VALUES, DRAWER_ANIMATION_TIME, DashboardChildActionComponent, DashboardChildChange, DashboardChildComponent, DashboardChildTitleComponent, DashboardComponent, DashboardModule, DataGridComponent, DataGridModule, DataGridService, DatapointLibraryValidationErrors, DateContextQueryParamNames, DateFilterMapper, DateFormatService, DatePickerComponent, DatePickerModule, DatePipe, DateTimePickerComponent, DateTimePickerModule, DefaultValidationDirective, DeviceBootstrapRealtimeService, DeviceService, DeviceStatusComponent, DeviceStatusModule, DismissAlertStrategy, DocsModule, DocsService, DrawerModule, DrawerOutletComponent, DrawerService, DropAreaComponent, DropAreaModule, DropdownDirectionDirective, DynamicBulkDetailsResolver, DynamicBulkIIdentifiedResolver, DynamicComponentAlert, DynamicComponentAlertAggregator, DynamicComponentAlertsComponent, DynamicComponentComponent, DynamicComponentErrorStrategy, DynamicComponentModule, DynamicComponentService, DynamicDatapointsResolver, DynamicFormsModule, DynamicManagedObjectResolver, DynamicResolverService, ES_MAX_TIME_MILLISECONDS, EmailsValidatorDirective, EmptyComponent, EmptyStateComponent, EmptyStateContextDirective, EventRealtimeService, ExpandableRowDirective, ExtensionPointForPlugins, ExtensionPointWithoutStateForPlugins, ExtractArrayValidationErrorsPipe, FeatureCacheService, FilePickerComponent, FilePickerFormControlComponent, FilePickerFormControlModule, FilePickerModule, FilesService, FilterInputComponent, FilterMapperFactory, FilterMapperModule, FilterMapperPipe, FilterMapperService, FilterNonArrayValidationErrorsPipe, FilteringActionType, FilteringFormRendererComponent, FilteringFormRendererContext, FilteringFormRendererDefDirective, ForOfDirective, FormGroupComponent, FormsModule, GENERIC_FILE_TYPE, GLOBAL_CONTEXT_AUTO_REFRESH, GainsightService, GenericFileIconPipe, GeoService, GetGroupIconPipe, GlobalConfigService, GridDataSource, GroupFragment, GroupService, GroupedFilterChips, GuideDocsComponent, GuideHrefDirective, HOOK_ACTION, HOOK_ACTION_BAR, HOOK_BREADCRUMB, HOOK_COMPONENTS, HOOK_DOCS, HOOK_DYNAMIC_PROVIDER_CONFIG, HOOK_NAVIGATOR_NODES, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_PREVIEW, HOOK_ROUTE, HOOK_SEARCH, HOOK_STEPPER, HOOK_TABS, HOOK_VERSION, HOOK_WIZARD, HeaderBarComponent, HeaderCellRendererDefDirective, HeaderModule, HeaderService, HelpComponent, HelpModule, HighlightComponent, HookProviderTypes, HumanizeAppNamePipe, HumanizePipe, HumanizeValidationMessagePipe, I18nModule, INTERVAL_OPTIONS, IconDirective, IfAllowedDirective, InjectionType, InputGroupListComponent, InputGroupListContainerDirective, InterAppService, IntervalBasedReload, InventorySearchService, IpRangeInputListComponent, JsonValidationPrettifierDirective, LANGUAGES, LAST_DAY, LAST_HOUR, LAST_MINUTE, LAST_MONTH, LAST_WEEK, LOCALE_PATH, LegacyGridConfigMapperService, LegendFieldWrapper, ListDisplaySwitchComponent, ListDisplaySwitchModule, ListGroupComponent, ListGroupModule, ListItemActionComponent, ListItemBodyComponent, ListItemCheckboxComponent, ListItemCollapseComponent, ListItemComponent, ListItemDragHandleComponent, ListItemFooterComponent, ListItemIconComponent, ListItemRadioComponent, ListItemTimelineComponent, LoadMoreComponent, LoadingComponent, LoginComponent, LoginModule, LoginService, LoginViews, MAX_PAGE_SIZE, MESSAGES_CORE_I18N, ManagedObjectRealtimeService, ManagedObjectType, MapFunctionPipe, MarkdownToHtmlPipe, MaxValidationDirective, MeasurementRealtimeService, MessageBannerService, MessageDirective, MessagesComponent, MinValidationDirective, MissingTranslationCustomHandler, MoNamePipe, ModalComponent, ModalModule, ModalSelectionMode, ModalService, NEEDED_ROLE_FOR_SETUP, NEW_DASHBOARD_ROUTER_STATE_PROP, NULL_VALUE_PLACEHOLDER, NUMBER_FORMAT_REGEXP, NameTransformPipe, NavigatorBottomModule, NavigatorIconComponent, NavigatorModule, NavigatorNode, NavigatorNodeComponent, NavigatorNodeRoot, NavigatorOutletComponent, NavigatorService, NavigatorTopModule, NewPasswordComponent, NumberPipe, OperationBulkRealtimeService, OperationRealtimeService, OperationResultComponent, OptionsService, OutletDirective, PRODUCT_EXPERIENCE_EVENT_SOURCE, PX_ACTIONS, PX_EVENT_NAME, PackageType, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordInputComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, PasswordStrengthValidatorDirective, PatternMessagesService, Permissions, PhoneValidationDirective, PlatformDetailsService, PluginLoadedPipe, PluginsExportScopes, PluginsModule, PluginsResolveService, PluginsService, PopoverConfirmComponent, PreviewService, ProductExperienceDirective, ProductExperienceModule, ProgressBarComponent, PropertiesListComponent, PropertiesListModule, PropertyValueTransformService, ProvidePhoneNumberComponent, ProviderConfigurationComponent, ProviderConfigurationModule, ProviderConfigurationNodeFactory, ProviderConfigurationRouteFactory, ProviderConfigurationService, ProviderDefinitionsService, PushStatus, PushStatusLabels, QuickLinkComponent, QuickLinkModule, RESOLVING_COMPONENT_WAIT_TIME, RadioFilterMapper, RangeComponent, RangeDirective, RangeDisplayComponent, RangeDisplayModule, RealtimeButtonComponent, RealtimeControlComponent, RealtimeMessage, RealtimeModule, RealtimeService, RealtimeSubjectService, RecoverPasswordComponent, RelativeTimePipe, RequiredInputPlaceholderDirective, RouterModule, RouterService, RouterTabsResolver, SETUP_FINISHED_STEP_ID, SHOW_BETA_PREVIEW, SearchComponent, SearchFilters, SearchInputComponent, SearchOutletComponent, SearchResultEmptyComponent, SearchService, SelectComponent, SelectFilterMapper, SelectItemDirective, SelectKeyboardService, SelectLegacyComponent, SelectModalComponent, SelectModalFilterPipe, SelectModalModule, SelectModule, SelectedItemsComponent, SelectedItemsDirective, SendStatus, SendStatusLabels, ServiceRegistry, SetupCompletedComponent, SetupComponent, SetupModule, SetupService, SetupState, SetupStepperFactory, ShortenUserNamePipe, ShouldShowMoPipe, ShowIfFilterPipe, SimpleJsonPathValidatorDirective, SkipLinkDirective, SmsChallengeComponent, StandalonePluginInjector, StateService, Status, StepperModule, StepperOutletComponent, StepperService, Steppers, StrengthValidatorService, StringFilterMapper, StringifyObjectPipe, SupportedApps, TabComponent, TabsModule, TabsOutletComponent, TabsService, TabsetAriaDirective, TenantUiService, TextAreaRowHeightDirective, TextareaAutoresizeDirective, ThemeSwitcherService, TimeIntervalComponent, TimePickerComponent, TimePickerModule, TitleComponent, TitleOutletComponent, TotpAuthComponent, TotpChallengeComponent, TotpSetupComponent, TranslateParserCustom, TranslateService, TranslationLoaderService, TypeaheadComponent, TypeaheadFilterMapper, UiSettingsComponent, UiSettingsModule, UniqueInCollectionByPathValidationDirective, UserEditComponent, UserEditModalComponent, UserEngagementsService, UserMenuItemComponent, UserMenuOutletComponent, UserMenuService, UserModule, UserNameInitialsPipe, UserPreferencesConfigurationStrategy, UserPreferencesService, UserPreferencesStorageInventory, UserPreferencesStorageLocal, UserTotpRevokeComponent, UserTotpSetupComponent, VERSION_MODULE_CONFIG, ValidationPattern, VersionListComponent, VersionModule, VersionService, ViewContext, ViewContextServices, VirtualScrollWindowDirective, VirtualScrollWindowStrategy, VirtualScrollerWrapperComponent, VisibleControlsPipe, WIDGET_TYPE_VALUES, WebSDKVersionFactory, WidgetGlobalAutoRefreshService, WidgetTimeContextActionBarPriority, WidgetTimeContextComponent, WidgetTimeContextDateRangeService, WidgetsDashboardComponent, WizardBodyComponent, WizardComponent, WizardFooterComponent, WizardHeaderComponent, WizardModalService, WizardModule, WizardOutletComponent, WizardService, ZipService, _virtualScrollWindowStrategyFactory, alertOnError, allEntriesAreEqual, asyncValidateArrayElements, colorValidator, deviceAvailabilityIconMap, extraRoutes, fromFactories, fromTrigger, fromTriggerOnce, getActivatedRoute, getAngularLocalesLanguageString, getBasicInputArrayFormFieldConfig, getDictionaryWithTrimmedKeys, getInjectedHooks, globalAutoRefreshLoading, hookAction, hookActionBar, hookBreadcrumb, hookComponent, hookDataGridActionControls, hookDocs, hookDrawer, hookDynamicProviderConfig, hookFilterMapper, hookGeneric, hookNavigator, hookOptions, hookPatternMessages, hookPreview, hookRoute, hookSearch, hookService, hookStepper, hookTab, hookUserMenu, hookVersion, hookWidget, hookWizard, initializeServices, internalApps, isEagerDynamicComponents, isExtensionFactory, isLazyDynamicComponents, isPromise, languagesFactory, loadLocale, localeId, localePathFactory, memoize, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, ratiosByColumnTypes, removeDuplicatesIds, resolveInjectedFactories, retryWithDelay, simpleJsonPathValidator, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, throttle, toObservable, toObservableOfArrays, tooltips, trimTranslationKey, uniqueInCollectionByPathValidator, validateArrayElements, validateInternationalPhoneNumber, viewContextRoutes, wrapperLegendFieldConfig };
36127
36457
  //# sourceMappingURL=c8y-ngx-components.mjs.map