@c8y/ngx-components 1022.8.0 → 1022.9.6

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 (71) hide show
  1. package/alarms/index.d.ts +1 -0
  2. package/alarms/index.d.ts.map +1 -1
  3. package/context-dashboard/context-dashboard.component.d.ts +1 -3
  4. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  5. package/core/core.module.d.ts.map +1 -1
  6. package/core/index.d.ts +1 -0
  7. package/core/index.d.ts.map +1 -1
  8. package/core/preview-feature/feature-cache.service.d.ts +3 -1
  9. package/core/preview-feature/feature-cache.service.d.ts.map +1 -1
  10. package/core/preview-feature/preview-feature-button.component.d.ts +3 -2
  11. package/core/preview-feature/preview-feature-button.component.d.ts.map +1 -1
  12. package/core/preview-feature/preview-feature-query-param.factory.d.ts +24 -0
  13. package/core/preview-feature/preview-feature-query-param.factory.d.ts.map +1 -0
  14. package/core/preview-feature/preview-feature-show-notification.service.d.ts +4 -1
  15. package/core/preview-feature/preview-feature-show-notification.service.d.ts.map +1 -1
  16. package/core/preview-feature/preview-feature.component.d.ts +2 -0
  17. package/core/preview-feature/preview-feature.component.d.ts.map +1 -1
  18. package/core/preview-feature/preview-feature.model.d.ts +1 -1
  19. package/core/preview-feature/preview-feature.model.d.ts.map +1 -1
  20. package/core/preview-feature/preview-feature.providers.d.ts.map +1 -1
  21. package/core/query-param-handler/index.d.ts +5 -0
  22. package/core/query-param-handler/index.d.ts.map +1 -0
  23. package/core/query-param-handler/query-param-bottom-drawer.service.d.ts +48 -0
  24. package/core/query-param-handler/query-param-bottom-drawer.service.d.ts.map +1 -0
  25. package/core/query-param-handler/query-param-handler.service.d.ts +31 -0
  26. package/core/query-param-handler/query-param-handler.service.d.ts.map +1 -0
  27. package/core/query-param-handler/query-param-modal-handler.service.d.ts +79 -0
  28. package/core/query-param-handler/query-param-modal-handler.service.d.ts.map +1 -0
  29. package/datapoint-explorer/view/datapoint-explorer.component.d.ts +3 -2
  30. package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -1
  31. package/datapoint-explorer/view/datapoint-explorer.service.d.ts +2 -0
  32. package/datapoint-explorer/view/datapoint-explorer.service.d.ts.map +1 -1
  33. package/datapoint-explorer/view/send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component.d.ts +24 -0
  34. package/datapoint-explorer/view/send-as-widget-to-dashboard-modal/send-as-widget-to-dashboard-modal.component.d.ts.map +1 -0
  35. package/datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.d.ts +1 -1
  36. package/echart/charts.component.d.ts.map +1 -1
  37. package/echart/services/y-axis.service.d.ts.map +1 -1
  38. package/fesm2022/c8y-ngx-components-alarms.mjs +1 -1
  39. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +4 -20
  40. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +121 -39
  42. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  43. package/fesm2022/c8y-ngx-components-echart.mjs +9 -6
  44. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  45. package/fesm2022/c8y-ngx-components-sensor-phone.mjs +331 -8
  46. package/fesm2022/c8y-ngx-components-sensor-phone.mjs.map +1 -1
  47. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +25 -17
  48. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  49. package/fesm2022/c8y-ngx-components.mjs +415 -99
  50. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  51. package/locales/de.po +29 -3
  52. package/locales/es.po +29 -3
  53. package/locales/fr.po +29 -3
  54. package/locales/ja_JP.po +28 -3
  55. package/locales/ko.po +29 -3
  56. package/locales/locales.pot +17 -3
  57. package/locales/nl.po +29 -3
  58. package/locales/pl.po +29 -3
  59. package/locales/pt_BR.po +29 -3
  60. package/locales/zh_CN.po +29 -3
  61. package/locales/zh_TW.po +29 -3
  62. package/package.json +1 -1
  63. package/sensor-phone/sensor-phone.module.d.ts.map +1 -1
  64. package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts.map +1 -1
  65. package/fesm2022/c8y-ngx-components-query-param-modal-handler.mjs +0 -115
  66. package/fesm2022/c8y-ngx-components-query-param-modal-handler.mjs.map +0 -1
  67. package/query-param-modal-handler/c8y-ngx-components-query-param-modal-handler.d.ts.map +0 -1
  68. package/query-param-modal-handler/index.d.ts +0 -2
  69. package/query-param-modal-handler/index.d.ts.map +0 -1
  70. package/query-param-modal-handler/query-param-modal-handler.service.d.ts +0 -77
  71. package/query-param-modal-handler/query-param-modal-handler.service.d.ts.map +0 -1
@@ -1205,7 +1205,7 @@ class RealtimeSubjectService {
1205
1205
  realtimeSubscription = this.realtime.resubscribe(realtimeSubscription);
1206
1206
  }
1207
1207
  catch (e) {
1208
- console.warn(`Failed to resubscribe to channel: "${channel}" after reconnect.`, e);
1208
+ console.warn('Failed to resubscribe to channel after reconnect.', channel, e);
1209
1209
  observer.error(e);
1210
1210
  }
1211
1211
  });
@@ -11179,11 +11179,11 @@ class AlertOutletComponent extends AlertOutletBase {
11179
11179
  this.alertService.remove(alert);
11180
11180
  }
11181
11181
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AlertOutletComponent, deps: [{ token: 'position', attribute: true }, { token: AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
11182
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AlertOutletComponent, isStandalone: true, selector: "c8y-alert-outlet", host: { properties: { "class.static": "this.isStatic" } }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"alert animated fadeInRightBig m-t-16\"\n data-cy=\"c8y-alert--message\"\n *ngFor=\"let alert of alerts | async\"\n [ngClass]=\"[getClass(alert), isDetailsShow(alert) ? 'expanded' : '']\"\n>\n <button title=\"{{ 'Close' | translate }}\" type=\"button\" class=\"close\" (click)=\"close(alert)\">\n <span aria-hidden=\"true\"><i c8yIcon=\"times\"></i></span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n\n <div *ngIf=\"!isTemplateRef(alert.text); else template(alert.text)\">\n <strong *ngIf=\"!alert.allowHtml\" [textContent]=\"alert.text | translate\" class=\"message\"></strong>\n <strong *ngIf=\"alert.allowHtml\" [innerHTML]=\"alert.text | translate\" class=\"message\"></strong>\n </div>\n <p *ngIf=\"hasDetails(alert) && !isDetailsShow(alert)\" class=\"text-muted m-t-8\">\n <button\n title=\"{{ 'Show details' | translate }}\"\n class=\"btn btn-clean\"\n (click)=\"showDetails(alert)\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n {{ 'Show details' | translate }}\n </button>\n </p>\n <p *ngIf=\"hasDetails(alert) && isDetailsShow(alert)\" class=\"text-muted m-t-8\">\n <button title=\"{{ 'Hide details' | translate }}\" class=\"btn btn-clean\" (click)=\"closeDetails()\">\n <i c8yIcon=\"chevron-up\"></i>\n {{ 'Hide details' | translate }}\n </button>\n </p>\n <div *ngIf=\"isDetailsShow(alert)\">\n <div *ngIf=\"!isTemplateRef(detailDisplayedAlert.contents); else template(alert.detailedData)\">\n <pre><code [textContent]=\"detailDisplayedAlert.contents | translate\"></code></pre>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
11182
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: AlertOutletComponent, isStandalone: true, selector: "c8y-alert-outlet", host: { properties: { "class.static": "this.isStatic" } }, usesInheritance: true, ngImport: i0, template: "<div\n class=\"alert animated fadeInRightBig m-t-16\"\n data-cy=\"c8y-alert--message\"\n *ngFor=\"let alert of alerts | async\"\n [ngClass]=\"[getClass(alert), isDetailsShow(alert) ? 'expanded' : '']\"\n>\n <button\n class=\"close\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"close(alert)\"\n >\n <span\n aria-hidden=\"true\"\n data-cy=\"alert--close-alert-message\"\n >\n <i c8yIcon=\"times\"></i>\n </span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n\n <div *ngIf=\"!isTemplateRef(alert.text); else template(alert.text)\">\n <strong\n class=\"message\"\n *ngIf=\"!alert.allowHtml\"\n [textContent]=\"alert.text | translate\"\n ></strong>\n <strong\n class=\"message\"\n *ngIf=\"alert.allowHtml\"\n [innerHTML]=\"alert.text | translate\"\n ></strong>\n </div>\n <p\n class=\"text-muted m-t-8\"\n *ngIf=\"hasDetails(alert) && !isDetailsShow(alert)\"\n >\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Show details' | translate }}\"\n (click)=\"showDetails(alert)\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n {{ 'Show details' | translate }}\n </button>\n </p>\n <p\n class=\"text-muted m-t-8\"\n *ngIf=\"hasDetails(alert) && isDetailsShow(alert)\"\n >\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Hide details' | translate }}\"\n (click)=\"closeDetails()\"\n >\n <i c8yIcon=\"chevron-up\"></i>\n {{ 'Hide details' | translate }}\n </button>\n </p>\n <div *ngIf=\"isDetailsShow(alert)\">\n <div *ngIf=\"!isTemplateRef(detailDisplayedAlert.contents); else template(alert.detailedData)\">\n <pre><code [textContent]=\"detailDisplayedAlert.contents | translate\"></code></pre>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }] }); }
11183
11183
  }
11184
11184
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: AlertOutletComponent, decorators: [{
11185
11185
  type: Component,
11186
- args: [{ selector: 'c8y-alert-outlet', standalone: true, imports: [NgFor, NgClass, IconDirective, NgIf, C8yTranslatePipe, AsyncPipe], template: "<div\n class=\"alert animated fadeInRightBig m-t-16\"\n data-cy=\"c8y-alert--message\"\n *ngFor=\"let alert of alerts | async\"\n [ngClass]=\"[getClass(alert), isDetailsShow(alert) ? 'expanded' : '']\"\n>\n <button title=\"{{ 'Close' | translate }}\" type=\"button\" class=\"close\" (click)=\"close(alert)\">\n <span aria-hidden=\"true\"><i c8yIcon=\"times\"></i></span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n\n <div *ngIf=\"!isTemplateRef(alert.text); else template(alert.text)\">\n <strong *ngIf=\"!alert.allowHtml\" [textContent]=\"alert.text | translate\" class=\"message\"></strong>\n <strong *ngIf=\"alert.allowHtml\" [innerHTML]=\"alert.text | translate\" class=\"message\"></strong>\n </div>\n <p *ngIf=\"hasDetails(alert) && !isDetailsShow(alert)\" class=\"text-muted m-t-8\">\n <button\n title=\"{{ 'Show details' | translate }}\"\n class=\"btn btn-clean\"\n (click)=\"showDetails(alert)\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n {{ 'Show details' | translate }}\n </button>\n </p>\n <p *ngIf=\"hasDetails(alert) && isDetailsShow(alert)\" class=\"text-muted m-t-8\">\n <button title=\"{{ 'Hide details' | translate }}\" class=\"btn btn-clean\" (click)=\"closeDetails()\">\n <i c8yIcon=\"chevron-up\"></i>\n {{ 'Hide details' | translate }}\n </button>\n </p>\n <div *ngIf=\"isDetailsShow(alert)\">\n <div *ngIf=\"!isTemplateRef(detailDisplayedAlert.contents); else template(alert.detailedData)\">\n <pre><code [textContent]=\"detailDisplayedAlert.contents | translate\"></code></pre>\n </div>\n </div>\n</div>\n" }]
11186
+ args: [{ selector: 'c8y-alert-outlet', standalone: true, imports: [NgFor, NgClass, IconDirective, NgIf, C8yTranslatePipe, AsyncPipe], template: "<div\n class=\"alert animated fadeInRightBig m-t-16\"\n data-cy=\"c8y-alert--message\"\n *ngFor=\"let alert of alerts | async\"\n [ngClass]=\"[getClass(alert), isDetailsShow(alert) ? 'expanded' : '']\"\n>\n <button\n class=\"close\"\n title=\"{{ 'Close' | translate }}\"\n type=\"button\"\n (click)=\"close(alert)\"\n >\n <span\n aria-hidden=\"true\"\n data-cy=\"alert--close-alert-message\"\n >\n <i c8yIcon=\"times\"></i>\n </span>\n <span class=\"sr-only\">{{ 'Close' | translate }}</span>\n </button>\n\n <div *ngIf=\"!isTemplateRef(alert.text); else template(alert.text)\">\n <strong\n class=\"message\"\n *ngIf=\"!alert.allowHtml\"\n [textContent]=\"alert.text | translate\"\n ></strong>\n <strong\n class=\"message\"\n *ngIf=\"alert.allowHtml\"\n [innerHTML]=\"alert.text | translate\"\n ></strong>\n </div>\n <p\n class=\"text-muted m-t-8\"\n *ngIf=\"hasDetails(alert) && !isDetailsShow(alert)\"\n >\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Show details' | translate }}\"\n (click)=\"showDetails(alert)\"\n >\n <i c8yIcon=\"chevron-down\"></i>\n {{ 'Show details' | translate }}\n </button>\n </p>\n <p\n class=\"text-muted m-t-8\"\n *ngIf=\"hasDetails(alert) && isDetailsShow(alert)\"\n >\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Hide details' | translate }}\"\n (click)=\"closeDetails()\"\n >\n <i c8yIcon=\"chevron-up\"></i>\n {{ 'Hide details' | translate }}\n </button>\n </p>\n <div *ngIf=\"isDetailsShow(alert)\">\n <div *ngIf=\"!isTemplateRef(detailDisplayedAlert.contents); else template(alert.detailedData)\">\n <pre><code [textContent]=\"detailDisplayedAlert.contents | translate\"></code></pre>\n </div>\n </div>\n</div>\n" }]
11187
11187
  }], ctorParameters: () => [{ type: undefined, decorators: [{
11188
11188
  type: Attribute,
11189
11189
  args: ['position']
@@ -34931,10 +34931,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
34931
34931
  }] });
34932
34932
 
34933
34933
  class FeatureCacheService {
34934
- constructor(featureService) {
34934
+ constructor(featureService, appState) {
34935
34935
  this.featureService = featureService;
34936
+ this.appState = appState;
34936
34937
  this.refreshTrigger = new BehaviorSubject(undefined);
34937
- this.features$ = this.refreshTrigger.pipe(switchMap(() => this.loadFeatures()), shareReplay(1));
34938
+ this.features$ = this.appState.currentUser.pipe(switchMap(user => {
34939
+ if (!user) {
34940
+ return NEVER;
34941
+ }
34942
+ return this.refreshTrigger.pipe(switchMap(() => this.loadFeatures()));
34943
+ }), shareReplay(1));
34938
34944
  }
34939
34945
  /**
34940
34946
  * Needed for the angularJS implmentation to show/hide some old features.
@@ -34970,13 +34976,13 @@ class FeatureCacheService {
34970
34976
  return [];
34971
34977
  }
34972
34978
  }
34973
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FeatureCacheService, deps: [{ token: i1.FeatureService }], target: i0.ɵɵFactoryTarget.Injectable }); }
34979
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FeatureCacheService, deps: [{ token: i1.FeatureService }, { token: AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
34974
34980
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FeatureCacheService, providedIn: 'root' }); }
34975
34981
  }
34976
34982
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: FeatureCacheService, decorators: [{
34977
34983
  type: Injectable,
34978
34984
  args: [{ providedIn: 'root' }]
34979
- }], ctorParameters: () => [{ type: i1.FeatureService }] });
34985
+ }], ctorParameters: () => [{ type: i1.FeatureService }, { type: AppStateService }] });
34980
34986
 
34981
34987
  const HOOK_PREVIEW = new InjectionToken('HOOK_PREVIEW');
34982
34988
  function hookPreview(preview, options) {
@@ -35098,7 +35104,378 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
35098
35104
  args: [{ providedIn: 'root' }]
35099
35105
  }], ctorParameters: () => [{ type: i0.Injector }, { type: PluginsResolveService }] });
35100
35106
 
35101
- const SHOW_BETA_PREVIEW = 'showPreviewFeature';
35107
+ const SHOW_PREVIEW_FEATURES = 'showPreviewFeatures';
35108
+
35109
+ class PreviewFeatureButtonComponent {
35110
+ constructor() {
35111
+ this.previewService = inject(PreviewService);
35112
+ this.headerService = inject(HeaderService);
35113
+ this.router = inject(Router);
35114
+ this.route = inject(ActivatedRoute);
35115
+ this.destroy$ = new Subject();
35116
+ }
35117
+ async ngOnInit() {
35118
+ this.hasUnseenFeatures$ = this.previewService.hasUnseenFeatures$;
35119
+ this.open$ = this.headerService.rightDrawerOpen$;
35120
+ }
35121
+ async openPreviewFeature() {
35122
+ this.headerService.closeRightDrawer();
35123
+ this.router.navigate([], {
35124
+ relativeTo: this.route,
35125
+ queryParams: { showPreviewFeatures: true },
35126
+ queryParamsHandling: 'merge',
35127
+ replaceUrl: true
35128
+ });
35129
+ }
35130
+ ngOnDestroy() {
35131
+ this.destroy$.next();
35132
+ this.destroy$.complete();
35133
+ }
35134
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35135
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PreviewFeatureButtonComponent, isStandalone: true, selector: "c8y-preview-feature-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 Preview features\n </span>\n <span\n class=\"m-l-8 tag tag--primary\"\n *ngIf=\"hasUnseenFeatures$ | async\"\n >\n {{ 'New' | translate }}\n </span>\n</div>\n<ul class=\"list-unstyled\">\n <li class=\"c8y-right-drawer__item\">\n <small translate>\n Enable or disable experimental features. Your feedback helps us improve functionality before\n final release.\n </small>\n </li>\n <li class=\"c8y-right-drawer__item\">\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Manage preview features' | translate }}\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n (click)=\"openPreviewFeature()\"\n >\n <i class=\"m-t-0 m-b-9 text-14 dlt-c8y-icon-settings\"></i>\n <span translate>Manage preview features</span>\n </button>\n </li>\n</ul>\n", 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"] }] }); }
35136
+ }
35137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureButtonComponent, decorators: [{
35138
+ type: Component,
35139
+ args: [{ selector: 'c8y-preview-feature-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 Preview features\n </span>\n <span\n class=\"m-l-8 tag tag--primary\"\n *ngIf=\"hasUnseenFeatures$ | async\"\n >\n {{ 'New' | translate }}\n </span>\n</div>\n<ul class=\"list-unstyled\">\n <li class=\"c8y-right-drawer__item\">\n <small translate>\n Enable or disable experimental features. Your feedback helps us improve functionality before\n final release.\n </small>\n </li>\n <li class=\"c8y-right-drawer__item\">\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Manage preview features' | translate }}\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n (click)=\"openPreviewFeature()\"\n >\n <i class=\"m-t-0 m-b-9 text-14 dlt-c8y-icon-settings\"></i>\n <span translate>Manage preview features</span>\n </button>\n </li>\n</ul>\n" }]
35140
+ }] });
35141
+
35142
+ class PreviewFeatureDrawerFactory {
35143
+ constructor(options, previewService, permissions) {
35144
+ this.options = options;
35145
+ this.previewService = previewService;
35146
+ this.permissions = permissions;
35147
+ this.drawerItem = {
35148
+ component: PreviewFeatureButtonComponent,
35149
+ position: 'right',
35150
+ priority: 80,
35151
+ id: 'previewFeature'
35152
+ };
35153
+ }
35154
+ get() {
35155
+ return this.shouldShowPreviewFeature$().pipe(distinctUntilChanged(), map(shouldShowPreviewFeature => {
35156
+ if (shouldShowPreviewFeature) {
35157
+ return this.drawerItem;
35158
+ }
35159
+ return [];
35160
+ }));
35161
+ }
35162
+ shouldShowPreviewFeature$() {
35163
+ return combineLatest([
35164
+ this.options.get$('hidePreviewFeature'),
35165
+ this.previewService.getAvailableFeatures$()
35166
+ ]).pipe(map(([hidePreviewFeature, items]) => {
35167
+ const hasItems = items.length > 0;
35168
+ if (!hasItems) {
35169
+ return false;
35170
+ }
35171
+ const hasAdminRole = this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN);
35172
+ if (hidePreviewFeature === undefined) {
35173
+ return hasItems && hasAdminRole;
35174
+ }
35175
+ return !hidePreviewFeature && hasItems && hasAdminRole;
35176
+ }));
35177
+ }
35178
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureDrawerFactory, deps: [{ token: OptionsService }, { token: PreviewService }, { token: Permissions }], target: i0.ɵɵFactoryTarget.Injectable }); }
35179
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureDrawerFactory, providedIn: 'root' }); }
35180
+ }
35181
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureDrawerFactory, decorators: [{
35182
+ type: Injectable,
35183
+ args: [{ providedIn: 'root' }]
35184
+ }], ctorParameters: () => [{ type: OptionsService }, { type: PreviewService }, { type: Permissions }] });
35185
+
35186
+ class PreviewFeatureShowNotification {
35187
+ constructor(previewService, permissions, appState) {
35188
+ this.previewService = previewService;
35189
+ this.permissions = permissions;
35190
+ this.appState = appState;
35191
+ this.shouldShowNotification$ = this.appState.currentUser.pipe(switchMap$1(user => {
35192
+ if (!user) {
35193
+ return of(false);
35194
+ }
35195
+ const hasAdminRole = this.permissions.hasRole(Permissions.ROLE_TENANT_MANAGEMENT_ADMIN);
35196
+ if (!hasAdminRole) {
35197
+ return of(false);
35198
+ }
35199
+ return this.previewService.hasUnseenFeatures$;
35200
+ }));
35201
+ }
35202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureShowNotification, deps: [{ token: PreviewService }, { token: Permissions }, { token: AppStateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35203
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureShowNotification, providedIn: 'root' }); }
35204
+ }
35205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureShowNotification, decorators: [{
35206
+ type: Injectable,
35207
+ args: [{ providedIn: 'root' }]
35208
+ }], ctorParameters: () => [{ type: PreviewService }, { type: Permissions }, { type: AppStateService }] });
35209
+
35210
+ class PluginLoadedPipe {
35211
+ constructor(pluginsResolve) {
35212
+ this.pluginsResolve = pluginsResolve;
35213
+ }
35214
+ transform(pluginName) {
35215
+ if (!pluginName) {
35216
+ return of(false);
35217
+ }
35218
+ return this.pluginsResolve.loadedPluginNames$.pipe(map$2(pluginNames => pluginNames.includes(pluginName)), distinctUntilChanged$1());
35219
+ }
35220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PluginLoadedPipe, deps: [{ token: PluginsResolveService }], target: i0.ɵɵFactoryTarget.Pipe }); }
35221
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: PluginLoadedPipe, isStandalone: true, name: "c8yPluginLoaded" }); }
35222
+ }
35223
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PluginLoadedPipe, decorators: [{
35224
+ type: Pipe,
35225
+ args: [{
35226
+ name: 'c8yPluginLoaded',
35227
+ standalone: true
35228
+ }]
35229
+ }], ctorParameters: () => [{ type: PluginsResolveService }] });
35230
+
35231
+ const HOOK_QUERY_PARAM = new InjectionToken('HOOK_QUERY_PARAM');
35232
+ function hookQueryParam(config, options) {
35233
+ return hookGeneric(config, HOOK_QUERY_PARAM, options);
35234
+ }
35235
+ class QueryParamHandlerService extends ExtensionPointWithoutStateForPlugins {
35236
+ constructor(rootInjector, router, pluginService, activatedRoute) {
35237
+ super(rootInjector, pluginService);
35238
+ this.router = router;
35239
+ this.activatedRoute = activatedRoute;
35240
+ this.items$ = this.setupItemsObservable();
35241
+ combineLatest([this.items$, this.activatedRoute?.queryParamMap || NEVER])
35242
+ .pipe(distinctUntilChanged$1(([prevItems, prevParamsMap], [currItems, currParamsMap]) => {
35243
+ const previousItems = prevItems.map(item => item.queryParam).sort();
35244
+ const currentItems = currItems.map(item => item.queryParam).sort();
35245
+ const itemsUnchanged = JSON.stringify(previousItems) === JSON.stringify(currentItems);
35246
+ const prevParams = {};
35247
+ prevParamsMap.keys.forEach(key => {
35248
+ const value = prevParamsMap.get(key);
35249
+ if (value !== null) {
35250
+ prevParams[key] = value;
35251
+ }
35252
+ });
35253
+ const currParams = {};
35254
+ currParamsMap.keys.forEach(key => {
35255
+ const value = currParamsMap.get(key);
35256
+ if (value !== null) {
35257
+ currParams[key] = value;
35258
+ }
35259
+ });
35260
+ const paramsUnchanged = JSON.stringify(prevParams) === JSON.stringify(currParams);
35261
+ return itemsUnchanged && paramsUnchanged;
35262
+ }), tap$1(([items, params]) => {
35263
+ items.forEach(item => {
35264
+ const paramValue = params.get(item.queryParam);
35265
+ if (paramValue !== null) {
35266
+ runInInjectionContext(item.injector || rootInjector, () => {
35267
+ item.trigger();
35268
+ });
35269
+ }
35270
+ });
35271
+ }))
35272
+ .subscribe();
35273
+ }
35274
+ setupItemsObservable() {
35275
+ return fromTrigger(this.router, this.refresh$, [
35276
+ getInjectedHooks(HOOK_QUERY_PARAM, this.injectors),
35277
+ () => this.factories
35278
+ ]).pipe(distinctUntilChanged$1(), shareReplay$1(1));
35279
+ }
35280
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamHandlerService, deps: [{ token: i0.Injector }, { token: i1$4.Router }, { token: PluginsResolveService }, { token: i1$4.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
35281
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamHandlerService, providedIn: 'root' }); }
35282
+ }
35283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamHandlerService, decorators: [{
35284
+ type: Injectable,
35285
+ args: [{
35286
+ providedIn: 'root'
35287
+ }]
35288
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1$4.Router }, { type: PluginsResolveService }, { type: i1$4.ActivatedRoute, decorators: [{
35289
+ type: Optional
35290
+ }] }] });
35291
+
35292
+ const HOOK_QUERY_PARAM_BOTTOM_DRAWER = new InjectionToken('HOOK_QUERY_PARAM_BOTTOM_DRAWER');
35293
+ function hookQueryParamBottomDrawer(config, options) {
35294
+ return hookGeneric(config, HOOK_QUERY_PARAM_BOTTOM_DRAWER, options);
35295
+ }
35296
+ class QueryParamBottomDrawerStateService extends ExtensionPointWithoutStateForPlugins {
35297
+ constructor(rootInjector, pluginService) {
35298
+ super(rootInjector, pluginService);
35299
+ this.items$ = this.setupItemsObservable();
35300
+ }
35301
+ setupItemsObservable() {
35302
+ return fromTriggerOnce(undefined, this.refresh$, [
35303
+ getInjectedHooks(HOOK_QUERY_PARAM_BOTTOM_DRAWER, this.injectors),
35304
+ () => this.factories
35305
+ ]).pipe(distinctUntilChanged(), shareReplay(1));
35306
+ }
35307
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamBottomDrawerStateService, deps: [{ token: i0.Injector }, { token: PluginsResolveService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35308
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamBottomDrawerStateService, providedIn: 'root' }); }
35309
+ }
35310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamBottomDrawerStateService, decorators: [{
35311
+ type: Injectable,
35312
+ args: [{
35313
+ providedIn: 'root'
35314
+ }]
35315
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: PluginsResolveService }] });
35316
+ class QueryParamBottomDrawerFactory {
35317
+ constructor(queryParamBottomDrawerStateService, bottomDrawerService) {
35318
+ this.queryParamBottomDrawerStateService = queryParamBottomDrawerStateService;
35319
+ this.bottomDrawerService = bottomDrawerService;
35320
+ }
35321
+ get() {
35322
+ return this.queryParamBottomDrawerStateService.items$.pipe(map(items => {
35323
+ return items.map(item => {
35324
+ const config = {
35325
+ queryParam: item.queryParam,
35326
+ trigger: () => {
35327
+ this.handleQueryParamBottomDrawer(item);
35328
+ },
35329
+ injector: item.injector
35330
+ };
35331
+ return config;
35332
+ });
35333
+ }));
35334
+ }
35335
+ async handleQueryParamBottomDrawer(config) {
35336
+ const bottomDrawer = this.bottomDrawerService.openDrawer(config.component, {
35337
+ closeOnNavigation: config.closeOnNavigation,
35338
+ disableClickOutside: config.disableClickOutside
35339
+ });
35340
+ try {
35341
+ const result = await bottomDrawer.instance.shouldClose;
35342
+ if (result) {
35343
+ bottomDrawer.close();
35344
+ }
35345
+ }
35346
+ catch (e) {
35347
+ // intended empty
35348
+ }
35349
+ }
35350
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamBottomDrawerFactory, deps: [{ token: QueryParamBottomDrawerStateService }, { token: BottomDrawerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35351
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamBottomDrawerFactory, providedIn: 'root' }); }
35352
+ }
35353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamBottomDrawerFactory, decorators: [{
35354
+ type: Injectable,
35355
+ args: [{
35356
+ providedIn: 'root'
35357
+ }]
35358
+ }], ctorParameters: () => [{ type: QueryParamBottomDrawerStateService }, { type: BottomDrawerService }] });
35359
+
35360
+ const HOOK_QUERY_PARAM_MODAL = new InjectionToken('HOOK_QUERY_PARAM_MODAL');
35361
+ function hookQueryParamModal(config, options) {
35362
+ return hookGeneric(config, HOOK_QUERY_PARAM_MODAL, options);
35363
+ }
35364
+ /**
35365
+ * Service to manage the display of modals based on URL query parameter.
35366
+ *
35367
+ * This service listens for specific query parameters in the URL and opens corresponding modals when detected.
35368
+ * It automatically cleans up the query parameters from the URL when the modal is closed or query parameter value passed as 'false'.
35369
+ */
35370
+ class QueryParamModalStateService extends ExtensionPointWithoutStateForPlugins {
35371
+ constructor(rootInjector, pluginService) {
35372
+ super(rootInjector, pluginService);
35373
+ this.items$ = this.setupItemsObservable();
35374
+ }
35375
+ setupItemsObservable() {
35376
+ return fromTriggerOnce(undefined, this.refresh$, [
35377
+ getInjectedHooks(HOOK_QUERY_PARAM_MODAL, this.injectors),
35378
+ () => this.factories
35379
+ ]).pipe(distinctUntilChanged(), shareReplay(1));
35380
+ }
35381
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamModalStateService, deps: [{ token: i0.Injector }, { token: PluginsResolveService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35382
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamModalStateService, providedIn: 'root' }); }
35383
+ }
35384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamModalStateService, decorators: [{
35385
+ type: Injectable,
35386
+ args: [{
35387
+ providedIn: 'root'
35388
+ }]
35389
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: PluginsResolveService }] });
35390
+ class QueryParamModalFactory {
35391
+ constructor(queryParamModalStateService, bsModalService, router, activatedRoute) {
35392
+ this.queryParamModalStateService = queryParamModalStateService;
35393
+ this.bsModalService = bsModalService;
35394
+ this.router = router;
35395
+ this.activatedRoute = activatedRoute;
35396
+ this.modalCloseSubscription = null;
35397
+ }
35398
+ get() {
35399
+ return this.queryParamModalStateService.items$.pipe(map(items => {
35400
+ return items.map(item => {
35401
+ const config = {
35402
+ queryParam: item.queryParam,
35403
+ trigger: () => {
35404
+ this.handleQueryParamModal(item);
35405
+ },
35406
+ injector: item.injector
35407
+ };
35408
+ return config;
35409
+ });
35410
+ }));
35411
+ }
35412
+ /**
35413
+ * Handles the display of a modal based on a specific query parameter.
35414
+ *
35415
+ * @param config - Configuration object specifying the query parameter, component, and optional modal settings.
35416
+ * @returns An observable that listens for changes in the query parameter.
35417
+ */
35418
+ handleQueryParamModal(config) {
35419
+ this.showModal(config.component, config.modalConfig);
35420
+ this.modalCloseSubscription = this.bsModalService.onHidden.subscribe(() => {
35421
+ this.removeQueryParam(config.queryParam);
35422
+ this.cleanup();
35423
+ });
35424
+ }
35425
+ /**
35426
+ * Removes the specified query parameter from the URL.
35427
+ *
35428
+ * @param paramKey - The key of the query parameter to remove.
35429
+ */
35430
+ removeQueryParam(paramKey) {
35431
+ const queryParams = {
35432
+ [paramKey]: null
35433
+ };
35434
+ this.router.navigate([], {
35435
+ relativeTo: this.activatedRoute,
35436
+ queryParams,
35437
+ queryParamsHandling: 'merge'
35438
+ });
35439
+ }
35440
+ /**
35441
+ * Displays a modal with the specified component and configuration.
35442
+ *
35443
+ * @param component - The component to display in the modal.
35444
+ * @param modalConfig - Optional settings for the modal appearance and behavior.
35445
+ */
35446
+ showModal(component, modalConfig) {
35447
+ this.bsModalService.show(component, modalConfig);
35448
+ }
35449
+ /**
35450
+ * Cleans up subscriptions related to modal events.
35451
+ * Ensures no memory leaks by unsubscribing from modal close events.
35452
+ */
35453
+ cleanup() {
35454
+ if (this.modalCloseSubscription) {
35455
+ this.modalCloseSubscription.unsubscribe();
35456
+ this.modalCloseSubscription = null;
35457
+ }
35458
+ }
35459
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamModalFactory, deps: [{ token: QueryParamModalStateService }, { token: i1$7.BsModalService }, { token: i1$4.Router }, { token: i1$4.ActivatedRoute, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
35460
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamModalFactory, providedIn: 'root' }); }
35461
+ }
35462
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QueryParamModalFactory, decorators: [{
35463
+ type: Injectable,
35464
+ args: [{
35465
+ providedIn: 'root'
35466
+ }]
35467
+ }], ctorParameters: () => [{ type: QueryParamModalStateService }, { type: i1$7.BsModalService }, { type: i1$4.Router }, { type: i1$4.ActivatedRoute, decorators: [{
35468
+ type: Optional
35469
+ }] }] });
35470
+
35471
+ const QUERY_PARAM_HANDLER_PROVIDERS = [
35472
+ // This will ensure that the QueryParamHandlerService is initialized
35473
+ provideAppInitializer(() => {
35474
+ inject(QueryParamHandlerService);
35475
+ }),
35476
+ hookQueryParam(QueryParamBottomDrawerFactory),
35477
+ hookQueryParam(QueryParamModalFactory)
35478
+ ];
35102
35479
 
35103
35480
  class FeatureStatePipe {
35104
35481
  constructor(previewService) {
@@ -35123,6 +35500,8 @@ class PreviewFeatureComponent {
35123
35500
  this.description$ = new BehaviorSubject('');
35124
35501
  this.previewFeatureService = inject(PreviewService);
35125
35502
  this.markdownToHtmlPipe = inject(MarkdownToHtmlPipe);
35503
+ this.router = inject(Router);
35504
+ this.route = inject(ActivatedRoute);
35126
35505
  this.features$ = this.previewFeatureService.getAvailableFeatures$();
35127
35506
  this.shouldClose = new Promise(resolve => {
35128
35507
  this.resolveClose = resolve;
@@ -35156,6 +35535,19 @@ class PreviewFeatureComponent {
35156
35535
  }
35157
35536
  close() {
35158
35537
  this.resolveClose(true);
35538
+ this.router
35539
+ .navigate([], {
35540
+ relativeTo: this.route,
35541
+ queryParams: { showPreviewFeatures: null },
35542
+ queryParamsHandling: 'merge',
35543
+ replaceUrl: true
35544
+ })
35545
+ .then(() => {
35546
+ // Reload if needed
35547
+ if (this.previewFeatureService.reload$.value) {
35548
+ window.location.reload();
35549
+ }
35550
+ });
35159
35551
  }
35160
35552
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35161
35553
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PreviewFeatureComponent, isStandalone: true, selector: "c8y-preview-feature", 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 Preview features\n </h3>\n </div>\n <p class=\"text-16 m-t-8\">\n {{\n 'Select any feature to view additional details and documentation. Toggle features on or off using the switches.'\n | translate\n }}\n </p>\n\n <p>\n {{\n 'These beta capabilities may change or be removed before final release. We value your feedback. The descriptions for the features below are available only in English.'\n | translate\n }}\n </p>\n</div>\n\n<div class=\"card-block p-0\">\n <div class=\"d-flex fit-h\">\n <div class=\"col-md-4 col-lg-3 p-l-0 p-r-0 sticky-top m-t-0 inner-scroll bg-level-1\">\n <div class=\"nav-tabs nav-tabs-vertical nav-tabs-vertical--wide p-t-0\">\n <div\n [class.active]=\"feature === selectedFeature\"\n class=\"d-flex fit-w a-i-center\"\n *ngFor=\"let feature of features$ | async\"\n >\n <button\n class=\"d-flex gap-4 text-truncate flex-grow min-width-0\"\n title=\"{{ feature.label }}\"\n [ngClass]=\"{\n 'bg-component': feature === selectedFeature,\n 'bg-level-1': feature !== selectedFeature\n }\"\n (click)=\"updateSelectedFeature(feature)\"\n >\n <i\n class=\"m-l-0\"\n [c8yIcon]=\"'science'\"\n ></i>\n <span class=\"text-truncate\">\n {{ feature.label }}\n </span>\n </button>\n <div\n class=\"a-s-stretch d-flex a-i-center separator-bottom p-r-16\"\n [ngClass]=\"{\n 'bg-component': feature === selectedFeature,\n 'bg-level-1': feature !== selectedFeature\n }\"\n >\n <label\n class=\"c8y-switch c8y-switch--inline m-l-auto\"\n title=\"{{ 'Enable or disable' | translate }}\"\n >\n <input\n [attr.aria-label]=\"feature.label\"\n type=\"checkbox\"\n [checked]=\"feature.key | featureState | async\"\n (change)=\"$event.stopPropagation(); onToggle(feature, $event)\"\n />\n <span class=\"slider round\"></span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-md-8 col-lg-9 p-24 inner-scroll markdown-content\"\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: i1$a.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$a.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: ListGroupModule }, { kind: "pipe", type: FeatureStatePipe, name: "featureState" }] }); }
@@ -35165,66 +35557,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
35165
35557
  args: [{ selector: 'c8y-preview-feature', 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 Preview features\n </h3>\n </div>\n <p class=\"text-16 m-t-8\">\n {{\n 'Select any feature to view additional details and documentation. Toggle features on or off using the switches.'\n | translate\n }}\n </p>\n\n <p>\n {{\n 'These beta capabilities may change or be removed before final release. We value your feedback. The descriptions for the features below are available only in English.'\n | translate\n }}\n </p>\n</div>\n\n<div class=\"card-block p-0\">\n <div class=\"d-flex fit-h\">\n <div class=\"col-md-4 col-lg-3 p-l-0 p-r-0 sticky-top m-t-0 inner-scroll bg-level-1\">\n <div class=\"nav-tabs nav-tabs-vertical nav-tabs-vertical--wide p-t-0\">\n <div\n [class.active]=\"feature === selectedFeature\"\n class=\"d-flex fit-w a-i-center\"\n *ngFor=\"let feature of features$ | async\"\n >\n <button\n class=\"d-flex gap-4 text-truncate flex-grow min-width-0\"\n title=\"{{ feature.label }}\"\n [ngClass]=\"{\n 'bg-component': feature === selectedFeature,\n 'bg-level-1': feature !== selectedFeature\n }\"\n (click)=\"updateSelectedFeature(feature)\"\n >\n <i\n class=\"m-l-0\"\n [c8yIcon]=\"'science'\"\n ></i>\n <span class=\"text-truncate\">\n {{ feature.label }}\n </span>\n </button>\n <div\n class=\"a-s-stretch d-flex a-i-center separator-bottom p-r-16\"\n [ngClass]=\"{\n 'bg-component': feature === selectedFeature,\n 'bg-level-1': feature !== selectedFeature\n }\"\n >\n <label\n class=\"c8y-switch c8y-switch--inline m-l-auto\"\n title=\"{{ 'Enable or disable' | translate }}\"\n >\n <input\n [attr.aria-label]=\"feature.label\"\n type=\"checkbox\"\n [checked]=\"feature.key | featureState | async\"\n (change)=\"$event.stopPropagation(); onToggle(feature, $event)\"\n />\n <span class=\"slider round\"></span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"col-md-8 col-lg-9 p-24 inner-scroll markdown-content\"\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" }]
35166
35558
  }], ctorParameters: () => [] });
35167
35559
 
35168
- class PreviewFeatureButtonComponent {
35169
- constructor() {
35170
- this.previewService = inject(PreviewService);
35171
- this.bottomDrawerService = inject(BottomDrawerService);
35172
- this.headerService = inject(HeaderService);
35173
- this.destroy$ = new Subject();
35174
- }
35175
- ngOnInit() {
35176
- this.hasUnseenFeatures$ = this.previewService.hasUnseenFeatures$;
35177
- this.open$ = this.headerService.rightDrawerOpen$;
35178
- }
35179
- async openPreviewFeature() {
35180
- this.headerService.closeRightDrawer();
35181
- const bottomDrawer = this.bottomDrawerService.openDrawer(PreviewFeatureComponent, {
35182
- closeOnNavigation: false,
35183
- disableClickOutside: true
35184
- });
35185
- bottomDrawer.onClosed$.pipe(takeUntil$1(this.destroy$)).subscribe(() => {
35186
- if (this.previewService.reload$.value) {
35187
- window.location.reload();
35188
- }
35189
- });
35190
- try {
35191
- const result = await bottomDrawer.instance.shouldClose;
35192
- if (result) {
35193
- bottomDrawer.close();
35194
- }
35195
- }
35196
- catch (e) {
35197
- // intended empty
35198
- }
35199
- }
35200
- ngOnDestroy() {
35201
- this.destroy$.next();
35202
- this.destroy$.complete();
35203
- }
35204
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.14", type: PreviewFeatureButtonComponent, isStandalone: true, selector: "c8y-preview-feature-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 Preview features\n </span>\n <span\n class=\"m-l-8 tag tag--primary\"\n *ngIf=\"hasUnseenFeatures$ | async\"\n >\n {{ 'New' | translate }}\n </span>\n</div>\n<ul class=\"list-unstyled\">\n <li class=\"c8y-right-drawer__item\">\n <small translate>\n Enable or disable experimental features. Your feedback helps us improve functionality before\n final release.\n </small>\n </li>\n <li class=\"c8y-right-drawer__item\">\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Manage preview features' | translate }}\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n (click)=\"openPreviewFeature()\"\n >\n <i class=\"m-t-0 m-b-9 text-14 dlt-c8y-icon-settings\"></i>\n <span translate>Manage preview features</span>\n </button>\n </li>\n</ul>\n", 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"] }] }); }
35206
- }
35207
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureButtonComponent, decorators: [{
35208
- type: Component,
35209
- args: [{ selector: 'c8y-preview-feature-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 Preview features\n </span>\n <span\n class=\"m-l-8 tag tag--primary\"\n *ngIf=\"hasUnseenFeatures$ | async\"\n >\n {{ 'New' | translate }}\n </span>\n</div>\n<ul class=\"list-unstyled\">\n <li class=\"c8y-right-drawer__item\">\n <small translate>\n Enable or disable experimental features. Your feedback helps us improve functionality before\n final release.\n </small>\n </li>\n <li class=\"c8y-right-drawer__item\">\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Manage preview features' | translate }}\"\n [attr.tabindex]=\"(open$ | async) ? '0' : '-1'\"\n (click)=\"openPreviewFeature()\"\n >\n <i class=\"m-t-0 m-b-9 text-14 dlt-c8y-icon-settings\"></i>\n <span translate>Manage preview features</span>\n </button>\n </li>\n</ul>\n" }]
35210
- }] });
35211
-
35212
- class PreviewFeatureDrawerFactory {
35560
+ class PreviewFeatureQueryParamDrawerFactory {
35213
35561
  constructor(options, previewService, permissions) {
35214
35562
  this.options = options;
35215
35563
  this.previewService = previewService;
35216
35564
  this.permissions = permissions;
35217
- this.drawerItem = {
35218
- component: PreviewFeatureButtonComponent,
35219
- position: 'right',
35220
- priority: 80,
35221
- id: 'previewFeature'
35565
+ this.queryParamConfig = {
35566
+ queryParam: SHOW_PREVIEW_FEATURES,
35567
+ closeOnNavigation: false,
35568
+ disableClickOutside: true,
35569
+ component: PreviewFeatureComponent
35222
35570
  };
35223
35571
  }
35224
35572
  get() {
35225
35573
  return this.shouldShowPreviewFeature$().pipe(distinctUntilChanged(), map(shouldShowPreviewFeature => {
35226
35574
  if (shouldShowPreviewFeature) {
35227
- return this.drawerItem;
35575
+ return this.queryParamConfig;
35228
35576
  }
35229
35577
  return [];
35230
35578
  }));
@@ -35245,30 +35593,18 @@ class PreviewFeatureDrawerFactory {
35245
35593
  return !hidePreviewFeature && hasItems && hasAdminRole;
35246
35594
  }));
35247
35595
  }
35248
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureDrawerFactory, deps: [{ token: OptionsService }, { token: PreviewService }, { token: Permissions }], target: i0.ɵɵFactoryTarget.Injectable }); }
35249
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureDrawerFactory, providedIn: 'root' }); }
35596
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureQueryParamDrawerFactory, deps: [{ token: OptionsService }, { token: PreviewService }, { token: Permissions }], target: i0.ɵɵFactoryTarget.Injectable }); }
35597
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureQueryParamDrawerFactory, providedIn: 'root' }); }
35250
35598
  }
35251
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureDrawerFactory, decorators: [{
35599
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureQueryParamDrawerFactory, decorators: [{
35252
35600
  type: Injectable,
35253
35601
  args: [{ providedIn: 'root' }]
35254
35602
  }], ctorParameters: () => [{ type: OptionsService }, { type: PreviewService }, { type: Permissions }] });
35255
35603
 
35256
- class PreviewFeatureShowNotification {
35257
- constructor(previewService) {
35258
- this.previewService = previewService;
35259
- this.shouldShowNotification$ = this.previewService.hasUnseenFeatures$;
35260
- }
35261
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureShowNotification, deps: [{ token: PreviewService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35262
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureShowNotification, providedIn: 'root' }); }
35263
- }
35264
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PreviewFeatureShowNotification, decorators: [{
35265
- type: Injectable,
35266
- args: [{ providedIn: 'root' }]
35267
- }], ctorParameters: () => [{ type: PreviewService }] });
35268
-
35269
35604
  const PREVIEW_FEATURE_PROVIDERS = [
35270
35605
  hookDrawer(PreviewFeatureDrawerFactory),
35271
- hookService('notificationService', PreviewFeatureShowNotification)
35606
+ hookService('notificationService', PreviewFeatureShowNotification),
35607
+ hookQueryParamBottomDrawer(PreviewFeatureQueryParamDrawerFactory)
35272
35608
  ];
35273
35609
 
35274
35610
  class ChangeIconComponent {
@@ -35347,7 +35683,8 @@ class CoreModule {
35347
35683
  ...UiSettingsModule.providers(),
35348
35684
  ...UserModule.providers(),
35349
35685
  ...VersionModule.providers(),
35350
- ...PREVIEW_FEATURE_PROVIDERS
35686
+ ...PREVIEW_FEATURE_PROVIDERS,
35687
+ ...QUERY_PARAM_HANDLER_PROVIDERS
35351
35688
  ]
35352
35689
  };
35353
35690
  }
@@ -36271,27 +36608,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
36271
36608
  class RealtimeMessage {
36272
36609
  }
36273
36610
 
36274
- class PluginLoadedPipe {
36275
- constructor(pluginsResolve) {
36276
- this.pluginsResolve = pluginsResolve;
36277
- }
36278
- transform(pluginName) {
36279
- if (!pluginName) {
36280
- return of(false);
36281
- }
36282
- return this.pluginsResolve.loadedPluginNames$.pipe(map$2(pluginNames => pluginNames.includes(pluginName)), distinctUntilChanged$1());
36283
- }
36284
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PluginLoadedPipe, deps: [{ token: PluginsResolveService }], target: i0.ɵɵFactoryTarget.Pipe }); }
36285
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: PluginLoadedPipe, isStandalone: true, name: "c8yPluginLoaded" }); }
36286
- }
36287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: PluginLoadedPipe, decorators: [{
36288
- type: Pipe,
36289
- args: [{
36290
- name: 'c8yPluginLoaded',
36291
- standalone: true
36292
- }]
36293
- }], ctorParameters: () => [{ type: PluginsResolveService }] });
36294
-
36295
36611
  /**
36296
36612
  * AssetTypesService is being used to manage a cache of all existing asset types.
36297
36613
  * This service is injected in the AssetOverviewNavigationFactory class, which will trigger
@@ -36509,5 +36825,5 @@ function colorValidator(allowedModes) {
36509
36825
  * Generated bundle index. Do not edit.
36510
36826
  */
36511
36827
 
36512
- 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, AppHrefPipe, AppIconComponent, AppStateService, AppSwitcherComponent, AppSwitcherInlineComponent, AppSwitcherService, ApplicationModule, ApplicationPluginStatus, AssetLinkPipe, AssetPropertyService, 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, ChangeIconComponent, ClipboardModule, ClipboardService, ColorInputComponent, ColorService, ColumnDirective, CommonModule, ConditionalTabsOutletComponent, ConfigureCustomColumnComponent, ConfirmModalComponent, ContextRouteComponent, ContextRouteGuard, ContextRouteService, CookieBannerComponent, CopyDashboardDisabledReason, CoreModule, CoreSearchModule, CountdownIntervalComponent, CountdownIntervalModule, 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_CURRENT_APPLICATION, HOOK_CURRENT_TENANT, HOOK_CURRENT_USER, HOOK_DOCS, HOOK_DYNAMIC_PROVIDER_CONFIG, HOOK_NAVIGATOR_NODES, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_PLUGIN, 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, 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, PREVIEW_FEATURE_PROVIDERS, PRODUCT_EXPERIENCE_EVENT_SOURCE, PX_ACTIONS, PX_EVENT_NAME, PackageType, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordInputComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, PasswordStrengthService, PatternMessagesService, Permissions, PhoneValidationDirective, PlatformDetailsService, PluginLoadedPipe, PluginsExportScopes, PluginsLoaderService, PluginsModule, PluginsResolveService, PluginsService, PopoverConfirmComponent, PreviewFeatureButtonComponent, PreviewFeatureShowNotification, PreviewService, ProductExperienceDirective, ProductExperienceModule, ProgressBarComponent, PropertiesListComponent, PropertiesListModule, PropertyValueTransformService, 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, RelativeTimePipe, RequiredInputPlaceholderDirective, ResolverServerError, 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, SimplifiedAuthService, SkipLinkDirective, StandalonePluginInjector, StateService, Status, StepperModule, StepperOutletComponent, StepperService, Steppers, StringFilterMapper, StringifyObjectPipe, SupportedApps, TabComponent, TabsModule, TabsOutletComponent, TabsService, TabsetAriaDirective, TenantUiService, TextAreaRowHeightDirective, TextareaAutoresizeDirective, ThemeSwitcherService, TimeIntervalComponent, TimePickerComponent, TimePickerModule, TitleComponent, TitleOutletComponent, TotpChallengeComponent, TotpSetupComponent, TranslateParserCustom, TranslateService, TranslationLoaderService, TreeNodeCellRendererComponent, TreeNodeColumn, TreeNodeHeaderCellRendererComponent, 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, hookCurrentApplication, hookCurrentTenant, hookCurrentUser, hookDataGridActionControls, hookDocs, hookDrawer, hookDynamicProviderConfig, hookFilterMapper, hookGeneric, hookNavigator, hookOptions, hookPatternMessages, hookPlugin, hookPreview, hookRoute, hookSearch, hookService, hookStepper, hookTab, hookUserMenu, hookVersion, hookWidget, hookWizard, initializeServices, internalApps, isEagerDynamicComponents, isExtensionFactory, isLazyDynamicComponents, isPromise, languagesFactory, loadLocale, localeId, localePathFactory, memoize, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, provideBootstrapMetadata, ratiosByColumnTypes, removeDuplicatesIds, resolveInjectedFactories, retryWithDelay, simpleJsonPathValidator, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, throttle, toObservable, toObservableOfArrays, tooltips, trimTranslationKey, uniqueInCollectionByPathValidator, validateArrayElements, validateInternationalPhoneNumber, viewContextRoutes, wrapperLegendFieldConfig };
36828
+ 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, AppHrefPipe, AppIconComponent, AppStateService, AppSwitcherComponent, AppSwitcherInlineComponent, AppSwitcherService, ApplicationModule, ApplicationPluginStatus, AssetLinkPipe, AssetPropertyService, 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, ChangeIconComponent, ClipboardModule, ClipboardService, ColorInputComponent, ColorService, ColumnDirective, CommonModule, ConditionalTabsOutletComponent, ConfigureCustomColumnComponent, ConfirmModalComponent, ContextRouteComponent, ContextRouteGuard, ContextRouteService, CookieBannerComponent, CopyDashboardDisabledReason, CoreModule, CoreSearchModule, CountdownIntervalComponent, CountdownIntervalModule, 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_CURRENT_APPLICATION, HOOK_CURRENT_TENANT, HOOK_CURRENT_USER, HOOK_DOCS, HOOK_DYNAMIC_PROVIDER_CONFIG, HOOK_NAVIGATOR_NODES, HOOK_OPTIONS, HOOK_PATTERN_MESSAGES, HOOK_PLUGIN, HOOK_PREVIEW, HOOK_QUERY_PARAM, HOOK_QUERY_PARAM_BOTTOM_DRAWER, HOOK_QUERY_PARAM_MODAL, 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, 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, PREVIEW_FEATURE_PROVIDERS, PRODUCT_EXPERIENCE_EVENT_SOURCE, PX_ACTIONS, PX_EVENT_NAME, PackageType, PasswordCheckListComponent, PasswordConfirm, PasswordConfirmModalComponent, PasswordInputComponent, PasswordService, PasswordStrengthCheckerService, PasswordStrengthComponent, PasswordStrengthService, PatternMessagesService, Permissions, PhoneValidationDirective, PlatformDetailsService, PluginLoadedPipe, PluginsExportScopes, PluginsLoaderService, PluginsModule, PluginsResolveService, PluginsService, PopoverConfirmComponent, PreviewFeatureButtonComponent, PreviewFeatureShowNotification, PreviewService, ProductExperienceDirective, ProductExperienceModule, ProgressBarComponent, PropertiesListComponent, PropertiesListModule, PropertyValueTransformService, ProviderConfigurationComponent, ProviderConfigurationModule, ProviderConfigurationNodeFactory, ProviderConfigurationRouteFactory, ProviderConfigurationService, ProviderDefinitionsService, PushStatus, PushStatusLabels, QUERY_PARAM_HANDLER_PROVIDERS, QueryParamBottomDrawerFactory, QueryParamBottomDrawerStateService, QueryParamHandlerService, QueryParamModalFactory, QueryParamModalStateService, QuickLinkComponent, QuickLinkModule, RESOLVING_COMPONENT_WAIT_TIME, RadioFilterMapper, RangeComponent, RangeDirective, RangeDisplayComponent, RangeDisplayModule, RealtimeButtonComponent, RealtimeControlComponent, RealtimeMessage, RealtimeModule, RealtimeService, RealtimeSubjectService, RelativeTimePipe, RequiredInputPlaceholderDirective, ResolverServerError, RouterModule, RouterService, RouterTabsResolver, SETUP_FINISHED_STEP_ID, SHOW_PREVIEW_FEATURES, 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, SimplifiedAuthService, SkipLinkDirective, StandalonePluginInjector, StateService, Status, StepperModule, StepperOutletComponent, StepperService, Steppers, StringFilterMapper, StringifyObjectPipe, SupportedApps, TabComponent, TabsModule, TabsOutletComponent, TabsService, TabsetAriaDirective, TenantUiService, TextAreaRowHeightDirective, TextareaAutoresizeDirective, ThemeSwitcherService, TimeIntervalComponent, TimePickerComponent, TimePickerModule, TitleComponent, TitleOutletComponent, TotpChallengeComponent, TotpSetupComponent, TranslateParserCustom, TranslateService, TranslationLoaderService, TreeNodeCellRendererComponent, TreeNodeColumn, TreeNodeHeaderCellRendererComponent, 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, hookCurrentApplication, hookCurrentTenant, hookCurrentUser, hookDataGridActionControls, hookDocs, hookDrawer, hookDynamicProviderConfig, hookFilterMapper, hookGeneric, hookNavigator, hookOptions, hookPatternMessages, hookPlugin, hookPreview, hookQueryParam, hookQueryParamBottomDrawer, hookQueryParamModal, hookRoute, hookSearch, hookService, hookStepper, hookTab, hookUserMenu, hookVersion, hookWidget, hookWizard, initializeServices, internalApps, isEagerDynamicComponents, isExtensionFactory, isLazyDynamicComponents, isPromise, languagesFactory, loadLocale, localeId, localePathFactory, memoize, minColumnGridTrackSize, operationStatusClasses, operationStatusIcons, provideBootstrapMetadata, ratiosByColumnTypes, removeDuplicatesIds, resolveInjectedFactories, retryWithDelay, simpleJsonPathValidator, sortByPriority, stateToFactory, statusAlert, statusClasses, statusIcons, throttle, toObservable, toObservableOfArrays, tooltips, trimTranslationKey, uniqueInCollectionByPathValidator, validateArrayElements, validateInternationalPhoneNumber, viewContextRoutes, wrapperLegendFieldConfig };
36513
36829
  //# sourceMappingURL=c8y-ngx-components.mjs.map