oip-common 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, signal, computed, effect, isDevMode, DestroyRef, ChangeDetectorRef, Component, Input, InjectionToken, PLATFORM_ID, ViewChild, HostBinding, EventEmitter, Output, untracked, Renderer2, SecurityContext, ChangeDetectionStrategy, Injector, EnvironmentInjector, ViewContainerRef, makeEnvironmentProviders, importProvidersFrom } from '@angular/core';
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { Subject, BehaviorSubject, of, tap, shareReplay, ReplaySubject, firstValueFrom, from, filter as filter$1 } from 'rxjs';
5
- import * as i2$1 from 'primeng/api';
5
+ import * as i3$1 from 'primeng/api';
6
6
  import { MessageService, ConfirmationService, PrimeIcons, SharedModule } from 'primeng/api';
7
7
  import { HttpErrorResponse, HttpClient as HttpClient$1, provideHttpClient, withInterceptors, withFetch } from '@angular/common/http';
8
8
  import * as i1$7 from '@ngx-translate/core';
@@ -22,47 +22,46 @@ import * as i1$1 from '@angular/forms';
22
22
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
23
23
  import * as i1$3 from '@angular/common';
24
24
  import { isPlatformBrowser, CommonModule, NgComponentOutlet, NgClass, DatePipe, PathLocationStrategy, LocationStrategy } from '@angular/common';
25
- import * as i3$3 from 'primeng/styleclass';
25
+ import * as i3$4 from 'primeng/styleclass';
26
26
  import { StyleClassModule } from 'primeng/styleclass';
27
27
  import { updatePreset, updateSurfacePalette, $t, definePreset } from '@primeng/themes';
28
28
  import Aura from '@primeng/themes/aura';
29
29
  import * as i3 from 'primeng/selectbutton';
30
30
  import { SelectButtonModule } from 'primeng/selectbutton';
31
31
  import { Tabs, TabList, Tab } from 'primeng/tabs';
32
- import * as i2$2 from 'primeng/avatar';
32
+ import * as i2$1 from 'primeng/avatar';
33
33
  import { AvatarModule } from 'primeng/avatar';
34
34
  import { ConfirmDialog } from 'primeng/confirmdialog';
35
35
  import * as i1$4 from 'primeng/badge';
36
36
  import { BadgeModule } from 'primeng/badge';
37
- import * as i3$1 from 'primeng/paginator';
37
+ import * as i3$2 from 'primeng/paginator';
38
38
  import { PaginatorModule } from 'primeng/paginator';
39
39
  import * as i7 from 'primeng/popover';
40
40
  import { Popover, PopoverModule } from 'primeng/popover';
41
41
  import * as i4 from 'primeng/progressspinner';
42
42
  import { ProgressSpinnerModule, ProgressSpinner } from 'primeng/progressspinner';
43
- import * as i9 from 'primeng/tag';
43
+ import * as i3$6 from 'primeng/tag';
44
44
  import { Tag, TagModule } from 'primeng/tag';
45
45
  import * as signalR from '@microsoft/signalr';
46
- import * as i3$2 from 'primeng/menu';
46
+ import * as i3$3 from 'primeng/menu';
47
47
  import { MenuModule } from 'primeng/menu';
48
48
  import * as i1$6 from 'primeng/contextmenu';
49
49
  import { ContextMenuModule, ContextMenu } from 'primeng/contextmenu';
50
- import * as i3$4 from 'primeng/dialog';
50
+ import * as i3$5 from 'primeng/dialog';
51
51
  import { DialogModule } from 'primeng/dialog';
52
52
  import * as i4$1 from 'primeng/inputtext';
53
53
  import { InputTextModule, InputText } from 'primeng/inputtext';
54
- import * as i2$3 from 'primeng/ripple';
54
+ import * as i2$2 from 'primeng/ripple';
55
55
  import { RippleModule } from 'primeng/ripple';
56
56
  import * as i5 from 'primeng/select';
57
57
  import { SelectModule, Select } from 'primeng/select';
58
58
  import * as i1$8 from 'primeng/fileupload';
59
59
  import { FileUploadModule } from 'primeng/fileupload';
60
60
  import { ImageModule } from 'primeng/image';
61
- import * as i1$9 from 'primeng/table';
61
+ import * as i2$4 from 'primeng/table';
62
62
  import { TableModule } from 'primeng/table';
63
- import * as i2$4 from 'primeng/toggleswitch';
63
+ import * as i2$3 from 'primeng/toggleswitch';
64
64
  import { ToggleSwitchModule } from 'primeng/toggleswitch';
65
- import { TextareaModule, Textarea } from 'primeng/textarea';
66
65
  import * as i5$1 from 'primeng/toolbar';
67
66
  import { ToolbarModule } from 'primeng/toolbar';
68
67
  import * as i5$2 from 'primeng/card';
@@ -70,6 +69,7 @@ import { CardModule } from 'primeng/card';
70
69
  import { DividerModule } from 'primeng/divider';
71
70
  import * as i6 from 'primeng/panel';
72
71
  import { PanelModule } from 'primeng/panel';
72
+ import { Textarea } from 'primeng/textarea';
73
73
  import { loadRemoteModule } from '@angular-architects/module-federation';
74
74
  import { primitive } from '@primeng/themes/aura/base';
75
75
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
@@ -552,7 +552,7 @@ var msgService$1 = {
552
552
  secondary: "Secondary"
553
553
  };
554
554
  var primeng$1 = "";
555
- var en$k = {
555
+ var en$l = {
556
556
  userService: userService$1,
557
557
  msgService: msgService$1,
558
558
  primeng: primeng$1
@@ -760,7 +760,7 @@ var primeng = {
760
760
  zoomOut: "Уменьшить"
761
761
  }
762
762
  };
763
- var ru$k = {
763
+ var ru$l = {
764
764
  userService: userService,
765
765
  msgService: msgService,
766
766
  primeng: primeng
@@ -770,7 +770,7 @@ var ru$k = {
770
770
  * Global dictionaries shared by all components. They are bundled with the library,
771
771
  * so the application never requests `assets/i18n/{lang}.json`.
772
772
  */
773
- const globalTranslations = { en: en$k, ru: ru$k };
773
+ const globalTranslations = { en: en$l, ru: ru$l };
774
774
  /**
775
775
  * Service for managing translation loading in the application
776
776
  */
@@ -1476,7 +1476,7 @@ var baseComponent$1 = {
1476
1476
  security: "Security",
1477
1477
  success: "Saved successfully"
1478
1478
  };
1479
- var en$j = {
1479
+ var en$k = {
1480
1480
  baseComponent: baseComponent$1
1481
1481
  };
1482
1482
 
@@ -1486,7 +1486,7 @@ var baseComponent = {
1486
1486
  security: "Безопасность",
1487
1487
  success: "Сохранено"
1488
1488
  };
1489
- var ru$j = {
1489
+ var ru$k = {
1490
1490
  baseComponent: baseComponent
1491
1491
  };
1492
1492
 
@@ -1627,7 +1627,7 @@ class BaseModuleComponent {
1627
1627
  * @type {Subject<TLocalStoreSettings>}
1628
1628
  */
1629
1629
  this.localSettingsUpdate = new Subject();
1630
- this.baseTranslations = provideTranslations({ en: en$j, ru: ru$j });
1630
+ this.baseTranslations = provideTranslations({ en: en$k, ru: ru$k });
1631
1631
  this.l10nService = inject(L10nService);
1632
1632
  this.canRead = false;
1633
1633
  this.canEdit = false;
@@ -1938,7 +1938,7 @@ var securityComponent$1 = {
1938
1938
  savedSecurity: "Security settings saved",
1939
1939
  selectRoles: "Select roles"
1940
1940
  };
1941
- var en$i = {
1941
+ var en$j = {
1942
1942
  securityComponent: securityComponent$1
1943
1943
  };
1944
1944
 
@@ -1948,13 +1948,13 @@ var securityComponent = {
1948
1948
  savedSecurity: "Настройки сохранены",
1949
1949
  selectRoles: "Выберите роли"
1950
1950
  };
1951
- var ru$i = {
1951
+ var ru$j = {
1952
1952
  securityComponent: securityComponent
1953
1953
  };
1954
1954
 
1955
1955
  class SecurityComponent {
1956
1956
  constructor() {
1957
- this.translations = provideTranslations({ en: en$i, ru: ru$i });
1957
+ this.translations = provideTranslations({ en: en$j, ru: ru$j });
1958
1958
  this.msgService = inject(MsgService);
1959
1959
  this.translateService = inject(TranslateService);
1960
1960
  this.httpClient = inject(HttpClient);
@@ -2123,7 +2123,7 @@ const APP_THEME_PRESETS_MERGE_MODE = new InjectionToken('APP_THEME_PRESETS_MERGE
2123
2123
  factory: () => 'mergeWithDefaults'
2124
2124
  });
2125
2125
 
2126
- var en$h = {
2126
+ var en$i = {
2127
2127
  "app-configurator": {
2128
2128
  primary: "Primary",
2129
2129
  surface: "Surface",
@@ -2134,7 +2134,7 @@ var en$h = {
2134
2134
  }
2135
2135
  };
2136
2136
 
2137
- var ru$h = {
2137
+ var ru$i = {
2138
2138
  "app-configurator": {
2139
2139
  primary: "Основной",
2140
2140
  surface: "Фон",
@@ -2178,7 +2178,7 @@ const PRIMARY_COLORS = [
2178
2178
  ];
2179
2179
  class AppConfiguratorComponent {
2180
2180
  constructor() {
2181
- this.translations = provideTranslations({ en: en$h, ru: ru$h });
2181
+ this.translations = provideTranslations({ en: en$i, ru: ru$i });
2182
2182
  this.router = inject(Router);
2183
2183
  this.config = inject(PrimeNG);
2184
2184
  this.layoutService = inject(LayoutService);
@@ -2699,7 +2699,7 @@ class AppConfiguratorComponent {
2699
2699
  </div>
2700
2700
  }
2701
2701
  </div>
2702
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
2702
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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: "directive", type: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
2703
2703
  }
2704
2704
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppConfiguratorComponent, decorators: [{
2705
2705
  type: Component,
@@ -3186,7 +3186,7 @@ var userNotifications$1 = {
3186
3186
  markAsRead: "Read",
3187
3187
  markedAsRead: "Notification marked as read"
3188
3188
  };
3189
- var en$g = {
3189
+ var en$h = {
3190
3190
  userNotifications: userNotifications$1
3191
3191
  };
3192
3192
 
@@ -3197,13 +3197,13 @@ var userNotifications = {
3197
3197
  markAsRead: "Прочитано",
3198
3198
  markedAsRead: "Оповещение отмечено прочитанным"
3199
3199
  };
3200
- var ru$g = {
3200
+ var ru$h = {
3201
3201
  userNotifications: userNotifications
3202
3202
  };
3203
3203
 
3204
3204
  class UserNotificationsComponent {
3205
3205
  constructor() {
3206
- this.translations = provideTranslations({ en: en$g, ru: ru$g });
3206
+ this.translations = provideTranslations({ en: en$h, ru: ru$h });
3207
3207
  this.notifications = [];
3208
3208
  this.totalCount = 0;
3209
3209
  this.skip = 0;
@@ -3368,7 +3368,7 @@ class UserNotificationsComponent {
3368
3368
  (onPageChange)="onPageChange($event)"></p-paginator>
3369
3369
  }
3370
3370
  </p-popover>
3371
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: BadgeModule }, { kind: "component", type: i1$4.Badge, selector: "p-badge", inputs: ["styleClass", "badgeSize", "size", "severity", "value", "badgeDisabled"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i3$1.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first", "appendTo"], outputs: ["onPageChange"] }, { kind: "component", type: Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { 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", "ptTooltip"] }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3371
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: BadgeModule }, { kind: "component", type: i1$4.Badge, selector: "p-badge", inputs: ["styleClass", "badgeSize", "size", "severity", "value", "badgeDisabled"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i3$2.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first", "appendTo"], outputs: ["onPageChange"] }, { kind: "component", type: Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { 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", "ptTooltip"] }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3372
3372
  }
3373
3373
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserNotificationsComponent, decorators: [{
3374
3374
  type: Component,
@@ -3593,7 +3593,7 @@ class AppTopbarApplicationSwitcherComponent {
3593
3593
  </p-button>
3594
3594
  <p-menu #applicationMenu [model]="applicationMenuItems" [popup]="true" />
3595
3595
  }
3596
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i3$2.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3596
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i3$3.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3597
3597
  }
3598
3598
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTopbarApplicationSwitcherComponent, decorators: [{
3599
3599
  type: Component,
@@ -3632,7 +3632,7 @@ var topbar$1 = {
3632
3632
  profile: "Profile",
3633
3633
  applications: "Applications"
3634
3634
  };
3635
- var en$f = {
3635
+ var en$g = {
3636
3636
  topbar: topbar$1
3637
3637
  };
3638
3638
 
@@ -3645,13 +3645,13 @@ var topbar = {
3645
3645
  profile: "Профиль",
3646
3646
  applications: "Приложения"
3647
3647
  };
3648
- var ru$f = {
3648
+ var ru$g = {
3649
3649
  topbar: topbar
3650
3650
  };
3651
3651
 
3652
3652
  class AppTopbar {
3653
3653
  constructor() {
3654
- this.translations = provideTranslations({ en: en$f, ru: ru$f });
3654
+ this.translations = provideTranslations({ en: en$g, ru: ru$g });
3655
3655
  this.securityService = inject(SecurityService);
3656
3656
  this.topBarService = inject(TopBarService);
3657
3657
  this.userService = inject(UserService);
@@ -3798,7 +3798,7 @@ class AppTopbar {
3798
3798
  </div>
3799
3799
  </div>
3800
3800
  </div>
3801
- </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i3$3.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: 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: i2$2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "component", type: UserNotificationsComponent, selector: "app-user-notifications" }, { kind: "component", type: AppTopbarApplicationSwitcherComponent, selector: "app-topbar-application-switcher" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3801
+ </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i3$4.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: 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: i2$1.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "component", type: UserNotificationsComponent, selector: "app-user-notifications" }, { kind: "component", type: AppTopbarApplicationSwitcherComponent, selector: "app-topbar-application-switcher" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3802
3802
  }
3803
3803
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTopbar, decorators: [{
3804
3804
  type: Component,
@@ -4564,7 +4564,7 @@ class MenuItemComponent {
4564
4564
  </ul>
4565
4565
  }
4566
4566
  </ng-container>
4567
- `, isInline: true, dependencies: [{ kind: "component", type: MenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey", "menuItemCreateDialogComponent", "menuItemEditDialogComponent", "contextMenu"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i2$3.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: "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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }] }); }
4567
+ `, isInline: true, dependencies: [{ kind: "component", type: MenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey", "menuItemCreateDialogComponent", "menuItemEditDialogComponent", "contextMenu"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i2$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: "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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }] }); }
4568
4568
  }
4569
4569
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemComponent, decorators: [{
4570
4570
  type: Component,
@@ -4821,7 +4821,7 @@ class MenuItemCreateDialogComponent {
4821
4821
  (click)="save()" />
4822
4822
  </div>
4823
4823
  </p-dialog>
4824
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3$4.Dialog, selector: "p-dialog", inputs: ["hostName", "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: i4$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i5.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: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
4824
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3$5.Dialog, selector: "p-dialog", inputs: ["hostName", "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: i4$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i5.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: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
4825
4825
  }
4826
4826
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemCreateDialogComponent, decorators: [{
4827
4827
  type: Component,
@@ -5083,7 +5083,7 @@ class MenuItemEditDialogComponent {
5083
5083
  (click)="save()" />
5084
5084
  </div>
5085
5085
  </p-dialog>
5086
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3$4.Dialog, selector: "p-dialog", inputs: ["hostName", "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: i4$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i5.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: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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" }] }); }
5086
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i3$5.Dialog, selector: "p-dialog", inputs: ["hostName", "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: i4$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i5.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: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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" }] }); }
5087
5087
  }
5088
5088
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemEditDialogComponent, decorators: [{
5089
5089
  type: Component,
@@ -5232,7 +5232,7 @@ var menuItemCreateDialogComponent$1 = {
5232
5232
  cancel: "Cancel",
5233
5233
  save: "Save"
5234
5234
  };
5235
- var en$e = {
5235
+ var en$f = {
5236
5236
  menuComponent: menuComponent$1,
5237
5237
  menuItemComponent: menuItemComponent$1,
5238
5238
  menuItemEditDialogComponent: menuItemEditDialogComponent$1,
@@ -5281,7 +5281,7 @@ var menuItemCreateDialogComponent = {
5281
5281
  cancel: "Отмена",
5282
5282
  save: "Сохранить"
5283
5283
  };
5284
- var ru$e = {
5284
+ var ru$f = {
5285
5285
  menuComponent: menuComponent,
5286
5286
  menuItemComponent: menuItemComponent,
5287
5287
  menuItemEditDialogComponent: menuItemEditDialogComponent,
@@ -5292,7 +5292,7 @@ class MenuComponent {
5292
5292
  constructor() {
5293
5293
  // Registers the whole menu/l10n/menu.*.json bundle, which also covers
5294
5294
  // menuItemComponent, menuItemEditDialogComponent and menuItemCreateDialogComponent.
5295
- this.translations = provideTranslations({ en: en$e, ru: ru$e });
5295
+ this.translations = provideTranslations({ en: en$f, ru: ru$f });
5296
5296
  this.menuService = inject(MenuService);
5297
5297
  this.securityService = inject(SecurityService);
5298
5298
  this.translateService = inject(TranslateService);
@@ -5419,14 +5419,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
5419
5419
  var blockLoader$1 = {
5420
5420
  loading: "Loading..."
5421
5421
  };
5422
- var en$d = {
5422
+ var en$e = {
5423
5423
  blockLoader: blockLoader$1
5424
5424
  };
5425
5425
 
5426
5426
  var blockLoader = {
5427
5427
  loading: "Загрузка..."
5428
5428
  };
5429
- var ru$d = {
5429
+ var ru$e = {
5430
5430
  blockLoader: blockLoader
5431
5431
  };
5432
5432
 
@@ -5443,7 +5443,7 @@ class BlockLoaderComponent {
5443
5443
  static { this.showDelayMs = 150; }
5444
5444
  static { this.minVisibleMs = 300; }
5445
5445
  constructor() {
5446
- this.translations = provideTranslations({ en: en$d, ru: ru$d });
5446
+ this.translations = provideTranslations({ en: en$e, ru: ru$e });
5447
5447
  this.moduleLoadingService = inject(ModuleLoadingService);
5448
5448
  this.shownAt = 0;
5449
5449
  this.visible = signal(false, ...(ngDevMode ? [{ debugName: "visible" }] : []));
@@ -5575,7 +5575,7 @@ var defaultSecretsBanner$1 = {
5575
5575
  dismiss: "Dismiss"
5576
5576
  }
5577
5577
  };
5578
- var en$c = {
5578
+ var en$d = {
5579
5579
  defaultSecretsBanner: defaultSecretsBanner$1
5580
5580
  };
5581
5581
 
@@ -5597,7 +5597,7 @@ var defaultSecretsBanner = {
5597
5597
  dismiss: "Скрыть"
5598
5598
  }
5599
5599
  };
5600
- var ru$c = {
5600
+ var ru$d = {
5601
5601
  defaultSecretsBanner: defaultSecretsBanner
5602
5602
  };
5603
5603
 
@@ -5613,7 +5613,7 @@ var ru$c = {
5613
5613
  */
5614
5614
  class DefaultSecretsBannerComponent {
5615
5615
  constructor() {
5616
- this.translations = provideTranslations({ en: en$c, ru: ru$c });
5616
+ this.translations = provideTranslations({ en: en$d, ru: ru$d });
5617
5617
  this.securityApi = inject(SecurityApi);
5618
5618
  this.securityService = inject(SecurityService);
5619
5619
  this.destroyRef = inject(DestroyRef);
@@ -5955,7 +5955,7 @@ class AppFloatingConfiguratorComponent {
5955
5955
  <app-configurator />
5956
5956
  </div>
5957
5957
  </div>
5958
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i3$3.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfiguratorComponent, selector: "app-configurator" }] }); }
5958
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i3$4.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfiguratorComponent, selector: "app-configurator" }] }); }
5959
5959
  }
5960
5960
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppFloatingConfiguratorComponent, decorators: [{
5961
5961
  type: Component,
@@ -5996,7 +5996,7 @@ var notfound$1 = {
5996
5996
  description: "Requested resource is not available.",
5997
5997
  button: "Go to home"
5998
5998
  };
5999
- var en$b = {
5999
+ var en$c = {
6000
6000
  notfound: notfound$1
6001
6001
  };
6002
6002
 
@@ -6006,13 +6006,13 @@ var notfound = {
6006
6006
  description: "Запрашиваемый ресурс недоступен.",
6007
6007
  button: "На главную"
6008
6008
  };
6009
- var ru$b = {
6009
+ var ru$c = {
6010
6010
  notfound: notfound
6011
6011
  };
6012
6012
 
6013
6013
  class NotfoundComponent {
6014
6014
  constructor() {
6015
- this.translations = provideTranslations({ en: en$b, ru: ru$b });
6015
+ this.translations = provideTranslations({ en: en$c, ru: ru$c });
6016
6016
  }
6017
6017
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotfoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6018
6018
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: NotfoundComponent, isStandalone: true, selector: "app-notfound", ngImport: i0, template: ` <app-floating-configurator />
@@ -6072,7 +6072,7 @@ var unauthorized$1 = {
6072
6072
  signInToContinue: "Sign in to continue",
6073
6073
  signIn: "Sign In"
6074
6074
  };
6075
- var en$a = {
6075
+ var en$b = {
6076
6076
  unauthorized: unauthorized$1
6077
6077
  };
6078
6078
 
@@ -6081,13 +6081,13 @@ var unauthorized = {
6081
6081
  signInToContinue: "Войдите чтобы продолжить",
6082
6082
  signIn: "Войти"
6083
6083
  };
6084
- var ru$a = {
6084
+ var ru$b = {
6085
6085
  unauthorized: unauthorized
6086
6086
  };
6087
6087
 
6088
6088
  class UnauthorizedComponent {
6089
6089
  constructor() {
6090
- this.translations = provideTranslations({ en: en$a, ru: ru$a });
6090
+ this.translations = provideTranslations({ en: en$b, ru: ru$b });
6091
6091
  this.securityService = inject(SecurityService);
6092
6092
  this.route = inject(ActivatedRoute);
6093
6093
  }
@@ -6187,7 +6187,7 @@ var access$1 = {
6187
6187
  message: "You do not have the necessary permissions. Please contact admins.",
6188
6188
  button: "Go to Dashboard"
6189
6189
  };
6190
- var en$9 = {
6190
+ var en$a = {
6191
6191
  access: access$1
6192
6192
  };
6193
6193
 
@@ -6196,13 +6196,13 @@ var access = {
6196
6196
  message: "У вас недостаточно прав. Пожалуйста, обратитесь к администраторам.",
6197
6197
  button: "На главную"
6198
6198
  };
6199
- var ru$9 = {
6199
+ var ru$a = {
6200
6200
  access: access
6201
6201
  };
6202
6202
 
6203
6203
  class AccessComponent {
6204
6204
  constructor() {
6205
- this.translations = provideTranslations({ en: en$9, ru: ru$9 });
6205
+ this.translations = provideTranslations({ en: en$a, ru: ru$a });
6206
6206
  }
6207
6207
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AccessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6208
6208
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: AccessComponent, isStandalone: true, selector: "app-access", ngImport: i0, template: `<div
@@ -6235,7 +6235,7 @@ class AccessComponent {
6235
6235
  </div>
6236
6236
  </div>
6237
6237
  </div>
6238
- </div>`, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i2$3.Ripple, selector: "[pRipple]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6238
+ </div>`, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i2$2.Ripple, selector: "[pRipple]" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6239
6239
  }
6240
6240
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AccessComponent, decorators: [{
6241
6241
  type: Component,
@@ -6282,7 +6282,7 @@ var error$1 = {
6282
6282
  message: "Requested resource is not available.",
6283
6283
  button: "Go to Dashboard"
6284
6284
  };
6285
- var en$8 = {
6285
+ var en$9 = {
6286
6286
  error: error$1
6287
6287
  };
6288
6288
 
@@ -6291,13 +6291,13 @@ var error = {
6291
6291
  message: "Запрашиваемый ресурс недоступен.",
6292
6292
  button: "На главную"
6293
6293
  };
6294
- var ru$8 = {
6294
+ var ru$9 = {
6295
6295
  error: error
6296
6296
  };
6297
6297
 
6298
6298
  class ErrorComponent {
6299
6299
  constructor() {
6300
- this.translations = provideTranslations({ en: en$8, ru: ru$8 });
6300
+ this.translations = provideTranslations({ en: en$9, ru: ru$9 });
6301
6301
  }
6302
6302
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6303
6303
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ErrorComponent, isStandalone: true, selector: "app-error", ngImport: i0, template: `<div
@@ -6330,7 +6330,7 @@ class ErrorComponent {
6330
6330
  </div>
6331
6331
  </div>
6332
6332
  </div>
6333
- </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i2$3.Ripple, selector: "[pRipple]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6333
+ </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$2.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i2$2.Ripple, selector: "[pRipple]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6334
6334
  }
6335
6335
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ErrorComponent, decorators: [{
6336
6336
  type: Component,
@@ -6388,7 +6388,7 @@ var profileComponent$1 = {
6388
6388
  photoDeleted: "Photo deleted",
6389
6389
  failedToDeletePhoto: "Failed to delete user photo"
6390
6390
  };
6391
- var en$7 = {
6391
+ var en$8 = {
6392
6392
  profileComponent: profileComponent$1
6393
6393
  };
6394
6394
 
@@ -6403,13 +6403,13 @@ var profileComponent = {
6403
6403
  photoDeleted: "Фото удалено",
6404
6404
  failedToDeletePhoto: "Не удалось удалить фото пользователя"
6405
6405
  };
6406
- var ru$7 = {
6406
+ var ru$8 = {
6407
6407
  profileComponent: profileComponent
6408
6408
  };
6409
6409
 
6410
6410
  class UserProfileComponent {
6411
6411
  constructor() {
6412
- this.translations = provideTranslations({ en: en$7, ru: ru$7 });
6412
+ this.translations = provideTranslations({ en: en$8, ru: ru$8 });
6413
6413
  this.userService = inject(UserService);
6414
6414
  this.msgService = inject(MsgService);
6415
6415
  this.translateService = inject(TranslateService);
@@ -6491,7 +6491,7 @@ class UserProfileComponent {
6491
6491
  (onClick)="confirmDeletePhoto($event)" />
6492
6492
  }
6493
6493
  </div>
6494
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i1$8.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: i2$2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6494
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i1$8.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: i2$1.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6495
6495
  }
6496
6496
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileComponent, decorators: [{
6497
6497
  type: Component,
@@ -6551,11 +6551,12 @@ var config$1 = {
6551
6551
  photo: "Photo",
6552
6552
  profile: "Profile",
6553
6553
  selectLanguage: "Select language",
6554
+ sessionManagement: "Session management",
6554
6555
  timeFormat: "Time format",
6555
6556
  timeZone: "Time zone",
6556
6557
  usePhoto256x256Pixel: "Use photo 256x256 pixel"
6557
6558
  };
6558
- var en$6 = {
6559
+ var en$7 = {
6559
6560
  config: config$1
6560
6561
  };
6561
6562
 
@@ -6571,17 +6572,18 @@ var config = {
6571
6572
  photo: "Фото",
6572
6573
  profile: "Профиль",
6573
6574
  selectLanguage: "Выберите язык",
6575
+ sessionManagement: "Управление сессиями",
6574
6576
  timeFormat: "Формат времени",
6575
6577
  timeZone: "Часовой пояс",
6576
6578
  usePhoto256x256Pixel: "Используйте фото 256x256 пикселей"
6577
6579
  };
6578
- var ru$6 = {
6580
+ var ru$7 = {
6579
6581
  config: config
6580
6582
  };
6581
6583
 
6582
6584
  class ConfigComponent {
6583
6585
  constructor() {
6584
- this.translations = provideTranslations({ en: en$6, ru: ru$6 });
6586
+ this.translations = provideTranslations({ en: en$7, ru: ru$7 });
6585
6587
  this.layoutService = inject(LayoutService);
6586
6588
  this.l10nService = inject(L10nService);
6587
6589
  this.userService = inject(UserService);
@@ -6716,11 +6718,19 @@ class ConfigComponent {
6716
6718
  label="{{ 'config.goTo' | translate }}"
6717
6719
  routerLink="/applications" />
6718
6720
  </div>
6721
+ <div class="flex items-center gap-2">
6722
+ <label for="oip-app-config-sessions-link">{{ 'config.sessionManagement' | translate }}</label>
6723
+ <p-button
6724
+ icon="pi pi-users"
6725
+ id="oip-app-config-sessions-link"
6726
+ label="{{ 'config.goTo' | translate }}"
6727
+ routerLink="/sessions" />
6728
+ </div>
6719
6729
  </div>
6720
6730
  </div>
6721
6731
  }
6722
6732
  </div>
6723
- `, isInline: true, dependencies: [{ kind: "component", type: UserProfileComponent, selector: "user-profile" }, { 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", "ptTooltip"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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$4.ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6733
+ `, isInline: true, dependencies: [{ kind: "component", type: UserProfileComponent, selector: "user-profile" }, { 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", "ptTooltip"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.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: "component", type: Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6724
6734
  }
6725
6735
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigComponent, decorators: [{
6726
6736
  type: Component,
@@ -6826,6 +6836,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
6826
6836
  label="{{ 'config.goTo' | translate }}"
6827
6837
  routerLink="/applications" />
6828
6838
  </div>
6839
+ <div class="flex items-center gap-2">
6840
+ <label for="oip-app-config-sessions-link">{{ 'config.sessionManagement' | translate }}</label>
6841
+ <p-button
6842
+ icon="pi pi-users"
6843
+ id="oip-app-config-sessions-link"
6844
+ label="{{ 'config.goTo' | translate }}"
6845
+ routerLink="/sessions" />
6846
+ </div>
6829
6847
  </div>
6830
6848
  </div>
6831
6849
  }
@@ -6850,12 +6868,12 @@ var config_component = /*#__PURE__*/Object.freeze({
6850
6868
  ConfigComponent: ConfigComponent
6851
6869
  });
6852
6870
 
6853
- var en$5 = {
6871
+ var en$6 = {
6854
6872
  "db-migration": {
6855
6873
  migrationManager: "Migration manager",
6856
6874
  actions: {
6857
6875
  refresh: "Refresh",
6858
- cleanFilter: "Clean filter",
6876
+ cleanFilter: "Clear filter",
6859
6877
  applyMigration: "Apply migration"
6860
6878
  },
6861
6879
  columns: {
@@ -6866,16 +6884,20 @@ var en$5 = {
6866
6884
  },
6867
6885
  messages: {
6868
6886
  errorRefreshing: "Error refreshing database"
6869
- }
6887
+ },
6888
+ filterPlaceholder: "Filter by migration name",
6889
+ empty: "No migrations",
6890
+ yes: "Yes",
6891
+ no: "No"
6870
6892
  }
6871
6893
  };
6872
6894
 
6873
- var ru$5 = {
6895
+ var ru$6 = {
6874
6896
  "db-migration": {
6875
6897
  migrationManager: "Менеджер миграций",
6876
6898
  actions: {
6877
6899
  refresh: "Обновить",
6878
- cleanFilter: "Очистить фильтр",
6900
+ cleanFilter: "Сбросить фильтр",
6879
6901
  applyMigration: "Применить миграцию"
6880
6902
  },
6881
6903
  columns: {
@@ -6886,28 +6908,48 @@ var ru$5 = {
6886
6908
  },
6887
6909
  messages: {
6888
6910
  errorRefreshing: "Ошибка обновления базы данных"
6889
- }
6911
+ },
6912
+ filterPlaceholder: "Фильтр по имени миграции",
6913
+ empty: "Нет миграций",
6914
+ yes: "Да",
6915
+ no: "Нет"
6890
6916
  }
6891
6917
  };
6892
6918
 
6893
6919
  class DbMigrationComponent extends BaseModuleComponent {
6894
6920
  constructor() {
6895
6921
  super(...arguments);
6896
- this.translations = provideTranslations({ en: en$5, ru: ru$5 });
6922
+ this.translations = provideTranslations({ en: en$6, ru: ru$6 });
6923
+ this.data = [];
6924
+ this.loading = false;
6925
+ this.globalFilter = '';
6897
6926
  }
6898
6927
  async ngOnInit() {
6899
6928
  await super.ngOnInit();
6900
6929
  await this.refreshAction();
6901
6930
  }
6902
6931
  async refreshAction() {
6903
- this.getData()
6904
- .then((response) => {
6905
- this.data = response;
6906
- })
6907
- .catch((error) => {
6932
+ this.loading = true;
6933
+ try {
6934
+ this.data = await this.getData();
6935
+ }
6936
+ catch (error) {
6908
6937
  console.log(error);
6909
6938
  this.msgService.error(this.l10nService.instant('db-migration.messages.errorRefreshing'));
6910
- });
6939
+ }
6940
+ finally {
6941
+ this.loading = false;
6942
+ }
6943
+ }
6944
+ get hasActiveFilters() {
6945
+ if (!this.dt?.filters)
6946
+ return false;
6947
+ return Object.values(this.dt.filters).some((meta) => (Array.isArray(meta) ? meta : [meta]).some((m) => m?.value !== null && m?.value !== undefined && m?.value !== ''));
6948
+ }
6949
+ clearFilter() {
6950
+ this.globalFilter = '';
6951
+ this.dt.clearFilterValues();
6952
+ this.dt._filter();
6911
6953
  }
6912
6954
  async getData() {
6913
6955
  return this.getMigrations();
@@ -6917,85 +6959,125 @@ class DbMigrationComponent extends BaseModuleComponent {
6917
6959
  return this.applyModuleMigration(request);
6918
6960
  }
6919
6961
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DbMigrationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6920
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DbMigrationComponent, isStandalone: true, selector: "db-migration", providers: [ConfirmationService], usesInheritance: true, ngImport: i0, template: `
6962
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DbMigrationComponent, isStandalone: true, selector: "db-migration", providers: [ConfirmationService], viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
6921
6963
  @if (isContent) {
6922
- <div class="card" style="height: 100%">
6923
- <p-confirmDialog />
6924
- <div>
6925
- <h5>{{ 'db-migration.migrationManager' | translate }}</h5>
6926
- <div class="flex flex-row gap-2">
6927
- <p-button
6928
- icon="pi pi-refresh"
6929
- severity="secondary"
6930
- tooltipPosition="bottom"
6931
- [outlined]="true"
6932
- [pTooltip]="'db-migration.actions.refresh' | translate"
6933
- (click)="refreshAction()" />
6934
- <p-button
6935
- icon="pi pi-filter-slash"
6936
- severity="secondary"
6937
- tooltipPosition="bottom"
6938
- [outlined]="true"
6939
- [pTooltip]="'db-migration.actions.cleanFilter' | translate"
6940
- (click)="dt.clear()" />
6941
- </div>
6942
- <div>
6943
- <p-table #dt dataKey="name" editMode="row" size="small" [scrollable]="true" [value]="data">
6944
- <ng-template let-columns pTemplate="header">
6945
- <tr>
6946
- <th pSortableColumn="name" scope="col">
6947
- {{ 'db-migration.columns.name' | translate }}
6948
- <p-columnFilter display="menu" field="name" type="text" />
6949
- </th>
6950
- <th scope="col">{{ 'db-migration.columns.applied' | translate }}</th>
6951
- <th scope="col">{{ 'db-migration.columns.exist' | translate }}</th>
6952
- <th scope="col">{{ 'db-migration.columns.pending' | translate }}</th>
6953
- <th scope="col"></th>
6954
- </tr>
6955
- </ng-template>
6964
+ <p-confirmDialog />
6965
+ <div class="flex flex-col md:flex-row gap-4">
6966
+ <div class="card w-full">
6967
+ <div class="mb-4">
6968
+ <p-toolbar>
6969
+ <div class="flex flex-col md:flex-row md:items-center gap-2 w-full">
6970
+ <div class="font-semibold text-lg flex items-center gap-2 mx-2">
6971
+ <i class="pi pi-database"></i>
6972
+ {{ 'db-migration.migrationManager' | translate }}
6973
+ </div>
6956
6974
 
6957
- <ng-template #body let-columns="columns" let-editing="editing" let-ri="rowIndex" let-rowData>
6958
- <tr [pEditableRow]="rowData">
6959
- <td>
6960
- {{ rowData.name }}
6961
- </td>
6962
- <td>
6963
- @if (rowData.applied) {
6964
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"></p-button>
6965
- }
6966
- </td>
6967
- <td>
6968
- @if (rowData.exist) {
6969
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true" />
6970
- }
6971
- </td>
6972
- <td>
6973
- @if (rowData.pending) {
6974
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"></p-button>
6975
- }
6976
- </td>
6977
- <td>
6978
- <p-button
6979
- icon="pi pi-bolt"
6980
- pCancelEditableRow
6981
- pTooltip="{{ 'db-migration.actions.applyMigration' | translate }}"
6982
- severity="secondary"
6983
- tooltipPosition="left"
6984
- [rounded]="true"
6985
- [text]="true"
6986
- (click)="applyMigration(rowData)">
6987
- </p-button>
6988
- </td>
6989
- </tr>
6990
- </ng-template>
6991
- </p-table>
6975
+ <div class="flex-1"></div>
6976
+ <div class="flex items-center gap-1 w-full md:w-auto">
6977
+ <p-button
6978
+ icon="pi pi-refresh"
6979
+ rounded="true"
6980
+ severity="secondary"
6981
+ text="true"
6982
+ tooltipPosition="bottom"
6983
+ [loading]="loading"
6984
+ [pTooltip]="'db-migration.actions.refresh' | translate"
6985
+ (onClick)="refreshAction()"></p-button>
6986
+ <input
6987
+ class="w-full md:w-96"
6988
+ pInputText
6989
+ type="text"
6990
+ [placeholder]="'db-migration.filterPlaceholder' | translate"
6991
+ [(ngModel)]="globalFilter"
6992
+ (ngModelChange)="dt.filterGlobal($event, 'contains')" />
6993
+ <p-button
6994
+ icon="pi pi-filter-slash"
6995
+ rounded="true"
6996
+ severity="secondary"
6997
+ text="true"
6998
+ tooltipPosition="bottom"
6999
+ [disabled]="!hasActiveFilters"
7000
+ [pTooltip]="'db-migration.actions.cleanFilter' | translate"
7001
+ (onClick)="clearFilter()"></p-button>
7002
+ </div>
7003
+ </div>
7004
+ </p-toolbar>
6992
7005
  </div>
7006
+ <p-table
7007
+ #dt
7008
+ class="mt-4"
7009
+ dataKey="name"
7010
+ sortField="name"
7011
+ [sortOrder]="1"
7012
+ [paginator]="true"
7013
+ [rows]="50"
7014
+ [globalFilterFields]="['name']"
7015
+ [value]="data"
7016
+ [loading]="loading">
7017
+ <ng-template pTemplate="header">
7018
+ <tr>
7019
+ <th pSortableColumn="name" scope="col">
7020
+ {{ 'db-migration.columns.name' | translate }}
7021
+ <p-sortIcon field="name"></p-sortIcon>
7022
+ <p-columnFilter display="menu" field="name" type="text" />
7023
+ </th>
7024
+ <th pSortableColumn="applied" scope="col">
7025
+ {{ 'db-migration.columns.applied' | translate }}
7026
+ <p-sortIcon field="applied"></p-sortIcon>
7027
+ </th>
7028
+ <th pSortableColumn="exist" scope="col">
7029
+ {{ 'db-migration.columns.exist' | translate }}
7030
+ <p-sortIcon field="exist"></p-sortIcon>
7031
+ </th>
7032
+ <th pSortableColumn="pending" scope="col">
7033
+ {{ 'db-migration.columns.pending' | translate }}
7034
+ <p-sortIcon field="pending"></p-sortIcon>
7035
+ </th>
7036
+ <th style="width: 4rem" scope="col"></th>
7037
+ </tr>
7038
+ </ng-template>
7039
+ <ng-template let-migration pTemplate="body">
7040
+ <tr>
7041
+ <td>{{ migration.name }}</td>
7042
+ <td>
7043
+ <p-tag
7044
+ [severity]="migration.applied ? 'success' : 'secondary'"
7045
+ [value]="(migration.applied ? 'db-migration.yes' : 'db-migration.no') | translate"></p-tag>
7046
+ </td>
7047
+ <td>
7048
+ <p-tag
7049
+ [severity]="migration.exist ? 'success' : 'secondary'"
7050
+ [value]="(migration.exist ? 'db-migration.yes' : 'db-migration.no') | translate"></p-tag>
7051
+ </td>
7052
+ <td>
7053
+ <p-tag
7054
+ [severity]="migration.pending ? 'warn' : 'secondary'"
7055
+ [value]="(migration.pending ? 'db-migration.yes' : 'db-migration.no') | translate"></p-tag>
7056
+ </td>
7057
+ <td>
7058
+ <p-button
7059
+ icon="pi pi-bolt"
7060
+ rounded="true"
7061
+ severity="secondary"
7062
+ text="true"
7063
+ tooltipPosition="left"
7064
+ [pTooltip]="'db-migration.actions.applyMigration' | translate"
7065
+ (onClick)="applyMigration(migration)"></p-button>
7066
+ </td>
7067
+ </tr>
7068
+ </ng-template>
7069
+ <ng-template pTemplate="emptymessage">
7070
+ <tr>
7071
+ <td colspan="5">{{ 'db-migration.empty' | translate }}</td>
7072
+ </tr>
7073
+ </ng-template>
7074
+ </p-table>
6993
7075
  </div>
6994
7076
  </div>
6995
7077
  } @else if (isSecurity) {
6996
7078
  <security [controller]="controller" [id]="id" />
6997
7079
  }
6998
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$9.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$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$9.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i1$9.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i1$9.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i1$9.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$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "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", "modal", "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", "ptTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
7080
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i2$4.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: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2$4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2$4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i2$4.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: "component", type: i3$6.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i4$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i5$1.Toolbar, selector: "p-toolbar", inputs: ["styleClass", "ariaLabelledBy"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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", "modal", "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", "ptTooltip"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
6999
7081
  }
7000
7082
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DbMigrationComponent, decorators: [{
7001
7083
  type: Component,
@@ -7005,8 +7087,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
7005
7087
  SharedModule,
7006
7088
  TagModule,
7007
7089
  InputTextModule,
7008
- TextareaModule,
7009
7090
  ButtonModule,
7091
+ ToolbarModule,
7010
7092
  FormsModule,
7011
7093
  ConfirmDialog,
7012
7094
  SecurityComponent,
@@ -7016,77 +7098,117 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
7016
7098
  selector: 'db-migration',
7017
7099
  template: `
7018
7100
  @if (isContent) {
7019
- <div class="card" style="height: 100%">
7020
- <p-confirmDialog />
7021
- <div>
7022
- <h5>{{ 'db-migration.migrationManager' | translate }}</h5>
7023
- <div class="flex flex-row gap-2">
7024
- <p-button
7025
- icon="pi pi-refresh"
7026
- severity="secondary"
7027
- tooltipPosition="bottom"
7028
- [outlined]="true"
7029
- [pTooltip]="'db-migration.actions.refresh' | translate"
7030
- (click)="refreshAction()" />
7031
- <p-button
7032
- icon="pi pi-filter-slash"
7033
- severity="secondary"
7034
- tooltipPosition="bottom"
7035
- [outlined]="true"
7036
- [pTooltip]="'db-migration.actions.cleanFilter' | translate"
7037
- (click)="dt.clear()" />
7038
- </div>
7039
- <div>
7040
- <p-table #dt dataKey="name" editMode="row" size="small" [scrollable]="true" [value]="data">
7041
- <ng-template let-columns pTemplate="header">
7042
- <tr>
7043
- <th pSortableColumn="name" scope="col">
7044
- {{ 'db-migration.columns.name' | translate }}
7045
- <p-columnFilter display="menu" field="name" type="text" />
7046
- </th>
7047
- <th scope="col">{{ 'db-migration.columns.applied' | translate }}</th>
7048
- <th scope="col">{{ 'db-migration.columns.exist' | translate }}</th>
7049
- <th scope="col">{{ 'db-migration.columns.pending' | translate }}</th>
7050
- <th scope="col"></th>
7051
- </tr>
7052
- </ng-template>
7101
+ <p-confirmDialog />
7102
+ <div class="flex flex-col md:flex-row gap-4">
7103
+ <div class="card w-full">
7104
+ <div class="mb-4">
7105
+ <p-toolbar>
7106
+ <div class="flex flex-col md:flex-row md:items-center gap-2 w-full">
7107
+ <div class="font-semibold text-lg flex items-center gap-2 mx-2">
7108
+ <i class="pi pi-database"></i>
7109
+ {{ 'db-migration.migrationManager' | translate }}
7110
+ </div>
7053
7111
 
7054
- <ng-template #body let-columns="columns" let-editing="editing" let-ri="rowIndex" let-rowData>
7055
- <tr [pEditableRow]="rowData">
7056
- <td>
7057
- {{ rowData.name }}
7058
- </td>
7059
- <td>
7060
- @if (rowData.applied) {
7061
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"></p-button>
7062
- }
7063
- </td>
7064
- <td>
7065
- @if (rowData.exist) {
7066
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true" />
7067
- }
7068
- </td>
7069
- <td>
7070
- @if (rowData.pending) {
7071
- <p-button icon="pi pi-check" severity="success" [rounded]="true" [text]="true"></p-button>
7072
- }
7073
- </td>
7074
- <td>
7075
- <p-button
7076
- icon="pi pi-bolt"
7077
- pCancelEditableRow
7078
- pTooltip="{{ 'db-migration.actions.applyMigration' | translate }}"
7079
- severity="secondary"
7080
- tooltipPosition="left"
7081
- [rounded]="true"
7082
- [text]="true"
7083
- (click)="applyMigration(rowData)">
7084
- </p-button>
7085
- </td>
7086
- </tr>
7087
- </ng-template>
7088
- </p-table>
7112
+ <div class="flex-1"></div>
7113
+ <div class="flex items-center gap-1 w-full md:w-auto">
7114
+ <p-button
7115
+ icon="pi pi-refresh"
7116
+ rounded="true"
7117
+ severity="secondary"
7118
+ text="true"
7119
+ tooltipPosition="bottom"
7120
+ [loading]="loading"
7121
+ [pTooltip]="'db-migration.actions.refresh' | translate"
7122
+ (onClick)="refreshAction()"></p-button>
7123
+ <input
7124
+ class="w-full md:w-96"
7125
+ pInputText
7126
+ type="text"
7127
+ [placeholder]="'db-migration.filterPlaceholder' | translate"
7128
+ [(ngModel)]="globalFilter"
7129
+ (ngModelChange)="dt.filterGlobal($event, 'contains')" />
7130
+ <p-button
7131
+ icon="pi pi-filter-slash"
7132
+ rounded="true"
7133
+ severity="secondary"
7134
+ text="true"
7135
+ tooltipPosition="bottom"
7136
+ [disabled]="!hasActiveFilters"
7137
+ [pTooltip]="'db-migration.actions.cleanFilter' | translate"
7138
+ (onClick)="clearFilter()"></p-button>
7139
+ </div>
7140
+ </div>
7141
+ </p-toolbar>
7089
7142
  </div>
7143
+ <p-table
7144
+ #dt
7145
+ class="mt-4"
7146
+ dataKey="name"
7147
+ sortField="name"
7148
+ [sortOrder]="1"
7149
+ [paginator]="true"
7150
+ [rows]="50"
7151
+ [globalFilterFields]="['name']"
7152
+ [value]="data"
7153
+ [loading]="loading">
7154
+ <ng-template pTemplate="header">
7155
+ <tr>
7156
+ <th pSortableColumn="name" scope="col">
7157
+ {{ 'db-migration.columns.name' | translate }}
7158
+ <p-sortIcon field="name"></p-sortIcon>
7159
+ <p-columnFilter display="menu" field="name" type="text" />
7160
+ </th>
7161
+ <th pSortableColumn="applied" scope="col">
7162
+ {{ 'db-migration.columns.applied' | translate }}
7163
+ <p-sortIcon field="applied"></p-sortIcon>
7164
+ </th>
7165
+ <th pSortableColumn="exist" scope="col">
7166
+ {{ 'db-migration.columns.exist' | translate }}
7167
+ <p-sortIcon field="exist"></p-sortIcon>
7168
+ </th>
7169
+ <th pSortableColumn="pending" scope="col">
7170
+ {{ 'db-migration.columns.pending' | translate }}
7171
+ <p-sortIcon field="pending"></p-sortIcon>
7172
+ </th>
7173
+ <th style="width: 4rem" scope="col"></th>
7174
+ </tr>
7175
+ </ng-template>
7176
+ <ng-template let-migration pTemplate="body">
7177
+ <tr>
7178
+ <td>{{ migration.name }}</td>
7179
+ <td>
7180
+ <p-tag
7181
+ [severity]="migration.applied ? 'success' : 'secondary'"
7182
+ [value]="(migration.applied ? 'db-migration.yes' : 'db-migration.no') | translate"></p-tag>
7183
+ </td>
7184
+ <td>
7185
+ <p-tag
7186
+ [severity]="migration.exist ? 'success' : 'secondary'"
7187
+ [value]="(migration.exist ? 'db-migration.yes' : 'db-migration.no') | translate"></p-tag>
7188
+ </td>
7189
+ <td>
7190
+ <p-tag
7191
+ [severity]="migration.pending ? 'warn' : 'secondary'"
7192
+ [value]="(migration.pending ? 'db-migration.yes' : 'db-migration.no') | translate"></p-tag>
7193
+ </td>
7194
+ <td>
7195
+ <p-button
7196
+ icon="pi pi-bolt"
7197
+ rounded="true"
7198
+ severity="secondary"
7199
+ text="true"
7200
+ tooltipPosition="left"
7201
+ [pTooltip]="'db-migration.actions.applyMigration' | translate"
7202
+ (onClick)="applyMigration(migration)"></p-button>
7203
+ </td>
7204
+ </tr>
7205
+ </ng-template>
7206
+ <ng-template pTemplate="emptymessage">
7207
+ <tr>
7208
+ <td colspan="5">{{ 'db-migration.empty' | translate }}</td>
7209
+ </tr>
7210
+ </ng-template>
7211
+ </p-table>
7090
7212
  </div>
7091
7213
  </div>
7092
7214
  } @else if (isSecurity) {
@@ -7095,7 +7217,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
7095
7217
  `,
7096
7218
  providers: [ConfirmationService]
7097
7219
  }]
7098
- }] });
7220
+ }], propDecorators: { dt: [{
7221
+ type: ViewChild,
7222
+ args: ['dt']
7223
+ }] } });
7099
7224
 
7100
7225
  var dbMigration_component = /*#__PURE__*/Object.freeze({
7101
7226
  __proto__: null,
@@ -7198,7 +7323,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
7198
7323
  type: Injectable
7199
7324
  }] });
7200
7325
 
7201
- var en$4 = {
7326
+ var en$5 = {
7202
7327
  "app-modules": {
7203
7328
  title: "Modules",
7204
7329
  refreshTooltip: "Refresh",
@@ -7212,7 +7337,8 @@ var en$4 = {
7212
7337
  currentlyLoaded: "Currently Loaded",
7213
7338
  yes: "Yes",
7214
7339
  no: "No",
7215
- deleteTooltip: "Delete"
7340
+ deleteTooltip: "Delete",
7341
+ empty: "No modules"
7216
7342
  },
7217
7343
  confirm: {
7218
7344
  header: "Warning",
@@ -7224,12 +7350,15 @@ var en$4 = {
7224
7350
  deleteSuccess: "Module deleted",
7225
7351
  deleteError: "Module delete failed",
7226
7352
  registerError: "External module registration failed",
7227
- registerSuccess: "External module registered"
7228
- }
7353
+ registerSuccess: "External module registered",
7354
+ loadError: "Failed to load modules"
7355
+ },
7356
+ filterPlaceholder: "Filter by ID or name",
7357
+ clearFilterTooltip: "Clear filter"
7229
7358
  }
7230
7359
  };
7231
7360
 
7232
- var ru$4 = {
7361
+ var ru$5 = {
7233
7362
  "app-modules": {
7234
7363
  title: "Модули",
7235
7364
  refreshTooltip: "Обновить",
@@ -7243,7 +7372,8 @@ var ru$4 = {
7243
7372
  currentlyLoaded: "Загружен",
7244
7373
  yes: "Да",
7245
7374
  no: "Нет",
7246
- deleteTooltip: "Удалить"
7375
+ deleteTooltip: "Удалить",
7376
+ empty: "Нет модулей"
7247
7377
  },
7248
7378
  confirm: {
7249
7379
  header: "Внимание",
@@ -7255,15 +7385,20 @@ var ru$4 = {
7255
7385
  deleteSuccess: "Модуль удален",
7256
7386
  deleteError: "Не удалось удалить модуль",
7257
7387
  registerError: "Не удалось зарегистрировать внешний модуль",
7258
- registerSuccess: "Внешний модуль зарегистрирован"
7259
- }
7388
+ registerSuccess: "Внешний модуль зарегистрирован",
7389
+ loadError: "Не удалось загрузить модули"
7390
+ },
7391
+ filterPlaceholder: "Фильтр по ID или имени",
7392
+ clearFilterTooltip: "Сбросить фильтр"
7260
7393
  }
7261
7394
  };
7262
7395
 
7263
- L10nService.registerTranslations({ en: en$4, ru: ru$4 });
7396
+ L10nService.registerTranslations({ en: en$5, ru: ru$5 });
7264
7397
  class AppModulesComponent {
7265
7398
  constructor() {
7266
7399
  this.modules = [];
7400
+ this.moduleFilter = '';
7401
+ this.loading = false;
7267
7402
  this.msgService = inject(MsgService);
7268
7403
  this.confirmationService = inject(ConfirmationService);
7269
7404
  this.l10nService = inject(L10nService);
@@ -7279,8 +7414,24 @@ class AppModulesComponent {
7279
7414
  this.titleService.setTitle(this.t('app-modules.title'));
7280
7415
  await this.refreshAction();
7281
7416
  }
7417
+ get filteredModules() {
7418
+ const filter = this.moduleFilter.trim().toLowerCase();
7419
+ if (!filter) {
7420
+ return this.modules;
7421
+ }
7422
+ return this.modules.filter((module) => [module.moduleId, module.name].some((value) => value?.toString().toLowerCase().includes(filter)));
7423
+ }
7282
7424
  async refreshAction() {
7283
- this.modules = await this.moduleService.getModulesWithLoadStatus();
7425
+ this.loading = true;
7426
+ try {
7427
+ this.modules = await this.moduleService.getModulesWithLoadStatus();
7428
+ }
7429
+ catch (error) {
7430
+ this.msgService.errorFromException(error, this.t('app-modules.messages.loadError'), this.t('app-modules.messages.loadError'));
7431
+ }
7432
+ finally {
7433
+ this.loading = false;
7434
+ }
7284
7435
  }
7285
7436
  get canRegisterExternalModule() {
7286
7437
  return !!this.externalModuleManifestUrl.trim() && !this.registeringExternalModule;
@@ -7343,46 +7494,91 @@ class AppModulesComponent {
7343
7494
  <p-confirmDialog></p-confirmDialog>
7344
7495
  <div class="flex flex-col md:flex-row gap-4">
7345
7496
  <div class="card w-full">
7346
- <div class="font-semibold text-xl mb-4">
7347
- {{ 'app-modules.title' | translate }}
7348
- </div>
7349
7497
  <div class="mb-4">
7350
7498
  <p-toolbar>
7351
7499
  <div class="flex flex-col md:flex-row md:items-center gap-2 w-full">
7352
- <div class="flex flex-col sm:flex-row gap-2 flex-1">
7500
+ <div class="font-semibold text-lg flex items-center gap-2 mx-2">
7501
+ <i class="pi pi-box"></i>
7502
+ {{ 'app-modules.title' | translate }}
7503
+ </div>
7504
+
7505
+ <div class="flex items-center gap-1 flex-1">
7353
7506
  <input
7354
7507
  class="w-full"
7355
7508
  pInputText
7356
7509
  type="url"
7510
+ id="oip-app-modules-manifest-url"
7357
7511
  [disabled]="registeringExternalModule"
7358
7512
  [placeholder]="'app-modules.register.manifestUrlPlaceholder' | translate"
7359
7513
  [(ngModel)]="externalModuleManifestUrl"
7360
7514
  (keydown.enter)="registerExternalModule()" />
7361
7515
  <p-button
7362
7516
  icon="pi pi-plus"
7517
+ rounded="true"
7363
7518
  severity="success"
7519
+ text="true"
7520
+ tooltipPosition="bottom"
7521
+ id="oip-app-modules-register"
7364
7522
  [disabled]="!canRegisterExternalModule"
7365
- [label]="'app-modules.register.button' | translate"
7523
+ [pTooltip]="'app-modules.register.button' | translate"
7366
7524
  [loading]="registeringExternalModule"
7367
7525
  (onClick)="registerExternalModule()"></p-button>
7368
7526
  </div>
7369
- <p-button
7370
- icon="pi pi-refresh"
7371
- rounded="true"
7372
- severity="secondary"
7373
- text="true"
7374
- tooltipPosition="bottom"
7375
- [pTooltip]="'app-modules.refreshTooltip' | translate"
7376
- (onClick)="refreshAction()"></p-button>
7527
+
7528
+ <div class="flex items-center gap-1 w-full md:w-auto">
7529
+ <p-button
7530
+ icon="pi pi-refresh"
7531
+ rounded="true"
7532
+ severity="secondary"
7533
+ text="true"
7534
+ tooltipPosition="bottom"
7535
+ [loading]="loading"
7536
+ [pTooltip]="'app-modules.refreshTooltip' | translate"
7537
+ (onClick)="refreshAction()"></p-button>
7538
+ <input
7539
+ class="w-full md:w-96"
7540
+ pInputText
7541
+ type="text"
7542
+ id="oip-app-modules-filter"
7543
+ [placeholder]="'app-modules.filterPlaceholder' | translate"
7544
+ [(ngModel)]="moduleFilter" />
7545
+ <p-button
7546
+ icon="pi pi-filter-slash"
7547
+ rounded="true"
7548
+ severity="secondary"
7549
+ text="true"
7550
+ tooltipPosition="bottom"
7551
+ id="oip-app-modules-clear-filter"
7552
+ [disabled]="!moduleFilter"
7553
+ [pTooltip]="'app-modules.clearFilterTooltip' | translate"
7554
+ (onClick)="moduleFilter = ''"></p-button>
7555
+ </div>
7377
7556
  </div>
7378
7557
  </p-toolbar>
7379
7558
  </div>
7380
- <p-table class="mt-4" [paginator]="true" [rows]="100" [value]="modules">
7559
+ <p-table
7560
+ class="mt-4"
7561
+ dataKey="moduleId"
7562
+ sortField="name"
7563
+ [sortOrder]="1"
7564
+ [paginator]="true"
7565
+ [rows]="100"
7566
+ [value]="filteredModules"
7567
+ [loading]="loading">
7381
7568
  <ng-template pTemplate="header">
7382
7569
  <tr>
7383
- <th>{{ 'app-modules.table.moduleId' | translate }}</th>
7384
- <th>{{ 'app-modules.table.name' | translate }}</th>
7385
- <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>
7570
+ <th pSortableColumn="moduleId">
7571
+ {{ 'app-modules.table.moduleId' | translate }}
7572
+ <p-sortIcon field="moduleId"></p-sortIcon>
7573
+ </th>
7574
+ <th pSortableColumn="name">
7575
+ {{ 'app-modules.table.name' | translate }}
7576
+ <p-sortIcon field="name"></p-sortIcon>
7577
+ </th>
7578
+ <th pSortableColumn="currentlyLoaded">
7579
+ {{ 'app-modules.table.currentlyLoaded' | translate }}
7580
+ <p-sortIcon field="currentlyLoaded"></p-sortIcon>
7581
+ </th>
7386
7582
  <th style="width: 4rem"></th>
7387
7583
  </tr>
7388
7584
  </ng-template>
@@ -7409,10 +7605,15 @@ class AppModulesComponent {
7409
7605
  </td>
7410
7606
  </tr>
7411
7607
  </ng-template>
7608
+ <ng-template pTemplate="emptymessage">
7609
+ <tr>
7610
+ <td colspan="4">{{ 'app-modules.table.empty' | translate }}</td>
7611
+ </tr>
7612
+ </ng-template>
7412
7613
  </p-table>
7413
7614
  </div>
7414
7615
  </div>
7415
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$9.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$1.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$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i5$1.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", "ptTooltip"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i4$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
7616
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2$4.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: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2$4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2$4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i5$1.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", "ptTooltip"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i4$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
7416
7617
  }
7417
7618
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppModulesComponent, decorators: [{
7418
7619
  type: Component,
@@ -7434,46 +7635,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
7434
7635
  <p-confirmDialog></p-confirmDialog>
7435
7636
  <div class="flex flex-col md:flex-row gap-4">
7436
7637
  <div class="card w-full">
7437
- <div class="font-semibold text-xl mb-4">
7438
- {{ 'app-modules.title' | translate }}
7439
- </div>
7440
7638
  <div class="mb-4">
7441
7639
  <p-toolbar>
7442
7640
  <div class="flex flex-col md:flex-row md:items-center gap-2 w-full">
7443
- <div class="flex flex-col sm:flex-row gap-2 flex-1">
7641
+ <div class="font-semibold text-lg flex items-center gap-2 mx-2">
7642
+ <i class="pi pi-box"></i>
7643
+ {{ 'app-modules.title' | translate }}
7644
+ </div>
7645
+
7646
+ <div class="flex items-center gap-1 flex-1">
7444
7647
  <input
7445
7648
  class="w-full"
7446
7649
  pInputText
7447
7650
  type="url"
7651
+ id="oip-app-modules-manifest-url"
7448
7652
  [disabled]="registeringExternalModule"
7449
7653
  [placeholder]="'app-modules.register.manifestUrlPlaceholder' | translate"
7450
7654
  [(ngModel)]="externalModuleManifestUrl"
7451
7655
  (keydown.enter)="registerExternalModule()" />
7452
7656
  <p-button
7453
7657
  icon="pi pi-plus"
7658
+ rounded="true"
7454
7659
  severity="success"
7660
+ text="true"
7661
+ tooltipPosition="bottom"
7662
+ id="oip-app-modules-register"
7455
7663
  [disabled]="!canRegisterExternalModule"
7456
- [label]="'app-modules.register.button' | translate"
7664
+ [pTooltip]="'app-modules.register.button' | translate"
7457
7665
  [loading]="registeringExternalModule"
7458
7666
  (onClick)="registerExternalModule()"></p-button>
7459
7667
  </div>
7460
- <p-button
7461
- icon="pi pi-refresh"
7462
- rounded="true"
7463
- severity="secondary"
7464
- text="true"
7465
- tooltipPosition="bottom"
7466
- [pTooltip]="'app-modules.refreshTooltip' | translate"
7467
- (onClick)="refreshAction()"></p-button>
7668
+
7669
+ <div class="flex items-center gap-1 w-full md:w-auto">
7670
+ <p-button
7671
+ icon="pi pi-refresh"
7672
+ rounded="true"
7673
+ severity="secondary"
7674
+ text="true"
7675
+ tooltipPosition="bottom"
7676
+ [loading]="loading"
7677
+ [pTooltip]="'app-modules.refreshTooltip' | translate"
7678
+ (onClick)="refreshAction()"></p-button>
7679
+ <input
7680
+ class="w-full md:w-96"
7681
+ pInputText
7682
+ type="text"
7683
+ id="oip-app-modules-filter"
7684
+ [placeholder]="'app-modules.filterPlaceholder' | translate"
7685
+ [(ngModel)]="moduleFilter" />
7686
+ <p-button
7687
+ icon="pi pi-filter-slash"
7688
+ rounded="true"
7689
+ severity="secondary"
7690
+ text="true"
7691
+ tooltipPosition="bottom"
7692
+ id="oip-app-modules-clear-filter"
7693
+ [disabled]="!moduleFilter"
7694
+ [pTooltip]="'app-modules.clearFilterTooltip' | translate"
7695
+ (onClick)="moduleFilter = ''"></p-button>
7696
+ </div>
7468
7697
  </div>
7469
7698
  </p-toolbar>
7470
7699
  </div>
7471
- <p-table class="mt-4" [paginator]="true" [rows]="100" [value]="modules">
7700
+ <p-table
7701
+ class="mt-4"
7702
+ dataKey="moduleId"
7703
+ sortField="name"
7704
+ [sortOrder]="1"
7705
+ [paginator]="true"
7706
+ [rows]="100"
7707
+ [value]="filteredModules"
7708
+ [loading]="loading">
7472
7709
  <ng-template pTemplate="header">
7473
7710
  <tr>
7474
- <th>{{ 'app-modules.table.moduleId' | translate }}</th>
7475
- <th>{{ 'app-modules.table.name' | translate }}</th>
7476
- <th>{{ 'app-modules.table.currentlyLoaded' | translate }}</th>
7711
+ <th pSortableColumn="moduleId">
7712
+ {{ 'app-modules.table.moduleId' | translate }}
7713
+ <p-sortIcon field="moduleId"></p-sortIcon>
7714
+ </th>
7715
+ <th pSortableColumn="name">
7716
+ {{ 'app-modules.table.name' | translate }}
7717
+ <p-sortIcon field="name"></p-sortIcon>
7718
+ </th>
7719
+ <th pSortableColumn="currentlyLoaded">
7720
+ {{ 'app-modules.table.currentlyLoaded' | translate }}
7721
+ <p-sortIcon field="currentlyLoaded"></p-sortIcon>
7722
+ </th>
7477
7723
  <th style="width: 4rem"></th>
7478
7724
  </tr>
7479
7725
  </ng-template>
@@ -7500,7 +7746,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
7500
7746
  </td>
7501
7747
  </tr>
7502
7748
  </ng-template>
7503
- </p-table>
7749
+ <ng-template pTemplate="emptymessage">
7750
+ <tr>
7751
+ <td colspan="4">{{ 'app-modules.table.empty' | translate }}</td>
7752
+ </tr>
7753
+ </ng-template>
7754
+ </p-table>
7504
7755
  </div>
7505
7756
  </div>
7506
7757
  `
@@ -7512,6 +7763,580 @@ var appModules_component = /*#__PURE__*/Object.freeze({
7512
7763
  AppModulesComponent: AppModulesComponent
7513
7764
  });
7514
7765
 
7766
+ /* eslint-disable */
7767
+ /* tslint:disable */
7768
+ // @ts-nocheck
7769
+ class AuthSessionsApi extends HttpClient {
7770
+ constructor() {
7771
+ super(...arguments);
7772
+ this.getAuthSessions = (query, params = {}) => this.request({
7773
+ path: `/api/auth-sessions/get-auth-sessions`,
7774
+ method: "GET",
7775
+ query: query,
7776
+ secure: true,
7777
+ format: "json",
7778
+ ...params,
7779
+ });
7780
+ this.deleteAuthSession = ({ sessionId, ...query }, params = {}) => this.request({
7781
+ path: `/api/auth-sessions/delete-auth-session/${sessionId}`,
7782
+ method: "DELETE",
7783
+ secure: true,
7784
+ ...params,
7785
+ });
7786
+ this.deleteAuthSessionsByUser = ({ userId, ...query }, params = {}) => this.request({
7787
+ path: `/api/auth-sessions/delete-auth-sessions-by-user/${userId}`,
7788
+ method: "DELETE",
7789
+ secure: true,
7790
+ format: "json",
7791
+ ...params,
7792
+ });
7793
+ this.deleteAllAuthSessions = (params = {}) => this.request({
7794
+ path: `/api/auth-sessions/delete-all-auth-sessions`,
7795
+ method: "DELETE",
7796
+ secure: true,
7797
+ format: "json",
7798
+ ...params,
7799
+ });
7800
+ }
7801
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthSessionsApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7802
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthSessionsApi }); }
7803
+ }
7804
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthSessionsApi, decorators: [{
7805
+ type: Injectable
7806
+ }] });
7807
+
7808
+ var en$4 = {
7809
+ "auth-sessions": {
7810
+ title: "Active sessions",
7811
+ refreshTooltip: "Refresh",
7812
+ filterPlaceholder: "Filter by user, email or IP address",
7813
+ table: {
7814
+ user: "User",
7815
+ created: "Signed in",
7816
+ lastActivity: "Last activity",
7817
+ expires: "Expires",
7818
+ ipAddress: "IP address",
7819
+ userAgent: "Browser",
7820
+ current: "Current",
7821
+ terminateTooltip: "Terminate session",
7822
+ terminateAllTooltip: "Terminate all user sessions",
7823
+ empty: "No active sessions"
7824
+ },
7825
+ confirm: {
7826
+ header: "Warning",
7827
+ terminateMessage: "Terminate the session of {{user}}?",
7828
+ terminateAllMessage: "Terminate all sessions of {{user}}?",
7829
+ cancel: "Cancel",
7830
+ terminate: "Terminate",
7831
+ terminateEveryoneMessage: "Terminate all sessions except the current one?"
7832
+ },
7833
+ messages: {
7834
+ loadError: "Failed to load sessions",
7835
+ terminateSuccess: "Session terminated",
7836
+ terminateAllSuccess: "Sessions terminated: {{count}}",
7837
+ terminateError: "Session termination failed"
7838
+ },
7839
+ terminateAllTooltip: "Terminate all except current",
7840
+ clearFilterTooltip: "Clear filter"
7841
+ }
7842
+ };
7843
+
7844
+ var ru$4 = {
7845
+ "auth-sessions": {
7846
+ title: "Активные сессии",
7847
+ refreshTooltip: "Обновить",
7848
+ filterPlaceholder: "Фильтр по пользователю, email или IP-адресу",
7849
+ table: {
7850
+ user: "Пользователь",
7851
+ created: "Вход",
7852
+ lastActivity: "Последняя активность",
7853
+ expires: "Истекает",
7854
+ ipAddress: "IP-адрес",
7855
+ userAgent: "Браузер",
7856
+ current: "Текущая",
7857
+ terminateTooltip: "Завершить сессию",
7858
+ terminateAllTooltip: "Завершить все сессии пользователя",
7859
+ empty: "Активных сессий нет"
7860
+ },
7861
+ confirm: {
7862
+ header: "Внимание",
7863
+ terminateMessage: "Завершить сессию пользователя {{user}}?",
7864
+ terminateAllMessage: "Завершить все сессии пользователя {{user}}?",
7865
+ cancel: "Отмена",
7866
+ terminate: "Завершить",
7867
+ terminateEveryoneMessage: "Завершить все сессии, кроме текущей?"
7868
+ },
7869
+ messages: {
7870
+ loadError: "Не удалось загрузить сессии",
7871
+ terminateSuccess: "Сессия завершена",
7872
+ terminateAllSuccess: "Завершено сессий: {{count}}",
7873
+ terminateError: "Не удалось завершить сессию"
7874
+ },
7875
+ terminateAllTooltip: "Завершить все, кроме текущей",
7876
+ clearFilterTooltip: "Очистить фильтр"
7877
+ }
7878
+ };
7879
+
7880
+ L10nService.registerTranslations({ en: en$4, ru: ru$4 });
7881
+ /**
7882
+ * Administrator page listing active authentication sessions with the ability to terminate them.
7883
+ */
7884
+ class AuthSessionsComponent {
7885
+ constructor() {
7886
+ this.sessions = [];
7887
+ this.userFilter = '';
7888
+ this.loading = false;
7889
+ this.msgService = inject(MsgService);
7890
+ this.confirmationService = inject(ConfirmationService);
7891
+ this.l10nService = inject(L10nService);
7892
+ this.titleService = inject(AppTitleService);
7893
+ this.layoutService = inject(LayoutService);
7894
+ this.authSessionsApi = inject(AuthSessionsApi);
7895
+ this.translationsReady = firstValueFrom(this.l10nService.loadComponentTranslations('auth-sessions'));
7896
+ }
7897
+ async ngOnInit() {
7898
+ await this.translationsReady;
7899
+ this.titleService.setTitle(this.t('auth-sessions.title'));
7900
+ await this.refreshAction();
7901
+ }
7902
+ get filteredSessions() {
7903
+ const filter = this.userFilter.trim().toLowerCase();
7904
+ if (!filter) {
7905
+ return this.sessions;
7906
+ }
7907
+ return this.sessions.filter((session) => [session.userName, session.displayName, session.email, session.userId, session.ipAddress].some((value) => value?.toLowerCase().includes(filter)));
7908
+ }
7909
+ async refreshAction() {
7910
+ this.loading = true;
7911
+ try {
7912
+ this.sessions = await this.authSessionsApi.getAuthSessions({});
7913
+ }
7914
+ catch (error) {
7915
+ this.msgService.errorFromException(error, this.t('auth-sessions.messages.loadError'), this.t('auth-sessions.messages.loadError'));
7916
+ }
7917
+ finally {
7918
+ this.loading = false;
7919
+ }
7920
+ }
7921
+ get hasOtherSessionsThanCurrent() {
7922
+ return this.sessions.some((x) => !x.isCurrent);
7923
+ }
7924
+ async terminateAllSessions() {
7925
+ await this.translationsReady;
7926
+ this.confirmationService.confirm({
7927
+ header: this.t('auth-sessions.confirm.header'),
7928
+ message: this.t('auth-sessions.confirm.terminateEveryoneMessage'),
7929
+ icon: 'pi pi-power-off',
7930
+ rejectButtonProps: {
7931
+ label: this.t('auth-sessions.confirm.cancel'),
7932
+ severity: 'secondary',
7933
+ outlined: true
7934
+ },
7935
+ acceptButtonProps: {
7936
+ label: this.t('auth-sessions.confirm.terminate'),
7937
+ severity: 'danger'
7938
+ },
7939
+ accept: async () => {
7940
+ try {
7941
+ const result = await this.authSessionsApi.deleteAllAuthSessions();
7942
+ await this.refreshAction();
7943
+ this.msgService.success(this.l10nService.instant('auth-sessions.messages.terminateAllSuccess', {
7944
+ count: result.deletedCount ?? 0
7945
+ }));
7946
+ }
7947
+ catch (error) {
7948
+ this.msgService.errorFromException(error, this.t('auth-sessions.messages.terminateError'), this.t('auth-sessions.messages.terminateError'));
7949
+ }
7950
+ }
7951
+ });
7952
+ }
7953
+ hasOtherSessions(session) {
7954
+ return this.sessions.some((x) => x.userId === session.userId && !x.isCurrent);
7955
+ }
7956
+ async terminateSession(session) {
7957
+ await this.translationsReady;
7958
+ this.confirmationService.confirm({
7959
+ header: this.t('auth-sessions.confirm.header'),
7960
+ message: this.l10nService.instant('auth-sessions.confirm.terminateMessage', {
7961
+ user: session.userName ?? session.userId ?? ''
7962
+ }),
7963
+ icon: 'pi pi-sign-out',
7964
+ rejectButtonProps: {
7965
+ label: this.t('auth-sessions.confirm.cancel'),
7966
+ severity: 'secondary',
7967
+ outlined: true
7968
+ },
7969
+ acceptButtonProps: {
7970
+ label: this.t('auth-sessions.confirm.terminate'),
7971
+ severity: 'danger'
7972
+ },
7973
+ accept: async () => {
7974
+ try {
7975
+ await this.authSessionsApi.deleteAuthSession({ sessionId: session.sessionId });
7976
+ await this.refreshAction();
7977
+ this.msgService.success(this.t('auth-sessions.messages.terminateSuccess'));
7978
+ }
7979
+ catch (error) {
7980
+ this.msgService.errorFromException(error, this.t('auth-sessions.messages.terminateError'), this.t('auth-sessions.messages.terminateError'));
7981
+ }
7982
+ }
7983
+ });
7984
+ }
7985
+ async terminateUserSessions(session) {
7986
+ await this.translationsReady;
7987
+ this.confirmationService.confirm({
7988
+ header: this.t('auth-sessions.confirm.header'),
7989
+ message: this.l10nService.instant('auth-sessions.confirm.terminateAllMessage', {
7990
+ user: session.userName ?? session.userId ?? ''
7991
+ }),
7992
+ icon: 'pi pi-user-minus',
7993
+ rejectButtonProps: {
7994
+ label: this.t('auth-sessions.confirm.cancel'),
7995
+ severity: 'secondary',
7996
+ outlined: true
7997
+ },
7998
+ acceptButtonProps: {
7999
+ label: this.t('auth-sessions.confirm.terminate'),
8000
+ severity: 'danger'
8001
+ },
8002
+ accept: async () => {
8003
+ try {
8004
+ const result = await this.authSessionsApi.deleteAuthSessionsByUser({ userId: session.userId });
8005
+ await this.refreshAction();
8006
+ this.msgService.success(this.l10nService.instant('auth-sessions.messages.terminateAllSuccess', {
8007
+ count: result.deletedCount ?? 0
8008
+ }));
8009
+ }
8010
+ catch (error) {
8011
+ this.msgService.errorFromException(error, this.t('auth-sessions.messages.terminateError'), this.t('auth-sessions.messages.terminateError'));
8012
+ }
8013
+ }
8014
+ });
8015
+ }
8016
+ t(key) {
8017
+ return this.l10nService.instant(key);
8018
+ }
8019
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthSessionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8020
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AuthSessionsComponent, isStandalone: true, selector: "app-auth-sessions", providers: [ConfirmationService, AuthSessionsApi], ngImport: i0, template: `
8021
+ <p-confirmDialog></p-confirmDialog>
8022
+ <div class="flex flex-col md:flex-row gap-4">
8023
+ <div class="card w-full">
8024
+ <div class="mb-4">
8025
+ <p-toolbar>
8026
+ <div class="flex flex-col md:flex-row md:items-center gap-2 w-full">
8027
+ <div class="font-semibold text-lg flex items-center gap-2 mx-2">
8028
+ <i class="pi pi-users"></i>
8029
+ {{ 'auth-sessions.title' | translate }}
8030
+ </div>
8031
+
8032
+ <div class="flex-1"></div>
8033
+ <div class="flex items-center gap-1 w-full md:w-auto">
8034
+ <p-button
8035
+ icon="pi pi-refresh"
8036
+ rounded="true"
8037
+ severity="secondary"
8038
+ text="true"
8039
+ tooltipPosition="bottom"
8040
+ [loading]="loading"
8041
+ [pTooltip]="'auth-sessions.refreshTooltip' | translate"
8042
+ (onClick)="refreshAction()"></p-button>
8043
+ <p-button
8044
+ icon="pi pi-power-off"
8045
+ rounded="true"
8046
+ severity="danger"
8047
+ text="true"
8048
+ tooltipPosition="bottom"
8049
+ id="oip-auth-sessions-terminate-all"
8050
+ [disabled]="loading || !hasOtherSessionsThanCurrent"
8051
+ [pTooltip]="'auth-sessions.terminateAllTooltip' | translate"
8052
+ (onClick)="terminateAllSessions()"></p-button>
8053
+ <input
8054
+ class="w-full md:w-96"
8055
+ pInputText
8056
+ type="text"
8057
+ id="oip-auth-sessions-filter"
8058
+ [placeholder]="'auth-sessions.filterPlaceholder' | translate"
8059
+ [(ngModel)]="userFilter"/>
8060
+ <p-button
8061
+ icon="pi pi-filter-slash"
8062
+ rounded="true"
8063
+ severity="secondary"
8064
+ text="true"
8065
+ tooltipPosition="bottom"
8066
+ id="oip-auth-sessions-clear-filter"
8067
+ [disabled]="!userFilter"
8068
+ [pTooltip]="'auth-sessions.clearFilterTooltip' | translate"
8069
+ (onClick)="userFilter = ''"></p-button>
8070
+ </div>
8071
+ </div>
8072
+ </p-toolbar>
8073
+ </div>
8074
+ <p-table
8075
+ class="mt-4"
8076
+ dataKey="sessionId"
8077
+ [paginator]="true"
8078
+ [rows]="50"
8079
+ sortField="lastActivityUtc"
8080
+ [sortOrder]="-1"
8081
+ [value]="filteredSessions"
8082
+ [loading]="loading">
8083
+ <ng-template pTemplate="header">
8084
+ <tr>
8085
+ <th pSortableColumn="userName">
8086
+ {{ 'auth-sessions.table.user' | translate }}
8087
+ <p-sortIcon field="userName"></p-sortIcon>
8088
+ </th>
8089
+ <th pSortableColumn="createdUtc">
8090
+ {{ 'auth-sessions.table.created' | translate }}
8091
+ <p-sortIcon field="createdUtc"></p-sortIcon>
8092
+ </th>
8093
+ <th pSortableColumn="expiresUtc">
8094
+ {{ 'auth-sessions.table.expires' | translate }}
8095
+ <p-sortIcon field="expiresUtc"></p-sortIcon>
8096
+ </th>
8097
+ <th pSortableColumn="lastActivityUtc">
8098
+ {{ 'auth-sessions.table.lastActivity' | translate }}
8099
+ <p-sortIcon field="lastActivityUtc"></p-sortIcon>
8100
+ </th>
8101
+ <th pSortableColumn="ipAddress">
8102
+ {{ 'auth-sessions.table.ipAddress' | translate }}
8103
+ <p-sortIcon field="ipAddress"></p-sortIcon>
8104
+ </th>
8105
+ <th pSortableColumn="userAgent">
8106
+ {{ 'auth-sessions.table.userAgent' | translate }}
8107
+ <p-sortIcon field="userAgent"></p-sortIcon>
8108
+ </th>
8109
+ <th style="width: 7rem"></th>
8110
+ </tr>
8111
+ </ng-template>
8112
+ <ng-template let-session pTemplate="body">
8113
+ <tr>
8114
+ <td>
8115
+ <div class="flex items-center gap-2">
8116
+ <div class="flex flex-col">
8117
+ <span class="font-medium">{{ session.userName }}</span>
8118
+ @if (session.displayName || session.email) {
8119
+ <span class="text-sm text-muted-color">{{ session.displayName || session.email }}</span>
8120
+ }
8121
+ </div>
8122
+ @if (session.isCurrent) {
8123
+ <p-tag severity="info" [value]="'auth-sessions.table.current' | translate"></p-tag>
8124
+ }
8125
+ </div>
8126
+ </td>
8127
+ <td>{{ session.createdUtc | date: layoutService.dateTimeFormat() }}</td>
8128
+ <td>{{ session.expiresUtc | date: layoutService.dateTimeFormat() }}</td>
8129
+ <td>{{ session.lastActivityUtc | date: layoutService.dateTimeFormat() }}</td>
8130
+ <td>{{ session.ipAddress }}</td>
8131
+ <td class="max-w-80 truncate" [pTooltip]="session.userAgent" tooltipPosition="top">
8132
+ {{ session.userAgent }}
8133
+ </td>
8134
+ <td>
8135
+ <div class="flex gap-1">
8136
+ <p-button
8137
+ icon="pi pi-sign-out"
8138
+ rounded="true"
8139
+ severity="danger"
8140
+ text="true"
8141
+ tooltipPosition="bottom"
8142
+ [disabled]="session.isCurrent"
8143
+ [pTooltip]="'auth-sessions.table.terminateTooltip' | translate"
8144
+ (onClick)="terminateSession(session)"></p-button>
8145
+ <p-button
8146
+ icon="pi pi-user-minus"
8147
+ rounded="true"
8148
+ severity="danger"
8149
+ text="true"
8150
+ tooltipPosition="bottom"
8151
+ [disabled]="!session.userId || !hasOtherSessions(session)"
8152
+ [pTooltip]="'auth-sessions.table.terminateAllTooltip' | translate"
8153
+ (onClick)="terminateUserSessions(session)"></p-button>
8154
+ </div>
8155
+ </td>
8156
+ </tr>
8157
+ </ng-template>
8158
+ <ng-template pTemplate="emptymessage">
8159
+ <tr>
8160
+ <td colspan="7">{{ 'auth-sessions.table.empty' | translate }}</td>
8161
+ </tr>
8162
+ </ng-template>
8163
+ </p-table>
8164
+ </div>
8165
+ </div>
8166
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2$4.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: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2$4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2$4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i5$1.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", "ptTooltip"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i4$1.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "date" }] }); }
8167
+ }
8168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthSessionsComponent, decorators: [{
8169
+ type: Component,
8170
+ args: [{
8171
+ imports: [
8172
+ FormsModule,
8173
+ TableModule,
8174
+ Tag,
8175
+ ButtonModule,
8176
+ ToolbarModule,
8177
+ Tooltip,
8178
+ ConfirmDialog,
8179
+ TranslatePipe,
8180
+ InputTextModule,
8181
+ DatePipe
8182
+ ],
8183
+ providers: [ConfirmationService, AuthSessionsApi],
8184
+ selector: 'app-auth-sessions',
8185
+ template: `
8186
+ <p-confirmDialog></p-confirmDialog>
8187
+ <div class="flex flex-col md:flex-row gap-4">
8188
+ <div class="card w-full">
8189
+ <div class="mb-4">
8190
+ <p-toolbar>
8191
+ <div class="flex flex-col md:flex-row md:items-center gap-2 w-full">
8192
+ <div class="font-semibold text-lg flex items-center gap-2 mx-2">
8193
+ <i class="pi pi-users"></i>
8194
+ {{ 'auth-sessions.title' | translate }}
8195
+ </div>
8196
+
8197
+ <div class="flex-1"></div>
8198
+ <div class="flex items-center gap-1 w-full md:w-auto">
8199
+ <p-button
8200
+ icon="pi pi-refresh"
8201
+ rounded="true"
8202
+ severity="secondary"
8203
+ text="true"
8204
+ tooltipPosition="bottom"
8205
+ [loading]="loading"
8206
+ [pTooltip]="'auth-sessions.refreshTooltip' | translate"
8207
+ (onClick)="refreshAction()"></p-button>
8208
+ <p-button
8209
+ icon="pi pi-power-off"
8210
+ rounded="true"
8211
+ severity="danger"
8212
+ text="true"
8213
+ tooltipPosition="bottom"
8214
+ id="oip-auth-sessions-terminate-all"
8215
+ [disabled]="loading || !hasOtherSessionsThanCurrent"
8216
+ [pTooltip]="'auth-sessions.terminateAllTooltip' | translate"
8217
+ (onClick)="terminateAllSessions()"></p-button>
8218
+ <input
8219
+ class="w-full md:w-96"
8220
+ pInputText
8221
+ type="text"
8222
+ id="oip-auth-sessions-filter"
8223
+ [placeholder]="'auth-sessions.filterPlaceholder' | translate"
8224
+ [(ngModel)]="userFilter"/>
8225
+ <p-button
8226
+ icon="pi pi-filter-slash"
8227
+ rounded="true"
8228
+ severity="secondary"
8229
+ text="true"
8230
+ tooltipPosition="bottom"
8231
+ id="oip-auth-sessions-clear-filter"
8232
+ [disabled]="!userFilter"
8233
+ [pTooltip]="'auth-sessions.clearFilterTooltip' | translate"
8234
+ (onClick)="userFilter = ''"></p-button>
8235
+ </div>
8236
+ </div>
8237
+ </p-toolbar>
8238
+ </div>
8239
+ <p-table
8240
+ class="mt-4"
8241
+ dataKey="sessionId"
8242
+ [paginator]="true"
8243
+ [rows]="50"
8244
+ sortField="lastActivityUtc"
8245
+ [sortOrder]="-1"
8246
+ [value]="filteredSessions"
8247
+ [loading]="loading">
8248
+ <ng-template pTemplate="header">
8249
+ <tr>
8250
+ <th pSortableColumn="userName">
8251
+ {{ 'auth-sessions.table.user' | translate }}
8252
+ <p-sortIcon field="userName"></p-sortIcon>
8253
+ </th>
8254
+ <th pSortableColumn="createdUtc">
8255
+ {{ 'auth-sessions.table.created' | translate }}
8256
+ <p-sortIcon field="createdUtc"></p-sortIcon>
8257
+ </th>
8258
+ <th pSortableColumn="expiresUtc">
8259
+ {{ 'auth-sessions.table.expires' | translate }}
8260
+ <p-sortIcon field="expiresUtc"></p-sortIcon>
8261
+ </th>
8262
+ <th pSortableColumn="lastActivityUtc">
8263
+ {{ 'auth-sessions.table.lastActivity' | translate }}
8264
+ <p-sortIcon field="lastActivityUtc"></p-sortIcon>
8265
+ </th>
8266
+ <th pSortableColumn="ipAddress">
8267
+ {{ 'auth-sessions.table.ipAddress' | translate }}
8268
+ <p-sortIcon field="ipAddress"></p-sortIcon>
8269
+ </th>
8270
+ <th pSortableColumn="userAgent">
8271
+ {{ 'auth-sessions.table.userAgent' | translate }}
8272
+ <p-sortIcon field="userAgent"></p-sortIcon>
8273
+ </th>
8274
+ <th style="width: 7rem"></th>
8275
+ </tr>
8276
+ </ng-template>
8277
+ <ng-template let-session pTemplate="body">
8278
+ <tr>
8279
+ <td>
8280
+ <div class="flex items-center gap-2">
8281
+ <div class="flex flex-col">
8282
+ <span class="font-medium">{{ session.userName }}</span>
8283
+ @if (session.displayName || session.email) {
8284
+ <span class="text-sm text-muted-color">{{ session.displayName || session.email }}</span>
8285
+ }
8286
+ </div>
8287
+ @if (session.isCurrent) {
8288
+ <p-tag severity="info" [value]="'auth-sessions.table.current' | translate"></p-tag>
8289
+ }
8290
+ </div>
8291
+ </td>
8292
+ <td>{{ session.createdUtc | date: layoutService.dateTimeFormat() }}</td>
8293
+ <td>{{ session.expiresUtc | date: layoutService.dateTimeFormat() }}</td>
8294
+ <td>{{ session.lastActivityUtc | date: layoutService.dateTimeFormat() }}</td>
8295
+ <td>{{ session.ipAddress }}</td>
8296
+ <td class="max-w-80 truncate" [pTooltip]="session.userAgent" tooltipPosition="top">
8297
+ {{ session.userAgent }}
8298
+ </td>
8299
+ <td>
8300
+ <div class="flex gap-1">
8301
+ <p-button
8302
+ icon="pi pi-sign-out"
8303
+ rounded="true"
8304
+ severity="danger"
8305
+ text="true"
8306
+ tooltipPosition="bottom"
8307
+ [disabled]="session.isCurrent"
8308
+ [pTooltip]="'auth-sessions.table.terminateTooltip' | translate"
8309
+ (onClick)="terminateSession(session)"></p-button>
8310
+ <p-button
8311
+ icon="pi pi-user-minus"
8312
+ rounded="true"
8313
+ severity="danger"
8314
+ text="true"
8315
+ tooltipPosition="bottom"
8316
+ [disabled]="!session.userId || !hasOtherSessions(session)"
8317
+ [pTooltip]="'auth-sessions.table.terminateAllTooltip' | translate"
8318
+ (onClick)="terminateUserSessions(session)"></p-button>
8319
+ </div>
8320
+ </td>
8321
+ </tr>
8322
+ </ng-template>
8323
+ <ng-template pTemplate="emptymessage">
8324
+ <tr>
8325
+ <td colspan="7">{{ 'auth-sessions.table.empty' | translate }}</td>
8326
+ </tr>
8327
+ </ng-template>
8328
+ </p-table>
8329
+ </div>
8330
+ </div>
8331
+ `
8332
+ }]
8333
+ }], ctorParameters: () => [] });
8334
+
8335
+ var authSessions_component = /*#__PURE__*/Object.freeze({
8336
+ __proto__: null,
8337
+ AuthSessionsComponent: AuthSessionsComponent
8338
+ });
8339
+
7515
8340
  var ServiceType;
7516
8341
  (function (ServiceType) {
7517
8342
  ServiceType["Service"] = "Service";
@@ -7520,10 +8345,8 @@ var ServiceType;
7520
8345
 
7521
8346
  var applications$1 = {
7522
8347
  title: "Applications",
7523
- subtitle: "Manage the frontend application registry",
7524
- searchPlaceholder: "Search applications",
7525
- search: "Search",
7526
- clear: "Clear",
8348
+ searchPlaceholder: "Filter applications",
8349
+ clear: "Clear filter",
7527
8350
  add: "Add",
7528
8351
  refreshTooltip: "Refresh",
7529
8352
  empty: "No applications found",
@@ -7568,10 +8391,8 @@ var en$3 = {
7568
8391
 
7569
8392
  var applications = {
7570
8393
  title: "Приложения",
7571
- subtitle: "Управление реестром фронтенд-приложений",
7572
- searchPlaceholder: "Поиск по приложениям",
7573
- search: "Найти",
7574
- clear: "Очистить",
8394
+ searchPlaceholder: "Фильтр по приложениям",
8395
+ clear: "Сбросить фильтр",
7575
8396
  add: "Добавить",
7576
8397
  refreshTooltip: "Обновить",
7577
8398
  empty: "Приложения не найдены",
@@ -7839,65 +8660,71 @@ class ApplicationsComponent {
7839
8660
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7840
8661
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ApplicationsComponent, isStandalone: true, selector: "app-applications", providers: [ApplicationsApi, ConfirmationService], ngImport: i0, template: `
7841
8662
  <p-confirmDialog></p-confirmDialog>
7842
- <div class="flex flex-col gap-4">
8663
+ <div class="flex flex-col md:flex-row gap-4">
7843
8664
  <div class="card w-full">
7844
- <div class="flex flex-col gap-3 md:flex-row md:items-center md:justify-between">
7845
- <div>
7846
- <div class="font-semibold text-xl mb-1">
7847
- {{ 'applications.title' | translate }}
7848
- </div>
7849
- <p class="m-0 text-surface-500">{{ 'applications.subtitle' | translate }}</p>
7850
- </div>
7851
- <div class="flex flex-col gap-2 sm:flex-row">
7852
- <input
7853
- class="w-full sm:w-72"
7854
- pInputText
7855
- type="text"
7856
- [placeholder]="'applications.searchPlaceholder' | translate"
7857
- [(ngModel)]="globalFilter"
7858
- (keydown.enter)="applyGlobalFilter()" />
7859
- <p-button
7860
- icon="pi pi-search"
7861
- [label]="'applications.search' | translate"
7862
- (onClick)="applyGlobalFilter()"></p-button>
7863
- <p-button
7864
- icon="pi pi-filter-slash"
7865
- severity="secondary"
7866
- [label]="'applications.clear' | translate"
7867
- (onClick)="clearFilters()"></p-button>
7868
- </div>
7869
- </div>
7870
-
7871
- <div class="my-4">
8665
+ <div class="mb-4">
7872
8666
  <p-toolbar>
7873
- <p-button
7874
- icon="pi pi-plus"
7875
- severity="success"
7876
- [disabled]="loading || activeRowAction"
7877
- [label]="'applications.add' | translate"
7878
- (onClick)="beginCreateApplication()"></p-button>
7879
- <p-button
7880
- icon="pi pi-refresh"
7881
- rounded="true"
7882
- severity="secondary"
7883
- text="true"
7884
- tooltipPosition="bottom"
7885
- [disabled]="loading || activeRowAction"
7886
- [pTooltip]="'applications.refreshTooltip' | translate"
7887
- (onClick)="refreshAction()"></p-button>
8667
+ <div class="flex flex-col md:flex-row md:items-center gap-2 w-full">
8668
+ <div class="font-semibold text-lg flex items-center gap-2 mx-2">
8669
+ <i class="pi pi-th-large"></i>
8670
+ {{ 'applications.title' | translate }}
8671
+ </div>
8672
+
8673
+ <div class="flex-1"></div>
8674
+ <div class="flex items-center gap-1 w-full md:w-auto">
8675
+ <p-button
8676
+ icon="pi pi-refresh"
8677
+ rounded="true"
8678
+ severity="secondary"
8679
+ text="true"
8680
+ tooltipPosition="bottom"
8681
+ id="oip-applications-refresh"
8682
+ [loading]="loading"
8683
+ [disabled]="activeRowAction"
8684
+ [pTooltip]="'applications.refreshTooltip' | translate"
8685
+ (onClick)="refreshAction()"></p-button>
8686
+ <p-button
8687
+ icon="pi pi-plus"
8688
+ rounded="true"
8689
+ severity="success"
8690
+ text="true"
8691
+ tooltipPosition="bottom"
8692
+ id="oip-applications-add"
8693
+ [disabled]="loading || activeRowAction"
8694
+ [pTooltip]="'applications.add' | translate"
8695
+ (onClick)="beginCreateApplication()"></p-button>
8696
+ <input
8697
+ class="w-full md:w-96"
8698
+ pInputText
8699
+ type="text"
8700
+ id="oip-applications-filter"
8701
+ [placeholder]="'applications.searchPlaceholder' | translate"
8702
+ [(ngModel)]="globalFilter"
8703
+ (ngModelChange)="applyGlobalFilter()" />
8704
+ <p-button
8705
+ icon="pi pi-filter-slash"
8706
+ rounded="true"
8707
+ severity="secondary"
8708
+ text="true"
8709
+ tooltipPosition="bottom"
8710
+ id="oip-applications-clear-filter"
8711
+ [disabled]="!globalFilter"
8712
+ [pTooltip]="'applications.clear' | translate"
8713
+ (onClick)="clearFilters()"></p-button>
8714
+ </div>
8715
+ </div>
7888
8716
  </p-toolbar>
7889
8717
  </div>
7890
8718
 
7891
8719
  <p-table
7892
- #table
8720
+ class="mt-4"
7893
8721
  dataKey="code"
7894
- responsiveLayout="scroll"
7895
- [globalFilterFields]="globalFilterFields"
7896
- [loading]="loading"
8722
+ sortField="order"
8723
+ [sortOrder]="1"
7897
8724
  [paginator]="true"
7898
- [rows]="25"
7899
- [rowsPerPageOptions]="[10, 25, 50, 100]"
7900
- [value]="visibleApplications">
8725
+ [rows]="50"
8726
+ [value]="visibleApplications"
8727
+ [loading]="loading">
7901
8728
  <ng-template pTemplate="header">
7902
8729
  <tr>
7903
8730
  <th pSortableColumn="code">
@@ -8017,10 +8844,11 @@ class ApplicationsComponent {
8017
8844
  "></p-tag>
8018
8845
  </td>
8019
8846
  <td>
8020
- <div class="flex items-center justify-center gap-2">
8847
+ <div class="flex items-center justify-center gap-1">
8021
8848
  @if (application._isEditing) {
8022
8849
  <p-button
8023
8850
  icon="pi pi-check"
8851
+ rounded="true"
8024
8852
  severity="success"
8025
8853
  text="true"
8026
8854
  tooltipPosition="bottom"
@@ -8029,6 +8857,7 @@ class ApplicationsComponent {
8029
8857
  (onClick)="saveApplication(application)"></p-button>
8030
8858
  <p-button
8031
8859
  icon="pi pi-times"
8860
+ rounded="true"
8032
8861
  severity="secondary"
8033
8862
  text="true"
8034
8863
  tooltipPosition="bottom"
@@ -8038,6 +8867,7 @@ class ApplicationsComponent {
8038
8867
  } @else {
8039
8868
  <p-button
8040
8869
  icon="pi pi-pencil"
8870
+ rounded="true"
8041
8871
  text="true"
8042
8872
  tooltipPosition="bottom"
8043
8873
  [disabled]="activeRowAction"
@@ -8045,6 +8875,7 @@ class ApplicationsComponent {
8045
8875
  (onClick)="editApplication(application)"></p-button>
8046
8876
  <p-button
8047
8877
  icon="pi pi-trash"
8878
+ rounded="true"
8048
8879
  severity="danger"
8049
8880
  text="true"
8050
8881
  tooltipPosition="bottom"
@@ -8059,15 +8890,13 @@ class ApplicationsComponent {
8059
8890
 
8060
8891
  <ng-template pTemplate="emptymessage">
8061
8892
  <tr>
8062
- <td class="py-8 text-center text-surface-500" colspan="10">
8063
- {{ 'applications.empty' | translate }}
8064
- </td>
8893
+ <td colspan="10">{{ 'applications.empty' | translate }}</td>
8065
8894
  </tr>
8066
8895
  </ng-template>
8067
8896
  </p-table>
8068
8897
  </div>
8069
8898
  </div>
8070
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$9.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$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$9.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i1$9.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i5$1.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", "ptTooltip"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i5.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: ToggleSwitchModule }, { kind: "component", type: i2$4.ToggleSwitch, selector: "p-toggleswitch, p-toggleSwitch, p-toggle-switch", inputs: ["styleClass", "tabindex", "inputId", "readonly", "trueValue", "falseValue", "ariaLabel", "size", "ariaLabelledBy", "autofocus"], outputs: ["onChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
8899
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i2$4.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: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2$4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2$4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ToolbarModule }, { kind: "component", type: i5$1.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", "ptTooltip"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i5.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: 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: "pipe", type: TranslatePipe, name: "translate" }] }); }
8071
8900
  }
8072
8901
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationsComponent, decorators: [{
8073
8902
  type: Component,
@@ -8089,65 +8918,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
8089
8918
  selector: 'app-applications',
8090
8919
  template: `
8091
8920
  <p-confirmDialog></p-confirmDialog>
8092
- <div class="flex flex-col gap-4">
8921
+ <div class="flex flex-col md:flex-row gap-4">
8093
8922
  <div class="card w-full">
8094
- <div class="flex flex-col gap-3 md:flex-row md:items-center md:justify-between">
8095
- <div>
8096
- <div class="font-semibold text-xl mb-1">
8097
- {{ 'applications.title' | translate }}
8098
- </div>
8099
- <p class="m-0 text-surface-500">{{ 'applications.subtitle' | translate }}</p>
8100
- </div>
8101
- <div class="flex flex-col gap-2 sm:flex-row">
8102
- <input
8103
- class="w-full sm:w-72"
8104
- pInputText
8105
- type="text"
8106
- [placeholder]="'applications.searchPlaceholder' | translate"
8107
- [(ngModel)]="globalFilter"
8108
- (keydown.enter)="applyGlobalFilter()" />
8109
- <p-button
8110
- icon="pi pi-search"
8111
- [label]="'applications.search' | translate"
8112
- (onClick)="applyGlobalFilter()"></p-button>
8113
- <p-button
8114
- icon="pi pi-filter-slash"
8115
- severity="secondary"
8116
- [label]="'applications.clear' | translate"
8117
- (onClick)="clearFilters()"></p-button>
8118
- </div>
8119
- </div>
8120
-
8121
- <div class="my-4">
8923
+ <div class="mb-4">
8122
8924
  <p-toolbar>
8123
- <p-button
8124
- icon="pi pi-plus"
8125
- severity="success"
8126
- [disabled]="loading || activeRowAction"
8127
- [label]="'applications.add' | translate"
8128
- (onClick)="beginCreateApplication()"></p-button>
8129
- <p-button
8130
- icon="pi pi-refresh"
8131
- rounded="true"
8132
- severity="secondary"
8133
- text="true"
8134
- tooltipPosition="bottom"
8135
- [disabled]="loading || activeRowAction"
8136
- [pTooltip]="'applications.refreshTooltip' | translate"
8137
- (onClick)="refreshAction()"></p-button>
8925
+ <div class="flex flex-col md:flex-row md:items-center gap-2 w-full">
8926
+ <div class="font-semibold text-lg flex items-center gap-2 mx-2">
8927
+ <i class="pi pi-th-large"></i>
8928
+ {{ 'applications.title' | translate }}
8929
+ </div>
8930
+
8931
+ <div class="flex-1"></div>
8932
+ <div class="flex items-center gap-1 w-full md:w-auto">
8933
+ <p-button
8934
+ icon="pi pi-refresh"
8935
+ rounded="true"
8936
+ severity="secondary"
8937
+ text="true"
8938
+ tooltipPosition="bottom"
8939
+ id="oip-applications-refresh"
8940
+ [loading]="loading"
8941
+ [disabled]="activeRowAction"
8942
+ [pTooltip]="'applications.refreshTooltip' | translate"
8943
+ (onClick)="refreshAction()"></p-button>
8944
+ <p-button
8945
+ icon="pi pi-plus"
8946
+ rounded="true"
8947
+ severity="success"
8948
+ text="true"
8949
+ tooltipPosition="bottom"
8950
+ id="oip-applications-add"
8951
+ [disabled]="loading || activeRowAction"
8952
+ [pTooltip]="'applications.add' | translate"
8953
+ (onClick)="beginCreateApplication()"></p-button>
8954
+ <input
8955
+ class="w-full md:w-96"
8956
+ pInputText
8957
+ type="text"
8958
+ id="oip-applications-filter"
8959
+ [placeholder]="'applications.searchPlaceholder' | translate"
8960
+ [(ngModel)]="globalFilter"
8961
+ (ngModelChange)="applyGlobalFilter()" />
8962
+ <p-button
8963
+ icon="pi pi-filter-slash"
8964
+ rounded="true"
8965
+ severity="secondary"
8966
+ text="true"
8967
+ tooltipPosition="bottom"
8968
+ id="oip-applications-clear-filter"
8969
+ [disabled]="!globalFilter"
8970
+ [pTooltip]="'applications.clear' | translate"
8971
+ (onClick)="clearFilters()"></p-button>
8972
+ </div>
8973
+ </div>
8138
8974
  </p-toolbar>
8139
8975
  </div>
8140
8976
 
8141
8977
  <p-table
8142
- #table
8978
+ class="mt-4"
8143
8979
  dataKey="code"
8144
- responsiveLayout="scroll"
8145
- [globalFilterFields]="globalFilterFields"
8146
- [loading]="loading"
8980
+ sortField="order"
8981
+ [sortOrder]="1"
8147
8982
  [paginator]="true"
8148
- [rows]="25"
8149
- [rowsPerPageOptions]="[10, 25, 50, 100]"
8150
- [value]="visibleApplications">
8983
+ [rows]="50"
8984
+ [value]="visibleApplications"
8985
+ [loading]="loading">
8151
8986
  <ng-template pTemplate="header">
8152
8987
  <tr>
8153
8988
  <th pSortableColumn="code">
@@ -8267,10 +9102,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
8267
9102
  "></p-tag>
8268
9103
  </td>
8269
9104
  <td>
8270
- <div class="flex items-center justify-center gap-2">
9105
+ <div class="flex items-center justify-center gap-1">
8271
9106
  @if (application._isEditing) {
8272
9107
  <p-button
8273
9108
  icon="pi pi-check"
9109
+ rounded="true"
8274
9110
  severity="success"
8275
9111
  text="true"
8276
9112
  tooltipPosition="bottom"
@@ -8279,6 +9115,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
8279
9115
  (onClick)="saveApplication(application)"></p-button>
8280
9116
  <p-button
8281
9117
  icon="pi pi-times"
9118
+ rounded="true"
8282
9119
  severity="secondary"
8283
9120
  text="true"
8284
9121
  tooltipPosition="bottom"
@@ -8288,6 +9125,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
8288
9125
  } @else {
8289
9126
  <p-button
8290
9127
  icon="pi pi-pencil"
9128
+ rounded="true"
8291
9129
  text="true"
8292
9130
  tooltipPosition="bottom"
8293
9131
  [disabled]="activeRowAction"
@@ -8295,6 +9133,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
8295
9133
  (onClick)="editApplication(application)"></p-button>
8296
9134
  <p-button
8297
9135
  icon="pi pi-trash"
9136
+ rounded="true"
8298
9137
  severity="danger"
8299
9138
  text="true"
8300
9139
  tooltipPosition="bottom"
@@ -8309,9 +9148,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
8309
9148
 
8310
9149
  <ng-template pTemplate="emptymessage">
8311
9150
  <tr>
8312
- <td class="py-8 text-center text-surface-500" colspan="10">
8313
- {{ 'applications.empty' | translate }}
8314
- </td>
9151
+ <td colspan="10">{{ 'applications.empty' | translate }}</td>
8315
9152
  </tr>
8316
9153
  </ng-template>
8317
9154
  </p-table>
@@ -9250,7 +10087,7 @@ class DiscussionComponent {
9250
10087
  </div>
9251
10088
  }
9252
10089
  </section>
9253
- `, isInline: true, styles: [":host{display:block}.file-trigger{position:relative;display:inline-flex}.file-trigger input{position:absolute;inset:0;opacity:0;cursor:pointer}.markdown-preview,.history-markdown{word-break:break-word}.markdown-preview :is(h1,h2,h3),.history-markdown :is(h1,h2,h3){margin:0 0 .75rem;font-weight:600}.markdown-preview a,.history-markdown a{color:#2563eb;text-decoration:underline;text-underline-offset:.18em}.emoji-popover{display:flex;flex-wrap:wrap;gap:.5rem;max-width:16rem}.emoji-option{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;font-size:1.25rem;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2$2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "directive", type: i2$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: CardModule }, { kind: "component", type: i5$2.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "ngmodule", type: DividerModule }, { kind: "ngmodule", type: PanelModule }, { kind: "component", type: i6.Panel, selector: "p-panel", inputs: ["id", "toggleable", "header", "collapsed", "styleClass", "iconPos", "showHeader", "toggler", "transitionOptions", "toggleButtonProps"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i7.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i9.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10090
+ `, isInline: true, styles: [":host{display:block}.file-trigger{position:relative;display:inline-flex}.file-trigger input{position:absolute;inset:0;opacity:0;cursor:pointer}.markdown-preview,.history-markdown{word-break:break-word}.markdown-preview :is(h1,h2,h3),.history-markdown :is(h1,h2,h3){margin:0 0 .75rem;font-weight:600}.markdown-preview a,.history-markdown a{color:#2563eb;text-decoration:underline;text-underline-offset:.18em}.emoji-popover{display:flex;flex-wrap:wrap;gap:.5rem;max-width:16rem}.emoji-option{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;font-size:1.25rem;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.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: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2$1.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "directive", type: i3$1.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: CardModule }, { kind: "component", type: i5$2.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { 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", "modal", "visible", "position", "draggable"], outputs: ["onHide"] }, { kind: "ngmodule", type: DividerModule }, { kind: "ngmodule", type: PanelModule }, { kind: "component", type: i6.Panel, selector: "p-panel", inputs: ["id", "toggleable", "header", "collapsed", "styleClass", "iconPos", "showHeader", "toggler", "transitionOptions", "toggleButtonProps"], outputs: ["collapsedChange", "onBeforeToggle", "onAfterToggle"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i7.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: ProgressSpinnerModule }, { kind: "component", type: i4.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i3$6.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: Textarea, selector: "[pTextarea], [pInputTextarea]", inputs: ["autoResize", "pSize", "variant", "fluid", "invalid"], outputs: ["onResize"] }, { kind: "pipe", type: i1$3.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
9254
10091
  }
9255
10092
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DiscussionComponent, decorators: [{
9256
10093
  type: Component,
@@ -10837,6 +11674,15 @@ function oipModulesRoute(path = 'modules') {
10837
11674
  data: { requireAdmin: true }
10838
11675
  };
10839
11676
  }
11677
+ /** Active authentication sessions, administrators only. */
11678
+ function oipSessionsRoute(path = 'sessions') {
11679
+ return {
11680
+ path,
11681
+ loadComponent: () => Promise.resolve().then(function () { return authSessions_component; }).then((m) => m.AuthSessionsComponent),
11682
+ canActivate: [oipAuthGuard],
11683
+ data: { requireAdmin: true }
11684
+ };
11685
+ }
10840
11686
  /** Discussion module. The path must keep an `:id` segment. */
10841
11687
  function oipDiscussionRoute(path = 'discussion/:id') {
10842
11688
  return {
@@ -10904,6 +11750,7 @@ function provideOipRoutes(options = {}) {
10904
11750
  builtInRoute(features.config, oipConfigRoute, children);
10905
11751
  builtInRoute(features.applications, oipApplicationsRoute, children);
10906
11752
  builtInRoute(features.modules, oipModulesRoute, children);
11753
+ builtInRoute(features.sessions, oipSessionsRoute, children);
10907
11754
  builtInRoute(features.discussion, oipDiscussionRoute, children);
10908
11755
  builtInRoute(features.dbMigration, oipDbMigrationRoute, children);
10909
11756
  builtInRoute(features.iframeModule, oipIframeModuleRoute, children);
@@ -10943,5 +11790,5 @@ function provideOipRoutes(options = {}) {
10943
11790
  * Generated bundle index. Do not edit.
10944
11791
  */
10945
11792
 
10946
- export { APP_INFO_TOKEN, APP_THEME_PRESETS, APP_THEME_PRESETS_MERGE_MODE, AccessComponent, AppConfiguratorComponent, AppFloatingConfiguratorComponent, AppInfoService, AppLayoutComponent, AppModulesComponent, AppTopbar, AppTopbarApplicationSwitcherComponent, ApplicationRegistryService, ApplicationsApi, ApplicationsComponent, AuthGuardService, BaseModuleComponent, BffSecurityService, BlockLoaderComponent, ConfigComponent, ContentType, CustomElementExtensionModuleHostComponent, DbMigrationComponent, DefaultSecretsBannerComponent, DiscussionComponent, ErrorComponent, ExtensionLoaderService, ExtensionModuleHostComponent, FolderModuleApi, FooterComponent, HttpClient, IframeModuleApi, IframeModuleComponent, L10nService, LOGO_COMPONENT_TOKEN, LayoutService, LogoComponent, LogoService, MenuComponent, MenuService, ModuleInstanceRightsService, ModuleLoadingService, MsgService, NoModulesComponent, NotfoundComponent, NotificationApi, NotificationService, OIP_EXTENSION_EVENTS, SecurityApi, SecurityComponent, SecurityService, SidebarComponent, StartPageService, TableFilterService, TopBarService, UnauthorizedComponent, UserNotificationsComponent, UserProfileApi, UserProfileComponent, UserService, convertToPrimeNgDateFormat, defaultTheme, emitOipContextChange, emitOipError, emitOipNavigate, emitOipNotify, emitOipSettingsChange, emitOipTitleChange, langIntercept, mergeWithDefaults, moduleAccessGuard, oipAccessRoute, oipApplicationsRoute, oipAuthGuard, oipConfigRoute, oipDbMigrationRoute, oipDiscussionRoute, oipErrorRoute, oipExtensionsRoute, oipIframeModuleRoute, oipModulesRoute, oipNoModulesRoute, oipProfileRoute, oipStartRedirectGuard, oipStartRoute, provideAppInfo, provideAppThemes, provideLogoComponent, provideOip, provideOipRoutes, provideTranslations, replaceDefaults };
11793
+ export { APP_INFO_TOKEN, APP_THEME_PRESETS, APP_THEME_PRESETS_MERGE_MODE, AccessComponent, AppConfiguratorComponent, AppFloatingConfiguratorComponent, AppInfoService, AppLayoutComponent, AppModulesComponent, AppTopbar, AppTopbarApplicationSwitcherComponent, ApplicationRegistryService, ApplicationsApi, ApplicationsComponent, AuthGuardService, AuthSessionsApi, AuthSessionsComponent, BaseModuleComponent, BffSecurityService, BlockLoaderComponent, ConfigComponent, ContentType, CustomElementExtensionModuleHostComponent, DbMigrationComponent, DefaultSecretsBannerComponent, DiscussionComponent, ErrorComponent, ExtensionLoaderService, ExtensionModuleHostComponent, FolderModuleApi, FooterComponent, HttpClient, IframeModuleApi, IframeModuleComponent, L10nService, LOGO_COMPONENT_TOKEN, LayoutService, LogoComponent, LogoService, MenuComponent, MenuService, ModuleInstanceRightsService, ModuleLoadingService, MsgService, NoModulesComponent, NotfoundComponent, NotificationApi, NotificationService, OIP_EXTENSION_EVENTS, SecurityApi, SecurityComponent, SecurityService, SidebarComponent, StartPageService, TableFilterService, TopBarService, UnauthorizedComponent, UserNotificationsComponent, UserProfileApi, UserProfileComponent, UserService, convertToPrimeNgDateFormat, defaultTheme, emitOipContextChange, emitOipError, emitOipNavigate, emitOipNotify, emitOipSettingsChange, emitOipTitleChange, langIntercept, mergeWithDefaults, moduleAccessGuard, oipAccessRoute, oipApplicationsRoute, oipAuthGuard, oipConfigRoute, oipDbMigrationRoute, oipDiscussionRoute, oipErrorRoute, oipExtensionsRoute, oipIframeModuleRoute, oipModulesRoute, oipNoModulesRoute, oipProfileRoute, oipSessionsRoute, oipStartRedirectGuard, oipStartRoute, provideAppInfo, provideAppThemes, provideLogoComponent, provideOip, provideOipRoutes, provideTranslations, replaceDefaults };
10947
11794
  //# sourceMappingURL=oip-common.mjs.map