oip-common 0.0.14 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, ChangeDetectorRef, signal, effect, Component, Input, computed, PLATFORM_ID, HostBinding, EventEmitter, Output, ViewChild, Renderer2, Pipe } from '@angular/core';
3
- import * as i2$3 from 'primeng/api';
3
+ import * as i2$4 from 'primeng/api';
4
4
  import { MessageService, ConfirmationService, PrimeIcons, SharedModule } from 'primeng/api';
5
5
  import { HttpErrorResponse, HttpClient as HttpClient$1, HttpHeaders } from '@angular/common/http';
6
- import { TranslateService, TranslatePipe } from '@ngx-translate/core';
6
+ import * as i2$2 from '@ngx-translate/core';
7
+ import { TranslateService, TranslatePipe, TranslateModule } from '@ngx-translate/core';
7
8
  import * as i1$3 from '@angular/router';
8
9
  import { ActivatedRoute, Router, RouterModule, NavigationEnd, RouterLinkActive, RouterLink } from '@angular/router';
9
10
  import { lastValueFrom, BehaviorSubject, Subject, filter as filter$1, combineLatest, of, map as map$1, Observable } from 'rxjs';
@@ -18,7 +19,7 @@ import * as i5 from '@angular/forms';
18
19
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
19
20
  import * as i1$2 from '@angular/common';
20
21
  import { isPlatformBrowser, CommonModule, NgIf, NgClass, NgFor } from '@angular/common';
21
- import * as i4 from 'primeng/styleclass';
22
+ import * as i3$1 from 'primeng/styleclass';
22
23
  import { StyleClassModule } from 'primeng/styleclass';
23
24
  import { updatePreset, updateSurfacePalette, $t } from '@primeng/themes';
24
25
  import Aura from '@primeng/themes/aura';
@@ -30,16 +31,16 @@ import { SelectButtonModule } from 'primeng/selectbutton';
30
31
  import { OidcSecurityService, PublicEventsService, EventTypes, StsConfigHttpLoader } from 'angular-auth-oidc-client';
31
32
  import { filter, map, switchMap, catchError } from 'rxjs/operators';
32
33
  import { Tabs, TabList, Tab } from 'primeng/tabs';
33
- import * as i5$1 from 'primeng/avatar';
34
+ import * as i4 from 'primeng/avatar';
34
35
  import { AvatarModule } from 'primeng/avatar';
35
36
  import * as i1$4 from 'primeng/contextmenu';
36
37
  import { ContextMenuModule, ContextMenu } from 'primeng/contextmenu';
37
38
  import * as i2$1 from 'primeng/dialog';
38
39
  import { DialogModule } from 'primeng/dialog';
39
- import * as i3$2 from 'primeng/inputtext';
40
+ import * as i3$3 from 'primeng/inputtext';
40
41
  import { InputTextModule } from 'primeng/inputtext';
41
42
  import { trigger, state, transition, style, animate } from '@angular/animations';
42
- import * as i3$1 from 'primeng/ripple';
43
+ import * as i3$2 from 'primeng/ripple';
43
44
  import { RippleModule } from 'primeng/ripple';
44
45
  import { ConfirmDialog } from 'primeng/confirmdialog';
45
46
  import * as i4$1 from 'primeng/select';
@@ -50,7 +51,7 @@ import { ImageModule } from 'primeng/image';
50
51
  import { Fluid } from 'primeng/fluid';
51
52
  import * as i1$6 from 'primeng/table';
52
53
  import { TableModule } from 'primeng/table';
53
- import * as i2$2 from 'primeng/toggleswitch';
54
+ import * as i2$3 from 'primeng/toggleswitch';
54
55
  import { ToggleSwitchModule } from 'primeng/toggleswitch';
55
56
  import { TagModule, Tag } from 'primeng/tag';
56
57
  import { TextareaModule } from 'primeng/textarea';
@@ -1226,7 +1227,7 @@ class AppConfiguratorComponent {
1226
1227
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.2", type: AppConfiguratorComponent, isStandalone: true, selector: "app-configurator", host: { classAttribute: "hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]" }, ngImport: i0, template: `
1227
1228
  <div class="flex flex-col gap-4">
1228
1229
  <div>
1229
- <span class="text-sm text-muted-color font-semibold">Primary</span>
1230
+ <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.primary' | translate }}</span>
1230
1231
  <div class="pt-2 flex gap-2 flex-wrap justify-start">
1231
1232
  @for (primaryColor of primaryColors(); track primaryColor.name) {
1232
1233
  <button
@@ -1245,7 +1246,7 @@ class AppConfiguratorComponent {
1245
1246
  </div>
1246
1247
  </div>
1247
1248
  <div>
1248
- <span class="text-sm text-muted-color font-semibold">Surface</span>
1249
+ <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.surface' | translate }}</span>
1249
1250
  <div class="pt-2 flex gap-2 flex-wrap justify-start">
1250
1251
  @for (surface of surfaces; track surface.name) {
1251
1252
  <button
@@ -1268,7 +1269,7 @@ class AppConfiguratorComponent {
1268
1269
  </div>
1269
1270
  </div>
1270
1271
  <div class="flex flex-col gap-2">
1271
- <span class="text-sm text-muted-color font-semibold">Presets</span>
1272
+ <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.presets' | translate }}</span>
1272
1273
  <p-selectButton
1273
1274
  id="oip-app-configurator-preset-select-button"
1274
1275
  size="small"
@@ -1279,7 +1280,7 @@ class AppConfiguratorComponent {
1279
1280
  </div>
1280
1281
  @if (showMenuModeButton()) {
1281
1282
  <div class="flex flex-col gap-2">
1282
- <span class="text-sm text-muted-color font-semibold">Menu Mode</span>
1283
+ <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.menuMode' | translate }}</span>
1283
1284
  <p-selectButton
1284
1285
  id="oip-app-configurator-menu-mode-select-button"
1285
1286
  size="small"
@@ -1290,18 +1291,18 @@ class AppConfiguratorComponent {
1290
1291
  </div>
1291
1292
  }
1292
1293
  </div>
1293
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i3.SelectButton, selector: "p-selectButton, p-selectbutton, p-select-button", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "unselectable", "tabindex", "multiple", "allowEmpty", "styleClass", "ariaLabelledBy", "dataKey", "autofocus", "size", "fluid"], outputs: ["onOptionClick", "onChange"] }] }); }
1294
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i3.SelectButton, selector: "p-selectButton, p-selectbutton, p-select-button", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "unselectable", "tabindex", "multiple", "allowEmpty", "styleClass", "ariaLabelledBy", "dataKey", "autofocus", "size", "fluid"], outputs: ["onOptionClick", "onChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
1294
1295
  }
1295
1296
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppConfiguratorComponent, decorators: [{
1296
1297
  type: Component,
1297
1298
  args: [{
1298
1299
  selector: 'app-configurator',
1299
1300
  standalone: true,
1300
- imports: [CommonModule, FormsModule, SelectButtonModule],
1301
+ imports: [CommonModule, FormsModule, SelectButtonModule, TranslatePipe],
1301
1302
  template: `
1302
1303
  <div class="flex flex-col gap-4">
1303
1304
  <div>
1304
- <span class="text-sm text-muted-color font-semibold">Primary</span>
1305
+ <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.primary' | translate }}</span>
1305
1306
  <div class="pt-2 flex gap-2 flex-wrap justify-start">
1306
1307
  @for (primaryColor of primaryColors(); track primaryColor.name) {
1307
1308
  <button
@@ -1320,7 +1321,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1320
1321
  </div>
1321
1322
  </div>
1322
1323
  <div>
1323
- <span class="text-sm text-muted-color font-semibold">Surface</span>
1324
+ <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.surface' | translate }}</span>
1324
1325
  <div class="pt-2 flex gap-2 flex-wrap justify-start">
1325
1326
  @for (surface of surfaces; track surface.name) {
1326
1327
  <button
@@ -1343,7 +1344,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1343
1344
  </div>
1344
1345
  </div>
1345
1346
  <div class="flex flex-col gap-2">
1346
- <span class="text-sm text-muted-color font-semibold">Presets</span>
1347
+ <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.presets' | translate }}</span>
1347
1348
  <p-selectButton
1348
1349
  id="oip-app-configurator-preset-select-button"
1349
1350
  size="small"
@@ -1354,7 +1355,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1354
1355
  </div>
1355
1356
  @if (showMenuModeButton()) {
1356
1357
  <div class="flex flex-col gap-2">
1357
- <span class="text-sm text-muted-color font-semibold">Menu Mode</span>
1358
+ <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.menuMode' | translate }}</span>
1358
1359
  <p-selectButton
1359
1360
  id="oip-app-configurator-menu-mode-select-button"
1360
1361
  size="small"
@@ -1595,11 +1596,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1595
1596
  }], ctorParameters: () => [] });
1596
1597
 
1597
1598
  class AppTopbar {
1598
- constructor(layoutService) {
1599
- this.layoutService = layoutService;
1599
+ constructor() {
1600
1600
  this.securityService = inject(SecurityService);
1601
1601
  this.topBarService = inject(TopBarService);
1602
1602
  this.userService = inject(UserService);
1603
+ this.layoutService = inject(LayoutService);
1603
1604
  }
1604
1605
  toggleDarkMode() {
1605
1606
  this.layoutService.layoutConfig.update((state) => ({
@@ -1612,7 +1613,7 @@ class AppTopbar {
1612
1613
  this.securityService.logout();
1613
1614
  }
1614
1615
  }
1615
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppTopbar, deps: [{ token: LayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
1616
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppTopbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1616
1617
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.2", type: AppTopbar, isStandalone: true, selector: "app-topbar", ngImport: i0, template: `
1617
1618
  <div class="layout-topbar">
1618
1619
  <div class="layout-topbar-logo-container">
@@ -1621,7 +1622,7 @@ class AppTopbar {
1621
1622
  </button>
1622
1623
  <a class="layout-topbar-logo" id="oip-app-topbar-logo-link" routerLink="">
1623
1624
  <logo [height]="36" [width]="36"></logo>
1624
- <span>OIP</span>
1625
+ <span>{{ 'app-info.title' | translate }}</span>
1625
1626
  </a>
1626
1627
  </div>
1627
1628
 
@@ -1692,7 +1693,7 @@ class AppTopbar {
1692
1693
  (click)="securityService.logout()"
1693
1694
  (keydown)="logoutKeyDown($event)">
1694
1695
  <i class="pi pi-sign-out"></i>
1695
- <span>Logout</span>
1696
+ <span>{{ 'topbar.logout' | translate }}</span>
1696
1697
  </button>
1697
1698
  <button class="layout-topbar-action" routerLink="config">
1698
1699
  <p-avatar
@@ -1703,16 +1704,19 @@ class AppTopbar {
1703
1704
  [image]="userService.photoLoaded ? userService.photo : null"
1704
1705
  >{{ !userService.photoLoaded ? userService.shortLabel : null }}
1705
1706
  </p-avatar>
1706
- <span class="ml-2">Profile</span>
1707
+ <span class="ml-2">{{ 'topbar.profile' | translate }}</span>
1707
1708
  </button>
1708
1709
  </div>
1709
1710
  </div>
1710
1711
  </div>
1711
- </div>`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i4.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfiguratorComponent, selector: "app-configurator" }, { kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "component", type: Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: TabList, selector: "p-tablist" }, { kind: "component", type: Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5$1.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
1712
+ </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i3$1.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfiguratorComponent, selector: "app-configurator" }, { kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "component", type: Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: TabList, selector: "p-tablist" }, { kind: "component", type: Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i4.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
1712
1713
  }
1713
1714
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppTopbar, decorators: [{
1714
1715
  type: Component,
1715
- args: [{ selector: 'app-topbar', standalone: true, imports: [
1716
+ args: [{
1717
+ selector: 'app-topbar',
1718
+ standalone: true,
1719
+ imports: [
1716
1720
  RouterModule,
1717
1721
  CommonModule,
1718
1722
  StyleClassModule,
@@ -1722,8 +1726,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1722
1726
  TabList,
1723
1727
  Tab,
1724
1728
  AvatarModule,
1725
- ButtonModule
1726
- ], template: `
1729
+ ButtonModule,
1730
+ TranslatePipe
1731
+ ],
1732
+ template: `
1727
1733
  <div class="layout-topbar">
1728
1734
  <div class="layout-topbar-logo-container">
1729
1735
  <button class="layout-menu-button layout-topbar-action" (click)="layoutService.onMenuToggle()">
@@ -1731,7 +1737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1731
1737
  </button>
1732
1738
  <a class="layout-topbar-logo" id="oip-app-topbar-logo-link" routerLink="">
1733
1739
  <logo [height]="36" [width]="36"></logo>
1734
- <span>OIP</span>
1740
+ <span>{{ 'app-info.title' | translate }}</span>
1735
1741
  </a>
1736
1742
  </div>
1737
1743
 
@@ -1802,7 +1808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1802
1808
  (click)="securityService.logout()"
1803
1809
  (keydown)="logoutKeyDown($event)">
1804
1810
  <i class="pi pi-sign-out"></i>
1805
- <span>Logout</span>
1811
+ <span>{{ 'topbar.logout' | translate }}</span>
1806
1812
  </button>
1807
1813
  <button class="layout-topbar-action" routerLink="config">
1808
1814
  <p-avatar
@@ -1813,23 +1819,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1813
1819
  [image]="userService.photoLoaded ? userService.photo : null"
1814
1820
  >{{ !userService.photoLoaded ? userService.shortLabel : null }}
1815
1821
  </p-avatar>
1816
- <span class="ml-2">Profile</span>
1822
+ <span class="ml-2">{{ 'topbar.profile' | translate }}</span>
1817
1823
  </button>
1818
1824
  </div>
1819
1825
  </div>
1820
1826
  </div>
1821
- </div>` }]
1822
- }], ctorParameters: () => [{ type: LayoutService }] });
1827
+ </div>`
1828
+ }]
1829
+ }] });
1823
1830
 
1824
1831
  class FooterComponent {
1825
- constructor() { }
1826
1832
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: FooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1827
1833
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.2", type: FooterComponent, isStandalone: true, selector: "app-footer", ngImport: i0, template: `
1828
1834
  <div class="layout-footer">
1829
- <logo class="mr-2" height="18" width="18"></logo>
1830
- <span class="font-medium">OIP</span>
1835
+ <div class="flex justify-center flex-1">
1836
+ <logo class="mr-2 -my-0.5" [height]="18" [width]="18"></logo>
1837
+ <span class="font-medium">{{ 'app-info.footer' | translate }}</span>
1838
+ </div>
1839
+ <p class="mr-auto">{{ 'app-info.version' | translate }}</p>
1831
1840
  </div>
1832
- `, isInline: true, dependencies: [{ kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }] }); }
1841
+ `, isInline: true, dependencies: [{ kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
1833
1842
  }
1834
1843
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: FooterComponent, decorators: [{
1835
1844
  type: Component,
@@ -1837,14 +1846,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
1837
1846
  selector: 'app-footer',
1838
1847
  template: `
1839
1848
  <div class="layout-footer">
1840
- <logo class="mr-2" height="18" width="18"></logo>
1841
- <span class="font-medium">OIP</span>
1849
+ <div class="flex justify-center flex-1">
1850
+ <logo class="mr-2 -my-0.5" [height]="18" [width]="18"></logo>
1851
+ <span class="font-medium">{{ 'app-info.footer' | translate }}</span>
1852
+ </div>
1853
+ <p class="mr-auto">{{ 'app-info.version' | translate }}</p>
1842
1854
  </div>
1843
1855
  `,
1844
1856
  standalone: true,
1845
- imports: [LogoComponent]
1857
+ imports: [LogoComponent, TranslatePipe]
1846
1858
  }]
1847
- }], ctorParameters: () => [] });
1859
+ }] });
1848
1860
 
1849
1861
  /* eslint-disable */
1850
1862
  /* tslint:disable */
@@ -2325,12 +2337,12 @@ class MenuItemComponent {
2325
2337
  });
2326
2338
  }
2327
2339
  editClick(event) {
2328
- this.menuItemEditDialogComponent.showDialog();
2340
+ this.menuItemEditDialogComponent.showDialog().then();
2329
2341
  }
2330
2342
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: MenuItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$3.Router }, { token: MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
2331
2343
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.2", type: MenuItemComponent, isStandalone: true, selector: "[app-menuitem]", inputs: { item: "item", index: "index", root: "root", parentKey: "parentKey", menuItemCreateDialogComponent: "menuItemCreateDialogComponent", menuItemEditDialogComponent: "menuItemEditDialogComponent", contextMenu: "contextMenu" }, host: { properties: { "class.layout-root-menuitem": "this.root", "class.active-menuitem": "this.activeClass" } }, providers: [ConfirmationService], ngImport: i0, template: `
2332
2344
  <ng-container>
2333
- <p-confirm-dialog />
2345
+ <p-confirm-dialog/>
2334
2346
  <div
2335
2347
  *ngIf="root && item.visible !== false"
2336
2348
  class="layout-menuitem-root-text"
@@ -2396,7 +2408,7 @@ class MenuItemComponent {
2396
2408
  </ng-template>
2397
2409
  </ul>
2398
2410
  </ng-container>
2399
- `, isInline: true, dependencies: [{ kind: "component", type: MenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey", "menuItemCreateDialogComponent", "menuItemEditDialogComponent", "contextMenu"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i3$1.Ripple, selector: "[pRipple]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }], animations: [
2411
+ `, isInline: true, dependencies: [{ kind: "component", type: MenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey", "menuItemCreateDialogComponent", "menuItemEditDialogComponent", "contextMenu"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i3$2.Ripple, selector: "[pRipple]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }], animations: [
2400
2412
  trigger('children', [
2401
2413
  state('collapsed', style({
2402
2414
  height: '0'
@@ -2415,7 +2427,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
2415
2427
  selector: '[app-menuitem]',
2416
2428
  template: `
2417
2429
  <ng-container>
2418
- <p-confirm-dialog />
2430
+ <p-confirm-dialog/>
2419
2431
  <div
2420
2432
  *ngIf="root && item.visible !== false"
2421
2433
  class="layout-menuitem-root-text"
@@ -2614,7 +2626,7 @@ class MenuItemCreateDialogComponent {
2614
2626
  (keydown)="save()" />
2615
2627
  </div>
2616
2628
  </p-dialog>
2617
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$2.InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i4$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
2629
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$3.InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i4$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
2618
2630
  }
2619
2631
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: MenuItemCreateDialogComponent, decorators: [{
2620
2632
  type: Component,
@@ -2791,7 +2803,7 @@ class MenuItemEditDialogComponent {
2791
2803
  (keydown)="save()" />
2792
2804
  </div>
2793
2805
  </p-dialog>
2794
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$2.InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i1.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "styleClass", "panelStyle", "panelStyleClass", "inputId", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "dataKey", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "placeholder", "options", "filterValue", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect", "size", "variant", "fluid", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
2806
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2$1.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i3$3.InputText, selector: "[pInputText]", inputs: ["pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i1.MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "styleClass", "panelStyle", "panelStyleClass", "inputId", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "dataKey", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "placeholder", "options", "filterValue", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus", "highlightOnSelect", "size", "variant", "fluid", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
2795
2807
  }
2796
2808
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: MenuItemEditDialogComponent, decorators: [{
2797
2809
  type: Component,
@@ -2884,7 +2896,8 @@ class MenuComponent {
2884
2896
  ];
2885
2897
  }
2886
2898
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2887
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.2", type: MenuComponent, isStandalone: true, selector: "app-menu", providers: [Menu], viewQueries: [{ propertyName: "menuItemCreateDialogComponent", first: true, predicate: MenuItemCreateDialogComponent, descendants: true }, { propertyName: "menuItemEditDialogComponent", first: true, predicate: MenuItemEditDialogComponent, descendants: true }, { propertyName: "contextMenu", first: true, predicate: ContextMenu, descendants: true }], ngImport: i0, template: ` <div #empty class="layout-sidebar" (contextmenu)="onContextMenu($event)">
2899
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.2", type: MenuComponent, isStandalone: true, selector: "app-menu", providers: [Menu], viewQueries: [{ propertyName: "menuItemCreateDialogComponent", first: true, predicate: MenuItemCreateDialogComponent, descendants: true }, { propertyName: "menuItemEditDialogComponent", first: true, predicate: MenuItemEditDialogComponent, descendants: true }, { propertyName: "contextMenu", first: true, predicate: ContextMenu, descendants: true }], ngImport: i0, template: `
2900
+ <div #empty class="layout-sidebar" (contextmenu)="onContextMenu($event)">
2888
2901
  <ul class="layout-menu">
2889
2902
  @for (item of menuService.menu; track item; let i = $index) {
2890
2903
  <ng-container>
@@ -2904,10 +2917,10 @@ class MenuComponent {
2904
2917
  }
2905
2918
  </ul>
2906
2919
  </div>
2907
- <p-contextMenu [target]="empty" />
2920
+ <p-contextMenu [target]="empty"/>
2908
2921
  @if (securityService.isAdmin) {
2909
- <menu-item-create-dialog />
2910
- <menu-item-edit-dialog />
2922
+ <menu-item-create-dialog/>
2923
+ <menu-item-edit-dialog/>
2911
2924
  }`, isInline: true, dependencies: [{ kind: "component", type: MenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey", "menuItemCreateDialogComponent", "menuItemEditDialogComponent", "contextMenu"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i1$4.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: DialogModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "component", type: MenuItemCreateDialogComponent, selector: "menu-item-create-dialog", inputs: ["visible"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: MenuItemEditDialogComponent, selector: "menu-item-edit-dialog", inputs: ["visible"], outputs: ["visibleChange"] }] }); }
2912
2925
  }
2913
2926
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: MenuComponent, decorators: [{
@@ -2926,7 +2939,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
2926
2939
  providers: [Menu],
2927
2940
  selector: 'app-menu',
2928
2941
  standalone: true,
2929
- template: ` <div #empty class="layout-sidebar" (contextmenu)="onContextMenu($event)">
2942
+ template: `
2943
+ <div #empty class="layout-sidebar" (contextmenu)="onContextMenu($event)">
2930
2944
  <ul class="layout-menu">
2931
2945
  @for (item of menuService.menu; track item; let i = $index) {
2932
2946
  <ng-container>
@@ -2946,10 +2960,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
2946
2960
  }
2947
2961
  </ul>
2948
2962
  </div>
2949
- <p-contextMenu [target]="empty" />
2963
+ <p-contextMenu [target]="empty"/>
2950
2964
  @if (securityService.isAdmin) {
2951
- <menu-item-create-dialog />
2952
- <menu-item-edit-dialog />
2965
+ <menu-item-create-dialog/>
2966
+ <menu-item-edit-dialog/>
2953
2967
  }`
2954
2968
  }]
2955
2969
  }], propDecorators: { menuItemCreateDialogComponent: [{
@@ -3135,7 +3149,7 @@ class AppFloatingConfiguratorComponent {
3135
3149
  <app-configurator />
3136
3150
  </div>
3137
3151
  </div>
3138
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i4.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfiguratorComponent, selector: "app-configurator" }] }); }
3152
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i3$1.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfiguratorComponent, selector: "app-configurator" }] }); }
3139
3153
  }
3140
3154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppFloatingConfiguratorComponent, decorators: [{
3141
3155
  type: Component,
@@ -3170,9 +3184,96 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
3170
3184
  }]
3171
3185
  }] });
3172
3186
 
3187
+ /**
3188
+ * Service for managing translation loading in the application
3189
+ */
3190
+ class L10nService {
3191
+ constructor() {
3192
+ this.loadedTranslations = new Set();
3193
+ this.httpClient = inject(HttpClient$1);
3194
+ this.translateService = inject(TranslateService);
3195
+ this.primeNg = inject(PrimeNG);
3196
+ this.layoutService = inject(LayoutService);
3197
+ }
3198
+ /**
3199
+ * Loads translations for a specific component
3200
+ * @param component - Name of the component to load translations for
3201
+ */
3202
+ loadComponentTranslations(component) {
3203
+ const lang = this.translateService.currentLang;
3204
+ this.loadTranslations(component, lang);
3205
+ }
3206
+ /**
3207
+ * Gets the translated value of a key (or an array of keys)
3208
+ * @returns the translated key, or an object of translated keys
3209
+ */
3210
+ get(key) {
3211
+ this.loadComponentTranslations(key.split('.')[0]);
3212
+ return this.translateService.get(key);
3213
+ }
3214
+ /**
3215
+ * Internal method to load translations from JSON files
3216
+ * @param component - Component or translation namespace
3217
+ * @param lang - Language code to load translations for
3218
+ */
3219
+ loadTranslations(component, lang) {
3220
+ // Create unique key for this component-language combination
3221
+ const key = `${component}.${lang}`;
3222
+ // Skip if translations are already loaded
3223
+ if (this.loadedTranslations.has(key)) {
3224
+ return;
3225
+ }
3226
+ try {
3227
+ // Load translation file from assets
3228
+ this.httpClient.get(`./assets/i18n/${component}.${lang}.json`).subscribe((translations) => {
3229
+ // Get existing translations for the language
3230
+ const current = this.translateService.translations[lang] || {};
3231
+ // Merge new translations with existing ones
3232
+ this.translateService.setTranslation(lang, { ...current, ...translations }, true);
3233
+ // Mark these translations as loaded
3234
+ this.loadedTranslations.add(key);
3235
+ });
3236
+ }
3237
+ catch (e) {
3238
+ console.warn(`No translations found for ${component}.${lang}.json`);
3239
+ console.error(e);
3240
+ }
3241
+ }
3242
+ /**
3243
+ * Changes the lang currently used
3244
+ */
3245
+ use(selectedLanguage, key = null) {
3246
+ if (key) {
3247
+ this.get(key);
3248
+ }
3249
+ this.translateService.use(selectedLanguage);
3250
+ }
3251
+ init(langs) {
3252
+ this.translateService.addLangs(langs);
3253
+ const lang = /en|ru/.exec(this.layoutService.language()) ? this.layoutService.language() : 'en';
3254
+ this.translateService.setDefaultLang(lang);
3255
+ this.translateService.use(lang);
3256
+ this.loadComponentTranslations('app-info');
3257
+ this.translateService.get('primeng').subscribe((res) => this.primeNg.setTranslation(res));
3258
+ }
3259
+ instant(key, interpolateParams) {
3260
+ return this.translateService.instant(key, interpolateParams);
3261
+ }
3262
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: L10nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3263
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: L10nService, providedIn: 'root' }); }
3264
+ }
3265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: L10nService, decorators: [{
3266
+ type: Injectable,
3267
+ args: [{ providedIn: 'root' }]
3268
+ }] });
3269
+
3173
3270
  class NotfoundComponent {
3174
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NotfoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3175
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.2", type: NotfoundComponent, isStandalone: true, selector: "app-notfound", ngImport: i0, template: ` <app-floating-configurator />
3271
+ constructor(l10nService) {
3272
+ l10nService.get('notfound');
3273
+ }
3274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NotfoundComponent, deps: [{ token: L10nService }], target: i0.ɵɵFactoryTarget.Component }); }
3275
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.2", type: NotfoundComponent, isStandalone: true, selector: "app-notfound", ngImport: i0, template: `
3276
+ <app-floating-configurator/>
3176
3277
  <div class="flex items-center justify-center min-h-screen overflow-hidden">
3177
3278
  <div class="flex flex-col items-center justify-center">
3178
3279
  <div
@@ -3181,22 +3282,23 @@ class NotfoundComponent {
3181
3282
  class="w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center"
3182
3283
  style="border-radius: 53px">
3183
3284
  <div class="flex flex-col items-center justify-center">
3184
- <logo height="96" width="96"></logo>
3285
+ <logo [height]="96" [width]="96"></logo>
3185
3286
  </div>
3186
- <span class="text-primary font-bold text-3xl">404</span>
3187
- <h1 class="text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2">Not Found</h1>
3188
- <div class="text-surface-600 dark:text-surface-200 mb-8">Requested resource is not available.</div>
3189
- <p-button id="oip-app-notfound-go-to-home-button" label="Go to home" routerLink="/" />
3287
+ <span class="text-primary font-bold text-3xl">{{ 'notfound.errorCode' | translate }}</span>
3288
+ <h1 class="text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2">{{ 'notfound.title' | translate }}</h1>
3289
+ <div class="text-surface-600 dark:text-surface-200 mb-8">{{ 'notfound.description' | translate }}</div>
3290
+ <p-button id="oip-app-notfound-go-to-home-button" [label]="'notfound.button' | translate" routerLink="/"/>
3190
3291
  </div>
3191
3292
  </div>
3192
3293
  </div>
3193
- </div>`, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: AppFloatingConfiguratorComponent, selector: "app-floating-configurator" }] }); }
3294
+ </div>`, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: AppFloatingConfiguratorComponent, selector: "app-floating-configurator" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$2.TranslatePipe, name: "translate" }] }); }
3194
3295
  }
3195
3296
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NotfoundComponent, decorators: [{
3196
3297
  type: Component,
3197
3298
  args: [{
3198
3299
  selector: 'app-notfound',
3199
- template: ` <app-floating-configurator />
3300
+ template: `
3301
+ <app-floating-configurator/>
3200
3302
  <div class="flex items-center justify-center min-h-screen overflow-hidden">
3201
3303
  <div class="flex flex-col items-center justify-center">
3202
3304
  <div
@@ -3205,20 +3307,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
3205
3307
  class="w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20 flex flex-col items-center"
3206
3308
  style="border-radius: 53px">
3207
3309
  <div class="flex flex-col items-center justify-center">
3208
- <logo height="96" width="96"></logo>
3310
+ <logo [height]="96" [width]="96"></logo>
3209
3311
  </div>
3210
- <span class="text-primary font-bold text-3xl">404</span>
3211
- <h1 class="text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2">Not Found</h1>
3212
- <div class="text-surface-600 dark:text-surface-200 mb-8">Requested resource is not available.</div>
3213
- <p-button id="oip-app-notfound-go-to-home-button" label="Go to home" routerLink="/" />
3312
+ <span class="text-primary font-bold text-3xl">{{ 'notfound.errorCode' | translate }}</span>
3313
+ <h1 class="text-surface-900 dark:text-surface-0 font-bold text-3xl lg:text-5xl mb-2">{{ 'notfound.title' | translate }}</h1>
3314
+ <div class="text-surface-600 dark:text-surface-200 mb-8">{{ 'notfound.description' | translate }}</div>
3315
+ <p-button id="oip-app-notfound-go-to-home-button" [label]="'notfound.button' | translate" routerLink="/"/>
3214
3316
  </div>
3215
3317
  </div>
3216
3318
  </div>
3217
3319
  </div>`,
3218
- imports: [RouterLink, LogoComponent, Button, AppFloatingConfiguratorComponent],
3320
+ imports: [RouterLink, LogoComponent, Button, AppFloatingConfiguratorComponent, TranslateModule],
3219
3321
  standalone: true
3220
3322
  }]
3221
- }] });
3323
+ }], ctorParameters: () => [{ type: L10nService }] });
3222
3324
 
3223
3325
  class UnauthorizedComponent {
3224
3326
  constructor() {
@@ -3330,7 +3432,7 @@ class ErrorComponent {
3330
3432
  </div>
3331
3433
  </div>
3332
3434
  </div>
3333
- </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i3$1.Ripple, selector: "[pRipple]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
3435
+ </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "fluid", "label", "icon", "buttonProps"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i3$2.Ripple, selector: "[pRipple]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
3334
3436
  }
3335
3437
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: ErrorComponent, decorators: [{
3336
3438
  type: Component,
@@ -3403,7 +3505,7 @@ class ProfileComponent {
3403
3505
  [auto]="true"
3404
3506
  (onUpload)="onBasicUploadAuto($event)" />
3405
3507
  </div>
3406
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i1$5.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "ngmodule", type: ImageModule }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i5$1.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3508
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i1$5.FileUpload, selector: "p-fileupload, p-fileUpload", inputs: ["name", "url", "method", "multiple", "accept", "disabled", "auto", "withCredentials", "maxFileSize", "invalidFileSizeMessageSummary", "invalidFileSizeMessageDetail", "invalidFileTypeMessageSummary", "invalidFileTypeMessageDetail", "invalidFileLimitMessageDetail", "invalidFileLimitMessageSummary", "style", "styleClass", "previewWidth", "chooseLabel", "uploadLabel", "cancelLabel", "chooseIcon", "uploadIcon", "cancelIcon", "showUploadButton", "showCancelButton", "mode", "headers", "customUpload", "fileLimit", "uploadStyleClass", "cancelStyleClass", "removeStyleClass", "chooseStyleClass", "chooseButtonProps", "uploadButtonProps", "cancelButtonProps", "files"], outputs: ["onBeforeUpload", "onSend", "onUpload", "onError", "onClear", "onRemove", "onSelect", "onProgress", "uploadHandler", "onImageError", "onRemoveUploadedFile"] }, { kind: "ngmodule", type: ImageModule }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i4.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3407
3509
  }
3408
3510
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: ProfileComponent, decorators: [{
3409
3511
  type: Component,
@@ -3436,72 +3538,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
3436
3538
  }]
3437
3539
  }] });
3438
3540
 
3439
- /**
3440
- * Service for managing translation loading in the application
3441
- */
3442
- class L10nService {
3443
- constructor() {
3444
- this.loadedTranslations = new Set();
3445
- this.httpClient = inject(HttpClient$1);
3446
- this.translateService = inject(TranslateService);
3447
- }
3448
- /**
3449
- * Loads translations for a specific component
3450
- * @param component - Name of the component to load translations for
3451
- */
3452
- async loadComponentTranslations(component) {
3453
- const lang = this.translateService.currentLang;
3454
- await this.loadTranslations(component, lang);
3455
- }
3456
- /**
3457
- * Gets the translated value of a key (or an array of keys)
3458
- * @returns the translated key, or an object of translated keys
3459
- */
3460
- async get(key) {
3461
- await this.loadComponentTranslations(key);
3462
- return this.translateService.get(key);
3463
- }
3464
- /**
3465
- * Internal method to load translations from JSON files
3466
- * @param component - Component or translation namespace
3467
- * @param lang - Language code to load translations for
3468
- */
3469
- async loadTranslations(component, lang) {
3470
- // Create unique key for this component-language combination
3471
- const key = `${component}.${lang}`;
3472
- // Skip if translations are already loaded
3473
- if (this.loadedTranslations.has(key)) {
3474
- return;
3475
- }
3476
- try {
3477
- // Load translation file from assets
3478
- const translations = await lastValueFrom(this.httpClient.get(`./assets/i18n/${component}.${lang}.json`));
3479
- // Get existing translations for the language
3480
- const current = this.translateService.translations[lang] || {};
3481
- // Merge new translations with existing ones
3482
- this.translateService.setTranslation(lang, { ...current, ...translations }, true);
3483
- // Mark these translations as loaded
3484
- this.loadedTranslations.add(key);
3485
- }
3486
- catch (e) {
3487
- console.warn(`No translations found for ${component}.${lang}.json`);
3488
- console.error(e);
3489
- }
3490
- }
3491
- /**
3492
- * Changes the lang currently used
3493
- */
3494
- use(selectedLanguage) {
3495
- this.translateService.use(selectedLanguage);
3496
- }
3497
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: L10nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3498
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: L10nService, providedIn: 'root' }); }
3499
- }
3500
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: L10nService, decorators: [{
3501
- type: Injectable,
3502
- args: [{ providedIn: 'root' }]
3503
- }] });
3504
-
3505
3541
  class ConfigComponent {
3506
3542
  constructor() {
3507
3543
  this.layoutService = inject(LayoutService);
@@ -3514,12 +3550,10 @@ class ConfigComponent {
3514
3550
  { value: 'en', label: 'English' },
3515
3551
  { value: 'ru', label: 'Русский' }
3516
3552
  ];
3553
+ this.l10nService.loadComponentTranslations('config');
3517
3554
  this.selectedLanguage = this.layoutService.language();
3518
3555
  }
3519
3556
  async ngOnInit() {
3520
- (await this.l10nService.get('config')).subscribe((l10n) => {
3521
- this.l10n = l10n;
3522
- });
3523
3557
  }
3524
3558
  /**
3525
3559
  * Changes the application's language.
@@ -3530,7 +3564,7 @@ class ConfigComponent {
3530
3564
  ...config,
3531
3565
  language: this.selectedLanguage
3532
3566
  }));
3533
- this.l10nService.use(this.selectedLanguage);
3567
+ this.l10nService.use(this.selectedLanguage, 'config');
3534
3568
  }
3535
3569
  async onSwitchChange() {
3536
3570
  await this.menuService.loadMenu();
@@ -3541,15 +3575,15 @@ class ConfigComponent {
3541
3575
  <div class="flex flex-col md:flex-row gap-4">
3542
3576
  <div class="md:w-1/2">
3543
3577
  <div class="card flex flex-col gap-4">
3544
- <div class="font-semibold text-xl">{{ l10n.profile }}</div>
3578
+ <div class="font-semibold text-xl">{{ 'config.profile' | translate }}</div>
3545
3579
  <div class="flex justify-content-end flex-wrap">
3546
3580
  {{ userService.userName }}
3547
3581
  </div>
3548
3582
  <label>
3549
- {{ l10n.photo }}
3583
+ {{ 'config.photo' | translate }}
3550
3584
  <span
3551
3585
  class="pi pi-question-circle"
3552
- pTooltip="{{ l10n.usePhoto256x256Pixel }}"
3586
+ pTooltip="{{ 'config.usePhoto256x256Pixel' | translate }}"
3553
3587
  tooltipPosition="right"></span>
3554
3588
  </label>
3555
3589
  <div class="flex justify-content-end flex-wrap">
@@ -3559,8 +3593,8 @@ class ConfigComponent {
3559
3593
  </div>
3560
3594
  <div class="md:w-1/2">
3561
3595
  <div class="card flex flex-col gap-4">
3562
- <div class="font-semibold text-xl">{{ l10n.localization }}</div>
3563
- <label> {{ l10n.selectLanguage }} </label>
3596
+ <div class="font-semibold text-xl">{{ 'config.localization' | translate }}</div>
3597
+ <label> {{ 'config.selectLanguage' | translate }} </label>
3564
3598
  <div class="flex justify-content-end flex-wrap">
3565
3599
  <p-select
3566
3600
  class="w-full md:w-56"
@@ -3569,31 +3603,31 @@ class ConfigComponent {
3569
3603
  optionValue="value"
3570
3604
  [options]="languages"
3571
3605
  [(ngModel)]="selectedLanguage"
3572
- (onChange)="changeLanguage()" />
3606
+ (onChange)="changeLanguage()"/>
3573
3607
  </div>
3574
3608
  </div>
3575
3609
  </div>
3576
3610
  @if (securityService.isAdmin()) {
3577
3611
  <div class="md:w-1/2">
3578
3612
  <div class="card flex flex-col gap-4">
3579
- <div class="font-semibold text-xl">{{ l10n.menu }}</div>
3613
+ <div class="font-semibold text-xl">{{ 'config.menu' | translate }}</div>
3580
3614
  <div class="flex items-center gap-2">
3581
- <label for="oip-app-config-admin-mode">{{ l10n.all }}</label>
3615
+ <label for="oip-app-config-admin-mode">{{ 'config.all' | translate }}</label>
3582
3616
  <p-toggle-switch
3583
3617
  id="oip-app-config-admin-mode"
3584
3618
  [(ngModel)]="menuService.adminMode"
3585
3619
  (onChange)="onSwitchChange()"></p-toggle-switch>
3586
3620
  </div>
3587
3621
  <div class="flex items-center gap-2">
3588
- <label for="oip-app-config-admin-mode">{{ l10n.moduleManagement }}</label>
3589
- <p-button icon="pi pi-cog" label="{{ l10n.goTo }}" routerLink="/modules" />
3622
+ <label for="oip-app-config-admin-mode">{{ 'config.moduleManagement' | translate }}</label>
3623
+ <p-button icon="pi pi-cog" label="{{ 'config.goTo' | translate }}" routerLink="/modules"/>
3590
3624
  </div>
3591
3625
  </div>
3592
3626
  </div>
3593
3627
  }
3594
3628
  </div>
3595
3629
  </p-fluid>
3596
- `, isInline: true, dependencies: [{ kind: "component", type: ProfileComponent, selector: "user-profile" }, { kind: "component", type: Fluid, selector: "p-fluid" }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: TableModule }, { kind: "ngmodule", type: ToggleSwitchModule }, { kind: "component", type: i2$2.ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
3630
+ `, isInline: true, dependencies: [{ kind: "component", type: ProfileComponent, selector: "user-profile" }, { kind: "component", type: Fluid, selector: "p-fluid" }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: TableModule }, { kind: "ngmodule", type: ToggleSwitchModule }, { kind: "component", type: i2$3.ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3597
3631
  }
3598
3632
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: ConfigComponent, decorators: [{
3599
3633
  type: Component,
@@ -3604,15 +3638,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
3604
3638
  <div class="flex flex-col md:flex-row gap-4">
3605
3639
  <div class="md:w-1/2">
3606
3640
  <div class="card flex flex-col gap-4">
3607
- <div class="font-semibold text-xl">{{ l10n.profile }}</div>
3641
+ <div class="font-semibold text-xl">{{ 'config.profile' | translate }}</div>
3608
3642
  <div class="flex justify-content-end flex-wrap">
3609
3643
  {{ userService.userName }}
3610
3644
  </div>
3611
3645
  <label>
3612
- {{ l10n.photo }}
3646
+ {{ 'config.photo' | translate }}
3613
3647
  <span
3614
3648
  class="pi pi-question-circle"
3615
- pTooltip="{{ l10n.usePhoto256x256Pixel }}"
3649
+ pTooltip="{{ 'config.usePhoto256x256Pixel' | translate }}"
3616
3650
  tooltipPosition="right"></span>
3617
3651
  </label>
3618
3652
  <div class="flex justify-content-end flex-wrap">
@@ -3622,8 +3656,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
3622
3656
  </div>
3623
3657
  <div class="md:w-1/2">
3624
3658
  <div class="card flex flex-col gap-4">
3625
- <div class="font-semibold text-xl">{{ l10n.localization }}</div>
3626
- <label> {{ l10n.selectLanguage }} </label>
3659
+ <div class="font-semibold text-xl">{{ 'config.localization' | translate }}</div>
3660
+ <label> {{ 'config.selectLanguage' | translate }} </label>
3627
3661
  <div class="flex justify-content-end flex-wrap">
3628
3662
  <p-select
3629
3663
  class="w-full md:w-56"
@@ -3632,24 +3666,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
3632
3666
  optionValue="value"
3633
3667
  [options]="languages"
3634
3668
  [(ngModel)]="selectedLanguage"
3635
- (onChange)="changeLanguage()" />
3669
+ (onChange)="changeLanguage()"/>
3636
3670
  </div>
3637
3671
  </div>
3638
3672
  </div>
3639
3673
  @if (securityService.isAdmin()) {
3640
3674
  <div class="md:w-1/2">
3641
3675
  <div class="card flex flex-col gap-4">
3642
- <div class="font-semibold text-xl">{{ l10n.menu }}</div>
3676
+ <div class="font-semibold text-xl">{{ 'config.menu' | translate }}</div>
3643
3677
  <div class="flex items-center gap-2">
3644
- <label for="oip-app-config-admin-mode">{{ l10n.all }}</label>
3678
+ <label for="oip-app-config-admin-mode">{{ 'config.all' | translate }}</label>
3645
3679
  <p-toggle-switch
3646
3680
  id="oip-app-config-admin-mode"
3647
3681
  [(ngModel)]="menuService.adminMode"
3648
3682
  (onChange)="onSwitchChange()"></p-toggle-switch>
3649
3683
  </div>
3650
3684
  <div class="flex items-center gap-2">
3651
- <label for="oip-app-config-admin-mode">{{ l10n.moduleManagement }}</label>
3652
- <p-button icon="pi pi-cog" label="{{ l10n.goTo }}" routerLink="/modules" />
3685
+ <label for="oip-app-config-admin-mode">{{ 'config.moduleManagement' | translate }}</label>
3686
+ <p-button icon="pi pi-cog" label="{{ 'config.goTo' | translate }}" routerLink="/modules"/>
3653
3687
  </div>
3654
3688
  </div>
3655
3689
  </div>
@@ -3657,11 +3691,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
3657
3691
  </div>
3658
3692
  </p-fluid>
3659
3693
  `,
3660
- imports: [ProfileComponent, Fluid, Tooltip, FormsModule, Select, TableModule, ToggleSwitchModule, RouterLink, Button]
3694
+ imports: [ProfileComponent, Fluid, Tooltip, FormsModule, Select, TableModule, ToggleSwitchModule, RouterLink, Button, TranslatePipe]
3661
3695
  }]
3662
3696
  }], ctorParameters: () => [] });
3663
3697
 
3664
3698
  class DbMigrationComponent extends BaseModuleComponent {
3699
+ constructor() {
3700
+ super();
3701
+ this.l10nService = inject(L10nService);
3702
+ this.l10nService.loadComponentTranslations('db-migration');
3703
+ }
3665
3704
  async ngOnInit() {
3666
3705
  await super.ngOnInit();
3667
3706
  await this.refreshAction();
@@ -3673,7 +3712,7 @@ class DbMigrationComponent extends BaseModuleComponent {
3673
3712
  })
3674
3713
  .catch((error) => {
3675
3714
  console.log(error);
3676
- this.msgService.error('Error refreshing database');
3715
+ this.msgService.error(this.l10nService.instant('db-migration.messages.errorRefreshing'));
3677
3716
  });
3678
3717
  }
3679
3718
  async getData() {
@@ -3683,89 +3722,91 @@ class DbMigrationComponent extends BaseModuleComponent {
3683
3722
  const request = { name: rowData.name };
3684
3723
  return this.baseDataService.sendRequest(`api/${this.controller}/apply-migration`, 'POST', request);
3685
3724
  }
3686
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: DbMigrationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3725
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: DbMigrationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3687
3726
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.2", type: DbMigrationComponent, isStandalone: true, selector: "db-migration", providers: [ConfirmationService], usesInheritance: true, ngImport: i0, template: `
3688
- <div *ngIf="isContent" class="card" style="height: 100%">
3689
- <p-confirmDialog />
3690
- <div>
3691
- <h5>Migration manager</h5>
3692
- <div class="flex flex-row gap-2">
3693
- <p-button
3694
- icon="pi pi-refresh"
3695
- pTooltip="Refresh"
3696
- severity="secondary"
3697
- tooltipPosition="bottom"
3698
- [outlined]="true"
3699
- (click)="refreshAction()" />
3700
- <p-button
3701
- icon="pi pi-filter-slash"
3702
- pTooltip="Clean filter"
3703
- severity="secondary"
3704
- tooltipPosition="bottom"
3705
- [outlined]="true"
3706
- (click)="dt.clear()" />
3707
- </div>
3727
+ @if (isContent) {
3728
+ <div class="card" style="height: 100%">
3729
+ <p-confirmDialog/>
3708
3730
  <div>
3709
- <p-table #dt dataKey="name" editMode="row" size="small" [scrollable]="true" [value]="data">
3710
- <ng-template let-columns pTemplate="header">
3711
- <tr>
3712
- <th pSortableColumn="name" scope="col">
3713
- Migration name
3714
- <p-columnFilter display="menu" field="name" type="text" />
3715
- </th>
3716
- <th scope="col">Applied</th>
3717
- <th scope="col">Exist</th>
3718
- <th>Pending</th>
3719
- <th scope="col"></th>
3720
- </tr>
3721
- </ng-template>
3731
+ <h5>{{ 'db-migration.migrationManager' | translate }}</h5>
3732
+ <div class="flex flex-row gap-2">
3733
+ <p-button
3734
+ icon="pi pi-refresh"
3735
+ [pTooltip]="'db-migration.actions.refresh' | translate"
3736
+ severity="secondary"
3737
+ tooltipPosition="bottom"
3738
+ [outlined]="true"
3739
+ (click)="refreshAction()"/>
3740
+ <p-button
3741
+ icon="pi pi-filter-slash"
3742
+ [pTooltip]="'db-migration.actions.cleanFilter' | translate"
3743
+ severity="secondary"
3744
+ tooltipPosition="bottom"
3745
+ [outlined]="true"
3746
+ (click)="dt.clear()"/>
3747
+ </div>
3748
+ <div>
3749
+ <p-table #dt dataKey="name" editMode="row" size="small" [scrollable]="true" [value]="data">
3750
+ <ng-template let-columns pTemplate="header">
3751
+ <tr>
3752
+ <th pSortableColumn="name" scope="col">
3753
+ {{ 'db-migration.columns.name' | translate }}
3754
+ <p-columnFilter display="menu" field="name" type="text"/>
3755
+ </th>
3756
+ <th scope="col">{{ 'db-migration.columns.applied' | translate }}</th>
3757
+ <th scope="col">{{ 'db-migration.columns.exist' | translate }}</th>
3758
+ <th scope="col">{{ 'db-migration.columns.pending' | translate }}</th>
3759
+ <th scope="col"></th>
3760
+ </tr>
3761
+ </ng-template>
3722
3762
 
3723
- <ng-template #body let-columns="columns" let-editing="editing" let-ri="rowIndex" let-rowData>
3724
- <tr [pEditableRow]="rowData">
3725
- <td>
3726
- {{ rowData.name }}
3727
- </td>
3728
- <td>
3729
- <p-button
3730
- *ngIf="rowData.applied"
3731
- icon="pi pi-check"
3732
- severity="success"
3733
- [rounded]="true"
3734
- [text]="true">
3735
- </p-button>
3736
- </td>
3737
- <td>
3738
- @if (rowData.exist) {
3739
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true" />
3740
- }
3741
- </td>
3742
- <td>
3743
- @if (rowData.pending) {
3744
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"></p-button>
3745
- }
3746
- </td>
3747
- <td>
3748
- <p-button
3749
- icon="pi pi-bolt"
3750
- pCancelEditableRow
3751
- pTooltip="Apply migration"
3752
- severity="secondary"
3753
- tooltipPosition="left"
3754
- [rounded]="true"
3755
- [text]="true"
3756
- (click)="applyMigration(rowData)">
3757
- </p-button>
3758
- </td>
3759
- </tr>
3760
- </ng-template>
3761
- </p-table>
3763
+ <ng-template #body let-columns="columns" let-editing="editing" let-ri="rowIndex" let-rowData>
3764
+ <tr [pEditableRow]="rowData">
3765
+ <td>
3766
+ {{ rowData.name }}
3767
+ </td>
3768
+ <td>
3769
+ @if (rowData.applied) {
3770
+ <p-button
3771
+ icon="pi pi-check"
3772
+ severity="success"
3773
+ [rounded]="true"
3774
+ [text]="true">
3775
+ </p-button>
3776
+ }
3777
+ </td>
3778
+ <td>
3779
+ @if (rowData.exist) {
3780
+ <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"/>
3781
+ }
3782
+ </td>
3783
+ <td>
3784
+ @if (rowData.pending) {
3785
+ <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"></p-button>
3786
+ }
3787
+ </td>
3788
+ <td>
3789
+ <p-button
3790
+ icon="pi pi-bolt"
3791
+ pCancelEditableRow
3792
+ pTooltip="{{'db-migration.actions.applyMigration' | translate}}"
3793
+ severity="secondary"
3794
+ tooltipPosition="left"
3795
+ [rounded]="true"
3796
+ [text]="true"
3797
+ (click)="applyMigration(rowData)">
3798
+ </p-button>
3799
+ </td>
3800
+ </tr>
3801
+ </ng-template>
3802
+ </p-table>
3803
+ </div>
3762
3804
  </div>
3763
3805
  </div>
3764
- </div>
3765
- @if (isSecurity) {
3766
- <security [controller]="controller" [id]="id" />
3806
+ } @else if (isSecurity) {
3807
+ <security [controller]="controller" [id]="id"/>
3767
3808
  }
3768
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$6.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2$3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$6.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i1$6.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i1$6.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i1$6.ColumnFilter, selector: "p-columnFilter, p-column-filter, p-columnfilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "filterOn", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: TextareaModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SecurityComponent, selector: "security", inputs: ["id", "controller"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }] }); }
3809
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$6.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2$4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$6.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i1$6.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i1$6.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i1$6.ColumnFilter, selector: "p-columnFilter, p-column-filter, p-columnfilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "filterOn", "useGrouping", "showButtons", "ariaLabel", "filterButtonProps"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: SharedModule }, { kind: "ngmodule", type: TagModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: TextareaModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "component", type: SecurityComponent, selector: "security", inputs: ["id", "controller"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3769
3810
  }
3770
3811
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: DbMigrationComponent, decorators: [{
3771
3812
  type: Component,
@@ -3779,96 +3820,98 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
3779
3820
  ButtonModule,
3780
3821
  FormsModule,
3781
3822
  ConfirmDialog,
3782
- NgIf,
3783
3823
  SecurityComponent,
3784
- Tooltip
3824
+ Tooltip,
3825
+ TranslatePipe
3785
3826
  ],
3786
3827
  selector: 'db-migration',
3787
3828
  template: `
3788
- <div *ngIf="isContent" class="card" style="height: 100%">
3789
- <p-confirmDialog />
3790
- <div>
3791
- <h5>Migration manager</h5>
3792
- <div class="flex flex-row gap-2">
3793
- <p-button
3794
- icon="pi pi-refresh"
3795
- pTooltip="Refresh"
3796
- severity="secondary"
3797
- tooltipPosition="bottom"
3798
- [outlined]="true"
3799
- (click)="refreshAction()" />
3800
- <p-button
3801
- icon="pi pi-filter-slash"
3802
- pTooltip="Clean filter"
3803
- severity="secondary"
3804
- tooltipPosition="bottom"
3805
- [outlined]="true"
3806
- (click)="dt.clear()" />
3807
- </div>
3829
+ @if (isContent) {
3830
+ <div class="card" style="height: 100%">
3831
+ <p-confirmDialog/>
3808
3832
  <div>
3809
- <p-table #dt dataKey="name" editMode="row" size="small" [scrollable]="true" [value]="data">
3810
- <ng-template let-columns pTemplate="header">
3811
- <tr>
3812
- <th pSortableColumn="name" scope="col">
3813
- Migration name
3814
- <p-columnFilter display="menu" field="name" type="text" />
3815
- </th>
3816
- <th scope="col">Applied</th>
3817
- <th scope="col">Exist</th>
3818
- <th>Pending</th>
3819
- <th scope="col"></th>
3820
- </tr>
3821
- </ng-template>
3833
+ <h5>{{ 'db-migration.migrationManager' | translate }}</h5>
3834
+ <div class="flex flex-row gap-2">
3835
+ <p-button
3836
+ icon="pi pi-refresh"
3837
+ [pTooltip]="'db-migration.actions.refresh' | translate"
3838
+ severity="secondary"
3839
+ tooltipPosition="bottom"
3840
+ [outlined]="true"
3841
+ (click)="refreshAction()"/>
3842
+ <p-button
3843
+ icon="pi pi-filter-slash"
3844
+ [pTooltip]="'db-migration.actions.cleanFilter' | translate"
3845
+ severity="secondary"
3846
+ tooltipPosition="bottom"
3847
+ [outlined]="true"
3848
+ (click)="dt.clear()"/>
3849
+ </div>
3850
+ <div>
3851
+ <p-table #dt dataKey="name" editMode="row" size="small" [scrollable]="true" [value]="data">
3852
+ <ng-template let-columns pTemplate="header">
3853
+ <tr>
3854
+ <th pSortableColumn="name" scope="col">
3855
+ {{ 'db-migration.columns.name' | translate }}
3856
+ <p-columnFilter display="menu" field="name" type="text"/>
3857
+ </th>
3858
+ <th scope="col">{{ 'db-migration.columns.applied' | translate }}</th>
3859
+ <th scope="col">{{ 'db-migration.columns.exist' | translate }}</th>
3860
+ <th scope="col">{{ 'db-migration.columns.pending' | translate }}</th>
3861
+ <th scope="col"></th>
3862
+ </tr>
3863
+ </ng-template>
3822
3864
 
3823
- <ng-template #body let-columns="columns" let-editing="editing" let-ri="rowIndex" let-rowData>
3824
- <tr [pEditableRow]="rowData">
3825
- <td>
3826
- {{ rowData.name }}
3827
- </td>
3828
- <td>
3829
- <p-button
3830
- *ngIf="rowData.applied"
3831
- icon="pi pi-check"
3832
- severity="success"
3833
- [rounded]="true"
3834
- [text]="true">
3835
- </p-button>
3836
- </td>
3837
- <td>
3838
- @if (rowData.exist) {
3839
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true" />
3840
- }
3841
- </td>
3842
- <td>
3843
- @if (rowData.pending) {
3844
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"></p-button>
3845
- }
3846
- </td>
3847
- <td>
3848
- <p-button
3849
- icon="pi pi-bolt"
3850
- pCancelEditableRow
3851
- pTooltip="Apply migration"
3852
- severity="secondary"
3853
- tooltipPosition="left"
3854
- [rounded]="true"
3855
- [text]="true"
3856
- (click)="applyMigration(rowData)">
3857
- </p-button>
3858
- </td>
3859
- </tr>
3860
- </ng-template>
3861
- </p-table>
3865
+ <ng-template #body let-columns="columns" let-editing="editing" let-ri="rowIndex" let-rowData>
3866
+ <tr [pEditableRow]="rowData">
3867
+ <td>
3868
+ {{ rowData.name }}
3869
+ </td>
3870
+ <td>
3871
+ @if (rowData.applied) {
3872
+ <p-button
3873
+ icon="pi pi-check"
3874
+ severity="success"
3875
+ [rounded]="true"
3876
+ [text]="true">
3877
+ </p-button>
3878
+ }
3879
+ </td>
3880
+ <td>
3881
+ @if (rowData.exist) {
3882
+ <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"/>
3883
+ }
3884
+ </td>
3885
+ <td>
3886
+ @if (rowData.pending) {
3887
+ <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"></p-button>
3888
+ }
3889
+ </td>
3890
+ <td>
3891
+ <p-button
3892
+ icon="pi pi-bolt"
3893
+ pCancelEditableRow
3894
+ pTooltip="{{'db-migration.actions.applyMigration' | translate}}"
3895
+ severity="secondary"
3896
+ tooltipPosition="left"
3897
+ [rounded]="true"
3898
+ [text]="true"
3899
+ (click)="applyMigration(rowData)">
3900
+ </p-button>
3901
+ </td>
3902
+ </tr>
3903
+ </ng-template>
3904
+ </p-table>
3905
+ </div>
3862
3906
  </div>
3863
3907
  </div>
3864
- </div>
3865
- @if (isSecurity) {
3866
- <security [controller]="controller" [id]="id" />
3908
+ } @else if (isSecurity) {
3909
+ <security [controller]="controller" [id]="id"/>
3867
3910
  }
3868
3911
  `,
3869
3912
  providers: [ConfirmationService]
3870
3913
  }]
3871
- }] });
3914
+ }], ctorParameters: () => [] });
3872
3915
 
3873
3916
  /* eslint-disable */
3874
3917
  /* tslint:disable */
@@ -3966,8 +4009,8 @@ class AppModulesComponent {
3966
4009
  this.moduleService = inject(Module);
3967
4010
  }
3968
4011
  async ngOnInit() {
3969
- (await this.l10nService.get('app-modules')).subscribe((l) => {
3970
- this.l10n = l;
4012
+ this.l10nService.get('app-modules').subscribe((l10n) => {
4013
+ this.l10n = l10n;
3971
4014
  });
3972
4015
  this.titleService.setTitle(this.l10n.title);
3973
4016
  await this.refreshAction();
@@ -4016,16 +4059,16 @@ class AppModulesComponent {
4016
4059
  severity="secondary"
4017
4060
  text="true"
4018
4061
  tooltipPosition="bottom"
4019
- [pTooltip]="l10n.refreshTooltip"
4062
+ [pTooltip]="'app-modules.refreshTooltip' | translate"
4020
4063
  (onClick)="refreshAction()"></p-button>
4021
4064
  </p-toolbar>
4022
4065
  </div>
4023
4066
  <p-table class="mt-4" [paginator]="true" [rows]="100" [value]="modules">
4024
4067
  <ng-template pTemplate="header">
4025
4068
  <tr>
4026
- <th>{{ l10n.table.moduleId }}</th>
4027
- <th>{{ l10n.table.name }}</th>
4028
- <th>{{ l10n.table.currentlyLoaded }}</th>
4069
+ <th>{{ 'app-modules.table.moduleId' | translate }}</th>
4070
+ <th>{{ 'app-modules.table.name' | translate }}</th>
4071
+ <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>
4029
4072
  <th style="width: 4rem"></th>
4030
4073
  </tr>
4031
4074
  </ng-template>
@@ -4036,7 +4079,7 @@ class AppModulesComponent {
4036
4079
  <td>
4037
4080
  <p-tag
4038
4081
  [severity]="module.currentlyLoaded ? 'success' : 'danger'"
4039
- [value]="module.currentlyLoaded ? l10n.table.yes : l10n.table.no"></p-tag>
4082
+ [value]="(module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate"></p-tag>
4040
4083
  </td>
4041
4084
  <td>
4042
4085
  <p-button
@@ -4045,7 +4088,7 @@ class AppModulesComponent {
4045
4088
  severity="danger"
4046
4089
  text="true"
4047
4090
  tooltipPosition="bottom"
4048
- [pTooltip]="l10n.table.deleteTooltip"
4091
+ [pTooltip]="'app-modules.table.deleteTooltip' | translate"
4049
4092
  (onClick)="deleteModule(module)"></p-button>
4050
4093
  </td>
4051
4094
  </tr>
@@ -4053,12 +4096,12 @@ class AppModulesComponent {
4053
4096
  </p-table>
4054
4097
  </div>
4055
4098
  </div>
4056
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$6.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2$3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i4$2.Toolbar, selector: "p-toolbar", inputs: ["styleClass", "ariaLabelledBy"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "component", type: ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }] }); }
4099
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$6.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "size", "showGridlines", "stripedRows", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i2$4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "buttonProps", "autofocus", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i4$2.Toolbar, selector: "p-toolbar", inputs: ["styleClass", "ariaLabelledBy"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo"] }, { kind: "component", type: ConfirmDialog, selector: "p-confirmDialog, p-confirmdialog, p-confirm-dialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
4057
4100
  }
4058
4101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: AppModulesComponent, decorators: [{
4059
4102
  type: Component,
4060
4103
  args: [{
4061
- imports: [FormsModule, TableModule, Tag, ButtonModule, ToolbarModule, Tooltip, ConfirmDialog],
4104
+ imports: [FormsModule, TableModule, Tag, ButtonModule, ToolbarModule, Tooltip, ConfirmDialog, TranslatePipe],
4062
4105
  providers: [ConfirmationService, Module],
4063
4106
  selector: 'app-modules',
4064
4107
  template: `
@@ -4076,16 +4119,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
4076
4119
  severity="secondary"
4077
4120
  text="true"
4078
4121
  tooltipPosition="bottom"
4079
- [pTooltip]="l10n.refreshTooltip"
4122
+ [pTooltip]="'app-modules.refreshTooltip' | translate"
4080
4123
  (onClick)="refreshAction()"></p-button>
4081
4124
  </p-toolbar>
4082
4125
  </div>
4083
4126
  <p-table class="mt-4" [paginator]="true" [rows]="100" [value]="modules">
4084
4127
  <ng-template pTemplate="header">
4085
4128
  <tr>
4086
- <th>{{ l10n.table.moduleId }}</th>
4087
- <th>{{ l10n.table.name }}</th>
4088
- <th>{{ l10n.table.currentlyLoaded }}</th>
4129
+ <th>{{ 'app-modules.table.moduleId' | translate }}</th>
4130
+ <th>{{ 'app-modules.table.name' | translate }}</th>
4131
+ <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>
4089
4132
  <th style="width: 4rem"></th>
4090
4133
  </tr>
4091
4134
  </ng-template>
@@ -4096,7 +4139,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
4096
4139
  <td>
4097
4140
  <p-tag
4098
4141
  [severity]="module.currentlyLoaded ? 'success' : 'danger'"
4099
- [value]="module.currentlyLoaded ? l10n.table.yes : l10n.table.no"></p-tag>
4142
+ [value]="(module.currentlyLoaded ? 'app-modules.table.yes' : 'app-modules.table.no') | translate"></p-tag>
4100
4143
  </td>
4101
4144
  <td>
4102
4145
  <p-button
@@ -4105,7 +4148,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImpor
4105
4148
  severity="danger"
4106
4149
  text="true"
4107
4150
  tooltipPosition="bottom"
4108
- [pTooltip]="l10n.table.deleteTooltip"
4151
+ [pTooltip]="'app-modules.table.deleteTooltip' | translate"
4109
4152
  (onClick)="deleteModule(module)"></p-button>
4110
4153
  </td>
4111
4154
  </tr>