@c8y/ngx-components 1021.71.1 → 1021.71.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"beta-preview-drawer.factory.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/beta-preview-drawer.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAiB,UAAU,EAAE,MAAM,MAAM,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;;AAE5D,qBACa,wBAAyB,YAAW,gBAAgB,CAAC,UAAU,CAAC;IASzE,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IAVrB,SAAS,CAAC,UAAU,EAAE,UAAU,CAK9B;gBAGQ,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW;IAGlC,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC;IAY5C,OAAO,CAAC,sBAAsB;yCA1BnB,wBAAwB;6CAAxB,wBAAwB;CA4CpC"}
1
+ {"version":3,"file":"beta-preview-drawer.factory.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/beta-preview-drawer.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAiB,UAAU,EAAE,MAAM,MAAM,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;;AAE5D,qBACa,wBAAyB,YAAW,gBAAgB,CAAC,UAAU,CAAC;IASzE,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,WAAW;IAVrB,SAAS,CAAC,UAAU,EAAE,UAAU,CAK9B;gBAGQ,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW;IAGlC,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC;IAY5C,OAAO,CAAC,sBAAsB;yCA1BnB,wBAAwB;6CAAxB,wBAAwB;CA+CpC"}
@@ -17,7 +17,6 @@ export declare class BetaPreviewComponent {
17
17
  updateDescription(): Promise<void>;
18
18
  isComponent(description: string | Type<any> | Promise<string | Type<any>>): description is Type<any>;
19
19
  onToggle(feature: BetaFeature, event: Event): Promise<void>;
20
- featureKeyExists(key: string): Observable<boolean>;
21
20
  close(): void;
22
21
  static ɵfac: i0.ɵɵFactoryDeclaration<BetaPreviewComponent, never>;
23
22
  static ɵcmp: i0.ɵɵComponentDeclaration<BetaPreviewComponent, "c8y-beta-preview", never, {}, {}, never, never, true, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"beta-preview.component.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/beta-preview.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,IAAI,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAkB,UAAU,EAAE,MAAM,MAAM,CAAC;;AAQnE,qBAQa,oBAAoB;IAC/B,eAAe,EAAE,WAAW,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,YAAY,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CACrD;IAC1B,OAAO,CAAC,YAAY,CAAmD;IAEvE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAC7D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+B;IACnE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8B;IAEjE,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAkC;;IAQhE,QAAQ;IAMR,qBAAqB,CAAC,OAAO,EAAE,WAAW;IAK1C,iBAAiB;IAUvB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAInE,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAIlD,KAAK;yCArDM,oBAAoB;2CAApB,oBAAoB;CAwDhC"}
1
+ {"version":3,"file":"beta-preview.component.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/beta-preview.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,IAAI,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAkB,UAAU,EAAE,MAAM,MAAM,CAAC;;AAQnE,qBAQa,oBAAoB;IAC/B,eAAe,EAAE,WAAW,CAAC;IAC7B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,YAAY,EAAE,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CACrD;IAC1B,OAAO,CAAC,YAAY,CAAmD;IAEvE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0B;IAC7D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+B;IACnE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA8B;IAEjE,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAmD;;IAQjF,QAAQ;IAMR,qBAAqB,CAAC,OAAO,EAAE,WAAW;IAK1C,iBAAiB;IAUvB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAInE,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjE,KAAK;yCAjDM,oBAAoB;2CAApB,oBAAoB;CAoDhC"}
@@ -35,6 +35,10 @@ export declare class PreviewService extends ExtensionPointForPlugins<BetaFeature
35
35
  * This assumes all features are provided via the `items$` observable.
36
36
  */
37
37
  markAllFeaturesAsSeen(): Promise<void>;
38
+ /**
39
+ * Filters the features to only include those that are available by checking the feature toggle API.
40
+ */
41
+ getAvailableFeatures$(): Observable<BetaFeature[]>;
38
42
  /**
39
43
  *
40
44
  * @returns An array of feature names that have been seen by the user. This is retrieved from local storage.
@@ -1 +1 @@
1
- {"version":3,"file":"beta-preview.service.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/beta-preview.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAiC,UAAU,EAAM,MAAM,MAAM,CAAC;AAEtF,OAAO,EACL,kBAAkB,EAClB,eAAe,EAGf,wBAAwB,EAIzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;;AAK3E,eAAO,MAAM,YAAY,+BAAoD,CAAC;AAE9E,wBAAgB,WAAW,CACzB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,EACrC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,4HAGtC;AAED,qBACa,cAAe,SAAQ,wBAAwB,CAAC,WAAW,CAAC;IACvE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAA+B;IAChE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAuC;IACxE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,aAAa,CAAyD;IAC9E,kBAAkB,sBAGhB;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+B;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD,OAAO,CAAC,yBAAyB,CAA0B;gBAE/C,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,qBAAqB;IAIxE,IAAI,KAAK,IAAI,GAAG,CAAC,WAAW,CAAC,CAE5B;IAED;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAuB3C;;;;OAIG;IACG,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B7E;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5C;;;OAGG;IACH,OAAO,CAAC,eAAe;IAKvB,SAAS,CAAC,oBAAoB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;yCA5GhD,cAAc;6CAAd,cAAc;CAuH1B"}
1
+ {"version":3,"file":"beta-preview.service.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/beta-preview.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAiC,UAAU,EAAM,MAAM,MAAM,CAAC;AAEtF,OAAO,EACL,kBAAkB,EAClB,eAAe,EAGf,wBAAwB,EAIzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;;AAK3E,eAAO,MAAM,YAAY,+BAAoD,CAAC;AAE9E,wBAAgB,WAAW,CACzB,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,EACrC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,4HAGtC;AAED,qBACa,cAAe,SAAQ,wBAAwB,CAAC,WAAW,CAAC;IACvE,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAA+B;IAChE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAuC;IACxE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA4B;IAC9D,OAAO,CAAC,aAAa,CAAyD;IAC9E,kBAAkB,sBAGhB;IACF,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+B;IACnE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0B;IAEzD,OAAO,CAAC,yBAAyB,CAA0B;gBAE/C,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,qBAAqB;IAIxE,IAAI,KAAK,IAAI,GAAG,CAAC,WAAW,CAAC,CAE5B;IAED;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAuB3C;;;;OAIG;IACG,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B7E;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5C;;OAEG;IACH,qBAAqB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;IAgBlD;;;OAGG;IACH,OAAO,CAAC,eAAe;IAKvB,SAAS,CAAC,oBAAoB,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;yCA/HhD,cAAc;6CAAd,cAAc;CA0I1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"feature-cache.service.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/feature-cache.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAmC,UAAU,EAAE,MAAM,MAAM,CAAC;;AAEnE,qBACa,mBAAmB;IAMlB,OAAO,CAAC,cAAc;IALlC,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,SAAS,CAGf;gBACkB,cAAc,EAAE,cAAc;IAElD;;;OAGG;IACH,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrD;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAI/C,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IASjD,iBAAiB,IAAI,IAAI;YAIX,YAAY;yCAtCf,mBAAmB;6CAAnB,mBAAmB;CA0C/B"}
1
+ {"version":3,"file":"feature-cache.service.d.ts","sourceRoot":"","sources":["../../../core/beta-feature/feature-cache.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAmC,UAAU,EAAE,MAAM,MAAM,CAAC;;AAEnE,qBACa,mBAAmB;IAMlB,OAAO,CAAC,cAAc;IALlC,OAAO,CAAC,cAAc,CAAwC;IAC9D,OAAO,CAAC,SAAS,CAGf;gBACkB,cAAc,EAAE,cAAc;IAElD;;;OAGG;IACH,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrD;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAI/C,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IASjD,iBAAiB,IAAI,IAAI;YAIX,YAAY;yCAtCf,mBAAmB;6CAAnB,mBAAmB;CA+C/B"}
@@ -30,7 +30,10 @@ export class BetaPreviewDrawerFactory {
30
30
  }));
31
31
  }
32
32
  shouldShowBetaPreview$() {
33
- return combineLatest([this.options.get$('hideBetaPreview'), this.previewService.items$]).pipe(map(([hideBetaPreview, items]) => {
33
+ return combineLatest([
34
+ this.options.get$('hideBetaPreview'),
35
+ this.previewService.getAvailableFeatures$()
36
+ ]).pipe(map(([hideBetaPreview, items]) => {
34
37
  const hasItems = items.length > 0;
35
38
  if (!hasItems) {
36
39
  return false;
@@ -49,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
49
52
  type: Injectable,
50
53
  args: [{ providedIn: 'root' }]
51
54
  }], ctorParameters: () => [{ type: i1.OptionsService }, { type: i2.PreviewService }, { type: i3.Permissions }] });
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LWRyYXdlci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9iZXRhLWZlYXR1cmUvYmV0YS1wcmV2aWV3LWRyYXdlci5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7O0FBRzVELE1BQU0sT0FBTyx3QkFBd0I7SUFRbkMsWUFDVSxPQUF1QixFQUN2QixjQUE4QixFQUM5QixXQUF3QjtRQUZ4QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFWeEIsZUFBVSxHQUFlO1lBQ2pDLFNBQVMsRUFBRSwwQkFBMEI7WUFDckMsUUFBUSxFQUFFLE9BQU87WUFDakIsUUFBUSxFQUFFLEVBQUU7WUFDWixFQUFFLEVBQUUsYUFBYTtTQUNsQixDQUFDO0lBTUMsQ0FBQztJQUVKLEdBQUc7UUFDRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDdkMsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDMUIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDekIsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzNGLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBRXhGLElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLFFBQVEsSUFBSSxZQUFZLENBQUM7WUFDbEMsQ0FBQztZQUVELE9BQU8sQ0FBQyxlQUFlLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0EzQ1Usd0JBQXdCO21IQUF4Qix3QkFBd0IsY0FEWCxNQUFNOzs0RkFDbkIsd0JBQXdCO2tCQURwQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV4dGVuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9jb21tb24vZXh0ZW5zaW9uLWhvb2tzJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBEcmF3ZXJJdGVtIH0gZnJvbSAnLi4vZHJhd2VyL2RyYXdlci5tb2RlbCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmV0YVByZXZpZXdCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2JldGEtcHJldmlldy1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9iZXRhLXByZXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9ucyB9IGZyb20gJy4uL2NvbW1vbi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBCZXRhUHJldmlld0RyYXdlckZhY3RvcnkgaW1wbGVtZW50cyBFeHRlbnNpb25GYWN0b3J5PERyYXdlckl0ZW0+IHtcbiAgcHJvdGVjdGVkIGRyYXdlckl0ZW06IERyYXdlckl0ZW0gPSB7XG4gICAgY29tcG9uZW50OiBCZXRhUHJldmlld0J1dHRvbkNvbXBvbmVudCxcbiAgICBwb3NpdGlvbjogJ3JpZ2h0JyxcbiAgICBwcmlvcml0eTogODAsXG4gICAgaWQ6ICdiZXRhUHJldmlldydcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJldmlld1NlcnZpY2U6IFByZXZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zXG4gICkge31cblxuICBnZXQoKTogT2JzZXJ2YWJsZTxEcmF3ZXJJdGVtW10gfCBEcmF3ZXJJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkU2hvd0JldGFQcmV2aWV3JCgpLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKHNob3VsZFNob3dCZXRhUHJldmlldyA9PiB7XG4gICAgICAgIGlmIChzaG91bGRTaG93QmV0YVByZXZpZXcpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3ZXJJdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2hvd0JldGFQcmV2aWV3JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5vcHRpb25zLmdldCQoJ2hpZGVCZXRhUHJldmlldycpLCB0aGlzLnByZXZpZXdTZXJ2aWNlLml0ZW1zJF0pLnBpcGUoXG4gICAgICBtYXAoKFtoaWRlQmV0YVByZXZpZXcsIGl0ZW1zXSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNJdGVtcyA9IGl0ZW1zLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmICghaGFzSXRlbXMpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBoYXNBZG1pblJvbGUgPSB0aGlzLnBlcm1pc3Npb25zLmhhc1JvbGUoUGVybWlzc2lvbnMuUk9MRV9URU5BTlRfTUFOQUdFTUVOVF9BRE1JTik7XG5cbiAgICAgICAgaWYgKGhpZGVCZXRhUHJldmlldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIGhhc0l0ZW1zICYmIGhhc0FkbWluUm9sZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhaGlkZUJldGFQcmV2aWV3ICYmIGhhc0l0ZW1zICYmIGhhc0FkbWluUm9sZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LWRyYXdlci5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9iZXRhLWZlYXR1cmUvYmV0YS1wcmV2aWV3LWRyYXdlci5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNELE9BQU8sRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7O0FBRzVELE1BQU0sT0FBTyx3QkFBd0I7SUFRbkMsWUFDVSxPQUF1QixFQUN2QixjQUE4QixFQUM5QixXQUF3QjtRQUZ4QixZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFWeEIsZUFBVSxHQUFlO1lBQ2pDLFNBQVMsRUFBRSwwQkFBMEI7WUFDckMsUUFBUSxFQUFFLE9BQU87WUFDakIsUUFBUSxFQUFFLEVBQUU7WUFDWixFQUFFLEVBQUUsYUFBYTtTQUNsQixDQUFDO0lBTUMsQ0FBQztJQUVKLEdBQUc7UUFDRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDdkMsb0JBQW9CLEVBQUUsRUFDdEIsR0FBRyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDMUIsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDekIsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxhQUFhLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7WUFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsRUFBRTtTQUM1QyxDQUFDLENBQUMsSUFBSSxDQUNMLEdBQUcsQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNkLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBRXhGLElBQUksZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLFFBQVEsSUFBSSxZQUFZLENBQUM7WUFDbEMsQ0FBQztZQUVELE9BQU8sQ0FBQyxlQUFlLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0E5Q1Usd0JBQXdCO21IQUF4Qix3QkFBd0IsY0FEWCxNQUFNOzs0RkFDbkIsd0JBQXdCO2tCQURwQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV4dGVuc2lvbkZhY3RvcnkgfSBmcm9tICcuLi9jb21tb24vZXh0ZW5zaW9uLWhvb2tzJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL29wdGlvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBEcmF3ZXJJdGVtIH0gZnJvbSAnLi4vZHJhd2VyL2RyYXdlci5tb2RlbCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmV0YVByZXZpZXdCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2JldGEtcHJldmlldy1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9iZXRhLXByZXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9ucyB9IGZyb20gJy4uL2NvbW1vbi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBCZXRhUHJldmlld0RyYXdlckZhY3RvcnkgaW1wbGVtZW50cyBFeHRlbnNpb25GYWN0b3J5PERyYXdlckl0ZW0+IHtcbiAgcHJvdGVjdGVkIGRyYXdlckl0ZW06IERyYXdlckl0ZW0gPSB7XG4gICAgY29tcG9uZW50OiBCZXRhUHJldmlld0J1dHRvbkNvbXBvbmVudCxcbiAgICBwb3NpdGlvbjogJ3JpZ2h0JyxcbiAgICBwcmlvcml0eTogODAsXG4gICAgaWQ6ICdiZXRhUHJldmlldydcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG9wdGlvbnM6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJldmlld1NlcnZpY2U6IFByZXZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zXG4gICkge31cblxuICBnZXQoKTogT2JzZXJ2YWJsZTxEcmF3ZXJJdGVtW10gfCBEcmF3ZXJJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvdWxkU2hvd0JldGFQcmV2aWV3JCgpLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKHNob3VsZFNob3dCZXRhUHJldmlldyA9PiB7XG4gICAgICAgIGlmIChzaG91bGRTaG93QmV0YVByZXZpZXcpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kcmF3ZXJJdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2hvd0JldGFQcmV2aWV3JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm9wdGlvbnMuZ2V0JCgnaGlkZUJldGFQcmV2aWV3JyksXG4gICAgICB0aGlzLnByZXZpZXdTZXJ2aWNlLmdldEF2YWlsYWJsZUZlYXR1cmVzJCgpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2hpZGVCZXRhUHJldmlldywgaXRlbXNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0l0ZW1zID0gaXRlbXMubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKCFoYXNJdGVtcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc0FkbWluUm9sZSA9IHRoaXMucGVybWlzc2lvbnMuaGFzUm9sZShQZXJtaXNzaW9ucy5ST0xFX1RFTkFOVF9NQU5BR0VNRU5UX0FETUlOKTtcblxuICAgICAgICBpZiAoaGlkZUJldGFQcmV2aWV3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gaGFzSXRlbXMgJiYgaGFzQWRtaW5Sb2xlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICFoaWRlQmV0YVByZXZpZXcgJiYgaGFzSXRlbXMgJiYgaGFzQWRtaW5Sb2xlO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -17,7 +17,7 @@ export class BetaPreviewComponent {
17
17
  this.betaPreviewService = inject(PreviewService);
18
18
  this.featureCacheService = inject(FeatureCacheService);
19
19
  this.markdownToHtmlPipe = inject(MarkdownToHtmlPipe);
20
- this.features$ = this.betaPreviewService.items$;
20
+ this.features$ = this.betaPreviewService.getAvailableFeatures$();
21
21
  this.shouldClose = new Promise(resolve => {
22
22
  this.resolveClose = resolve;
23
23
  });
@@ -48,17 +48,14 @@ export class BetaPreviewComponent {
48
48
  const isChecked = event.target.checked;
49
49
  await this.betaPreviewService.setFeatureActiveState(feature.key, isChecked);
50
50
  }
51
- featureKeyExists(key) {
52
- return this.featureCacheService.featureExists(key);
53
- }
54
51
  close() {
55
52
  this.resolveClose(true);
56
53
  }
57
54
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
58
- 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: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: ListGroupModule }, { kind: "pipe", type: FeatureStatePipe, name: "featureState" }] }); }
55
+ 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 <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 </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: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: i4.C8yTranslatePipe, name: "translate" }, { kind: "ngmodule", type: ListGroupModule }, { kind: "pipe", type: FeatureStatePipe, name: "featureState" }] }); }
59
56
  }
60
57
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewComponent, decorators: [{
61
58
  type: Component,
62
- 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" }]
59
+ 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 <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 </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" }]
63
60
  }], ctorParameters: () => [] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYmV0YS1mZWF0dXJlL2JldGEtcHJldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2JldGEtZmVhdHVyZS9iZXRhLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBVTlELE1BQU0sT0FBTyxvQkFBb0I7SUFhL0I7UUFWQSxpQkFBWSxHQUNWLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBR1QsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRWpFLGNBQVMsR0FBOEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUdwRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksT0FBTyxDQUFVLE9BQU8sQ0FBQyxFQUFFO1lBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN0RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsT0FBb0I7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDL0IsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxXQUE2RDtRQUN2RSxPQUFPLFdBQVcsWUFBWSxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBb0IsRUFBRSxLQUFZO1FBQy9DLE1BQU0sU0FBUyxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLE9BQU8sQ0FBQztRQUM3RCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFXO1FBQzFCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQzsrR0F2RFUsb0JBQW9CO21HQUFwQixvQkFBb0IsdUdBRnBCLENBQUMsa0JBQWtCLENBQUMsMEJDaEJqQywrN0dBMEdBLDRDRDNGWSxPQUFPLG1IQUFFLElBQUksd0ZBQUUsU0FBUyw2Q0FBRSxZQUFZLCtuQkFBRSxlQUFlLDBCQUFFLGdCQUFnQjs7NEZBR3hFLG9CQUFvQjtrQkFSaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGNBQ2pCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsYUFDekUsQ0FBQyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZXRhRmVhdHVyZSB9IGZyb20gJy4vYmV0YS1wcmV2aWV3Lm1vZGVsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE1hcmtkb3duVG9IdG1sUGlwZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBMaXN0R3JvdXBNb2R1bGUgfSBmcm9tICcuLi9saXN0LWdyb3VwJztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9iZXRhLXByZXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBGZWF0dXJlU3RhdGVQaXBlIH0gZnJvbSAnLi9mZWF0dXJlLXN0YXRlLnBpcGUnO1xuaW1wb3J0IHsgRmVhdHVyZUNhY2hlU2VydmljZSB9IGZyb20gJy4vZmVhdHVyZS1jYWNoZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJldGEtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9iZXRhLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb250ZW50cycgfSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nRm9yT2YsIE5nSWYsIEFzeW5jUGlwZSwgQ29tbW9uTW9kdWxlLCBMaXN0R3JvdXBNb2R1bGUsIEZlYXR1cmVTdGF0ZVBpcGVdLFxuICBwcm92aWRlcnM6IFtNYXJrZG93blRvSHRtbFBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIEJldGFQcmV2aWV3Q29tcG9uZW50IHtcbiAgc2VsZWN0ZWRGZWF0dXJlOiBCZXRhRmVhdHVyZTtcbiAgc2hvdWxkQ2xvc2U6IFByb21pc2U8Ym9vbGVhbj47XG4gIGRlc2NyaXB0aW9uJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IFR5cGU8YW55PiB8IFByb21pc2U8c3RyaW5nIHwgVHlwZTxhbnk+Pj4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBwcml2YXRlIHJlc29sdmVDbG9zZSE6ICh2YWx1ZTogYm9vbGVhbiB8IFByb21pc2VMaWtlPGJvb2xlYW4+KSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYmV0YVByZXZpZXdTZXJ2aWNlID0gaW5qZWN0KFByZXZpZXdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlQ2FjaGVTZXJ2aWNlID0gaW5qZWN0KEZlYXR1cmVDYWNoZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcmtkb3duVG9IdG1sUGlwZSA9IGluamVjdChNYXJrZG93blRvSHRtbFBpcGUpO1xuXG4gIGZlYXR1cmVzJDogT2JzZXJ2YWJsZTxCZXRhRmVhdHVyZVtdPiA9IHRoaXMuYmV0YVByZXZpZXdTZXJ2aWNlLml0ZW1zJDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNob3VsZENsb3NlID0gbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLnJlc29sdmVDbG9zZSA9IHJlc29sdmU7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBhd2FpdCB0aGlzLmJldGFQcmV2aWV3U2VydmljZS5tYXJrQWxsRmVhdHVyZXNBc1NlZW4oKTtcbiAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZmVhdHVyZXMkKTtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRmVhdHVyZShmZWF0dXJlc1swXSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVTZWxlY3RlZEZlYXR1cmUoZmVhdHVyZTogQmV0YUZlYXR1cmUpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZSA9IGZlYXR1cmU7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVEZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGVzY3JpcHRpb24oKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBhd2FpdCB0aGlzLnNlbGVjdGVkRmVhdHVyZT8uZGVzY3JpcHRpb24oKTtcbiAgICBpZiAoIXRoaXMuaXNDb21wb25lbnQoZGVzY3JpcHRpb24pKSB7XG4gICAgICBjb25zdCBodG1sID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5tYXJrZG93blRvSHRtbFBpcGUudHJhbnNmb3JtKGRlc2NyaXB0aW9uKSk7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uJC5uZXh0KGh0bWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uJC5uZXh0KGRlc2NyaXB0aW9uKTtcbiAgICB9XG4gIH1cblxuICBpc0NvbXBvbmVudChkZXNjcmlwdGlvbjogc3RyaW5nIHwgVHlwZTxhbnk+IHwgUHJvbWlzZTxzdHJpbmcgfCBUeXBlPGFueT4+KSB7XG4gICAgcmV0dXJuIGRlc2NyaXB0aW9uIGluc3RhbmNlb2YgRnVuY3Rpb247XG4gIH1cblxuICBhc3luYyBvblRvZ2dsZShmZWF0dXJlOiBCZXRhRmVhdHVyZSwgZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNDaGVja2VkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkO1xuICAgIGF3YWl0IHRoaXMuYmV0YVByZXZpZXdTZXJ2aWNlLnNldEZlYXR1cmVBY3RpdmVTdGF0ZShmZWF0dXJlLmtleSwgaXNDaGVja2VkKTtcbiAgfVxuXG4gIGZlYXR1cmVLZXlFeGlzdHMoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlLmZlYXR1cmVFeGlzdHMoa2V5KTtcbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMucmVzb2x2ZUNsb3NlKHRydWUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZC1ibG9jayBzZXBhcmF0b3ItYm90dG9tIGJnLWNvbXBvbmVudCB0ZXh0LWNlbnRlciBmbGV4LW5vLXNocmluayBwLTI0XCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZml0LXcgYS1pLWNlbnRlciBqLWMtY2VudGVyXCI+XG4gICAgPGlcbiAgICAgIGNsYXNzPVwiaWNvbi0yNCBtLXItOFwiXG4gICAgICBbYzh5SWNvbl09XCInc2NpZW5jZSdcIlxuICAgID48L2k+XG4gICAgPGgzXG4gICAgICBjbGFzcz1cIm0tMFwiXG4gICAgICB0cmFuc2xhdGVcbiAgICA+XG4gICAgICBCZXRhIGZlYXR1cmVzIHByZXZpZXdcbiAgICA8L2gzPlxuICA8L2Rpdj5cbiAgPHAgY2xhc3M9XCJ0ZXh0LTE2IG0tdC04XCI+XG4gICAge3tcbiAgICAgICdTZWxlY3QgYW55IGZlYXR1cmUgdG8gdmlldyBhZGRpdGlvbmFsIGRldGFpbHMgYW5kIGRvY3VtZW50YXRpb24uIFRvZ2dsZSBmZWF0dXJlcyBvbiBvciBvZmYgdXNpbmcgdGhlIHN3aXRjaGVzLidcbiAgICAgICAgfCB0cmFuc2xhdGVcbiAgICB9fVxuICA8L3A+XG5cbiAgPHA+XG4gICAge3tcbiAgICAgICdUaGVzZSBiZXRhIGNhcGFiaWxpdGllcyBtYXkgY2hhbmdlIG9yIGJlIHJlbW92ZWQgYmVmb3JlIGZpbmFsIHJlbGVhc2UuIFdlIHZhbHVlIHlvdXIgZmVlZGJhY2suIFRoZSBkZXNjcmlwdGlvbnMgZm9yIHRoZSBmZWF0dXJlcyBiZWxvdyBhcmUgYXZhaWxhYmxlIG9ubHkgaW4gRW5nbGlzaC4nXG4gICAgICAgIHwgdHJhbnNsYXRlXG4gICAgfX1cbiAgPC9wPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHAtMFwiPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZpdC1oXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC1sZy0zIHAtbC0wIHAtci0wIHN0aWNreS10b3AgbS10LTAgaW5uZXItc2Nyb2xsIGJnLWxldmVsLTFcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJuYXYtdGFicyBuYXYtdGFicy12ZXJ0aWNhbCBuYXYtdGFicy12ZXJ0aWNhbC0td2lkZSBwLXQtMFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJmZWF0dXJlID09PSBzZWxlY3RlZEZlYXR1cmVcIlxuICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZpdC13IGEtaS1jZW50ZXJcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBmZWF0dXJlIG9mIGZlYXR1cmVzJCB8IGFzeW5jXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmZWF0dXJlLmtleSA/IChmZWF0dXJlS2V5RXhpc3RzKGZlYXR1cmUua2V5KSB8IGFzeW5jKSA6IHRydWVcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTQgdGV4dC10cnVuY2F0ZSBmbGV4LWdyb3dcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7IGZlYXR1cmUubGFiZWwgfX1cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2JnLWNvbXBvbmVudCc6IGZlYXR1cmUgPT09IHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAnYmctbGV2ZWwtMSc6IGZlYXR1cmUgIT09IHNlbGVjdGVkRmVhdHVyZVxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGVkRmVhdHVyZShmZWF0dXJlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtLWwtMFwiXG4gICAgICAgICAgICAgICAgW2M4eUljb25dPVwiJ3NjaWVuY2UnXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAge3sgZmVhdHVyZS5sYWJlbCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiYS1zLXN0cmV0Y2ggZC1mbGV4IGEtaS1jZW50ZXIgc2VwYXJhdG9yLWJvdHRvbSBwLXItMTZcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ2JnLWNvbXBvbmVudCc6IGZlYXR1cmUgPT09IHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAnYmctbGV2ZWwtMSc6IGZlYXR1cmUgIT09IHNlbGVjdGVkRmVhdHVyZVxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjOHktc3dpdGNoIGM4eS1zd2l0Y2gtLWlubGluZSBtLWwtYXV0b1wiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRW5hYmxlIG9yIGRpc2FibGUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJmZWF0dXJlLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJmZWF0dXJlLmtleSB8IGZlYXR1cmVTdGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvblRvZ2dsZShmZWF0dXJlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpZGVyIHJvdW5kXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNvbC1tZC04IGNvbC1sZy05IHAtMjQgaW5uZXItc2Nyb2xsXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRGZWF0dXJlXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cInRhZyB0YWctLXByaW1hcnkgaDRcIj5cbiAgICAgICAge3sgJ0ZlYXR1cmUgcHJldmlldycgfCB0cmFuc2xhdGUgfX0g4oCUIHt7IHNlbGVjdGVkRmVhdHVyZS5sYWJlbCB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGRpdiAqbmdJZj1cImlzQ29tcG9uZW50KGRlc2NyaXB0aW9uJC52YWx1ZSk7IGVsc2Ugc3RyaW5nRGVzY3JpcHRpb25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJkZXNjcmlwdGlvbiQudmFsdWVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgY2FyZC1mb290ZXIgcC0yNCBzZXBhcmF0b3JcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICB0aXRsZT1cInt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgPlxuICAgIHt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzdHJpbmdEZXNjcmlwdGlvbj5cbiAgPHAgW2lubmVySFRNTF09XCJkZXNjcmlwdGlvbiQudmFsdWVcIj48L3A+XG48L25nLXRlbXBsYXRlPlxuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvYmV0YS1mZWF0dXJlL2JldGEtcHJldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2JldGEtZmVhdHVyZS9iZXRhLXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7O0FBVTlELE1BQU0sT0FBTyxvQkFBb0I7SUFhL0I7UUFWQSxpQkFBWSxHQUNWLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBR1QsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2xELHVCQUFrQixHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRWpFLGNBQVMsR0FBOEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFHckYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBVSxPQUFPLENBQUMsRUFBRTtZQUNoRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQW9CO1FBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUI7UUFDckIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsV0FBNkQ7UUFDdkUsT0FBTyxXQUFXLFlBQVksUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQW9CLEVBQUUsS0FBWTtRQUMvQyxNQUFNLFNBQVMsR0FBSSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxPQUFPLENBQUM7UUFDN0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQzsrR0FuRFUsb0JBQW9CO21HQUFwQixvQkFBb0IsdUdBRnBCLENBQUMsa0JBQWtCLENBQUMsMEJDaEJqQyw2dkdBd0dBLDRDRHpGWSxPQUFPLG1IQUFFLElBQUksd0ZBQUUsU0FBUyw2Q0FBRSxZQUFZLCtuQkFBRSxlQUFlLDBCQUFFLGdCQUFnQjs7NEZBR3hFLG9CQUFvQjtrQkFSaEMsU0FBUzsrQkFDRSxrQkFBa0IsUUFFdEIsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGNBQ2pCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsYUFDekUsQ0FBQyxrQkFBa0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZXRhRmVhdHVyZSB9IGZyb20gJy4vYmV0YS1wcmV2aWV3Lm1vZGVsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE1hcmtkb3duVG9IdG1sUGlwZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBMaXN0R3JvdXBNb2R1bGUgfSBmcm9tICcuLi9saXN0LWdyb3VwJztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9iZXRhLXByZXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBGZWF0dXJlU3RhdGVQaXBlIH0gZnJvbSAnLi9mZWF0dXJlLXN0YXRlLnBpcGUnO1xuaW1wb3J0IHsgRmVhdHVyZUNhY2hlU2VydmljZSB9IGZyb20gJy4vZmVhdHVyZS1jYWNoZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJldGEtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9iZXRhLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnZC1jb250ZW50cycgfSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nRm9yT2YsIE5nSWYsIEFzeW5jUGlwZSwgQ29tbW9uTW9kdWxlLCBMaXN0R3JvdXBNb2R1bGUsIEZlYXR1cmVTdGF0ZVBpcGVdLFxuICBwcm92aWRlcnM6IFtNYXJrZG93blRvSHRtbFBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIEJldGFQcmV2aWV3Q29tcG9uZW50IHtcbiAgc2VsZWN0ZWRGZWF0dXJlOiBCZXRhRmVhdHVyZTtcbiAgc2hvdWxkQ2xvc2U6IFByb21pc2U8Ym9vbGVhbj47XG4gIGRlc2NyaXB0aW9uJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IFR5cGU8YW55PiB8IFByb21pc2U8c3RyaW5nIHwgVHlwZTxhbnk+Pj4gPVxuICAgIG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBwcml2YXRlIHJlc29sdmVDbG9zZSE6ICh2YWx1ZTogYm9vbGVhbiB8IFByb21pc2VMaWtlPGJvb2xlYW4+KSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYmV0YVByZXZpZXdTZXJ2aWNlID0gaW5qZWN0KFByZXZpZXdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlQ2FjaGVTZXJ2aWNlID0gaW5qZWN0KEZlYXR1cmVDYWNoZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcmtkb3duVG9IdG1sUGlwZSA9IGluamVjdChNYXJrZG93blRvSHRtbFBpcGUpO1xuXG4gIGZlYXR1cmVzJDogT2JzZXJ2YWJsZTxCZXRhRmVhdHVyZVtdPiA9IHRoaXMuYmV0YVByZXZpZXdTZXJ2aWNlLmdldEF2YWlsYWJsZUZlYXR1cmVzJCgpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2hvdWxkQ2xvc2UgPSBuZXcgUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+IHtcbiAgICAgIHRoaXMucmVzb2x2ZUNsb3NlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIGF3YWl0IHRoaXMuYmV0YVByZXZpZXdTZXJ2aWNlLm1hcmtBbGxGZWF0dXJlc0FzU2VlbigpO1xuICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5mZWF0dXJlcyQpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRGZWF0dXJlKGZlYXR1cmVzWzBdKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVNlbGVjdGVkRmVhdHVyZShmZWF0dXJlOiBCZXRhRmVhdHVyZSkge1xuICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlID0gZmVhdHVyZTtcbiAgICBhd2FpdCB0aGlzLnVwZGF0ZURlc2NyaXB0aW9uKCk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVEZXNjcmlwdGlvbigpIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGF3YWl0IHRoaXMuc2VsZWN0ZWRGZWF0dXJlPy5kZXNjcmlwdGlvbigpO1xuICAgIGlmICghdGhpcy5pc0NvbXBvbmVudChkZXNjcmlwdGlvbikpIHtcbiAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm1hcmtkb3duVG9IdG1sUGlwZS50cmFuc2Zvcm0oZGVzY3JpcHRpb24pKTtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24kLm5leHQoaHRtbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24kLm5leHQoZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29tcG9uZW50KGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBUeXBlPGFueT4gfCBQcm9taXNlPHN0cmluZyB8IFR5cGU8YW55Pj4pIHtcbiAgICByZXR1cm4gZGVzY3JpcHRpb24gaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgfVxuXG4gIGFzeW5jIG9uVG9nZ2xlKGZlYXR1cmU6IEJldGFGZWF0dXJlLCBldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgYXdhaXQgdGhpcy5iZXRhUHJldmlld1NlcnZpY2Uuc2V0RmVhdHVyZUFjdGl2ZVN0YXRlKGZlYXR1cmUua2V5LCBpc0NoZWNrZWQpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5yZXNvbHZlQ2xvc2UodHJ1ZSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHNlcGFyYXRvci1ib3R0b20gYmctY29tcG9uZW50IHRleHQtY2VudGVyIGZsZXgtbm8tc2hyaW5rIHAtMjRcIj5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBmaXQtdyBhLWktY2VudGVyIGotYy1jZW50ZXJcIj5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJpY29uLTI0IG0tci04XCJcbiAgICAgIFtjOHlJY29uXT1cIidzY2llbmNlJ1wiXG4gICAgPjwvaT5cbiAgICA8aDNcbiAgICAgIGNsYXNzPVwibS0wXCJcbiAgICAgIHRyYW5zbGF0ZVxuICAgID5cbiAgICAgIEJldGEgZmVhdHVyZXMgcHJldmlld1xuICAgIDwvaDM+XG4gIDwvZGl2PlxuICA8cCBjbGFzcz1cInRleHQtMTYgbS10LThcIj5cbiAgICB7e1xuICAgICAgJ1NlbGVjdCBhbnkgZmVhdHVyZSB0byB2aWV3IGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgZG9jdW1lbnRhdGlvbi4gVG9nZ2xlIGZlYXR1cmVzIG9uIG9yIG9mZiB1c2luZyB0aGUgc3dpdGNoZXMuJ1xuICAgICAgICB8IHRyYW5zbGF0ZVxuICAgIH19XG4gIDwvcD5cblxuICA8cD5cbiAgICB7e1xuICAgICAgJ1RoZXNlIGJldGEgY2FwYWJpbGl0aWVzIG1heSBjaGFuZ2Ugb3IgYmUgcmVtb3ZlZCBiZWZvcmUgZmluYWwgcmVsZWFzZS4gV2UgdmFsdWUgeW91ciBmZWVkYmFjay4gVGhlIGRlc2NyaXB0aW9ucyBmb3IgdGhlIGZlYXR1cmVzIGJlbG93IGFyZSBhdmFpbGFibGUgb25seSBpbiBFbmdsaXNoLidcbiAgICAgICAgfCB0cmFuc2xhdGVcbiAgICB9fVxuICA8L3A+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImNhcmQtYmxvY2sgcC0wXCI+XG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggZml0LWhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgY29sLWxnLTMgcC1sLTAgcC1yLTAgc3RpY2t5LXRvcCBtLXQtMCBpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5hdi10YWJzIG5hdi10YWJzLXZlcnRpY2FsIG5hdi10YWJzLXZlcnRpY2FsLS13aWRlIHAtdC0wXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImZlYXR1cmUgPT09IHNlbGVjdGVkRmVhdHVyZVwiXG4gICAgICAgICAgY2xhc3M9XCJkLWZsZXggZml0LXcgYS1pLWNlbnRlclwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGZlYXR1cmUgb2YgZmVhdHVyZXMkIHwgYXN5bmNcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZ2FwLTQgdGV4dC10cnVuY2F0ZSBmbGV4LWdyb3dcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBmZWF0dXJlLmxhYmVsIH19XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2JnLWNvbXBvbmVudCc6IGZlYXR1cmUgPT09IHNlbGVjdGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgJ2JnLWxldmVsLTEnOiBmZWF0dXJlICE9PSBzZWxlY3RlZEZlYXR1cmVcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGVkRmVhdHVyZShmZWF0dXJlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLWwtMFwiXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cIidzY2llbmNlJ1wiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgZmVhdHVyZS5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYS1zLXN0cmV0Y2ggZC1mbGV4IGEtaS1jZW50ZXIgc2VwYXJhdG9yLWJvdHRvbSBwLXItMTZcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnYmctY29tcG9uZW50JzogZmVhdHVyZSA9PT0gc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgICAgICAgICAnYmctbGV2ZWwtMSc6IGZlYXR1cmUgIT09IHNlbGVjdGVkRmVhdHVyZVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwiYzh5LXN3aXRjaCBjOHktc3dpdGNoLS1pbmxpbmUgbS1sLWF1dG9cIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdFbmFibGUgb3IgZGlzYWJsZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImZlYXR1cmUubGFiZWxcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZmVhdHVyZS5rZXkgfCBmZWF0dXJlU3RhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG9uVG9nZ2xlKGZlYXR1cmUsICRldmVudClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNsaWRlciByb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImNvbC1tZC04IGNvbC1sZy05IHAtMjQgaW5uZXItc2Nyb2xsXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRGZWF0dXJlXCJcbiAgICA+XG4gICAgICA8c3BhbiBjbGFzcz1cInRhZyB0YWctLXByaW1hcnkgaDRcIj5cbiAgICAgICAge3sgJ0ZlYXR1cmUgcHJldmlldycgfCB0cmFuc2xhdGUgfX0g4oCUIHt7IHNlbGVjdGVkRmVhdHVyZS5sYWJlbCB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGRpdiAqbmdJZj1cImlzQ29tcG9uZW50KGRlc2NyaXB0aW9uJC52YWx1ZSk7IGVsc2Ugc3RyaW5nRGVzY3JpcHRpb25cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJkZXNjcmlwdGlvbiQudmFsdWVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgY2FyZC1mb290ZXIgcC0yNCBzZXBhcmF0b3JcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICB0aXRsZT1cInt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIChjbGljayk9XCJjbG9zZSgpXCJcbiAgPlxuICAgIHt7ICdDbG9zZScgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNzdHJpbmdEZXNjcmlwdGlvbj5cbiAgPHAgW2lubmVySFRNTF09XCJkZXNjcmlwdGlvbiQudmFsdWVcIj48L3A+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -19,7 +19,7 @@ export class PreviewService extends ExtensionPointForPlugins {
19
19
  this.reload$ = new BehaviorSubject(false);
20
20
  this.LOCAL_STORAGE_KEY = 'c8y_beta_features_seen';
21
21
  this.seenFeatures$ = new BehaviorSubject(this.getSeenFeatures());
22
- this.hasUnseenFeatures$ = combineLatest([this.items$, this.seenFeatures$]).pipe(map(([features, seen]) => features.some(feature => !seen.includes(feature.label))), distinctUntilChanged());
22
+ this.hasUnseenFeatures$ = combineLatest([this.getAvailableFeatures$(), this.seenFeatures$]).pipe(map(([features, seen]) => features.some(feature => !seen.includes(feature.label))), distinctUntilChanged());
23
23
  this.featureService = inject(FeatureService);
24
24
  this.featureCacheService = inject(FeatureCacheService);
25
25
  this.optionsService = inject(OptionsService);
@@ -89,6 +89,18 @@ export class PreviewService extends ExtensionPointForPlugins {
89
89
  localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(featureNames));
90
90
  this.seenFeatures$.next(featureNames);
91
91
  }
92
+ /**
93
+ * Filters the features to only include those that are available by checking the feature toggle API.
94
+ */
95
+ getAvailableFeatures$() {
96
+ return this.items$.pipe(switchMap(features => {
97
+ return combineLatest(features.map(feat => feat.key
98
+ ? this.featureCacheService
99
+ .featureExists(feat.key)
100
+ .pipe(map(exists => (exists ? feat : false)))
101
+ : of(feat))).pipe(map(features => features.filter(Boolean)));
102
+ }));
103
+ }
92
104
  /**
93
105
  *
94
106
  * @returns An array of feature names that have been seen by the user. This is retrieved from local storage.
@@ -111,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
111
123
  type: Injectable,
112
124
  args: [{ providedIn: 'root' }]
113
125
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.PluginsResolveService }] });
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2JldGEtZmVhdHVyZS9iZXRhLXByZXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUdMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUUzRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWdCLGNBQWMsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQXFDLEVBQ3JDLE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUdELE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQXFDO0lBZXZFLFlBQVksWUFBc0IsRUFBRSxhQUFvQztRQUN0RSxLQUFLLENBQUMsWUFBWSxF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RUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1RCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGVBQWU7UUFDckIsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRSxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFUyxvQkFBb0I7UUFDNUIsT0FBTyxlQUFlLENBQWMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUQsZ0JBQWdCLENBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDM0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDOytHQXRIVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBHZW5lcmljSG9va09wdGlvbnMsXG4gIEdlbmVyaWNIb29rVHlwZSxcbiAgaG9va0dlbmVyaWMsXG4gIGdldEluamVjdGVkSG9va3MsXG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBzdGF0ZVRvRmFjdG9yeSxcbiAgc29ydEJ5UHJpb3JpdHlcbn0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBCZXRhRmVhdHVyZSB9IGZyb20gJy4vYmV0YS1wcmV2aWV3Lm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBGZWF0dXJlQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9mZWF0dXJlLWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEhPT0tfUFJFVklFVyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCZXRhRmVhdHVyZVtdPignSE9PS19QUkVWSUVXJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBob29rUHJldmlldyhcbiAgcHJldmlldzogR2VuZXJpY0hvb2tUeXBlPEJldGFGZWF0dXJlPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxCZXRhRmVhdHVyZT4ocHJldmlldywgSE9PS19QUkVWSUVXLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3U2VydmljZSBleHRlbmRzIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2luczxCZXRhRmVhdHVyZT4ge1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4gPSB0aGlzLnNldHVwSXRlbXNPYnNlcnZhYmxlKCk7XG4gIHJlbG9hZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IExPQ0FMX1NUT1JBR0VfS0VZID0gJ2M4eV9iZXRhX2ZlYXR1cmVzX3NlZW4nO1xuICBwcml2YXRlIHNlZW5GZWF0dXJlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPih0aGlzLmdldFNlZW5GZWF0dXJlcygpKTtcbiAgaGFzVW5zZWVuRmVhdHVyZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5pdGVtcyQsIHRoaXMuc2VlbkZlYXR1cmVzJF0pLnBpcGUoXG4gICAgbWFwKChbZmVhdHVyZXMsIHNlZW5dKSA9PiBmZWF0dXJlcy5zb21lKGZlYXR1cmUgPT4gIXNlZW4uaW5jbHVkZXMoZmVhdHVyZS5sYWJlbCkpKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmVhdHVyZVNlcnZpY2UgPSBpbmplY3QoRmVhdHVyZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZlYXR1cmVDYWNoZVNlcnZpY2UgPSBpbmplY3QoRmVhdHVyZUNhY2hlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uc1NlcnZpY2UgPSBpbmplY3QoT3B0aW9uc1NlcnZpY2UpO1xuXG4gIHByaXZhdGUgdG9nZ2xlZEZlYXR1cmVzV2l0aFJlbG9hZDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7IC8vIHRyYWNrIGZlYXR1cmVzIHdpdGggc2V0dGluZ3MucmVsb2FkID0gdHJ1ZVxuXG4gIGNvbnN0cnVjdG9yKHJvb3RJbmplY3RvcjogSW5qZWN0b3IsIHBsdWdpblNlcnZpY2U6IFBsdWdpbnNSZXNvbHZlU2VydmljZSkge1xuICAgIHN1cGVyKHJvb3RJbmplY3RvciwgcGx1Z2luU2VydmljZSk7XG4gIH1cblxuICBnZXQgc3RhdGUoKTogU2V0PEJldGFGZWF0dXJlPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLlxuICAgKiBAcGFyYW0ga2V5IFRoZSB1bmlxdWUga2V5IGZvciB0aGUgZmVhdHVyZS5cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxib29sZWFuPiByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBmZWF0dXJlLlxuICAgKi9cbiAgZ2V0U3RhdGUkKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmVhdHVyZXMgPT5cbiAgICAgICAgdGhpcy5vcHRpb25zU2VydmljZS5nZXQkKCdlbmFibGVBbGxCZXRhRmVhdHVyZXMnKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChlbmFibGVBbGxCZXRhRmVhdHVyZXMgPT4ge1xuICAgICAgICAgICAgaWYgKGVuYWJsZUFsbEJldGFGZWF0dXJlcykge1xuICAgICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYua2V5ID09PSBrZXkpO1xuICAgICAgICAgICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmVhdHVyZSB3aXRoIGtleSBcIiR7a2V5fVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZlYXR1cmUuYWN0aXZlJCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmVhdHVyZS5hY3RpdmUkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmVhdHVyZUNhY2hlU2VydmljZS5nZXRGZWF0dXJlU3RhdGUoa2V5KS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHN0YXRlIG9mIGEgc3BlY2lmaWMgZmVhdHVyZS5cbiAgICogQHBhcmFtIGtleSBUaGUgdW5pcXVlIGtleSBvciBsYWJlbCBmb3IgdGhlIGZlYXR1cmUuIExhYmVsIGlzIHVzZWQgdG8gZmluZCB0aGUgY3VzdG9tIGZlYXR1cmVzLlxuICAgKiBAcmV0dXJucyBQcm9taXNlPHZvaWQ+IGFmdGVyIHRvZ2dsaW5nIHRoZSBzdGF0ZS5cbiAgICovXG4gIGFzeW5jIHNldEZlYXR1cmVBY3RpdmVTdGF0ZShrZXk6IHN0cmluZywgdG9nZ2xlVmFsdWU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaXRlbXMkKTtcbiAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXMuZmluZChmID0+IGYua2V5ID09PSBrZXkpIHx8IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmxhYmVsID09PSBrZXkpO1xuXG4gICAgaWYgKCFmZWF0dXJlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZlYXR1cmUgd2l0aCBrZXkgXCIke2tleX1cIiBkb2VzIG5vdCBleGlzdC5gKTtcbiAgICB9XG5cbiAgICBpZiAoZmVhdHVyZS5vblRvZ2dsZSkge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZlYXR1cmUub25Ub2dnbGUodG9nZ2xlVmFsdWUpO1xuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHRvZ2dsZSBmZWF0dXJlIHdpdGgga2V5IFwiJHtrZXl9XCIuYCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmVhdHVyZVRvVXBkYXRlID0geyBrZXk6IGZlYXR1cmUua2V5LCBhY3RpdmU6IHRvZ2dsZVZhbHVlIH07XG4gICAgYXdhaXQgdGhpcy5mZWF0dXJlU2VydmljZS51cGRhdGVGZWF0dXJlKGZlYXR1cmVUb1VwZGF0ZSk7XG4gICAgYXdhaXQgdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlLnJlc2V0RmVhdHVyZVN0YXRlKCk7XG5cbiAgICBpZiAoZmVhdHVyZS5zZXR0aW5ncz8ucmVsb2FkKSB7XG4gICAgICBpZiAodGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlZEZlYXR1cmVzV2l0aFJlbG9hZC5kZWxldGUoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9nZ2xlZEZlYXR1cmVzV2l0aFJlbG9hZC5hZGQoa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlbG9hZCQubmV4dCh0aGlzLnRvZ2dsZWRGZWF0dXJlc1dpdGhSZWxvYWQuc2l6ZSA+IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIGFsbCBmZWF0dXJlcyBhcyBzZWVuIGJ5IHRoZSB1c2VyIGFuZCB1cGRhdGVzIHRoZSBsb2NhbCBzdG9yYWdlLlxuICAgKiBUaGlzIGFzc3VtZXMgYWxsIGZlYXR1cmVzIGFyZSBwcm92aWRlZCB2aWEgdGhlIGBpdGVtcyRgIG9ic2VydmFibGUuXG4gICAqL1xuICBhc3luYyBtYXJrQWxsRmVhdHVyZXNBc1NlZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLml0ZW1zJCk7XG4gICAgY29uc3QgZmVhdHVyZU5hbWVzID0gZmVhdHVyZXMubWFwKGZlYXR1cmUgPT4gZmVhdHVyZS5sYWJlbCk7XG5cbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkxPQ0FMX1NUT1JBR0VfS0VZLCBKU09OLnN0cmluZ2lmeShmZWF0dXJlTmFtZXMpKTtcbiAgICB0aGlzLnNlZW5GZWF0dXJlcyQubmV4dChmZWF0dXJlTmFtZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGZlYXR1cmUgbmFtZXMgdGhhdCBoYXZlIGJlZW4gc2VlbiBieSB0aGUgdXNlci4gVGhpcyBpcyByZXRyaWV2ZWQgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWVuRmVhdHVyZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlZW5GZWF0dXJlcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuTE9DQUxfU1RPUkFHRV9LRVkpO1xuICAgIHJldHVybiBzZWVuRmVhdHVyZXMgPyBKU09OLnBhcnNlKHNlZW5GZWF0dXJlcykgOiBbXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXR1cEl0ZW1zT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPEJldGFGZWF0dXJlW10+IHtcbiAgICByZXR1cm4gZnJvbVRyaWdnZXJPbmNlPEJldGFGZWF0dXJlPih1bmRlZmluZWQsIHRoaXMucmVmcmVzaCQsIFtcbiAgICAgIGdldEluamVjdGVkSG9va3M8QmV0YUZlYXR1cmU+KEhPT0tfUFJFVklFVywgdGhpcy5pbmplY3RvcnMpLFxuICAgICAgKCkgPT4gdGhpcy5mYWN0b3JpZXMsXG4gICAgICBzdGF0ZVRvRmFjdG9yeSh0aGlzLnN0YXRlJClcbiAgICBdKS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcChmZWF0dXJlcyA9PiBzb3J0QnlQcmlvcml0eShmZWF0dXJlcykpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuICB9XG59XG4iXX0=
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmV0YS1wcmV2aWV3LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2JldGEtZmVhdHVyZS9iZXRhLXByZXZpZXcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkYsT0FBTyxFQUdMLFdBQVcsRUFDWCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixjQUFjLEVBQ2QsY0FBYyxFQUNmLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQUUzRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQWdCLGNBQWMsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQXFDLEVBQ3JDLE9BQXFDO0lBRXJDLE9BQU8sV0FBVyxDQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUdELE1BQU0sT0FBTyxjQUFlLFNBQVEsd0JBQXFDO0lBZXZFLFlBQVksWUFBc0IsRUFBRSxhQUFvQztRQUN0RSxLQUFLLENBQUMsWUFBWSxF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QUM7SUFFUyxvQkFBb0I7UUFDNUIsT0FBTyxlQUFlLENBQWMsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUQsZ0JBQWdCLENBQWMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDM0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDNUIsQ0FBQyxDQUFDLElBQUksQ0FDTCxvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDekMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDOytHQXpJVSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBHZW5lcmljSG9va09wdGlvbnMsXG4gIEdlbmVyaWNIb29rVHlwZSxcbiAgaG9va0dlbmVyaWMsXG4gIGdldEluamVjdGVkSG9va3MsXG4gIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2lucyxcbiAgZnJvbVRyaWdnZXJPbmNlLFxuICBzdGF0ZVRvRmFjdG9yeSxcbiAgc29ydEJ5UHJpb3JpdHlcbn0gZnJvbSAnLi4vY29tbW9uL2V4dGVuc2lvbi1ob29rcyc7XG5pbXBvcnQgeyBCZXRhRmVhdHVyZSB9IGZyb20gJy4vYmV0YS1wcmV2aWV3Lm1vZGVsJztcbmltcG9ydCB7IFBsdWdpbnNSZXNvbHZlU2VydmljZSB9IGZyb20gJy4uL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmVhdHVyZVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBGZWF0dXJlQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi9mZWF0dXJlLWNhY2hlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IEhPT0tfUFJFVklFVyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCZXRhRmVhdHVyZVtdPignSE9PS19QUkVWSUVXJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBob29rUHJldmlldyhcbiAgcHJldmlldzogR2VuZXJpY0hvb2tUeXBlPEJldGFGZWF0dXJlPixcbiAgb3B0aW9ucz86IFBhcnRpYWw8R2VuZXJpY0hvb2tPcHRpb25zPlxuKSB7XG4gIHJldHVybiBob29rR2VuZXJpYzxCZXRhRmVhdHVyZT4ocHJldmlldywgSE9PS19QUkVWSUVXLCBvcHRpb25zKTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQcmV2aWV3U2VydmljZSBleHRlbmRzIEV4dGVuc2lvblBvaW50Rm9yUGx1Z2luczxCZXRhRmVhdHVyZT4ge1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4gPSB0aGlzLnNldHVwSXRlbXNPYnNlcnZhYmxlKCk7XG4gIHJlbG9hZCQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IExPQ0FMX1NUT1JBR0VfS0VZID0gJ2M4eV9iZXRhX2ZlYXR1cmVzX3NlZW4nO1xuICBwcml2YXRlIHNlZW5GZWF0dXJlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPih0aGlzLmdldFNlZW5GZWF0dXJlcygpKTtcbiAgaGFzVW5zZWVuRmVhdHVyZXMkID0gY29tYmluZUxhdGVzdChbdGhpcy5nZXRBdmFpbGFibGVGZWF0dXJlcyQoKSwgdGhpcy5zZWVuRmVhdHVyZXMkXSkucGlwZShcbiAgICBtYXAoKFtmZWF0dXJlcywgc2Vlbl0pID0+IGZlYXR1cmVzLnNvbWUoZmVhdHVyZSA9PiAhc2Vlbi5pbmNsdWRlcyhmZWF0dXJlLmxhYmVsKSkpLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmZWF0dXJlU2VydmljZSA9IGluamVjdChGZWF0dXJlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmVhdHVyZUNhY2hlU2VydmljZSA9IGluamVjdChGZWF0dXJlQ2FjaGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zU2VydmljZSA9IGluamVjdChPcHRpb25zU2VydmljZSk7XG5cbiAgcHJpdmF0ZSB0b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKTsgLy8gdHJhY2sgZmVhdHVyZXMgd2l0aCBzZXR0aW5ncy5yZWxvYWQgPSB0cnVlXG5cbiAgY29uc3RydWN0b3Iocm9vdEluamVjdG9yOiBJbmplY3RvciwgcGx1Z2luU2VydmljZTogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlKSB7XG4gICAgc3VwZXIocm9vdEluamVjdG9yLCBwbHVnaW5TZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpOiBTZXQ8QmV0YUZlYXR1cmU+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGF0ZSBvZiBhIHNwZWNpZmljIGZlYXR1cmUuXG4gICAqIEBwYXJhbSBrZXkgVGhlIHVuaXF1ZSBrZXkgZm9yIHRoZSBmZWF0dXJlLlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGJvb2xlYW4+IHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGZlYXR1cmUuXG4gICAqL1xuICBnZXRTdGF0ZSQoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtcyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChmZWF0dXJlcyA9PlxuICAgICAgICB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCQoJ2VuYWJsZUFsbEJldGFGZWF0dXJlcycpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGVuYWJsZUFsbEJldGFGZWF0dXJlcyA9PiB7XG4gICAgICAgICAgICBpZiAoZW5hYmxlQWxsQmV0YUZlYXR1cmVzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gICAgICAgICAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZWF0dXJlIHdpdGgga2V5IFwiJHtrZXl9XCIgZG9lcyBub3QgZXhpc3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmVhdHVyZS5hY3RpdmUkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmZWF0dXJlLmFjdGl2ZSQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlLmdldEZlYXR1cmVTdGF0ZShrZXkpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgc3RhdGUgb2YgYSBzcGVjaWZpYyBmZWF0dXJlLlxuICAgKiBAcGFyYW0ga2V5IFRoZSB1bmlxdWUga2V5IG9yIGxhYmVsIGZvciB0aGUgZmVhdHVyZS4gTGFiZWwgaXMgdXNlZCB0byBmaW5kIHRoZSBjdXN0b20gZmVhdHVyZXMuXG4gICAqIEByZXR1cm5zIFByb21pc2U8dm9pZD4gYWZ0ZXIgdG9nZ2xpbmcgdGhlIHN0YXRlLlxuICAgKi9cbiAgYXN5bmMgc2V0RmVhdHVyZUFjdGl2ZVN0YXRlKGtleTogc3RyaW5nLCB0b2dnbGVWYWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5pdGVtcyQpO1xuICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSkgfHwgZmVhdHVyZXMuZmluZChmID0+IGYubGFiZWwgPT09IGtleSk7XG5cbiAgICBpZiAoIWZlYXR1cmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmVhdHVyZSB3aXRoIGtleSBcIiR7a2V5fVwiIGRvZXMgbm90IGV4aXN0LmApO1xuICAgIH1cblxuICAgIGlmIChmZWF0dXJlLm9uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgZmVhdHVyZS5vblRvZ2dsZSh0b2dnbGVWYWx1ZSk7XG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdG9nZ2xlIGZlYXR1cmUgd2l0aCBrZXkgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmZWF0dXJlVG9VcGRhdGUgPSB7IGtleTogZmVhdHVyZS5rZXksIGFjdGl2ZTogdG9nZ2xlVmFsdWUgfTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVTZXJ2aWNlLnVwZGF0ZUZlYXR1cmUoZmVhdHVyZVRvVXBkYXRlKTtcbiAgICBhd2FpdCB0aGlzLmZlYXR1cmVDYWNoZVNlcnZpY2UucmVzZXRGZWF0dXJlU3RhdGUoKTtcblxuICAgIGlmIChmZWF0dXJlLnNldHRpbmdzPy5yZWxvYWQpIHtcbiAgICAgIGlmICh0aGlzLnRvZ2dsZWRGZWF0dXJlc1dpdGhSZWxvYWQuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmRlbGV0ZShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2dnbGVkRmVhdHVyZXNXaXRoUmVsb2FkLmFkZChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmVsb2FkJC5uZXh0KHRoaXMudG9nZ2xlZEZlYXR1cmVzV2l0aFJlbG9hZC5zaXplID4gMCk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3MgYWxsIGZlYXR1cmVzIGFzIHNlZW4gYnkgdGhlIHVzZXIgYW5kIHVwZGF0ZXMgdGhlIGxvY2FsIHN0b3JhZ2UuXG4gICAqIFRoaXMgYXNzdW1lcyBhbGwgZmVhdHVyZXMgYXJlIHByb3ZpZGVkIHZpYSB0aGUgYGl0ZW1zJGAgb2JzZXJ2YWJsZS5cbiAgICovXG4gIGFzeW5jIG1hcmtBbGxGZWF0dXJlc0FzU2VlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaXRlbXMkKTtcbiAgICBjb25zdCBmZWF0dXJlTmFtZXMgPSBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PiBmZWF0dXJlLmxhYmVsKTtcblxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuTE9DQUxfU1RPUkFHRV9LRVksIEpTT04uc3RyaW5naWZ5KGZlYXR1cmVOYW1lcykpO1xuICAgIHRoaXMuc2VlbkZlYXR1cmVzJC5uZXh0KGZlYXR1cmVOYW1lcyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyB0aGUgZmVhdHVyZXMgdG8gb25seSBpbmNsdWRlIHRob3NlIHRoYXQgYXJlIGF2YWlsYWJsZSBieSBjaGVja2luZyB0aGUgZmVhdHVyZSB0b2dnbGUgQVBJLlxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlRmVhdHVyZXMkKCk6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGZlYXR1cmVzID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoXG4gICAgICAgICAgZmVhdHVyZXMubWFwKGZlYXQgPT5cbiAgICAgICAgICAgIGZlYXQua2V5XG4gICAgICAgICAgICAgID8gdGhpcy5mZWF0dXJlQ2FjaGVTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuZmVhdHVyZUV4aXN0cyhmZWF0LmtleSlcbiAgICAgICAgICAgICAgICAgIC5waXBlKG1hcChleGlzdHMgPT4gKGV4aXN0cyA/IGZlYXQgOiBmYWxzZSkpKVxuICAgICAgICAgICAgICA6IG9mKGZlYXQpXG4gICAgICAgICAgKVxuICAgICAgICApLnBpcGUobWFwKGZlYXR1cmVzID0+IGZlYXR1cmVzLmZpbHRlcihCb29sZWFuKSkpIGFzIE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT47XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmVhdHVyZSBuYW1lcyB0aGF0IGhhdmUgYmVlbiBzZWVuIGJ5IHRoZSB1c2VyLiBUaGlzIGlzIHJldHJpZXZlZCBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAqL1xuICBwcml2YXRlIGdldFNlZW5GZWF0dXJlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc2VlbkZlYXR1cmVzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5MT0NBTF9TVE9SQUdFX0tFWSk7XG4gICAgcmV0dXJuIHNlZW5GZWF0dXJlcyA/IEpTT04ucGFyc2Uoc2VlbkZlYXR1cmVzKSA6IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldHVwSXRlbXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8QmV0YUZlYXR1cmVbXT4ge1xuICAgIHJldHVybiBmcm9tVHJpZ2dlck9uY2U8QmV0YUZlYXR1cmU+KHVuZGVmaW5lZCwgdGhpcy5yZWZyZXNoJCwgW1xuICAgICAgZ2V0SW5qZWN0ZWRIb29rczxCZXRhRmVhdHVyZT4oSE9PS19QUkVWSUVXLCB0aGlzLmluamVjdG9ycyksXG4gICAgICAoKSA9PiB0aGlzLmZhY3RvcmllcyxcbiAgICAgIHN0YXRlVG9GYWN0b3J5KHRoaXMuc3RhdGUkKVxuICAgIF0pLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKGZlYXR1cmVzID0+IHNvcnRCeVByaW9yaXR5KGZlYXR1cmVzKSksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -35,8 +35,14 @@ export class FeatureCacheService {
35
35
  this.refreshTrigger.next();
36
36
  }
37
37
  async loadFeatures() {
38
- const response = await this.featureService.list({ pageSize: 1000 });
39
- return response.data || [];
38
+ try {
39
+ const response = await this.featureService.list({ pageSize: 1000 });
40
+ return response.data || [];
41
+ }
42
+ catch (e) {
43
+ console.error('Error loading features:', e);
44
+ return [];
45
+ }
40
46
  }
41
47
  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 }); }
42
48
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureCacheService, providedIn: 'root' }); }
@@ -45,4 +51,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
45
51
  type: Injectable,
46
52
  args: [{ providedIn: 'root' }]
47
53
  }], ctorParameters: () => [{ type: i1.FeatureService }] });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1jYWNoZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9iZXRhLWZlYXR1cmUvZmVhdHVyZS1jYWNoZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBa0IsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUU3RCxNQUFNLE9BQU8sbUJBQW1CO0lBTTlCLFlBQW9CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUwxQyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFPLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELGNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUNwQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNtRCxDQUFDO0lBRXREOzs7T0FHRztJQUNILHNCQUFzQixDQUFDLEdBQVc7UUFDaEMsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sT0FBTyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWTtRQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEUsT0FBTyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM3QixDQUFDOytHQXpDVSxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUROLE1BQU07OzRGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmVhdHVyZVNlcnZpY2UsIElGZWF0dXJlVG9nZ2xlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlQ2FjaGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWZyZXNoVHJpZ2dlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8dm9pZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBmZWF0dXJlcyQgPSB0aGlzLnJlZnJlc2hUcmlnZ2VyLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubG9hZEZlYXR1cmVzKCkpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmVhdHVyZVNlcnZpY2U6IEZlYXR1cmVTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBOZWVkZWQgZm9yIHRoZSBhbmd1bGFySlMgaW1wbG1lbnRhdGlvbiB0byBzaG93L2hpZGUgc29tZSBvbGQgZmVhdHVyZXMuXG4gICAqIFJldHVybnMgYSBwcm9taXNlXG4gICAqL1xuICBnZXRGZWF0dXJlU3RhdGVQcm9taXNlKGtleTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuZ2V0RmVhdHVyZVN0YXRlKGtleSkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgZmVhdHVyZSBrZXkgdG8gY2hlY2tcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgZmVhdHVyZSBrZXkgZXhpc3RzIGluIHRoZSBsaXN0IG9mIGZlYXR1cmVzLlxuICAgKi9cbiAgZmVhdHVyZUV4aXN0cyhrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmZlYXR1cmVzJC5waXBlKG1hcChmZWF0dXJlcyA9PiBmZWF0dXJlcy5zb21lKGZlYXR1cmUgPT4gZmVhdHVyZS5rZXkgPT09IGtleSkpKTtcbiAgfVxuXG4gIGdldEZlYXR1cmVTdGF0ZShrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmZlYXR1cmVzJC5waXBlKFxuICAgICAgbWFwKGZlYXR1cmVzID0+IHtcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzLmZpbmQoZiA9PiBmLmtleSA9PT0ga2V5KTtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmU/LmFjdGl2ZSB8fCBmYWxzZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHJlc2V0RmVhdHVyZVN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaFRyaWdnZXIubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRmVhdHVyZXMoKTogUHJvbWlzZTxJRmVhdHVyZVRvZ2dsZVtdPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZlYXR1cmVTZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMTAwMCB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YSB8fCBbXTtcbiAgfVxufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1jYWNoZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9iZXRhLWZlYXR1cmUvZmVhdHVyZS1jYWNoZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBa0IsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUU3RCxNQUFNLE9BQU8sbUJBQW1CO0lBTTlCLFlBQW9CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUwxQyxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFPLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELGNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUNwQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztJQUNtRCxDQUFDO0lBRXREOzs7T0FHRztJQUNILHNCQUFzQixDQUFDLEdBQVc7UUFDaEMsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0YsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ3hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2xELE9BQU8sT0FBTyxFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDcEUsT0FBTyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUMsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQzsrR0E5Q1UsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FETixNQUFNOzs0RkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZlYXR1cmVTZXJ2aWNlLCBJRmVhdHVyZVRvZ2dsZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZUNhY2hlU2VydmljZSB7XG4gIHByaXZhdGUgcmVmcmVzaFRyaWdnZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgZmVhdHVyZXMkID0gdGhpcy5yZWZyZXNoVHJpZ2dlci5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmxvYWRGZWF0dXJlcygpKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZlYXR1cmVTZXJ2aWNlOiBGZWF0dXJlU2VydmljZSkge31cblxuICAvKipcbiAgICogTmVlZGVkIGZvciB0aGUgYW5ndWxhckpTIGltcGxtZW50YXRpb24gdG8gc2hvdy9oaWRlIHNvbWUgb2xkIGZlYXR1cmVzLlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZVxuICAgKi9cbiAgZ2V0RmVhdHVyZVN0YXRlUHJvbWlzZShrZXk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmdldEZlYXR1cmVTdGF0ZShrZXkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGZlYXR1cmUga2V5IHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIGZlYXR1cmUga2V5IGV4aXN0cyBpbiB0aGUgbGlzdCBvZiBmZWF0dXJlcy5cbiAgICovXG4gIGZlYXR1cmVFeGlzdHMoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5mZWF0dXJlcyQucGlwZShtYXAoZmVhdHVyZXMgPT4gZmVhdHVyZXMuc29tZShmZWF0dXJlID0+IGZlYXR1cmUua2V5ID09PSBrZXkpKSk7XG4gIH1cblxuICBnZXRGZWF0dXJlU3RhdGUoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5mZWF0dXJlcyQucGlwZShcbiAgICAgIG1hcChmZWF0dXJlcyA9PiB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBmZWF0dXJlcy5maW5kKGYgPT4gZi5rZXkgPT09IGtleSk7XG4gICAgICAgIHJldHVybiBmZWF0dXJlPy5hY3RpdmUgfHwgZmFsc2U7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXNldEZlYXR1cmVTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlZnJlc2hUcmlnZ2VyLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZlYXR1cmVzKCk6IFByb21pc2U8SUZlYXR1cmVUb2dnbGVbXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmVhdHVyZVNlcnZpY2UubGlzdCh7IHBhZ2VTaXplOiAxMDAwIH0pO1xuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEgfHwgW107XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBmZWF0dXJlczonLCBlKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -35197,8 +35197,14 @@ class FeatureCacheService {
35197
35197
  this.refreshTrigger.next();
35198
35198
  }
35199
35199
  async loadFeatures() {
35200
- const response = await this.featureService.list({ pageSize: 1000 });
35201
- return response.data || [];
35200
+ try {
35201
+ const response = await this.featureService.list({ pageSize: 1000 });
35202
+ return response.data || [];
35203
+ }
35204
+ catch (e) {
35205
+ console.error('Error loading features:', e);
35206
+ return [];
35207
+ }
35202
35208
  }
35203
35209
  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
35210
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureCacheService, providedIn: 'root' }); }
@@ -35219,7 +35225,7 @@ class PreviewService extends ExtensionPointForPlugins {
35219
35225
  this.reload$ = new BehaviorSubject(false);
35220
35226
  this.LOCAL_STORAGE_KEY = 'c8y_beta_features_seen';
35221
35227
  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());
35228
+ this.hasUnseenFeatures$ = combineLatest([this.getAvailableFeatures$(), this.seenFeatures$]).pipe(map(([features, seen]) => features.some(feature => !seen.includes(feature.label))), distinctUntilChanged());
35223
35229
  this.featureService = inject(FeatureService);
35224
35230
  this.featureCacheService = inject(FeatureCacheService);
35225
35231
  this.optionsService = inject(OptionsService);
@@ -35289,6 +35295,18 @@ class PreviewService extends ExtensionPointForPlugins {
35289
35295
  localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(featureNames));
35290
35296
  this.seenFeatures$.next(featureNames);
35291
35297
  }
35298
+ /**
35299
+ * Filters the features to only include those that are available by checking the feature toggle API.
35300
+ */
35301
+ getAvailableFeatures$() {
35302
+ return this.items$.pipe(switchMap(features => {
35303
+ return combineLatest(features.map(feat => feat.key
35304
+ ? this.featureCacheService
35305
+ .featureExists(feat.key)
35306
+ .pipe(map(exists => (exists ? feat : false)))
35307
+ : of(feat))).pipe(map(features => features.filter(Boolean)));
35308
+ }));
35309
+ }
35292
35310
  /**
35293
35311
  *
35294
35312
  * @returns An array of feature names that have been seen by the user. This is retrieved from local storage.
@@ -35338,7 +35356,7 @@ class BetaPreviewComponent {
35338
35356
  this.betaPreviewService = inject(PreviewService);
35339
35357
  this.featureCacheService = inject(FeatureCacheService);
35340
35358
  this.markdownToHtmlPipe = inject(MarkdownToHtmlPipe);
35341
- this.features$ = this.betaPreviewService.items$;
35359
+ this.features$ = this.betaPreviewService.getAvailableFeatures$();
35342
35360
  this.shouldClose = new Promise(resolve => {
35343
35361
  this.resolveClose = resolve;
35344
35362
  });
@@ -35369,18 +35387,15 @@ class BetaPreviewComponent {
35369
35387
  const isChecked = event.target.checked;
35370
35388
  await this.betaPreviewService.setFeatureActiveState(feature.key, isChecked);
35371
35389
  }
35372
- featureKeyExists(key) {
35373
- return this.featureCacheService.featureExists(key);
35374
- }
35375
35390
  close() {
35376
35391
  this.resolveClose(true);
35377
35392
  }
35378
35393
  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" }] }); }
35394
+ 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 <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 </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
35395
  }
35381
35396
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BetaPreviewComponent, decorators: [{
35382
35397
  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" }]
35398
+ 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 <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 </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
35399
  }], ctorParameters: () => [] });
35385
35400
 
35386
35401
  class BetaPreviewButtonComponent {
@@ -35448,7 +35463,10 @@ class BetaPreviewDrawerFactory {
35448
35463
  }));
35449
35464
  }
35450
35465
  shouldShowBetaPreview$() {
35451
- return combineLatest([this.options.get$('hideBetaPreview'), this.previewService.items$]).pipe(map(([hideBetaPreview, items]) => {
35466
+ return combineLatest([
35467
+ this.options.get$('hideBetaPreview'),
35468
+ this.previewService.getAvailableFeatures$()
35469
+ ]).pipe(map(([hideBetaPreview, items]) => {
35452
35470
  const hasItems = items.length > 0;
35453
35471
  if (!hasItems) {
35454
35472
  return false;