@sisense/sdk-ui-angular 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/LICENSE.md +35 -0
  2. package/README.md +2 -0
  3. package/dist/README.md +2 -0
  4. package/dist/esm2020/lib/component-wrapper-helpers/context-connectors.mjs +29 -0
  5. package/dist/esm2020/lib/component-wrapper-helpers/index.mjs +2 -0
  6. package/dist/esm2020/lib/component-wrapper-helpers/template.mjs +3 -0
  7. package/dist/esm2020/lib/components/area-chart.component.mjs +82 -0
  8. package/dist/esm2020/lib/components/bar-chart.component.mjs +82 -0
  9. package/dist/esm2020/lib/components/basic-member-filter-tile.component.mjs +62 -0
  10. package/dist/esm2020/lib/components/chart-widget.component.mjs +112 -0
  11. package/dist/esm2020/lib/components/chart.component.mjs +169 -0
  12. package/dist/esm2020/lib/components/column-chart.component.mjs +82 -0
  13. package/dist/esm2020/lib/components/dashboard-widget.component.mjs +83 -0
  14. package/dist/esm2020/lib/components/funnel-chart.component.mjs +82 -0
  15. package/dist/esm2020/lib/components/index.mjs +17 -0
  16. package/dist/esm2020/lib/components/indicator-chart.component.mjs +48 -0
  17. package/dist/esm2020/lib/components/line-chart.component.mjs +82 -0
  18. package/dist/esm2020/lib/components/pie-chart.component.mjs +82 -0
  19. package/dist/esm2020/lib/components/polar-chart.component.mjs +82 -0
  20. package/dist/esm2020/lib/components/scatter-chart.component.mjs +82 -0
  21. package/dist/esm2020/lib/components/table-widget.component.mjs +72 -0
  22. package/dist/esm2020/lib/components/table.component.mjs +64 -0
  23. package/dist/esm2020/lib/components/treemap-chart.component.mjs +82 -0
  24. package/dist/esm2020/lib/sdk-ui.module.mjs +110 -0
  25. package/dist/esm2020/lib/services/index.mjs +4 -0
  26. package/dist/esm2020/lib/services/query.service.mjs +31 -0
  27. package/dist/esm2020/lib/services/sisense-context.service.mjs +59 -0
  28. package/dist/esm2020/lib/services/theme.service.mjs +90 -0
  29. package/dist/esm2020/lib/utility-types.mjs +2 -0
  30. package/dist/esm2020/public-api.mjs +7 -0
  31. package/dist/esm2020/sisense-sdk-ui-angular.mjs +5 -0
  32. package/dist/fesm2015/sisense-sdk-ui-angular.mjs +1610 -0
  33. package/dist/fesm2015/sisense-sdk-ui-angular.mjs.map +1 -0
  34. package/dist/fesm2020/sisense-sdk-ui-angular.mjs +1598 -0
  35. package/dist/fesm2020/sisense-sdk-ui-angular.mjs.map +1 -0
  36. package/dist/index.d.ts +5 -0
  37. package/dist/lib/component-wrapper-helpers/context-connectors.d.ts +5 -0
  38. package/dist/lib/component-wrapper-helpers/index.d.ts +1 -0
  39. package/dist/lib/component-wrapper-helpers/template.d.ts +2 -0
  40. package/dist/lib/components/area-chart.component.d.ts +67 -0
  41. package/dist/lib/components/bar-chart.component.d.ts +67 -0
  42. package/dist/lib/components/basic-member-filter-tile.component.d.ts +31 -0
  43. package/dist/lib/components/chart-widget.component.d.ts +75 -0
  44. package/dist/lib/components/chart.component.d.ts +167 -0
  45. package/dist/lib/components/column-chart.component.d.ts +62 -0
  46. package/dist/lib/components/dashboard-widget.component.d.ts +46 -0
  47. package/dist/lib/components/funnel-chart.component.d.ts +67 -0
  48. package/dist/lib/components/index.d.ts +16 -0
  49. package/dist/lib/components/indicator-chart.component.d.ts +41 -0
  50. package/dist/lib/components/line-chart.component.d.ts +67 -0
  51. package/dist/lib/components/pie-chart.component.d.ts +67 -0
  52. package/dist/lib/components/polar-chart.component.d.ts +67 -0
  53. package/dist/lib/components/scatter-chart.component.d.ts +67 -0
  54. package/dist/lib/components/table-widget.component.d.ts +40 -0
  55. package/dist/lib/components/table.component.d.ts +49 -0
  56. package/dist/lib/components/treemap-chart.component.d.ts +67 -0
  57. package/dist/lib/sdk-ui.module.d.ts +49 -0
  58. package/dist/lib/services/index.d.ts +3 -0
  59. package/dist/lib/services/query.service.d.ts +16 -0
  60. package/dist/lib/services/sisense-context.service.d.ts +41 -0
  61. package/dist/lib/services/theme.service.d.ts +71 -0
  62. package/dist/lib/utility-types.d.ts +11 -0
  63. package/dist/package.json +46 -0
  64. package/dist/public-api.d.ts +3 -0
  65. package/package.json +53 -0
@@ -0,0 +1,31 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { executeQuery, executeQueryByWidgetId, } from '@sisense/sdk-ui-preact';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./sisense-context.service";
5
+ export class QueryService {
6
+ constructor(sisenseContextService) {
7
+ this.sisenseContextService = sisenseContextService;
8
+ }
9
+ async executeQuery(params) {
10
+ const { dataSource, dimensions, measures, filters, highlights, count, offset, onBeforeQuery } = params;
11
+ const app = await this.sisenseContextService.getApp();
12
+ const data = await executeQuery({ dataSource, dimensions, measures, filters, highlights, count, offset }, app, { onBeforeQuery });
13
+ return { data };
14
+ }
15
+ async executeQueryByWidgetId(params) {
16
+ const app = await this.sisenseContextService.getApp();
17
+ return executeQueryByWidgetId({
18
+ ...params,
19
+ app,
20
+ });
21
+ }
22
+ }
23
+ QueryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, deps: [{ token: i1.SisenseContextService }], target: i0.ɵɵFactoryTarget.Injectable });
24
+ QueryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, providedIn: 'root' });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: QueryService, decorators: [{
26
+ type: Injectable,
27
+ args: [{
28
+ providedIn: 'root',
29
+ }]
30
+ }], ctorParameters: function () { return [{ type: i1.SisenseContextService }]; } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvcXVlcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxZQUFZLEVBQ1osc0JBQXNCLEdBR3ZCLE1BQU0sd0JBQXdCLENBQUM7OztBQU1oQyxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUFvQixxQkFBNEM7UUFBNUMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtJQUFHLENBQUM7SUFFcEUsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUEwQjtRQUMzQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUMzRixNQUFNLENBQUM7UUFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0RCxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FDN0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFDeEUsR0FBRyxFQUNILEVBQUUsYUFBYSxFQUFFLENBQ2xCLENBQUM7UUFFRixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxNQUFvQztRQUMvRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUV0RCxPQUFPLHNCQUFzQixDQUFDO1lBQzVCLEdBQUcsTUFBTTtZQUNULEdBQUc7U0FDSixDQUFDLENBQUM7SUFDTCxDQUFDOzswR0F2QlUsWUFBWTs4R0FBWixZQUFZLGNBRlgsTUFBTTs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGV4ZWN1dGVRdWVyeSxcbiAgZXhlY3V0ZVF1ZXJ5QnlXaWRnZXRJZCxcbiAgdHlwZSBFeGVjdXRlUXVlcnlQYXJhbXMsXG4gIHR5cGUgRXhlY3V0ZVF1ZXJ5QnlXaWRnZXRJZFBhcmFtcyxcbn0gZnJvbSAnQHNpc2Vuc2Uvc2RrLXVpLXByZWFjdCc7XG5pbXBvcnQgeyBTaXNlbnNlQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuL3Npc2Vuc2UtY29udGV4dC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFF1ZXJ5U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2lzZW5zZUNvbnRleHRTZXJ2aWNlOiBTaXNlbnNlQ29udGV4dFNlcnZpY2UpIHt9XG5cbiAgYXN5bmMgZXhlY3V0ZVF1ZXJ5KHBhcmFtczogRXhlY3V0ZVF1ZXJ5UGFyYW1zKSB7XG4gICAgY29uc3QgeyBkYXRhU291cmNlLCBkaW1lbnNpb25zLCBtZWFzdXJlcywgZmlsdGVycywgaGlnaGxpZ2h0cywgY291bnQsIG9mZnNldCwgb25CZWZvcmVRdWVyeSB9ID1cbiAgICAgIHBhcmFtcztcbiAgICBjb25zdCBhcHAgPSBhd2FpdCB0aGlzLnNpc2Vuc2VDb250ZXh0U2VydmljZS5nZXRBcHAoKTtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgZXhlY3V0ZVF1ZXJ5KFxuICAgICAgeyBkYXRhU291cmNlLCBkaW1lbnNpb25zLCBtZWFzdXJlcywgZmlsdGVycywgaGlnaGxpZ2h0cywgY291bnQsIG9mZnNldCB9LFxuICAgICAgYXBwLFxuICAgICAgeyBvbkJlZm9yZVF1ZXJ5IH0sXG4gICAgKTtcblxuICAgIHJldHVybiB7IGRhdGEgfTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVRdWVyeUJ5V2lkZ2V0SWQocGFyYW1zOiBFeGVjdXRlUXVlcnlCeVdpZGdldElkUGFyYW1zKSB7XG4gICAgY29uc3QgYXBwID0gYXdhaXQgdGhpcy5zaXNlbnNlQ29udGV4dFNlcnZpY2UuZ2V0QXBwKCk7XG5cbiAgICByZXR1cm4gZXhlY3V0ZVF1ZXJ5QnlXaWRnZXRJZCh7XG4gICAgICAuLi5wYXJhbXMsXG4gICAgICBhcHAsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { Inject, Injectable, InjectionToken } from '@angular/core';
2
+ import { createClientApplication } from '@sisense/sdk-ui-preact';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Token used to inject {@link SisenseContextConfig} into your application
6
+ *
7
+ * @example
8
+ * Example of importing {@link SdkUiModule} and injecting {@link SisenseContextConfig} into your application:
9
+ *
10
+ * ```ts
11
+ * export const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {
12
+ * url="<instance url>" // replace with the URL of your Sisense instance
13
+ * token="<api token>" // replace with the API token of your user account
14
+ * defaultDataSource: DM.DataSource,
15
+ * };
16
+ *
17
+ * @NgModule({
18
+ * imports: [
19
+ * BrowserModule,
20
+ * SdkUiModule,
21
+ * ],
22
+ * declarations: [AppComponent],
23
+ * providers: [
24
+ * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },
25
+ * ],
26
+ * bootstrap: [AppComponent],
27
+ * })
28
+ * ```
29
+ */
30
+ export const SISENSE_CONTEXT_CONFIG_TOKEN = new InjectionToken('Props for connecting to Sisense instance');
31
+ export class SisenseContextService {
32
+ constructor(sisenseContextConfig) {
33
+ this.appPromise = createClientApplication(sisenseContextConfig);
34
+ const { enableTracking, showRuntimeErrors } = sisenseContextConfig;
35
+ this.config = {
36
+ ...sisenseContextConfig,
37
+ enableTracking: enableTracking ?? true,
38
+ showRuntimeErrors: showRuntimeErrors ?? true,
39
+ };
40
+ }
41
+ getApp() {
42
+ return this.appPromise;
43
+ }
44
+ getConfig() {
45
+ return this.config;
46
+ }
47
+ }
48
+ SisenseContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SisenseContextService, deps: [{ token: SISENSE_CONTEXT_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
49
+ SisenseContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SisenseContextService, providedIn: 'root' });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SisenseContextService, decorators: [{
51
+ type: Injectable,
52
+ args: [{
53
+ providedIn: 'root',
54
+ }]
55
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
56
+ type: Inject,
57
+ args: [SISENSE_CONTEXT_CONFIG_TOKEN]
58
+ }] }]; } });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lzZW5zZS1jb250ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL3Npc2Vuc2UtY29udGV4dC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQXFCLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBS3BGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxjQUFjLENBQzVELDBDQUEwQyxDQUMzQyxDQUFDO0FBS0YsTUFBTSxPQUFPLHFCQUFxQjtJQUtoQyxZQUFrRCxvQkFBMEM7UUFDMUYsSUFBSSxDQUFDLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQztRQUNuRSxJQUFJLENBQUMsTUFBTSxHQUFHO1lBQ1osR0FBRyxvQkFBb0I7WUFDdkIsY0FBYyxFQUFFLGNBQWMsSUFBSSxJQUFJO1lBQ3RDLGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLElBQUk7U0FDN0MsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7O21IQXRCVSxxQkFBcUIsa0JBS1osNEJBQTRCO3VIQUxyQyxxQkFBcUIsY0FGcEIsTUFBTTs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFNYyxNQUFNOzJCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENsaWVudEFwcGxpY2F0aW9uLCBjcmVhdGVDbGllbnRBcHBsaWNhdGlvbiB9IGZyb20gJ0BzaXNlbnNlL3Nkay11aS1wcmVhY3QnO1xuaW1wb3J0IHR5cGUgeyBTaXNlbnNlQ29udGV4dFByb3ZpZGVyUHJvcHMgYXMgU2lzZW5zZUNvbnRleHRDb25maWcgfSBmcm9tICdAc2lzZW5zZS9zZGstdWktcHJlYWN0JztcblxuZXhwb3J0IHsgdHlwZSBTaXNlbnNlQ29udGV4dENvbmZpZyB9O1xuXG4vKipcbiAqIFRva2VuIHVzZWQgdG8gaW5qZWN0IHtAbGluayBTaXNlbnNlQ29udGV4dENvbmZpZ30gaW50byB5b3VyIGFwcGxpY2F0aW9uXG4gKlxuICogQGV4YW1wbGVcbiAqIEV4YW1wbGUgb2YgaW1wb3J0aW5nIHtAbGluayBTZGtVaU1vZHVsZX0gYW5kIGluamVjdGluZyB7QGxpbmsgU2lzZW5zZUNvbnRleHRDb25maWd9IGludG8geW91ciBhcHBsaWNhdGlvbjpcbiAqXG4gKiBgYGB0c1xuICogZXhwb3J0IGNvbnN0IFNJU0VOU0VfQ09OVEVYVF9DT05GSUc6IFNpc2Vuc2VDb250ZXh0Q29uZmlnID0ge1xuICogICB1cmw9XCI8aW5zdGFuY2UgdXJsPlwiIC8vIHJlcGxhY2Ugd2l0aCB0aGUgVVJMIG9mIHlvdXIgU2lzZW5zZSBpbnN0YW5jZVxuICogICB0b2tlbj1cIjxhcGkgdG9rZW4+XCIgLy8gcmVwbGFjZSB3aXRoIHRoZSBBUEkgdG9rZW4gb2YgeW91ciB1c2VyIGFjY291bnRcbiAqICAgZGVmYXVsdERhdGFTb3VyY2U6IERNLkRhdGFTb3VyY2UsXG4gKiB9O1xuICpcbiAqIEBOZ01vZHVsZSh7XG4gKiAgIGltcG9ydHM6IFtcbiAqICAgICBCcm93c2VyTW9kdWxlLFxuICogICAgIFNka1VpTW9kdWxlLFxuICogICBdLFxuICogICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7IHByb3ZpZGU6IFNJU0VOU0VfQ09OVEVYVF9DT05GSUdfVE9LRU4sIHVzZVZhbHVlOiBTSVNFTlNFX0NPTlRFWFRfQ09ORklHIH0sXG4gKiAgIF0sXG4gKiAgIGJvb3RzdHJhcDogW0FwcENvbXBvbmVudF0sXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBTSVNFTlNFX0NPTlRFWFRfQ09ORklHX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuPFNpc2Vuc2VDb250ZXh0Q29uZmlnPihcbiAgJ1Byb3BzIGZvciBjb25uZWN0aW5nIHRvIFNpc2Vuc2UgaW5zdGFuY2UnLFxuKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNpc2Vuc2VDb250ZXh0U2VydmljZSB7XG4gIHByaXZhdGUgYXBwUHJvbWlzZTogUHJvbWlzZTxDbGllbnRBcHBsaWNhdGlvbj47XG5cbiAgcHJpdmF0ZSBjb25maWc6IFNpc2Vuc2VDb250ZXh0Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoU0lTRU5TRV9DT05URVhUX0NPTkZJR19UT0tFTikgc2lzZW5zZUNvbnRleHRDb25maWc6IFNpc2Vuc2VDb250ZXh0Q29uZmlnKSB7XG4gICAgdGhpcy5hcHBQcm9taXNlID0gY3JlYXRlQ2xpZW50QXBwbGljYXRpb24oc2lzZW5zZUNvbnRleHRDb25maWcpO1xuXG4gICAgY29uc3QgeyBlbmFibGVUcmFja2luZywgc2hvd1J1bnRpbWVFcnJvcnMgfSA9IHNpc2Vuc2VDb250ZXh0Q29uZmlnO1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4uc2lzZW5zZUNvbnRleHRDb25maWcsXG4gICAgICBlbmFibGVUcmFja2luZzogZW5hYmxlVHJhY2tpbmcgPz8gdHJ1ZSxcbiAgICAgIHNob3dSdW50aW1lRXJyb3JzOiBzaG93UnVudGltZUVycm9ycyA/PyB0cnVlLFxuICAgIH07XG4gIH1cblxuICBnZXRBcHAoKTogUHJvbWlzZTxDbGllbnRBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmFwcFByb21pc2U7XG4gIH1cblxuICBnZXRDb25maWcoKTogU2lzZW5zZUNvbnRleHRDb25maWcge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxufVxuIl19
@@ -0,0 +1,90 @@
1
+ import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import merge from 'ts-deepmerge';
4
+ import { getDefaultThemeSettings, getThemeSettingsByOid, } from '@sisense/sdk-ui-preact';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./sisense-context.service";
7
+ /**
8
+ * Token used to inject {@link ThemeConfig} into your application
9
+ *
10
+ * @example
11
+ *
12
+ * Example of injecting both {@link SisenseContextConfig} and {@link ThemeConfig} into your application:
13
+ *
14
+ * ```ts
15
+ * export const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {
16
+ * url="<instance url>" // replace with the URL of your Sisense instance
17
+ * token="<api token>" // replace with the API token of your user account
18
+ * defaultDataSource: DM.DataSource,
19
+ * };
20
+ *
21
+ * @NgModule({
22
+ * imports: [
23
+ * BrowserModule,
24
+ * SdkUiModule,
25
+ * ],
26
+ * declarations: [AppComponent],
27
+ * providers: [
28
+ * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },
29
+ * {
30
+ * provide: THEME_CONFIG_TOKEN,
31
+ * useValue: {
32
+ * // initial theme settings
33
+ * } as ThemeConfig,
34
+ * },
35
+ * ],
36
+ * bootstrap: [AppComponent],
37
+ * })
38
+ * ```
39
+ */
40
+ export const THEME_CONFIG_TOKEN = new InjectionToken('theme configuration');
41
+ export class ThemeService {
42
+ constructor(sisenseContextService, themeConfig) {
43
+ this.sisenseContextService = sisenseContextService;
44
+ this.themeSettings$ = new BehaviorSubject(getDefaultThemeSettings());
45
+ void this.initThemeSettings(themeConfig?.theme);
46
+ }
47
+ async initThemeSettings(theme) {
48
+ const app = await this.sisenseContextService.getApp();
49
+ // apply system theme settings first
50
+ await this.applyThemeSettings(app.settings.serverThemeSettings);
51
+ if (theme) {
52
+ await this.applyThemeSettings(theme);
53
+ }
54
+ }
55
+ async applyThemeSettings(theme) {
56
+ try {
57
+ const app = await this.sisenseContextService.getApp();
58
+ const isThemeOid = typeof theme === 'string';
59
+ let userThemeSettings = theme;
60
+ if (isThemeOid) {
61
+ userThemeSettings = await getThemeSettingsByOid(theme, app.httpClient);
62
+ }
63
+ const mergedThemeSettings = merge.withOptions({ mergeArrays: false }, this.themeSettings$.value, userThemeSettings);
64
+ this.themeSettings$.next(mergedThemeSettings);
65
+ }
66
+ catch (error) {
67
+ this.themeSettings$.error(error);
68
+ }
69
+ }
70
+ getThemeSettings() {
71
+ return this.themeSettings$.asObservable();
72
+ }
73
+ async updateThemeSettings(theme) {
74
+ await this.applyThemeSettings(theme);
75
+ }
76
+ }
77
+ ThemeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, deps: [{ token: i1.SisenseContextService }, { token: THEME_CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
78
+ ThemeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, providedIn: 'root' });
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ThemeService, decorators: [{
80
+ type: Injectable,
81
+ args: [{
82
+ providedIn: 'root',
83
+ }]
84
+ }], ctorParameters: function () { return [{ type: i1.SisenseContextService }, { type: undefined, decorators: [{
85
+ type: Optional
86
+ }, {
87
+ type: Inject,
88
+ args: [THEME_CONFIG_TOKEN]
89
+ }] }]; } });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvdGhlbWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxLQUFLLE1BQU0sY0FBYyxDQUFDO0FBQ2pDLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIscUJBQXFCLEdBSXRCLE1BQU0sd0JBQXdCLENBQUM7OztBQUtoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQ0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBYyxxQkFBcUIsQ0FBQyxDQUFDO0FBS3pGLE1BQU0sT0FBTyxZQUFZO0lBSXZCLFlBQ1UscUJBQTRDLEVBQ1osV0FBeUI7UUFEekQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUo5QyxtQkFBYyxHQUNwQixJQUFJLGVBQWUsQ0FBd0IsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1FBTXRFLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQTJCO1FBQ3pELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRXRELG9DQUFvQztRQUNwQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFaEUsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBNkI7UUFDNUQsSUFBSTtZQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RELE1BQU0sVUFBVSxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQztZQUM3QyxJQUFJLGlCQUFpQixHQUFHLEtBQXNCLENBQUM7WUFFL0MsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsaUJBQWlCLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3hFO1lBRUQsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUMzQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQ3pCLGlCQUFpQixDQUNPLENBQUM7WUFFM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUMvQztRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBNkI7UUFDckQsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7MEdBbERVLFlBQVksdURBTUQsa0JBQWtCOzhHQU43QixZQUFZLGNBRlgsTUFBTTs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBT0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAndHMtZGVlcG1lcmdlJztcbmltcG9ydCB7XG4gIGdldERlZmF1bHRUaGVtZVNldHRpbmdzLFxuICBnZXRUaGVtZVNldHRpbmdzQnlPaWQsXG4gIHR5cGUgVGhlbWVQcm92aWRlclByb3BzIGFzIFRoZW1lQ29uZmlnLFxuICB0eXBlIENvbXBsZXRlVGhlbWVTZXR0aW5ncyxcbiAgdHlwZSBUaGVtZVNldHRpbmdzLFxufSBmcm9tICdAc2lzZW5zZS9zZGstdWktcHJlYWN0JztcbmltcG9ydCB7IFNpc2Vuc2VDb250ZXh0U2VydmljZSB9IGZyb20gJy4vc2lzZW5zZS1jb250ZXh0LnNlcnZpY2UnO1xuXG5leHBvcnQgeyB0eXBlIFRoZW1lQ29uZmlnIH07XG5cbi8qKlxuICogVG9rZW4gdXNlZCB0byBpbmplY3Qge0BsaW5rIFRoZW1lQ29uZmlnfSBpbnRvIHlvdXIgYXBwbGljYXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIEV4YW1wbGUgb2YgaW5qZWN0aW5nIGJvdGgge0BsaW5rIFNpc2Vuc2VDb250ZXh0Q29uZmlnfSBhbmQge0BsaW5rIFRoZW1lQ29uZmlnfSBpbnRvIHlvdXIgYXBwbGljYXRpb246XG4gKlxuICogYGBgdHNcbiAqIGV4cG9ydCBjb25zdCBTSVNFTlNFX0NPTlRFWFRfQ09ORklHOiBTaXNlbnNlQ29udGV4dENvbmZpZyA9IHtcbiAqICAgdXJsPVwiPGluc3RhbmNlIHVybD5cIiAvLyByZXBsYWNlIHdpdGggdGhlIFVSTCBvZiB5b3VyIFNpc2Vuc2UgaW5zdGFuY2VcbiAqICAgdG9rZW49XCI8YXBpIHRva2VuPlwiIC8vIHJlcGxhY2Ugd2l0aCB0aGUgQVBJIHRva2VuIG9mIHlvdXIgdXNlciBhY2NvdW50XG4gKiAgIGRlZmF1bHREYXRhU291cmNlOiBETS5EYXRhU291cmNlLFxuICogfTtcbiAqXG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbXG4gKiAgICAgQnJvd3Nlck1vZHVsZSxcbiAqICAgICBTZGtVaU1vZHVsZSxcbiAqICAgXSxcbiAqICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSxcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgeyBwcm92aWRlOiBTSVNFTlNFX0NPTlRFWFRfQ09ORklHX1RPS0VOLCB1c2VWYWx1ZTogU0lTRU5TRV9DT05URVhUX0NPTkZJRyB9LFxuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IFRIRU1FX0NPTkZJR19UT0tFTixcbiAqICAgICAgIHVzZVZhbHVlOiB7XG4gKiAgICAgICAgIC8vIGluaXRpYWwgdGhlbWUgc2V0dGluZ3NcbiAqICAgICAgIH0gYXMgVGhlbWVDb25maWcsXG4gKiAgICAgfSxcbiAqICAgXSxcbiAqICAgYm9vdHN0cmFwOiBbQXBwQ29tcG9uZW50XSxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IFRIRU1FX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUaGVtZUNvbmZpZz4oJ3RoZW1lIGNvbmZpZ3VyYXRpb24nKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRoZW1lU2VydmljZSB7XG4gIHByaXZhdGUgdGhlbWVTZXR0aW5ncyQ6IEJlaGF2aW9yU3ViamVjdDxDb21wbGV0ZVRoZW1lU2V0dGluZ3M+ID1cbiAgICBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbXBsZXRlVGhlbWVTZXR0aW5ncz4oZ2V0RGVmYXVsdFRoZW1lU2V0dGluZ3MoKSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzaXNlbnNlQ29udGV4dFNlcnZpY2U6IFNpc2Vuc2VDb250ZXh0U2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFRIRU1FX0NPTkZJR19UT0tFTikgdGhlbWVDb25maWc/OiBUaGVtZUNvbmZpZyxcbiAgKSB7XG4gICAgdm9pZCB0aGlzLmluaXRUaGVtZVNldHRpbmdzKHRoZW1lQ29uZmlnPy50aGVtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRUaGVtZVNldHRpbmdzKHRoZW1lOiBUaGVtZUNvbmZpZ1sndGhlbWUnXSkge1xuICAgIGNvbnN0IGFwcCA9IGF3YWl0IHRoaXMuc2lzZW5zZUNvbnRleHRTZXJ2aWNlLmdldEFwcCgpO1xuXG4gICAgLy8gYXBwbHkgc3lzdGVtIHRoZW1lIHNldHRpbmdzIGZpcnN0XG4gICAgYXdhaXQgdGhpcy5hcHBseVRoZW1lU2V0dGluZ3MoYXBwLnNldHRpbmdzLnNlcnZlclRoZW1lU2V0dGluZ3MpO1xuXG4gICAgaWYgKHRoZW1lKSB7XG4gICAgICBhd2FpdCB0aGlzLmFwcGx5VGhlbWVTZXR0aW5ncyh0aGVtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhcHBseVRoZW1lU2V0dGluZ3ModGhlbWU6IHN0cmluZyB8IFRoZW1lU2V0dGluZ3MpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXBwID0gYXdhaXQgdGhpcy5zaXNlbnNlQ29udGV4dFNlcnZpY2UuZ2V0QXBwKCk7XG4gICAgICBjb25zdCBpc1RoZW1lT2lkID0gdHlwZW9mIHRoZW1lID09PSAnc3RyaW5nJztcbiAgICAgIGxldCB1c2VyVGhlbWVTZXR0aW5ncyA9IHRoZW1lIGFzIFRoZW1lU2V0dGluZ3M7XG5cbiAgICAgIGlmIChpc1RoZW1lT2lkKSB7XG4gICAgICAgIHVzZXJUaGVtZVNldHRpbmdzID0gYXdhaXQgZ2V0VGhlbWVTZXR0aW5nc0J5T2lkKHRoZW1lLCBhcHAuaHR0cENsaWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZFRoZW1lU2V0dGluZ3MgPSBtZXJnZS53aXRoT3B0aW9ucyhcbiAgICAgICAgeyBtZXJnZUFycmF5czogZmFsc2UgfSxcbiAgICAgICAgdGhpcy50aGVtZVNldHRpbmdzJC52YWx1ZSxcbiAgICAgICAgdXNlclRoZW1lU2V0dGluZ3MsXG4gICAgICApIGFzIENvbXBsZXRlVGhlbWVTZXR0aW5ncztcblxuICAgICAgdGhpcy50aGVtZVNldHRpbmdzJC5uZXh0KG1lcmdlZFRoZW1lU2V0dGluZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnRoZW1lU2V0dGluZ3MkLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBnZXRUaGVtZVNldHRpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLnRoZW1lU2V0dGluZ3MkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVGhlbWVTZXR0aW5ncyh0aGVtZTogc3RyaW5nIHwgVGhlbWVTZXR0aW5ncykge1xuICAgIGF3YWl0IHRoaXMuYXBwbHlUaGVtZVNldHRpbmdzKHRoZW1lKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdXRpbGl0eS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBaaXBUdXBsZXM8S2V5cyBleHRlbmRzIHJlYWRvbmx5IGFueVtdLCBWYWx1ZXMgZXh0ZW5kcyByZWFkb25seSBhbnlbXT4gPSB7XG4gIFtLIGluIGtleW9mIEtleXNdOiBbS2V5c1tLXSwgSyBleHRlbmRzIGtleW9mIFZhbHVlcyA/IFZhbHVlc1tLXSA6IG5ldmVyXTtcbn07XG5cbnR5cGUgWmlwVHVwbGVzQXNPYmplY3Q8S2V5cyBleHRlbmRzIHJlYWRvbmx5IFByb3BlcnR5S2V5W10sIFZhbHVlcyBleHRlbmRzIHJlYWRvbmx5IGFueVtdPiA9IHtcbiAgW1QgaW4gWmlwVHVwbGVzPEtleXMsIFZhbHVlcz5bbnVtYmVyXSBhcyBUWzBdXTogVFsxXTtcbn07XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCB0eXBlIEFyZ3VtZW50c0FzT2JqZWN0PFxuICBGbiBleHRlbmRzICgoLi4ucGFyYW1zOiByZWFkb25seSBhbnlbXSkgPT4gYW55KSB8IHVuZGVmaW5lZCxcbiAgS2V5cyBleHRlbmRzIHJlYWRvbmx5IFByb3BlcnR5S2V5W10sXG4+ID0gWmlwVHVwbGVzQXNPYmplY3Q8S2V5cywgUGFyYW1ldGVyczxOb25OdWxsYWJsZTxGbj4+PjtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IHR5cGUgQXJndW1lbnRzPFQgZXh0ZW5kcyAoKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKSB8IHVuZGVmaW5lZD4gPSBQYXJhbWV0ZXJzPFxuICBOb25OdWxsYWJsZTxUPlxuPjtcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /*
2
+ * Public API Surface of @sisense/sdk-ui-angular
3
+ */
4
+ export * from './lib/sdk-ui.module';
5
+ export * from './lib/components';
6
+ export * from './lib/services';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIEBzaXNlbnNlL3Nkay11aS1hbmd1bGFyXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nkay11aS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lzZW5zZS1zZGstdWktYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaXNlbnNlLXNkay11aS1hbmd1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=