@yuuvis/client-shell 3.0.0-beta.20.1 → 3.0.0-beta.21.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.
@@ -2,13 +2,13 @@ import * as i0 from '@angular/core';
2
2
  import { Component } from '@angular/core';
3
3
 
4
4
  class DashboardPageComponent {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DashboardPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: DashboardPageComponent, isStandalone: true, selector: "yuv-dashboard", ngImport: i0, template: "yuuvis Momentum\n", styles: [":host{display:grid;align-items:center;justify-content:center;height:100%;overflow:hidden}\n"] }); }
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DashboardPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: DashboardPageComponent, isStandalone: true, selector: "yuv-dashboard", ngImport: i0, template: "yuuvis Momentum\n", styles: [":host{display:grid;align-items:center;justify-content:center;height:100%;overflow:hidden}\n"] }); }
7
7
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DashboardPageComponent, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: DashboardPageComponent, decorators: [{
9
9
  type: Component,
10
10
  args: [{ selector: 'yuv-dashboard', template: "yuuvis Momentum\n", styles: [":host{display:grid;align-items:center;justify-content:center;height:100%;overflow:hidden}\n"] }]
11
11
  }] });
12
12
 
13
13
  export { DashboardPageComponent };
14
- //# sourceMappingURL=yuuvis-client-shell-dashboard.component-BZUsO5MY.mjs.map
14
+ //# sourceMappingURL=yuuvis-client-shell-dashboard.component-BD2Xo3VR.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-shell-dashboard.component-BZUsO5MY.mjs","sources":["../../../../../libs/yuuvis/client-shell/src/lib/pages/dashboard/dashboard.component.ts","../../../../../libs/yuuvis/client-shell/src/lib/pages/dashboard/dashboard.component.html"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'yuv-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss']\n})\nexport class DashboardPageComponent {}\n","yuuvis Momentum\n"],"names":[],"mappings":";;;MAOa,sBAAsB,CAAA;+GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,yECPnC,mBACA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA,CAAA,CAAA;;4FDMa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"yuuvis-client-shell-dashboard.component-BD2Xo3VR.mjs","sources":["../../../../../libs/yuuvis/client-shell/src/lib/pages/dashboard/dashboard.component.ts","../../../../../libs/yuuvis/client-shell/src/lib/pages/dashboard/dashboard.component.html"],"sourcesContent":["import { Component } from '@angular/core';\n\n@Component({\n selector: 'yuv-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss']\n})\nexport class DashboardPageComponent {}\n","yuuvis Momentum\n"],"names":[],"mappings":";;;MAOa,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,yECPnC,mBACA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA,CAAA,CAAA;;2FDMa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBALlC,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,6FAAA,CAAA,EAAA;;;;;"}
@@ -38,18 +38,18 @@ class SettingsPageComponent {
38
38
  this.currentTheme = computed(() => {
39
39
  const ct = this.#themeService.customTheme();
40
40
  return ct ? ct.key : undefined;
41
- }, ...(ngDevMode ? [{ debugName: "currentTheme" }] : []));
42
- this.clientLocales = signal([], ...(ngDevMode ? [{ debugName: "clientLocales" }] : []));
43
- this.clientVersion = signal(undefined, ...(ngDevMode ? [{ debugName: "clientVersion" }] : []));
44
- this.clientAboutData = signal(undefined, ...(ngDevMode ? [{ debugName: "clientAboutData" }] : []));
41
+ }, ...(ngDevMode ? [{ debugName: "currentTheme" }] : /* istanbul ignore next */ []));
42
+ this.clientLocales = signal([], ...(ngDevMode ? [{ debugName: "clientLocales" }] : /* istanbul ignore next */ []));
43
+ this.clientVersion = signal(undefined, ...(ngDevMode ? [{ debugName: "clientVersion" }] : /* istanbul ignore next */ []));
44
+ this.clientAboutData = signal(undefined, ...(ngDevMode ? [{ debugName: "clientAboutData" }] : /* istanbul ignore next */ []));
45
45
  this.currentMode = this.#themeService.mode;
46
46
  this.user = toSignal(this.userService.user$);
47
- this.appSettings = signal([], ...(ngDevMode ? [{ debugName: "appSettings" }] : []));
47
+ this.appSettings = signal([], ...(ngDevMode ? [{ debugName: "appSettings" }] : /* istanbul ignore next */ []));
48
48
  this.#appSettings = this.shell.appSettings;
49
49
  this.#appSettingsEffect = effect(() => {
50
50
  const as = this.#appSettings();
51
51
  this.#mapAppSettings(as);
52
- }, ...(ngDevMode ? [{ debugName: "#appSettingsEffect" }] : []));
52
+ }, ...(ngDevMode ? [{ debugName: "#appSettingsEffect" }] : /* istanbul ignore next */ []));
53
53
  this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {
54
54
  this.#mapAppSettings(this.appSettings());
55
55
  });
@@ -103,10 +103,10 @@ class SettingsPageComponent {
103
103
  error: (error) => console.log({ error })
104
104
  });
105
105
  }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SettingsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
107
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: SettingsPageComponent, isStandalone: true, selector: "yuv-settings", ngImport: i0, template: "<header>\n <h1>{{ 'yuv.shell.settings.title' | translate }}</h1>\n <span class=\"subhead\">{{ 'yuv.shell.settings.client.version' | translate }}: {{ clientVersion() }}</span>\n</header>\n\n<main>\n <div class=\"content-container\">\n <!-- User Info -->\n @let user = this.user();\n @if (user) {\n <section class=\"section user\">\n <h2 class=\"section__title\">{{ user.title }}</h2>\n <div class=\"section__body user__data grid\">\n <div class=\"user__data-entry grid-row\">\n <span class=\"user__data-entry-key grid-col grid-col-key\">\n {{ 'yuv.shell.settings.user.email' | translate }}:\n </span>\n <span class=\"user__data-entry-value grid-col grid-col-value\">\n {{ user.email }}\n </span>\n </div>\n <div class=\"user__data-entry grid-row\">\n <span class=\"user__data-entry-key grid-col grid-col-key\">\n {{ 'yuv.shell.settings.tenant' | translate }}:\n </span>\n <span class=\"user__data-entry-value grid-col grid-col-value\">\n {{ user.tenant }}\n </span>\n </div>\n\n <!--<div class=\"user__data\">{{ 'yuv.shell.settings.user.name' | translate }}: {{ user.username }}</div>\n <div class=\"user__data-entry\">{{ 'yuv.shell.settings.user.email' | translate }}: {{ user.email }}</div>\n <div class=\"user__data-entry\">{{ 'yuv.shell.settings.tenant' | translate }}: {{ user.tenant }}</div>-->\n </div>\n </section>\n }\n <!-- Language Settings -->\n <section yuvOfflineDisabled class=\"section\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.language' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"language\"\n [value]=\"translate.currentLang\"\n (valueChange)=\"changeClientLocale($event)\"\n [attr.aria-label]=\"'yuv.shell.settings.language' | translate\"\n >\n @for (locale of clientLocales(); track locale.iso) {\n <mat-button-toggle value=\"{{ locale.iso }}\">{{ locale.label }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </section>\n\n <!-- Mode -->\n @let currentThemeMode = currentMode();\n <section class=\"section\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.mode' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"mode\"\n [value]=\"currentThemeMode\"\n (change)=\"changeMode($event)\"\n [disabled]=\"disableMode()\"\n [attr.aria-label]=\"'yuv.shell.settings.mode' | translate\"\n >\n <mat-button-toggle value=\"light\">{{ 'yuv.shell.settings.mode.light' | translate }}</mat-button-toggle>\n <mat-button-toggle value=\"dark\">{{ 'yuv.shell.settings.mode.dark' | translate }}</mat-button-toggle>\n <mat-button-toggle value=\"system\">{{ 'yuv.shell.settings.mode.system' | translate }}</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <p></p>\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.custom.theme' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"custom-theme\"\n [value]=\"currentTheme()\"\n (change)=\"changeCustomTheme($event)\"\n [attr.aria-label]=\"'yuv.shell.settings.custom.theme' | translate\"\n >\n <mat-button-toggle [value]=\"DEFAULT_THEME.key\" [matTooltip]=\"DEFAULT_THEME.description | translate\">\n {{ DEFAULT_THEME.label | translate }}\n </mat-button-toggle>\n @for (theme of customThemes(); track theme.key) {\n <mat-button-toggle [value]=\"theme.key\">{{ theme.label | translate }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </section>\n\n <!-- app settings -->\n @for (c of appSettings(); track $index) {\n <section class=\"section\">\n <h2 class=\"section__title\">{{ c._label }}</h2>\n <div class=\"section__body\">\n <ng-container *ngComponentOutlet=\"c.component\"></ng-container>\n </div>\n </section>\n }\n\n <!-- About Info -->\n @let libraries = this.clientAboutData()?.libraries;\n @if (libraries) {\n <section class=\"section about\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.about.title' | translate }}</h2>\n <mat-expansion-panel class=\"about__panel\">\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'yuv.shell.settings.dependency-info.title' | translate }}</mat-panel-title>\n <!-- <mat-panel-description>{{ '' | translate }}</mat-panel-description>-->\n </mat-expansion-panel-header>\n\n <ng-template matExpansionPanelContent>\n <div class=\"about__panel-content\">\n <table mat-table [dataSource]=\"libraries\">\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.package' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element.name }}</td>\n </ng-container>\n\n <!-- Version Column -->\n <ng-container matColumnDef=\"version\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.version' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element.version }}</td>\n </ng-container>\n\n <!-- License Column -->\n <ng-container matColumnDef=\"license\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.license' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.link) {\n <a href=\"{{ element.link }}\" target=\"_blank\">{{ element.license }}</a>\n } @else {\n {{ element.license }}\n }\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"['name', 'version', 'license']\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['name', 'version', 'license']\"></tr>\n </table>\n </div>\n </ng-template>\n </mat-expansion-panel>\n </section>\n }\n </div>\n</main>\n", styles: [":host{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto 1fr;grid-template-areas:\"header\" \"settings\";height:100%;overflow:hidden;overflow-y:auto}:host header{grid-area:header;padding:var(--ymt-spacing-3xl)}:host header h1{margin:0}:host header .subhead{font:var(--ymt-font-subhead);color:var(--ymt-text-color-subtle)}:host main{grid-area:settings;padding:var(--ymt-spacing-m);padding-right:0;overflow-y:auto;scrollbar-gutter:stable}:host main .content-container{max-width:900px}:host main section{display:flex;flex-flow:column;padding:var(--ymt-spacing-m);margin-bottom:var(--ymt-spacing-l)}:host main .about__panel-content{overflow-x:auto}:host main .about__panel-content table{background-color:transparent}:host main .grid-row{display:grid;grid-template-columns:minmax(10ch,1fr) 11fr;grid-gap:var(--ymt-spacing-s);grid-template-areas:\"key value\";align-items:baseline}:host main .grid-col-key{font-weight:700;grid-area:key}:host main .grid-col-value{grid-area:value;word-break:break-all}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i2.MatExpansionPanelContent, selector: "ng-template[matExpansionPanelContent]" }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SettingsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SettingsPageComponent, isStandalone: true, selector: "yuv-settings", ngImport: i0, template: "<header>\n <h1>{{ 'yuv.shell.settings.title' | translate }}</h1>\n <span class=\"subhead\">{{ 'yuv.shell.settings.client.version' | translate }}: {{ clientVersion() }}</span>\n</header>\n\n<main>\n <div class=\"content-container\">\n <!-- User Info -->\n @let user = this.user();\n @if (user) {\n <section class=\"section user\">\n <h2 class=\"section__title\">{{ user.title }}</h2>\n <div class=\"section__body user__data grid\">\n <div class=\"user__data-entry grid-row\">\n <span class=\"user__data-entry-key grid-col grid-col-key\">\n {{ 'yuv.shell.settings.user.email' | translate }}:\n </span>\n <span class=\"user__data-entry-value grid-col grid-col-value\">\n {{ user.email }}\n </span>\n </div>\n <div class=\"user__data-entry grid-row\">\n <span class=\"user__data-entry-key grid-col grid-col-key\">\n {{ 'yuv.shell.settings.tenant' | translate }}:\n </span>\n <span class=\"user__data-entry-value grid-col grid-col-value\">\n {{ user.tenant }}\n </span>\n </div>\n\n <!--<div class=\"user__data\">{{ 'yuv.shell.settings.user.name' | translate }}: {{ user.username }}</div>\n <div class=\"user__data-entry\">{{ 'yuv.shell.settings.user.email' | translate }}: {{ user.email }}</div>\n <div class=\"user__data-entry\">{{ 'yuv.shell.settings.tenant' | translate }}: {{ user.tenant }}</div>-->\n </div>\n </section>\n }\n <!-- Language Settings -->\n <section yuvOfflineDisabled class=\"section\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.language' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"language\"\n [value]=\"translate.currentLang\"\n (valueChange)=\"changeClientLocale($event)\"\n [attr.aria-label]=\"'yuv.shell.settings.language' | translate\"\n >\n @for (locale of clientLocales(); track locale.iso) {\n <mat-button-toggle value=\"{{ locale.iso }}\">{{ locale.label }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </section>\n\n <!-- Mode -->\n @let currentThemeMode = currentMode();\n <section class=\"section\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.mode' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"mode\"\n [value]=\"currentThemeMode\"\n (change)=\"changeMode($event)\"\n [disabled]=\"disableMode()\"\n [attr.aria-label]=\"'yuv.shell.settings.mode' | translate\"\n >\n <mat-button-toggle value=\"light\">{{ 'yuv.shell.settings.mode.light' | translate }}</mat-button-toggle>\n <mat-button-toggle value=\"dark\">{{ 'yuv.shell.settings.mode.dark' | translate }}</mat-button-toggle>\n <mat-button-toggle value=\"system\">{{ 'yuv.shell.settings.mode.system' | translate }}</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <p></p>\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.custom.theme' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"custom-theme\"\n [value]=\"currentTheme()\"\n (change)=\"changeCustomTheme($event)\"\n [attr.aria-label]=\"'yuv.shell.settings.custom.theme' | translate\"\n >\n <mat-button-toggle [value]=\"DEFAULT_THEME.key\" [matTooltip]=\"DEFAULT_THEME.description | translate\">\n {{ DEFAULT_THEME.label | translate }}\n </mat-button-toggle>\n @for (theme of customThemes(); track theme.key) {\n <mat-button-toggle [value]=\"theme.key\">{{ theme.label | translate }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </section>\n\n <!-- app settings -->\n @for (c of appSettings(); track $index) {\n <section class=\"section\">\n <h2 class=\"section__title\">{{ c._label }}</h2>\n <div class=\"section__body\">\n <ng-container *ngComponentOutlet=\"c.component\"></ng-container>\n </div>\n </section>\n }\n\n <!-- About Info -->\n @let libraries = this.clientAboutData()?.libraries;\n @if (libraries) {\n <section class=\"section about\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.about.title' | translate }}</h2>\n <mat-expansion-panel class=\"about__panel\">\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'yuv.shell.settings.dependency-info.title' | translate }}</mat-panel-title>\n <!-- <mat-panel-description>{{ '' | translate }}</mat-panel-description>-->\n </mat-expansion-panel-header>\n\n <ng-template matExpansionPanelContent>\n <div class=\"about__panel-content\">\n <table mat-table [dataSource]=\"libraries\">\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.package' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element.name }}</td>\n </ng-container>\n\n <!-- Version Column -->\n <ng-container matColumnDef=\"version\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.version' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element.version }}</td>\n </ng-container>\n\n <!-- License Column -->\n <ng-container matColumnDef=\"license\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.license' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.link) {\n <a href=\"{{ element.link }}\" target=\"_blank\">{{ element.license }}</a>\n } @else {\n {{ element.license }}\n }\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"['name', 'version', 'license']\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['name', 'version', 'license']\"></tr>\n </table>\n </div>\n </ng-template>\n </mat-expansion-panel>\n </section>\n }\n </div>\n</main>\n", styles: [":host{display:grid;grid-template-columns:1fr auto;grid-template-rows:auto 1fr;grid-template-areas:\"header\" \"settings\";height:100%;overflow:hidden;overflow-y:auto}:host header{grid-area:header;padding:var(--ymt-spacing-3xl)}:host header h1{margin:0}:host header .subhead{font:var(--ymt-font-subhead);color:var(--ymt-text-color-subtle)}:host main{grid-area:settings;padding:var(--ymt-spacing-m);padding-right:0;overflow-y:auto;scrollbar-gutter:stable}:host main .content-container{max-width:900px}:host main section{display:flex;flex-flow:column;padding:var(--ymt-spacing-m);margin-bottom:var(--ymt-spacing-l)}:host main .about__panel-content{overflow-x:auto}:host main .about__panel-content table{background-color:transparent}:host main .grid-row{display:grid;grid-template-columns:minmax(10ch,1fr) 11fr;grid-gap:var(--ymt-spacing-s);grid-template-areas:\"key value\";align-items:baseline}:host main .grid-col-key{font-weight:700;grid-area:key}:host main .grid-col-value{grid-area:value;word-break:break-all}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i2.MatExpansionPanelContent, selector: "ng-template[matExpansionPanelContent]" }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
108
108
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SettingsPageComponent, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SettingsPageComponent, decorators: [{
110
110
  type: Component,
111
111
  args: [{ selector: 'yuv-settings', standalone: true, imports: [
112
112
  CommonModule,
@@ -122,4 +122,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
122
122
  }], ctorParameters: () => [] });
123
123
 
124
124
  export { SettingsPageComponent };
125
- //# sourceMappingURL=yuuvis-client-shell-settings.component-CWJzbwdP.mjs.map
125
+ //# sourceMappingURL=yuuvis-client-shell-settings.component-BfiNwFbo.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-shell-settings.component-CWJzbwdP.mjs","sources":["../../../../../libs/yuuvis/client-shell/src/lib/pages/settings/settings.component.ts","../../../../../libs/yuuvis/client-shell/src/lib/pages/settings/settings.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, computed, DOCUMENT, effect, inject, OnInit, Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup } from '@angular/material/button-toggle';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport {\n ConfigService,\n TranslatePipe,\n TranslateService,\n UserService,\n YuvConfigLanguages,\n YuvUser\n} from '@yuuvis/client-core';\nimport {\n DEFAULT_THEME,\n DEFAULT_THEME_KEY,\n HIGH_CONTRAST_THEME_KEY,\n ThemeService\n} from '@yuuvis/client-framework/common';\nimport { ShellAppSettings, ShellService } from '@yuuvis/client-shell-core';\nimport { map } from 'rxjs';\nimport { AboutData } from './settings.model';\n\n@Component({\n selector: 'yuv-settings',\n standalone: true,\n imports: [\n CommonModule,\n TranslatePipe,\n MatTooltip,\n MatSelectModule,\n ReactiveFormsModule,\n MatButtonToggleGroup,\n MatButtonToggle,\n MatExpansionModule,\n MatTableModule\n ],\n templateUrl: './settings.component.html',\n styleUrls: ['./settings.component.scss']\n})\nexport class SettingsPageComponent implements OnInit {\n private userService = inject(UserService);\n private config = inject(ConfigService);\n public translate = inject(TranslateService);\n private shell = inject(ShellService);\n readonly document = inject(DOCUMENT);\n readonly #themeService = inject(ThemeService);\n readonly #http = inject(HttpClient);\n\n protected readonly DEFAULT_THEME_KEY = DEFAULT_THEME_KEY;\n protected readonly HIGH_CONTRAST_THEME_KEY = HIGH_CONTRAST_THEME_KEY;\n protected readonly DEFAULT_THEME = DEFAULT_THEME;\n disableMode = this.#themeService.disableMode;\n customThemes = this.#themeService.customThemes;\n currentTheme = computed(() => {\n const ct = this.#themeService.customTheme();\n return ct ? ct.key : undefined;\n });\n\n clientLocales = signal<YuvConfigLanguages[]>([]);\n clientVersion = signal<string | undefined>(undefined);\n clientAboutData = signal<AboutData | undefined>(undefined);\n currentMode = this.#themeService.mode;\n\n user: Signal<YuvUser | undefined> = toSignal(this.userService.user$);\n appSettings = signal<(ShellAppSettings & { _label: string })[]>([]);\n #appSettings = this.shell.appSettings;\n #appSettingsEffect = effect(() => {\n const as = this.#appSettings();\n this.#mapAppSettings(as);\n });\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.#mapAppSettings(this.appSettings());\n });\n }\n\n #mapAppSettings(as: ShellAppSettings[]) {\n this.appSettings.set(\n as.map((appSetting) => {\n const translatedLabel = this.translate.instant(appSetting.label);\n const label = translatedLabel && !translatedLabel.startsWith('!missing') ? translatedLabel : appSetting.label;\n return {\n ...appSetting,\n _label: label\n };\n })\n );\n }\n\n changeClientLocale(iso: string) {\n this.userService.changeClientLocale(iso);\n }\n\n changeMode({ value }: MatButtonToggleChange) {\n if (value && value !== this.currentMode()) {\n this.#themeService.toggleTheme(value);\n }\n }\n\n toggleDarkMode() {\n const root = document.getElementsByTagName('body')[0];\n root.classList.toggle('dark');\n }\n\n changeCustomTheme({ value }: MatButtonToggleChange) {\n this.#themeService.setCustomTheme(value);\n }\n\n ngOnInit(): void {\n this.clientVersion.set(this.document.body.getAttribute('data-version') ?? 'dev');\n\n this.clientLocales.set(this.config.getClientLocales());\n this.getAboutData();\n }\n\n getAboutData() {\n this.#http\n .get('assets/about.data.json')\n .pipe(\n map((response: AboutData) => ({\n ...response,\n libraries: response.libraries\n ? response.libraries.map((lib) => ({\n ...lib,\n ...(lib.license !== 'SEE LICENSE IN LICENSE'\n ? { link: `https://opensource.org/license/${lib.license}` }\n : {})\n }))\n : undefined\n }))\n )\n .subscribe({\n next: (response: AboutData) => this.clientAboutData.set(response),\n error: (error) => console.log({ error })\n });\n }\n}\n","<header>\n <h1>{{ 'yuv.shell.settings.title' | translate }}</h1>\n <span class=\"subhead\">{{ 'yuv.shell.settings.client.version' | translate }}: {{ clientVersion() }}</span>\n</header>\n\n<main>\n <div class=\"content-container\">\n <!-- User Info -->\n @let user = this.user();\n @if (user) {\n <section class=\"section user\">\n <h2 class=\"section__title\">{{ user.title }}</h2>\n <div class=\"section__body user__data grid\">\n <div class=\"user__data-entry grid-row\">\n <span class=\"user__data-entry-key grid-col grid-col-key\">\n {{ 'yuv.shell.settings.user.email' | translate }}:\n </span>\n <span class=\"user__data-entry-value grid-col grid-col-value\">\n {{ user.email }}\n </span>\n </div>\n <div class=\"user__data-entry grid-row\">\n <span class=\"user__data-entry-key grid-col grid-col-key\">\n {{ 'yuv.shell.settings.tenant' | translate }}:\n </span>\n <span class=\"user__data-entry-value grid-col grid-col-value\">\n {{ user.tenant }}\n </span>\n </div>\n\n <!--<div class=\"user__data\">{{ 'yuv.shell.settings.user.name' | translate }}: {{ user.username }}</div>\n <div class=\"user__data-entry\">{{ 'yuv.shell.settings.user.email' | translate }}: {{ user.email }}</div>\n <div class=\"user__data-entry\">{{ 'yuv.shell.settings.tenant' | translate }}: {{ user.tenant }}</div>-->\n </div>\n </section>\n }\n <!-- Language Settings -->\n <section yuvOfflineDisabled class=\"section\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.language' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"language\"\n [value]=\"translate.currentLang\"\n (valueChange)=\"changeClientLocale($event)\"\n [attr.aria-label]=\"'yuv.shell.settings.language' | translate\"\n >\n @for (locale of clientLocales(); track locale.iso) {\n <mat-button-toggle value=\"{{ locale.iso }}\">{{ locale.label }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </section>\n\n <!-- Mode -->\n @let currentThemeMode = currentMode();\n <section class=\"section\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.mode' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"mode\"\n [value]=\"currentThemeMode\"\n (change)=\"changeMode($event)\"\n [disabled]=\"disableMode()\"\n [attr.aria-label]=\"'yuv.shell.settings.mode' | translate\"\n >\n <mat-button-toggle value=\"light\">{{ 'yuv.shell.settings.mode.light' | translate }}</mat-button-toggle>\n <mat-button-toggle value=\"dark\">{{ 'yuv.shell.settings.mode.dark' | translate }}</mat-button-toggle>\n <mat-button-toggle value=\"system\">{{ 'yuv.shell.settings.mode.system' | translate }}</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <p></p>\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.custom.theme' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"custom-theme\"\n [value]=\"currentTheme()\"\n (change)=\"changeCustomTheme($event)\"\n [attr.aria-label]=\"'yuv.shell.settings.custom.theme' | translate\"\n >\n <mat-button-toggle [value]=\"DEFAULT_THEME.key\" [matTooltip]=\"DEFAULT_THEME.description | translate\">\n {{ DEFAULT_THEME.label | translate }}\n </mat-button-toggle>\n @for (theme of customThemes(); track theme.key) {\n <mat-button-toggle [value]=\"theme.key\">{{ theme.label | translate }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </section>\n\n <!-- app settings -->\n @for (c of appSettings(); track $index) {\n <section class=\"section\">\n <h2 class=\"section__title\">{{ c._label }}</h2>\n <div class=\"section__body\">\n <ng-container *ngComponentOutlet=\"c.component\"></ng-container>\n </div>\n </section>\n }\n\n <!-- About Info -->\n @let libraries = this.clientAboutData()?.libraries;\n @if (libraries) {\n <section class=\"section about\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.about.title' | translate }}</h2>\n <mat-expansion-panel class=\"about__panel\">\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'yuv.shell.settings.dependency-info.title' | translate }}</mat-panel-title>\n <!-- <mat-panel-description>{{ '' | translate }}</mat-panel-description>-->\n </mat-expansion-panel-header>\n\n <ng-template matExpansionPanelContent>\n <div class=\"about__panel-content\">\n <table mat-table [dataSource]=\"libraries\">\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.package' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element.name }}</td>\n </ng-container>\n\n <!-- Version Column -->\n <ng-container matColumnDef=\"version\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.version' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element.version }}</td>\n </ng-container>\n\n <!-- License Column -->\n <ng-container matColumnDef=\"license\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.license' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.link) {\n <a href=\"{{ element.link }}\" target=\"_blank\">{{ element.license }}</a>\n } @else {\n {{ element.license }}\n }\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"['name', 'version', 'license']\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['name', 'version', 'license']\"></tr>\n </table>\n </div>\n </ng-template>\n </mat-expansion-panel>\n </section>\n }\n </div>\n</main>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;MA6Ca,qBAAqB,CAAA;AAMvB,IAAA,aAAa;AACb,IAAA,KAAK;AAmBd,IAAA,YAAY;AACZ,IAAA,kBAAkB;AAKlB,IAAA,WAAA,GAAA;AA/BQ,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;AAC/B,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC;AACpC,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;QAEhB,IAAA,CAAA,iBAAiB,GAAG,iBAAiB;QACrC,IAAA,CAAA,uBAAuB,GAAG,uBAAuB;QACjD,IAAA,CAAA,aAAa,GAAG,aAAa;AAChD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW;AAC5C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY;AAC9C,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,SAAS;AAChC,QAAA,CAAC,wDAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAuB,EAAE,yDAAC;AAChD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAqB,SAAS,yDAAC;AACrD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAwB,SAAS,2DAAC;AAC1D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI;QAErC,IAAA,CAAA,IAAI,GAAgC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACpE,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA4C,EAAE,uDAAC;AACnE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,MAAK;AAC/B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9B,YAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;AAC1B,QAAA,CAAC,8DAAC;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;YACpE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AAC1C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,EAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAClB,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,KAAI;AACpB,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;YAChE,MAAM,KAAK,GAAG,eAAe,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,eAAe,GAAG,UAAU,CAAC,KAAK;YAC7G,OAAO;AACL,gBAAA,GAAG,UAAU;AACb,gBAAA,MAAM,EAAE;aACT;QACH,CAAC,CAAC,CACH;IACH;AAEA,IAAA,kBAAkB,CAAC,GAAW,EAAA;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,GAAG,CAAC;IAC1C;IAEA,UAAU,CAAC,EAAE,KAAK,EAAyB,EAAA;QACzC,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC;QACvC;IACF;IAEA,cAAc,GAAA;QACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;IAC/B;IAEA,iBAAiB,CAAC,EAAE,KAAK,EAAyB,EAAA;AAChD,QAAA,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC;IAC1C;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC;AAEhF,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACtD,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,YAAY,GAAA;AACV,QAAA,IAAI,CAAC;aACF,GAAG,CAAC,wBAAwB;aAC5B,IAAI,CACH,GAAG,CAAC,CAAC,QAAmB,MAAM;AAC5B,YAAA,GAAG,QAAQ;YACX,SAAS,EAAE,QAAQ,CAAC;AAClB,kBAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AAC/B,oBAAA,GAAG,GAAG;AACN,oBAAA,IAAI,GAAG,CAAC,OAAO,KAAK;0BAChB,EAAE,IAAI,EAAE,kCAAkC,GAAG,CAAC,OAAO,CAAA,CAAE;0BACvD,EAAE;AACP,iBAAA,CAAC;AACJ,kBAAE;AACL,SAAA,CAAC,CAAC;AAEJ,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAmB,KAAK,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjE,YAAA,KAAK,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;AACxC,SAAA,CAAC;IACN;+GAjGW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,wEC7ClC,8oNA0JA,EAAA,MAAA,EAAA,CAAA,u/BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1HI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,kCAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAEZ,UAAU,gRACV,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,oBAAoB,kTACpB,eAAe,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAClB,cAAc,kgCAPd,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAYJ,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,aAAa;wBACb,UAAU;wBACV,eAAe;wBACf,mBAAmB;wBACnB,oBAAoB;wBACpB,eAAe;wBACf,kBAAkB;wBAClB;AACD,qBAAA,EAAA,QAAA,EAAA,8oNAAA,EAAA,MAAA,EAAA,CAAA,u/BAAA,CAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"yuuvis-client-shell-settings.component-BfiNwFbo.mjs","sources":["../../../../../libs/yuuvis/client-shell/src/lib/pages/settings/settings.component.ts","../../../../../libs/yuuvis/client-shell/src/lib/pages/settings/settings.component.html"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Component, computed, DOCUMENT, effect, inject, OnInit, Signal, signal } from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonToggle, MatButtonToggleChange, MatButtonToggleGroup } from '@angular/material/button-toggle';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport {\n ConfigService,\n TranslatePipe,\n TranslateService,\n UserService,\n YuvConfigLanguages,\n YuvUser\n} from '@yuuvis/client-core';\nimport {\n DEFAULT_THEME,\n DEFAULT_THEME_KEY,\n HIGH_CONTRAST_THEME_KEY,\n ThemeService\n} from '@yuuvis/client-framework/common';\nimport { ShellAppSettings, ShellService } from '@yuuvis/client-shell-core';\nimport { map } from 'rxjs';\nimport { AboutData } from './settings.model';\n\n@Component({\n selector: 'yuv-settings',\n standalone: true,\n imports: [\n CommonModule,\n TranslatePipe,\n MatTooltip,\n MatSelectModule,\n ReactiveFormsModule,\n MatButtonToggleGroup,\n MatButtonToggle,\n MatExpansionModule,\n MatTableModule\n ],\n templateUrl: './settings.component.html',\n styleUrls: ['./settings.component.scss']\n})\nexport class SettingsPageComponent implements OnInit {\n private userService = inject(UserService);\n private config = inject(ConfigService);\n public translate = inject(TranslateService);\n private shell = inject(ShellService);\n readonly document = inject(DOCUMENT);\n readonly #themeService = inject(ThemeService);\n readonly #http = inject(HttpClient);\n\n protected readonly DEFAULT_THEME_KEY = DEFAULT_THEME_KEY;\n protected readonly HIGH_CONTRAST_THEME_KEY = HIGH_CONTRAST_THEME_KEY;\n protected readonly DEFAULT_THEME = DEFAULT_THEME;\n disableMode = this.#themeService.disableMode;\n customThemes = this.#themeService.customThemes;\n currentTheme = computed(() => {\n const ct = this.#themeService.customTheme();\n return ct ? ct.key : undefined;\n });\n\n clientLocales = signal<YuvConfigLanguages[]>([]);\n clientVersion = signal<string | undefined>(undefined);\n clientAboutData = signal<AboutData | undefined>(undefined);\n currentMode = this.#themeService.mode;\n\n user: Signal<YuvUser | undefined> = toSignal(this.userService.user$);\n appSettings = signal<(ShellAppSettings & { _label: string })[]>([]);\n #appSettings = this.shell.appSettings;\n #appSettingsEffect = effect(() => {\n const as = this.#appSettings();\n this.#mapAppSettings(as);\n });\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.#mapAppSettings(this.appSettings());\n });\n }\n\n #mapAppSettings(as: ShellAppSettings[]) {\n this.appSettings.set(\n as.map((appSetting) => {\n const translatedLabel = this.translate.instant(appSetting.label);\n const label = translatedLabel && !translatedLabel.startsWith('!missing') ? translatedLabel : appSetting.label;\n return {\n ...appSetting,\n _label: label\n };\n })\n );\n }\n\n changeClientLocale(iso: string) {\n this.userService.changeClientLocale(iso);\n }\n\n changeMode({ value }: MatButtonToggleChange) {\n if (value && value !== this.currentMode()) {\n this.#themeService.toggleTheme(value);\n }\n }\n\n toggleDarkMode() {\n const root = document.getElementsByTagName('body')[0];\n root.classList.toggle('dark');\n }\n\n changeCustomTheme({ value }: MatButtonToggleChange) {\n this.#themeService.setCustomTheme(value);\n }\n\n ngOnInit(): void {\n this.clientVersion.set(this.document.body.getAttribute('data-version') ?? 'dev');\n\n this.clientLocales.set(this.config.getClientLocales());\n this.getAboutData();\n }\n\n getAboutData() {\n this.#http\n .get('assets/about.data.json')\n .pipe(\n map((response: AboutData) => ({\n ...response,\n libraries: response.libraries\n ? response.libraries.map((lib) => ({\n ...lib,\n ...(lib.license !== 'SEE LICENSE IN LICENSE'\n ? { link: `https://opensource.org/license/${lib.license}` }\n : {})\n }))\n : undefined\n }))\n )\n .subscribe({\n next: (response: AboutData) => this.clientAboutData.set(response),\n error: (error) => console.log({ error })\n });\n }\n}\n","<header>\n <h1>{{ 'yuv.shell.settings.title' | translate }}</h1>\n <span class=\"subhead\">{{ 'yuv.shell.settings.client.version' | translate }}: {{ clientVersion() }}</span>\n</header>\n\n<main>\n <div class=\"content-container\">\n <!-- User Info -->\n @let user = this.user();\n @if (user) {\n <section class=\"section user\">\n <h2 class=\"section__title\">{{ user.title }}</h2>\n <div class=\"section__body user__data grid\">\n <div class=\"user__data-entry grid-row\">\n <span class=\"user__data-entry-key grid-col grid-col-key\">\n {{ 'yuv.shell.settings.user.email' | translate }}:\n </span>\n <span class=\"user__data-entry-value grid-col grid-col-value\">\n {{ user.email }}\n </span>\n </div>\n <div class=\"user__data-entry grid-row\">\n <span class=\"user__data-entry-key grid-col grid-col-key\">\n {{ 'yuv.shell.settings.tenant' | translate }}:\n </span>\n <span class=\"user__data-entry-value grid-col grid-col-value\">\n {{ user.tenant }}\n </span>\n </div>\n\n <!--<div class=\"user__data\">{{ 'yuv.shell.settings.user.name' | translate }}: {{ user.username }}</div>\n <div class=\"user__data-entry\">{{ 'yuv.shell.settings.user.email' | translate }}: {{ user.email }}</div>\n <div class=\"user__data-entry\">{{ 'yuv.shell.settings.tenant' | translate }}: {{ user.tenant }}</div>-->\n </div>\n </section>\n }\n <!-- Language Settings -->\n <section yuvOfflineDisabled class=\"section\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.language' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"language\"\n [value]=\"translate.currentLang\"\n (valueChange)=\"changeClientLocale($event)\"\n [attr.aria-label]=\"'yuv.shell.settings.language' | translate\"\n >\n @for (locale of clientLocales(); track locale.iso) {\n <mat-button-toggle value=\"{{ locale.iso }}\">{{ locale.label }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </section>\n\n <!-- Mode -->\n @let currentThemeMode = currentMode();\n <section class=\"section\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.mode' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"mode\"\n [value]=\"currentThemeMode\"\n (change)=\"changeMode($event)\"\n [disabled]=\"disableMode()\"\n [attr.aria-label]=\"'yuv.shell.settings.mode' | translate\"\n >\n <mat-button-toggle value=\"light\">{{ 'yuv.shell.settings.mode.light' | translate }}</mat-button-toggle>\n <mat-button-toggle value=\"dark\">{{ 'yuv.shell.settings.mode.dark' | translate }}</mat-button-toggle>\n <mat-button-toggle value=\"system\">{{ 'yuv.shell.settings.mode.system' | translate }}</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <p></p>\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.custom.theme' | translate }}</h2>\n <div class=\"section__body\">\n <mat-button-toggle-group\n name=\"custom-theme\"\n [value]=\"currentTheme()\"\n (change)=\"changeCustomTheme($event)\"\n [attr.aria-label]=\"'yuv.shell.settings.custom.theme' | translate\"\n >\n <mat-button-toggle [value]=\"DEFAULT_THEME.key\" [matTooltip]=\"DEFAULT_THEME.description | translate\">\n {{ DEFAULT_THEME.label | translate }}\n </mat-button-toggle>\n @for (theme of customThemes(); track theme.key) {\n <mat-button-toggle [value]=\"theme.key\">{{ theme.label | translate }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n </div>\n </section>\n\n <!-- app settings -->\n @for (c of appSettings(); track $index) {\n <section class=\"section\">\n <h2 class=\"section__title\">{{ c._label }}</h2>\n <div class=\"section__body\">\n <ng-container *ngComponentOutlet=\"c.component\"></ng-container>\n </div>\n </section>\n }\n\n <!-- About Info -->\n @let libraries = this.clientAboutData()?.libraries;\n @if (libraries) {\n <section class=\"section about\">\n <h2 class=\"section__title\">{{ 'yuv.shell.settings.about.title' | translate }}</h2>\n <mat-expansion-panel class=\"about__panel\">\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'yuv.shell.settings.dependency-info.title' | translate }}</mat-panel-title>\n <!-- <mat-panel-description>{{ '' | translate }}</mat-panel-description>-->\n </mat-expansion-panel-header>\n\n <ng-template matExpansionPanelContent>\n <div class=\"about__panel-content\">\n <table mat-table [dataSource]=\"libraries\">\n <!-- Name Column -->\n <ng-container matColumnDef=\"name\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.package' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element.name }}</td>\n </ng-container>\n\n <!-- Version Column -->\n <ng-container matColumnDef=\"version\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.version' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">{{ element.version }}</td>\n </ng-container>\n\n <!-- License Column -->\n <ng-container matColumnDef=\"license\">\n <th mat-header-cell *matHeaderCellDef>\n {{ 'yuv.shell.settings.dependency-info.license' | translate }}\n </th>\n <td mat-cell *matCellDef=\"let element\">\n @if (element.link) {\n <a href=\"{{ element.link }}\" target=\"_blank\">{{ element.license }}</a>\n } @else {\n {{ element.license }}\n }\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"['name', 'version', 'license']\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['name', 'version', 'license']\"></tr>\n </table>\n </div>\n </ng-template>\n </mat-expansion-panel>\n </section>\n }\n </div>\n</main>\n"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ class WidgetDashboardPageComponent {
10
10
  constructor() {
11
11
  this.#appCache = inject(AppCacheService);
12
12
  this.#STORAGE_KEY = 'widgetGridWorkspaceConfig';
13
- this.wsConfig = signal(undefined, ...(ngDevMode ? [{ debugName: "wsConfig" }] : []));
13
+ this.wsConfig = signal(undefined, ...(ngDevMode ? [{ debugName: "wsConfig" }] : /* istanbul ignore next */ []));
14
14
  // load persisted config
15
15
  // TODO: Use shell-config.service to store that config using system:item
16
16
  this.#appCache.getItem(this.#STORAGE_KEY).subscribe((config) => {
@@ -28,10 +28,10 @@ class WidgetDashboardPageComponent {
28
28
  onEditModeChange(editMode) {
29
29
  // console.log('Edit mode changed:', editMode);
30
30
  }
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WidgetDashboardPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: WidgetDashboardPageComponent, isStandalone: true, selector: "yuv-widget-dashboard", ngImport: i0, template: "<yuv-widget-grid-workspaces \n[workspaceConfig]=\"wsConfig()\"\n(gridItemEvent)=\"onGridItemEvent($event)\"\n(editModeChange)=\"onEditModeChange($event)\"\n(configChange)=\"onConfigChange($event)\"></yuv-widget-grid-workspaces>", styles: [":host{display:block;padding:var(--ymt-spacing-m);height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: YuvWidgetGridModule }, { kind: "component", type: i1.YuvWidgetGridWorkspacesComponent, selector: "yuv-widget-grid-workspaces", inputs: ["options", "workspaceConfig", "buckets"], outputs: ["configChange", "gridItemEvent", "editModeChange"] }] }); }
31
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WidgetDashboardPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
32
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: WidgetDashboardPageComponent, isStandalone: true, selector: "yuv-widget-dashboard", ngImport: i0, template: "<yuv-widget-grid-workspaces \n[workspaceConfig]=\"wsConfig()\"\n(gridItemEvent)=\"onGridItemEvent($event)\"\n(editModeChange)=\"onEditModeChange($event)\"\n(configChange)=\"onConfigChange($event)\"></yuv-widget-grid-workspaces>", styles: [":host{display:block;padding:var(--ymt-spacing-m);height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: YuvWidgetGridModule }, { kind: "component", type: i1.YuvWidgetGridWorkspacesComponent, selector: "yuv-widget-grid-workspaces", inputs: ["options", "workspaceConfig", "buckets"], outputs: ["configChange", "gridItemEvent", "editModeChange"] }] }); }
33
33
  }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: WidgetDashboardPageComponent, decorators: [{
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WidgetDashboardPageComponent, decorators: [{
35
35
  type: Component,
36
36
  args: [{ selector: 'yuv-widget-dashboard', imports: [YuvWidgetGridModule], template: "<yuv-widget-grid-workspaces \n[workspaceConfig]=\"wsConfig()\"\n(gridItemEvent)=\"onGridItemEvent($event)\"\n(editModeChange)=\"onEditModeChange($event)\"\n(configChange)=\"onConfigChange($event)\"></yuv-widget-grid-workspaces>", styles: [":host{display:block;padding:var(--ymt-spacing-m);height:100%;box-sizing:border-box}\n"] }]
37
37
  }], ctorParameters: () => [] });
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-shell-widget-dashboard.mjs","sources":["../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/widget-dashboard.component.ts","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/widget-dashboard.component.html","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/widget-dashboard.interface.ts","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/provide.widget-dashboard.ts","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/lib.routes.ts","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/yuuvis-client-shell-widget-dashboard.ts"],"sourcesContent":["import { Component, inject, signal } from '@angular/core';\n\nimport { YuvWidgetGridModule, WidgetGridWorkspaceConfig } from '@yuuvis/client-framework/widget-grid';\nimport { AppCacheService } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-widget-dashboard',\n imports: [YuvWidgetGridModule],\n templateUrl: './widget-dashboard.component.html',\n styleUrl: './widget-dashboard.component.scss'\n})\nexport class WidgetDashboardPageComponent {\n #appCache = inject(AppCacheService);\n\n #STORAGE_KEY = 'widgetGridWorkspaceConfig';\n wsConfig = signal<WidgetGridWorkspaceConfig | undefined>(undefined);\n\n constructor() {\n // load persisted config\n // TODO: Use shell-config.service to store that config using system:item\n this.#appCache.getItem(this.#STORAGE_KEY).subscribe((config) => {\n this.wsConfig.set(config);\n });\n }\n \n onConfigChange(config: WidgetGridWorkspaceConfig | undefined) {\n // persist config\n // TODO: Use shell-config.service to store that config using system:item\n this.#appCache.setItem(this.#STORAGE_KEY, config).subscribe();\n }\n\n onGridItemEvent(event: any) {\n // console.log('Item event:', event);\n }\n\n onEditModeChange(editMode: boolean) {\n // console.log('Edit mode changed:', editMode);\n }\n}\n","<yuv-widget-grid-workspaces \n[workspaceConfig]=\"wsConfig()\"\n(gridItemEvent)=\"onGridItemEvent($event)\"\n(editModeChange)=\"onEditModeChange($event)\"\n(configChange)=\"onConfigChange($event)\"></yuv-widget-grid-workspaces>","import { InjectionToken } from \"@angular/core\";\n\nexport const WIDGET_DASHBOARD_CONFIG = new InjectionToken('WIDGET_DASHBOARD_CONFIG');\n\nexport interface WidgetDashboardConfig {\n id: string;\n buckets?: string[];\n workspaces?: boolean;\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { WIDGET_DASHBOARD_CONFIG, WidgetDashboardConfig } from './widget-dashboard.interface';\n\n\nexport const provideYuvWidgetDashboard = (config: WidgetDashboardConfig): EnvironmentProviders => {\n return makeEnvironmentProviders([\n {\n provide: WIDGET_DASHBOARD_CONFIG,\n useValue: config\n }\n ]);\n};\n","import { Route } from '@angular/router';\nimport { WidgetDashboardPageComponent } from './widget-dashboard.component';\n\nexport const WidgetDashboardRoutes: Route[] = [\n { path: '', component: WidgetDashboardPageComponent },\n { path: '**', redirectTo: '/' }\n ]\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAWa,4BAA4B,CAAA;AACvC,IAAA,SAAS;AAET,IAAA,YAAY;AAGZ,IAAA,WAAA,GAAA;AALA,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;QAEnC,IAAA,CAAA,YAAY,GAAG,2BAA2B;AAC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAwC,SAAS,oDAAC;;;AAKjE,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC7D,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,MAA6C,EAAA;;;AAG1D,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE;IAC/D;AAEA,IAAA,eAAe,CAAC,KAAU,EAAA;;IAE1B;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;;IAElC;+GA1BW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXzC,qOAIqE,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDGzD,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gCAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIlB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,SAAS;+BACE,sBAAsB,EAAA,OAAA,EACvB,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,qOAAA,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA;;;MELnB,uBAAuB,GAAG,IAAI,cAAc,CAAC,yBAAyB;;ACE5E,MAAM,yBAAyB,GAAG,CAAC,MAA6B,KAA0B;AAC/F,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,uBAAuB;AAChC,YAAA,QAAQ,EAAE;AACX;AACF,KAAA,CAAC;AACJ;;ACRO,MAAM,qBAAqB,GAAY;AAC1C,IAAA,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,4BAA4B,EAAE;AACrD,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG;;;ACLjC;;AAEG;;;;"}
1
+ {"version":3,"file":"yuuvis-client-shell-widget-dashboard.mjs","sources":["../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/widget-dashboard.component.ts","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/widget-dashboard.component.html","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/widget-dashboard.interface.ts","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/provide.widget-dashboard.ts","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/lib/lib.routes.ts","../../../../../libs/yuuvis/client-shell/widget-dashboard/src/yuuvis-client-shell-widget-dashboard.ts"],"sourcesContent":["import { Component, inject, signal } from '@angular/core';\n\nimport { YuvWidgetGridModule, WidgetGridWorkspaceConfig } from '@yuuvis/client-framework/widget-grid';\nimport { AppCacheService } from '@yuuvis/client-core';\n\n@Component({\n selector: 'yuv-widget-dashboard',\n imports: [YuvWidgetGridModule],\n templateUrl: './widget-dashboard.component.html',\n styleUrl: './widget-dashboard.component.scss'\n})\nexport class WidgetDashboardPageComponent {\n #appCache = inject(AppCacheService);\n\n #STORAGE_KEY = 'widgetGridWorkspaceConfig';\n wsConfig = signal<WidgetGridWorkspaceConfig | undefined>(undefined);\n\n constructor() {\n // load persisted config\n // TODO: Use shell-config.service to store that config using system:item\n this.#appCache.getItem(this.#STORAGE_KEY).subscribe((config) => {\n this.wsConfig.set(config);\n });\n }\n \n onConfigChange(config: WidgetGridWorkspaceConfig | undefined) {\n // persist config\n // TODO: Use shell-config.service to store that config using system:item\n this.#appCache.setItem(this.#STORAGE_KEY, config).subscribe();\n }\n\n onGridItemEvent(event: any) {\n // console.log('Item event:', event);\n }\n\n onEditModeChange(editMode: boolean) {\n // console.log('Edit mode changed:', editMode);\n }\n}\n","<yuv-widget-grid-workspaces \n[workspaceConfig]=\"wsConfig()\"\n(gridItemEvent)=\"onGridItemEvent($event)\"\n(editModeChange)=\"onEditModeChange($event)\"\n(configChange)=\"onConfigChange($event)\"></yuv-widget-grid-workspaces>","import { InjectionToken } from \"@angular/core\";\n\nexport const WIDGET_DASHBOARD_CONFIG = new InjectionToken('WIDGET_DASHBOARD_CONFIG');\n\nexport interface WidgetDashboardConfig {\n id: string;\n buckets?: string[];\n workspaces?: boolean;\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\nimport { WIDGET_DASHBOARD_CONFIG, WidgetDashboardConfig } from './widget-dashboard.interface';\n\n\nexport const provideYuvWidgetDashboard = (config: WidgetDashboardConfig): EnvironmentProviders => {\n return makeEnvironmentProviders([\n {\n provide: WIDGET_DASHBOARD_CONFIG,\n useValue: config\n }\n ]);\n};\n","import { Route } from '@angular/router';\nimport { WidgetDashboardPageComponent } from './widget-dashboard.component';\n\nexport const WidgetDashboardRoutes: Route[] = [\n { path: '', component: WidgetDashboardPageComponent },\n { path: '**', redirectTo: '/' }\n ]\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAWa,4BAA4B,CAAA;AACvC,IAAA,SAAS;AAET,IAAA,YAAY;AAGZ,IAAA,WAAA,GAAA;AALA,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,eAAe,CAAC;QAEnC,IAAA,CAAA,YAAY,GAAG,2BAA2B;AAC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAwC,SAAS,+EAAC;;;AAKjE,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC7D,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AAC3B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,MAA6C,EAAA;;;AAG1D,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE;IAC/D;AAEA,IAAA,eAAe,CAAC,KAAU,EAAA;;IAE1B;AAEA,IAAA,gBAAgB,CAAC,QAAiB,EAAA;;IAElC;8GA1BW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXzC,qOAIqE,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDGzD,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gCAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,eAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAIlB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBANxC,SAAS;+BACE,sBAAsB,EAAA,OAAA,EACvB,CAAC,mBAAmB,CAAC,EAAA,QAAA,EAAA,qOAAA,EAAA,MAAA,EAAA,CAAA,uFAAA,CAAA,EAAA;;;MELnB,uBAAuB,GAAG,IAAI,cAAc,CAAC,yBAAyB;;ACE5E,MAAM,yBAAyB,GAAG,CAAC,MAA6B,KAA0B;AAC/F,IAAA,OAAO,wBAAwB,CAAC;AAC9B,QAAA;AACE,YAAA,OAAO,EAAE,uBAAuB;AAChC,YAAA,QAAQ,EAAE;AACX;AACF,KAAA,CAAC;AACJ;;ACRO,MAAM,qBAAqB,GAAY;AAC1C,IAAA,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,4BAA4B,EAAE;AACrD,IAAA,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG;;;ACLjC;;AAEG;;;;"}