oip-common 0.5.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +68 -68
  2. package/assets/demo/code.scss +17 -17
  3. package/assets/demo/demo.scss +2 -2
  4. package/assets/demo/flags/flags.scss +984 -984
  5. package/assets/i18n/extensions.en.json +1 -1
  6. package/assets/layout/_core.scss +30 -30
  7. package/assets/layout/_footer.scss +8 -8
  8. package/assets/layout/_main.scss +12 -12
  9. package/assets/layout/_menu.scss +148 -148
  10. package/assets/layout/_mixins.scss +15 -15
  11. package/assets/layout/_preloading.scss +49 -49
  12. package/assets/layout/_responsive.scss +108 -108
  13. package/assets/layout/_topbar.scss +168 -168
  14. package/assets/layout/_typography.scss +68 -68
  15. package/assets/layout/_utils.scss +25 -25
  16. package/assets/layout/layout.scss +13 -13
  17. package/assets/layout/variables/_common.scss +20 -20
  18. package/assets/layout/variables/_dark.scss +5 -5
  19. package/assets/layout/variables/_light.scss +5 -5
  20. package/assets/oip-common.scss +6 -6
  21. package/assets/tailwind.css +3 -3
  22. package/fesm2022/oip-common.mjs +1877 -669
  23. package/fesm2022/oip-common.mjs.map +1 -1
  24. package/index.d.ts +177 -18
  25. package/package.json +1 -1
  26. package/templates/http-client.ejs +34 -8
  27. package/assets/i18n/app-modules.en.json +0 -30
  28. package/assets/i18n/app-modules.ru.json +0 -30
  29. package/assets/i18n/applications.en.json +0 -46
  30. package/assets/i18n/applications.ru.json +0 -46
  31. package/assets/i18n/config.en.json +0 -18
  32. package/assets/i18n/config.ru.json +0 -18
  33. package/assets/i18n/db-migration.en.json +0 -19
  34. package/assets/i18n/db-migration.ru.json +0 -19
  35. package/assets/i18n/en.json +0 -138
  36. package/assets/i18n/iframe-module.en.json +0 -10
  37. package/assets/i18n/iframe-module.ru.json +0 -10
  38. package/assets/i18n/notfound.en.json +0 -8
  39. package/assets/i18n/notfound.ru.json +0 -8
  40. package/assets/i18n/ru.json +0 -282
@@ -5,72 +5,72 @@ import { Subject, BehaviorSubject, of, tap, shareReplay, ReplaySubject, firstVal
5
5
  import * as i2$2 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
- import * as i2$3 from '@ngx-translate/core';
8
+ import * as i2$5 from '@ngx-translate/core';
9
9
  import { TranslateService, TranslatePipe, TranslateModule, TranslateLoader } from '@ngx-translate/core';
10
- import * as i1$5 from '@angular/router';
11
- import { ActivatedRoute, Router, RouterModule, NavigationEnd, RouterLinkActive, RouterLink } from '@angular/router';
10
+ import * as i1$2 from '@angular/router';
11
+ import { Router, ActivatedRoute, RouterModule, NavigationEnd, RouterLinkActive, RouterLink } from '@angular/router';
12
12
  import { tap as tap$1, catchError, filter, distinctUntilChanged, switchMap, map, take } from 'rxjs/operators';
13
13
  import { Title, DomSanitizer } from '@angular/platform-browser';
14
14
  import { PrimeNG } from 'primeng/config';
15
- import * as i1 from 'primeng/multiselect';
15
+ import * as i2 from 'primeng/multiselect';
16
16
  import { MultiSelectModule } from 'primeng/multiselect';
17
- import * as i2 from 'primeng/tooltip';
17
+ import * as i3 from 'primeng/tooltip';
18
18
  import { TooltipModule, Tooltip } from 'primeng/tooltip';
19
- import * as i1$2 from 'primeng/button';
19
+ import * as i1$1 from 'primeng/button';
20
20
  import { ButtonModule, Button } from 'primeng/button';
21
- import * as i1$1 from '@angular/forms';
21
+ import * as i1 from '@angular/forms';
22
22
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
23
- import * as i1$3 from '@angular/common';
23
+ import * as i2$1 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$2 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 Lara from '@primeng/themes/lara';
30
30
  import Nora from '@primeng/themes/nora';
31
- import * as i3 from 'primeng/selectbutton';
31
+ import * as i4 from 'primeng/selectbutton';
32
32
  import { SelectButtonModule } from 'primeng/selectbutton';
33
33
  import { Tabs, TabList, Tab } from 'primeng/tabs';
34
- import * as i2$1 from 'primeng/avatar';
34
+ import * as i3$3 from 'primeng/avatar';
35
35
  import { AvatarModule } from 'primeng/avatar';
36
36
  import { ConfirmDialog } from 'primeng/confirmdialog';
37
- import * as i1$4 from 'primeng/badge';
37
+ import * as i2$3 from 'primeng/badge';
38
38
  import { BadgeModule } from 'primeng/badge';
39
- import * as i3$1 from 'primeng/paginator';
39
+ import * as i4$1 from 'primeng/paginator';
40
40
  import { PaginatorModule } from 'primeng/paginator';
41
- import * as i7 from 'primeng/popover';
41
+ import * as i8 from 'primeng/popover';
42
42
  import { Popover, PopoverModule } from 'primeng/popover';
43
- import * as i4 from 'primeng/progressspinner';
43
+ import * as i5 from 'primeng/progressspinner';
44
44
  import { ProgressSpinnerModule } from 'primeng/progressspinner';
45
- import * as i9 from 'primeng/tag';
45
+ import * as i10 from 'primeng/tag';
46
46
  import { Tag, TagModule } from 'primeng/tag';
47
47
  import * as signalR from '@microsoft/signalr';
48
- import * as i3$2 from 'primeng/menu';
48
+ import * as i3$1 from 'primeng/menu';
49
49
  import { MenuModule } from 'primeng/menu';
50
- import * as i1$6 from 'primeng/contextmenu';
50
+ import * as i1$3 from 'primeng/contextmenu';
51
51
  import { ContextMenuModule, ContextMenu } from 'primeng/contextmenu';
52
- import * as i3$5 from 'primeng/dialog';
52
+ import * as i3$4 from 'primeng/dialog';
53
53
  import { DialogModule } from 'primeng/dialog';
54
- import * as i4$1 from 'primeng/inputtext';
54
+ import * as i4$2 from 'primeng/inputtext';
55
55
  import { InputTextModule, InputText } from 'primeng/inputtext';
56
- import * as i3$4 from 'primeng/ripple';
56
+ import * as i2$4 from 'primeng/ripple';
57
57
  import { RippleModule } from 'primeng/ripple';
58
- import * as i5 from 'primeng/select';
58
+ import * as i5$1 from 'primeng/select';
59
59
  import { SelectModule, Select } from 'primeng/select';
60
- import * as i1$7 from 'primeng/fileupload';
60
+ import * as i2$6 from 'primeng/fileupload';
61
61
  import { FileUploadModule } from 'primeng/fileupload';
62
62
  import { ImageModule } from 'primeng/image';
63
- import * as i1$8 from 'primeng/table';
63
+ import * as i1$4 from 'primeng/table';
64
64
  import { TableModule } from 'primeng/table';
65
- import * as i2$4 from 'primeng/toggleswitch';
65
+ import * as i2$7 from 'primeng/toggleswitch';
66
66
  import { ToggleSwitchModule } from 'primeng/toggleswitch';
67
67
  import { TextareaModule, Textarea } from 'primeng/textarea';
68
- import * as i5$1 from 'primeng/toolbar';
68
+ import * as i5$2 from 'primeng/toolbar';
69
69
  import { ToolbarModule } from 'primeng/toolbar';
70
- import * as i5$2 from 'primeng/card';
70
+ import * as i6 from 'primeng/card';
71
71
  import { CardModule } from 'primeng/card';
72
72
  import { DividerModule } from 'primeng/divider';
73
- import * as i6 from 'primeng/panel';
73
+ import * as i7 from 'primeng/panel';
74
74
  import { PanelModule } from 'primeng/panel';
75
75
  import { loadRemoteModule } from '@angular-architects/module-federation';
76
76
  import { primitive } from '@primeng/themes/aura/base';
@@ -110,10 +110,10 @@ class TopBarService {
110
110
  const result = activeTopBarItem === undefined ? id === 'content' : activeTopBarItem.id == id;
111
111
  return result;
112
112
  }
113
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: TopBarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
114
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: TopBarService, providedIn: 'root' }); }
113
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TopBarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
114
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TopBarService, providedIn: 'root' }); }
115
115
  }
116
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: TopBarService, decorators: [{
116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TopBarService, decorators: [{
117
117
  type: Injectable,
118
118
  args: [{
119
119
  providedIn: 'root'
@@ -246,10 +246,10 @@ class MsgService {
246
246
  life: life
247
247
  });
248
248
  }
249
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MsgService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
250
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MsgService, providedIn: 'root' }); }
249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MsgService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
250
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MsgService, providedIn: 'root' }); }
251
251
  }
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MsgService, decorators: [{
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MsgService, decorators: [{
253
253
  type: Injectable,
254
254
  args: [{ providedIn: 'root' }]
255
255
  }] });
@@ -271,10 +271,10 @@ class AppTitleService {
271
271
  this.title.setTitle(newTitle);
272
272
  this.titleSubject.next(newTitle);
273
273
  }
274
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppTitleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
275
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppTitleService, providedIn: 'root' }); }
274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTitleService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
275
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTitleService, providedIn: 'root' }); }
276
276
  }
277
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppTitleService, decorators: [{
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTitleService, decorators: [{
278
278
  type: Injectable,
279
279
  args: [{ providedIn: 'root' }]
280
280
  }] });
@@ -530,18 +530,397 @@ class LayoutService {
530
530
  reset() {
531
531
  this.resetSource.next(true);
532
532
  }
533
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: LayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
534
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: LayoutService, providedIn: 'root' }); }
533
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
534
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LayoutService, providedIn: 'root' }); }
535
535
  }
536
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: LayoutService, decorators: [{
536
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LayoutService, decorators: [{
537
537
  type: Injectable,
538
538
  args: [{ providedIn: 'root' }]
539
539
  }], ctorParameters: () => [] });
540
540
 
541
+ var msgService$1 = {
542
+ success: "Success",
543
+ info: "Info",
544
+ warn: "Warn",
545
+ error: "Error",
546
+ secondary: "Secondary"
547
+ };
548
+ var configComponent$1 = {
549
+ profile: "Profile",
550
+ photo: "Photo",
551
+ usePhoto256x256Pixel: "Use a 256x256 pixel photo",
552
+ localization: "Language",
553
+ selectLanguage: "Select language"
554
+ };
555
+ var menuComponent$1 = {
556
+ all: "All",
557
+ "new": "Add"
558
+ };
559
+ var menuItemEditDialogComponent$1 = {
560
+ header: "Edit menu item",
561
+ parentLabel: "Parent item",
562
+ label: "Label",
563
+ module: "Module",
564
+ selectModule: "Select module",
565
+ icon: "Icon",
566
+ cancel: "Cancel",
567
+ save: "Save",
568
+ security: "Read access"
569
+ };
570
+ var menuItemCreateDialogComponent$1 = {
571
+ header: "New menu item",
572
+ parentLabel: "Parent item",
573
+ label: "Label",
574
+ module: "Module",
575
+ selectModule: "Select module",
576
+ searchModule: "Search module",
577
+ icon: "Icon",
578
+ cancel: "Cancel",
579
+ save: "Save"
580
+ };
581
+ var unauthorized$1 = {
582
+ welcomeToOip: "Welcome to OIP!",
583
+ signInToContinue: "Sign in to continue",
584
+ signIn: "Sign In"
585
+ };
586
+ var menuItemComponent$1 = {
587
+ "new": "Add",
588
+ edit: "Edit",
589
+ "delete": "Delete",
590
+ deleteItemConfirmHeader: "Delete",
591
+ deleteItemConfirmMessage: "Are you sure you want to delete the item?",
592
+ deleteItemSuccessMessage: "Deleted successfully",
593
+ deleteItemConfirmRejectButtonPropsLabel: "Cancel",
594
+ deleteItemConfirmAcceptButtonPropsLabel: "Delete",
595
+ moveUp: "Move up",
596
+ moveDown: "Move down"
597
+ };
598
+ var topbar$1 = {
599
+ logout: "Logout",
600
+ logoutConfirmHeader: "Logout",
601
+ logoutConfirmMessage: "Are you sure you want to logout?",
602
+ logoutConfirmCancel: "Cancel",
603
+ logoutConfirmAccept: "Logout",
604
+ profile: "Profile",
605
+ applications: "Applications"
606
+ };
607
+ var primeng$1 = "";
608
+ var en$c = {
609
+ msgService: msgService$1,
610
+ configComponent: configComponent$1,
611
+ menuComponent: menuComponent$1,
612
+ menuItemEditDialogComponent: menuItemEditDialogComponent$1,
613
+ menuItemCreateDialogComponent: menuItemCreateDialogComponent$1,
614
+ unauthorized: unauthorized$1,
615
+ menuItemComponent: menuItemComponent$1,
616
+ topbar: topbar$1,
617
+ primeng: primeng$1
618
+ };
619
+
620
+ var msgService = {
621
+ success: "Успешно",
622
+ info: "Информация",
623
+ warn: "Внимание",
624
+ error: "Ошибка",
625
+ secondary: "Вспомогательный"
626
+ };
627
+ var configComponent = {
628
+ profile: "Профиль",
629
+ photo: "Фото",
630
+ usePhoto256x256Pixel: "Используйте фото 256х256 пикселей",
631
+ localization: "Язык",
632
+ selectLanguage: "Выберите язык"
633
+ };
634
+ var menuComponent = {
635
+ all: "Все",
636
+ "new": "Добавить"
637
+ };
638
+ var menuItemEditDialogComponent = {
639
+ header: "Редактировать элемент меню",
640
+ parentLabel: "Родительский узел",
641
+ label: "Имя",
642
+ module: "Модуль",
643
+ selectModule: "Выберите модуль",
644
+ icon: "Иконка",
645
+ cancel: "Отмена",
646
+ save: "Сохранить",
647
+ security: "Доступ на чтение"
648
+ };
649
+ var menuItemCreateDialogComponent = {
650
+ header: "Новый элемент меню",
651
+ parentLabel: "Родительский узел",
652
+ label: "Имя",
653
+ module: "Модуль",
654
+ selectModule: "Выберите модуль",
655
+ searchModule: "Поиск модуля",
656
+ icon: "Иконка",
657
+ cancel: "Отмена",
658
+ save: "Сохранить"
659
+ };
660
+ var unauthorized = {
661
+ welcomeToOip: "Добро пожаловать в OIP!",
662
+ signInToContinue: "Войдите чтобы продолжить",
663
+ signIn: "Войти"
664
+ };
665
+ var menuItemComponent = {
666
+ "new": "Добавить",
667
+ edit: "Редактировать",
668
+ "delete": "Удалить",
669
+ deleteItemConfirmHeader: "Удаление",
670
+ deleteItemConfirmMessage: "Вы уверены что хотите удалить элемент?",
671
+ deleteItemSuccessMessage: "Успешно удалено",
672
+ deleteItemConfirmRejectButtonPropsLabel: "Отмена",
673
+ deleteItemConfirmAcceptButtonPropsLabel: "Удалить",
674
+ moveUp: "Вверх",
675
+ moveDown: "Вниз"
676
+ };
677
+ var topbar = {
678
+ logout: "Выход",
679
+ logoutConfirmHeader: "Выход",
680
+ logoutConfirmMessage: "Вы уверены, что хотите выйти?",
681
+ logoutConfirmCancel: "Отмена",
682
+ logoutConfirmAccept: "Выйти",
683
+ profile: "Профиль",
684
+ applications: "Приложения"
685
+ };
686
+ var primeng = {
687
+ accept: "Да",
688
+ addRule: "Добавить правило",
689
+ am: "до полудня",
690
+ apply: "Принять",
691
+ cancel: "Отмена",
692
+ choose: "Выбрать",
693
+ chooseDate: "Выбрать дату",
694
+ chooseMonth: "Выбрать месяц",
695
+ chooseYear: "Выбрать год",
696
+ clear: "Очистить",
697
+ completed: "Завершено",
698
+ contains: "Содержит",
699
+ custom: "Пользовательский",
700
+ dateAfter: "Дата после",
701
+ dateBefore: "Дата до",
702
+ dateFormat: "dd.mm.yy",
703
+ dateIs: "Дата равна",
704
+ dateIsNot: "Дата не равна",
705
+ dayNames: [
706
+ "Воскресенье",
707
+ "Понедельник",
708
+ "Вторник",
709
+ "Среда",
710
+ "Четверг",
711
+ "Пятница",
712
+ "Суббота"
713
+ ],
714
+ dayNamesMin: [
715
+ "Вс",
716
+ "Пн",
717
+ "Вт",
718
+ "Ср",
719
+ "Чт",
720
+ "Пт",
721
+ "Сб"
722
+ ],
723
+ dayNamesShort: [
724
+ "Вск",
725
+ "Пнд",
726
+ "Втр",
727
+ "Срд",
728
+ "Чтв",
729
+ "Птн",
730
+ "Сбт"
731
+ ],
732
+ emptyFilterMessage: "Результатов не найдено",
733
+ emptyMessage: "Нет доступных вариантов",
734
+ emptySearchMessage: "Результатов не найдено",
735
+ emptySelectionMessage: "Нет выбранного элемента",
736
+ endsWith: "Заканчивается",
737
+ equals: "Равно",
738
+ fileChosenMessage: "{0} файлов",
739
+ fileSizeTypes: [
740
+ "Б",
741
+ "Кб",
742
+ "Мб",
743
+ "Гб",
744
+ "Тб",
745
+ "Пб",
746
+ "Эб",
747
+ "Зб",
748
+ "Йб"
749
+ ],
750
+ filter: "Фильтр",
751
+ firstDayOfWeek: 1,
752
+ gt: "Более чем",
753
+ gte: "Более чем или равно",
754
+ lt: "Меньше чем",
755
+ lte: "Меньше чем или равно",
756
+ matchAll: "Сопоставить все",
757
+ matchAny: "Совпадение с любым",
758
+ medium: "Нормальный",
759
+ monthNames: [
760
+ "Январь",
761
+ "Февраль",
762
+ "Март",
763
+ "Апрель",
764
+ "Май",
765
+ "Июнь",
766
+ "Июль",
767
+ "Август",
768
+ "Сентябрь",
769
+ "Октябрь",
770
+ "Ноябрь",
771
+ "Декабрь"
772
+ ],
773
+ monthNamesShort: [
774
+ "Янв",
775
+ "Фев",
776
+ "Мар",
777
+ "Апр",
778
+ "Май",
779
+ "Июн",
780
+ "Июл",
781
+ "Авг",
782
+ "Сен",
783
+ "Окт",
784
+ "Ноя",
785
+ "Дек"
786
+ ],
787
+ nextDecade: "Следующее десятилетие",
788
+ nextHour: "Следующий час",
789
+ nextMinute: "Следующая минута",
790
+ nextMonth: "Следующий месяц",
791
+ nextSecond: "Следующая секунда",
792
+ nextYear: "Следующий год",
793
+ noFileChosenMessage: "Файл не выбран",
794
+ noFilter: "Нет фильтра",
795
+ notContains: "Не содержит",
796
+ notEquals: "Не равно",
797
+ now: "Сейчас",
798
+ passwordPrompt: "Введите пароль",
799
+ pending: "В ожидании",
800
+ pm: "после полудня",
801
+ prevDecade: "Предыдущее десятилетие",
802
+ prevHour: "Предыдущий час",
803
+ prevMinute: "Предыдущая минута",
804
+ prevMonth: "Предыдущий месяц",
805
+ prevSecond: "Предыдущая секунда",
806
+ prevYear: "Предыдущий год",
807
+ reject: "Нет",
808
+ removeRule: "Удалить правило",
809
+ searchMessage: "{0} результатов доступно",
810
+ selectionMessage: "{0} элементов выбрано",
811
+ showMonthAfterYear: false,
812
+ startsWith: "Начинается с",
813
+ strong: "Хороший",
814
+ today: "Сегодня",
815
+ upload: "Загрузить",
816
+ weak: "Простой",
817
+ weekHeader: "Нед.",
818
+ aria: {
819
+ cancelEdit: "Отменить правку",
820
+ close: "Закрыть",
821
+ collapseLabel: "Свернуть",
822
+ collapseRow: "Свернуть строку",
823
+ editRow: "Редактировать строку",
824
+ expandLabel: "Развернуть",
825
+ expandRow: "Развернуть строку",
826
+ falseLabel: "Неверно",
827
+ filterConstraint: "Ограничение фильтра",
828
+ filterOperator: "Оператор фильтра",
829
+ firstPageLabel: "Первая страница",
830
+ gridView: "В виде сетки",
831
+ hideFilterMenu: "Скрыть меню фильтра",
832
+ jumpToPageDropdownLabel: "Перейти к раскрывающемуся списку страниц",
833
+ jumpToPageInputLabel: "Перейти к вводу страницы",
834
+ lastPageLabel: "Последняя страница",
835
+ listLabel: "Список опций",
836
+ listView: "В виде списка",
837
+ moveAllToSource: "Переместить всё в источник",
838
+ moveAllToTarget: "Переместить всё в приёмник",
839
+ moveBottom: "Переместить в конец",
840
+ moveDown: "Переместить вниз",
841
+ moveTop: "Переместить в начало",
842
+ moveToSource: "Переместить в источник",
843
+ moveToTarget: "Переместить в приёмник",
844
+ moveUp: "Переместить вверх",
845
+ navigation: "Навигация",
846
+ next: "Следующий",
847
+ nextPageLabel: "Следующая страница",
848
+ nullLabel: "Не выбран",
849
+ otpLabel: "Введите символ одноразового пароля {0}",
850
+ pageLabel: "{page}",
851
+ passwordHide: "Скрыть пароль",
852
+ passwordShow: "Показать пароль",
853
+ previous: "Предыдущий",
854
+ prevPageLabel: "Предыдущая страница",
855
+ removeLabel: "Удалить",
856
+ rotateLeft: "Повернуть влево",
857
+ rotateRight: "Повернуть вправо",
858
+ rowsPerPageLabel: "Строк на странице",
859
+ saveEdit: "Сохранить правку",
860
+ scrollTop: "Прокрутить в начало",
861
+ selectAll: "Выбрать все строки",
862
+ selectLabel: "Выбрать",
863
+ selectRow: "Выбрать строку",
864
+ showFilterMenu: "Показать меню фильтра",
865
+ slide: "Слайд",
866
+ slideNumber: "{slideNumber}",
867
+ star: "1 звезда",
868
+ stars: "{star} звёзд",
869
+ trueLabel: "Верно",
870
+ unselectAll: "Отменить выбор всех строк",
871
+ unselectLabel: "Отменить выбор",
872
+ unselectRow: "Отменить выбор строки",
873
+ zoomImage: "Увеличить изображение",
874
+ zoomIn: "Увеличить",
875
+ zoomOut: "Уменьшить"
876
+ }
877
+ };
878
+ var ru$c = {
879
+ msgService: msgService,
880
+ configComponent: configComponent,
881
+ menuComponent: menuComponent,
882
+ menuItemEditDialogComponent: menuItemEditDialogComponent,
883
+ menuItemCreateDialogComponent: menuItemCreateDialogComponent,
884
+ unauthorized: unauthorized,
885
+ menuItemComponent: menuItemComponent,
886
+ topbar: topbar,
887
+ primeng: primeng
888
+ };
889
+
890
+ /**
891
+ * Global dictionaries shared by all components. They are bundled with the library,
892
+ * so the application never requests `assets/i18n/{lang}.json`.
893
+ */
894
+ const globalTranslations = { en: en$c, ru: ru$c };
541
895
  /**
542
896
  * Service for managing translation loading in the application
543
897
  */
544
898
  class L10nService {
899
+ /**
900
+ * Translations bundled with components, registered at module load time.
901
+ */
902
+ static { this.staticTranslations = new Map(); }
903
+ /**
904
+ * Registers translations bundled with a component instead of loading them over HTTP.
905
+ * Namespaces are taken from the root keys of the passed dictionaries.
906
+ * Components derived from <c>BaseModuleComponent</c> don't call it directly - it is enough
907
+ * to declare the static <c>translations</c> field.
908
+ * @param byLang - Translations grouped by language code
909
+ * @param namespace - Explicit namespace, needed when the dictionaries are still empty
910
+ */
911
+ static registerTranslations(byLang, namespace) {
912
+ if (!byLang) {
913
+ return;
914
+ }
915
+ if (namespace) {
916
+ L10nService.staticTranslations.set(namespace, byLang);
917
+ }
918
+ for (const translations of Object.values(byLang)) {
919
+ for (const namespace of Object.keys(translations)) {
920
+ L10nService.staticTranslations.set(namespace, byLang);
921
+ }
922
+ }
923
+ }
545
924
  constructor() {
546
925
  this.loadedTranslations = new Set();
547
926
  this.loadingTranslations = new Map();
@@ -549,6 +928,18 @@ class L10nService {
549
928
  this.translateService = inject(TranslateService);
550
929
  this.primeNg = inject(PrimeNG);
551
930
  this.layoutService = inject(LayoutService);
931
+ // Global dictionaries are available before the first `use()` call, so TranslateHttpLoader is never asked for them.
932
+ L10nService.registerTranslations(globalTranslations);
933
+ Object.entries(globalTranslations).forEach(([lang, translations]) => this.mergeTranslation(lang, translations));
934
+ // Static translations are merged once per language, so they have to be re-merged on every language change.
935
+ this.translateService.onLangChange.subscribe((event) => {
936
+ L10nService.staticTranslations.forEach((byLang) => {
937
+ const translations = byLang[event.lang];
938
+ if (translations) {
939
+ this.mergeTranslation(event.lang, translations);
940
+ }
941
+ });
942
+ });
552
943
  }
553
944
  /**
554
945
  * Loads translations for a specific component
@@ -573,8 +964,7 @@ class L10nService {
573
964
  return loading;
574
965
  }
575
966
  const request = this.httpClient.get(url).pipe(tap((translations) => {
576
- const current = this.translateService.translations[selectedLang] || {};
577
- this.translateService.setTranslation(selectedLang, { ...current, ...translations }, true);
967
+ this.mergeTranslation(selectedLang, translations);
578
968
  this.loadedTranslations.add(key);
579
969
  this.loadingTranslations.delete(key);
580
970
  }), shareReplay(1));
@@ -606,13 +996,21 @@ class L10nService {
606
996
  if (this.loadedTranslations.has(key)) {
607
997
  return of(null);
608
998
  }
999
+ // Translations bundled with the component - no HTTP request needed.
1000
+ const staticTranslations = L10nService.staticTranslations.get(component);
1001
+ if (staticTranslations) {
1002
+ const translations = staticTranslations[lang];
1003
+ if (translations) {
1004
+ this.mergeTranslation(lang, translations);
1005
+ }
1006
+ return of(null);
1007
+ }
609
1008
  const loading = this.loadingTranslations.get(key);
610
1009
  if (loading) {
611
1010
  return loading;
612
1011
  }
613
1012
  const request = this.httpClient.get(`./assets/i18n/${component}.${lang}.json`).pipe(tap((translations) => {
614
- const current = this.translateService.translations[lang] || {};
615
- this.translateService.setTranslation(lang, { ...current, ...translations }, true);
1013
+ this.mergeTranslation(lang, translations);
616
1014
  this.loadedTranslations.add(key);
617
1015
  this.loadingTranslations.delete(key);
618
1016
  }), shareReplay(1));
@@ -626,6 +1024,15 @@ class L10nService {
626
1024
  });
627
1025
  return request;
628
1026
  }
1027
+ /**
1028
+ * Merges a translation dictionary into the dictionary of the given language
1029
+ * @param lang - Language code
1030
+ * @param translations - Translations to merge
1031
+ */
1032
+ mergeTranslation(lang, translations) {
1033
+ const current = this.translateService.translations[lang] || {};
1034
+ this.translateService.setTranslation(lang, { ...current, ...translations }, true);
1035
+ }
629
1036
  /**
630
1037
  * Changes the lang currently used
631
1038
  */
@@ -648,13 +1055,13 @@ class L10nService {
648
1055
  instant(key, interpolateParams) {
649
1056
  return this.translateService.instant(key, interpolateParams);
650
1057
  }
651
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: L10nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
652
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: L10nService, providedIn: 'root' }); }
1058
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: L10nService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1059
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: L10nService, providedIn: 'root' }); }
653
1060
  }
654
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: L10nService, decorators: [{
1061
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: L10nService, decorators: [{
655
1062
  type: Injectable,
656
1063
  args: [{ providedIn: 'root' }]
657
- }] });
1064
+ }], ctorParameters: () => [] });
658
1065
 
659
1066
  class SecurityService {
660
1067
  }
@@ -815,10 +1222,10 @@ class BffSecurityService {
815
1222
  const baseUrl = document.getElementsByTagName('base')[0].href;
816
1223
  return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
817
1224
  }
818
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: BffSecurityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
819
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: BffSecurityService }); }
1225
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BffSecurityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1226
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BffSecurityService }); }
820
1227
  }
821
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: BffSecurityService, decorators: [{
1228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BffSecurityService, decorators: [{
822
1229
  type: Injectable
823
1230
  }] });
824
1231
 
@@ -837,15 +1244,22 @@ class HttpClient {
837
1244
  constructor() {
838
1245
  this.securityService = inject(SecurityService);
839
1246
  this.layoutService = inject(LayoutService);
1247
+ this.router = inject(Router);
840
1248
  this.baseUrl = "";
841
- this.securityWorker = () => ({
842
- headers: {
843
- "Accept-language": this.layoutService.language()
844
- ? this.layoutService.language()
845
- : "en",
846
- "X-Timezone": this.layoutService.timeZone(),
847
- },
848
- });
1249
+ this.securityWorker = () => {
1250
+ const moduleInstanceId = this.getCurrentModuleInstanceId();
1251
+ return {
1252
+ headers: {
1253
+ "Accept-language": this.layoutService.language()
1254
+ ? this.layoutService.language()
1255
+ : "en",
1256
+ "X-Timezone": this.layoutService.timeZone(),
1257
+ ...(moduleInstanceId != null
1258
+ ? { "X-Module-Instance-Id": String(moduleInstanceId) }
1259
+ : {}),
1260
+ },
1261
+ };
1262
+ };
849
1263
  this.abortControllers = new Map();
850
1264
  this.customFetch = (...fetchParams) => fetch(...fetchParams);
851
1265
  this.baseApiParams = {
@@ -950,12 +1364,29 @@ class HttpClient {
950
1364
  if (cancelToken) {
951
1365
  this.abortControllers.delete(cancelToken);
952
1366
  }
953
- if (!response.ok)
1367
+ if (!response.ok) {
1368
+ this.authorizeOnUnauthorized(response, path);
954
1369
  throw data;
1370
+ }
955
1371
  return data.data;
956
1372
  });
957
1373
  };
958
1374
  }
1375
+ /**
1376
+ * Reads the module instance id of the deepest activated route.
1377
+ * The backend uses it to check module instance rights on endpoints that do not carry the id in their contract.
1378
+ */
1379
+ getCurrentModuleInstanceId() {
1380
+ // May run before the first navigation completes, when route snapshots are not available yet.
1381
+ let route = this.router.routerState?.root;
1382
+ let id = null;
1383
+ while (route) {
1384
+ id = route.snapshot?.paramMap?.get("id") ?? id;
1385
+ route = route.firstChild;
1386
+ }
1387
+ const parsed = id != null ? Number(id) : Number.NaN;
1388
+ return Number.isFinite(parsed) ? parsed : undefined;
1389
+ }
959
1390
  encodeQueryParam(key, value) {
960
1391
  const encodedKey = encodeURIComponent(key);
961
1392
  return `${encodedKey}=${encodeURIComponent(typeof value === "number" ? value : `${value}`)}`;
@@ -992,6 +1423,13 @@ class HttpClient {
992
1423
  },
993
1424
  };
994
1425
  }
1426
+ authorizeOnUnauthorized(response, path) {
1427
+ if (response.status !== 401 ||
1428
+ path.includes("/api/security/create-auth-session")) {
1429
+ return;
1430
+ }
1431
+ this.securityService.authorize(`${window.location.pathname}${window.location.search}${window.location.hash}`);
1432
+ }
995
1433
  async getCsrfRequestParams(method, path) {
996
1434
  if (!method ||
997
1435
  !["POST", "PUT", "PATCH", "DELETE"].includes(method.toUpperCase())) {
@@ -1006,14 +1444,35 @@ class HttpClient {
1006
1444
  ? { headers: { [csrfToken.headerName]: csrfToken.token } }
1007
1445
  : {};
1008
1446
  }
1009
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: HttpClient, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1010
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: HttpClient, providedIn: "root" }); }
1447
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HttpClient, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1448
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HttpClient, providedIn: "root" }); }
1011
1449
  }
1012
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: HttpClient, decorators: [{
1450
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: HttpClient, decorators: [{
1013
1451
  type: Injectable,
1014
1452
  args: [{ providedIn: "root" }]
1015
1453
  }] });
1016
1454
 
1455
+ var baseComponent$1 = {
1456
+ content: "Content",
1457
+ settings: "Settings",
1458
+ security: "Security",
1459
+ success: "Saved successfully"
1460
+ };
1461
+ var en$b = {
1462
+ baseComponent: baseComponent$1
1463
+ };
1464
+
1465
+ var baseComponent = {
1466
+ content: "Содержимое",
1467
+ settings: "Настройки",
1468
+ security: "Безопасность",
1469
+ success: "Сохранено"
1470
+ };
1471
+ var ru$b = {
1472
+ baseComponent: baseComponent
1473
+ };
1474
+
1475
+ L10nService.registerTranslations({ en: en$b, ru: ru$b });
1017
1476
  class BaseModuleComponent {
1018
1477
  static { this.readRight = 'read'; }
1019
1478
  static { this.editRight = 'edit'; }
@@ -1163,6 +1622,9 @@ class BaseModuleComponent {
1163
1622
  { id: 'settings', icon: 'pi-cog', caption: '' },
1164
1623
  { id: 'security', icon: 'pi-lock', caption: '' }
1165
1624
  ];
1625
+ // Must run before the route subscription below asks L10nService for the translations.
1626
+ L10nService.registerTranslations(this.constructor.translations);
1627
+ this.l10nService.get('baseComponent');
1166
1628
  effect(() => {
1167
1629
  const config = this.localSettings();
1168
1630
  if (config) {
@@ -1171,6 +1633,8 @@ class BaseModuleComponent {
1171
1633
  });
1172
1634
  this.subscriptions.push(this.route.url.subscribe((url) => {
1173
1635
  this.controller = url[0].path;
1636
+ // The route path is the translation namespace, register it before asking for translations.
1637
+ L10nService.registerTranslations(this.constructor.translations, this.controller);
1174
1638
  this.l10n$ = this.l10nService.get(this.controller);
1175
1639
  }));
1176
1640
  this.subscriptions.push(this.route.paramMap.subscribe((params) => {
@@ -1203,10 +1667,10 @@ class BaseModuleComponent {
1203
1667
  * @return {Promise<void>} A promise that resolves when the initialization is complete.
1204
1668
  */
1205
1669
  async ngOnInit() {
1206
- this.subscriptions.push(this.translateService.get('baseComponent').subscribe((value) => {
1207
- this.topBarItems[0].caption = value.content;
1208
- this.topBarItems[1].caption = value.settings;
1209
- this.topBarItems[2].caption = value.security;
1670
+ this.subscriptions.push(this.translateService.stream('baseComponent').subscribe((value) => {
1671
+ this.topBarItems.forEach((item) => {
1672
+ item.caption = value[item.id];
1673
+ });
1210
1674
  }));
1211
1675
  this.topBarService.setTopBarItems(this.topBarItems);
1212
1676
  this.topBarService.activeId = this.topBarItems[0].id;
@@ -1257,11 +1721,13 @@ class BaseModuleComponent {
1257
1721
  * Called whenever the module instance changes, including the first load.
1258
1722
  * Derived components can override this to refresh module-specific data.
1259
1723
  */
1260
- async onModuleInstanceChange() { }
1724
+ async onModuleInstanceChange() {
1725
+ }
1261
1726
  /**
1262
1727
  * Called whenever current user rights for the active module instance are recalculated.
1263
1728
  */
1264
- onSecurityRightsChange() { }
1729
+ onSecurityRightsChange() {
1730
+ }
1265
1731
  /**
1266
1732
  * Starts watching current token roles and maps them to module instance security settings.
1267
1733
  */
@@ -1269,20 +1735,31 @@ class BaseModuleComponent {
1269
1735
  this.rightsSubscription?.unsubscribe();
1270
1736
  this.resetRightsState();
1271
1737
  if (!controller || id == null) {
1272
- return;
1273
- }
1274
- this.rightsSubscription = this.securityService.payload
1275
- .pipe(switchMap((payload) => from(this.getSecurity(controller, id)).pipe(map((securitySettings) => ({ payload, securitySettings })))), takeUntilDestroyed(this.destroyRef))
1276
- .subscribe({
1277
- next: ({ payload, securitySettings }) => {
1278
- const roles = payload?.realm_access?.roles ?? [];
1279
- this.updateRightsState(roles, securitySettings);
1280
- },
1281
- error: (error) => {
1282
- this.securityRightsLoaded = true;
1283
- console.error('Не удалось загрузить права', error);
1284
- this.onSecurityRightsChange();
1285
- }
1738
+ return Promise.resolve();
1739
+ }
1740
+ return new Promise((resolve) => {
1741
+ let settled = false;
1742
+ const settle = () => {
1743
+ if (!settled) {
1744
+ settled = true;
1745
+ resolve();
1746
+ }
1747
+ };
1748
+ this.rightsSubscription = this.securityService.payload
1749
+ .pipe(switchMap((payload) => from(this.getSecurity(controller, id)).pipe(map((securitySettings) => ({ payload, securitySettings })))), takeUntilDestroyed(this.destroyRef))
1750
+ .subscribe({
1751
+ next: ({ payload, securitySettings }) => {
1752
+ const roles = payload?.realm_access?.roles ?? [];
1753
+ this.updateRightsState(roles, securitySettings);
1754
+ settle();
1755
+ },
1756
+ error: (error) => {
1757
+ this.securityRightsLoaded = true;
1758
+ console.error('Не удалось загрузить права', error);
1759
+ this.onSecurityRightsChange();
1760
+ settle();
1761
+ }
1762
+ });
1286
1763
  });
1287
1764
  }
1288
1765
  resetRightsState() {
@@ -1312,7 +1789,6 @@ class BaseModuleComponent {
1312
1789
  return this.httpClient.request({
1313
1790
  path: `/api/${controller}/get-security`,
1314
1791
  method: 'GET',
1315
- query: { id },
1316
1792
  secure: true,
1317
1793
  format: 'json'
1318
1794
  });
@@ -1326,11 +1802,10 @@ class BaseModuleComponent {
1326
1802
  type: ContentType.Json
1327
1803
  });
1328
1804
  }
1329
- getModuleInstanceSettings(controller = this.controller, id = this.id) {
1805
+ getModuleInstanceSettings(controller = this.controller) {
1330
1806
  return this.httpClient.request({
1331
1807
  path: `/api/${controller}/get-module-instance-settings`,
1332
1808
  method: 'GET',
1333
- query: { id },
1334
1809
  secure: true,
1335
1810
  format: 'json'
1336
1811
  });
@@ -1363,16 +1838,20 @@ class BaseModuleComponent {
1363
1838
  }
1364
1839
  async reloadModuleInstance() {
1365
1840
  this.moduleInstanceReloadPromise = this.moduleInstanceReloadPromise.then(async () => {
1841
+ // Rights first: the backend rejects settings and data requests without the read right.
1842
+ await this.watchSecurityRights();
1843
+ if (!this.canRead) {
1844
+ return;
1845
+ }
1366
1846
  await this.getSettings();
1367
- this.watchSecurityRights();
1368
1847
  await this.onModuleInstanceChange();
1369
1848
  });
1370
1849
  await this.moduleInstanceReloadPromise;
1371
1850
  }
1372
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: BaseModuleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1373
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: BaseModuleComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: '', isInline: true }); }
1851
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BaseModuleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1852
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: BaseModuleComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: '', isInline: true }); }
1374
1853
  }
1375
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: BaseModuleComponent, decorators: [{
1854
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: BaseModuleComponent, decorators: [{
1376
1855
  type: Component,
1377
1856
  args: [{ standalone: true, template: '' }]
1378
1857
  }], ctorParameters: () => [] });
@@ -1417,15 +1896,36 @@ class SecurityApi extends HttpClient {
1417
1896
  ...params,
1418
1897
  });
1419
1898
  }
1420
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: SecurityApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1421
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: SecurityApi }); }
1899
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SecurityApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1900
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SecurityApi }); }
1422
1901
  }
1423
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: SecurityApi, decorators: [{
1902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SecurityApi, decorators: [{
1424
1903
  type: Injectable
1425
1904
  }] });
1426
1905
 
1906
+ var securityComponent$1 = {
1907
+ security: "Security",
1908
+ save: "Save",
1909
+ savedSecurity: "Security settings saved",
1910
+ selectRoles: "Select roles"
1911
+ };
1912
+ var en$a = {
1913
+ securityComponent: securityComponent$1
1914
+ };
1915
+
1916
+ var securityComponent = {
1917
+ security: "Безопасность",
1918
+ save: "Сохранить",
1919
+ savedSecurity: "Настройки сохранены",
1920
+ selectRoles: "Выберите роли"
1921
+ };
1922
+ var ru$a = {
1923
+ securityComponent: securityComponent
1924
+ };
1925
+
1926
+ L10nService.registerTranslations({ en: en$a, ru: ru$a });
1427
1927
  class SecurityComponent {
1428
- constructor() {
1928
+ constructor(l10nService) {
1429
1929
  this.msgService = inject(MsgService);
1430
1930
  this.translateService = inject(TranslateService);
1431
1931
  this.httpClient = inject(HttpClient);
@@ -1433,6 +1933,7 @@ class SecurityComponent {
1433
1933
  this.securityLoadToken = 0;
1434
1934
  this.securityData = [];
1435
1935
  this.roles = [];
1936
+ l10nService.get('securityComponent');
1436
1937
  }
1437
1938
  ngOnDestroy() {
1438
1939
  // on destroy
@@ -1478,7 +1979,7 @@ class SecurityComponent {
1478
1979
  return;
1479
1980
  }
1480
1981
  try {
1481
- const result = await this.getSecurity(controller, id);
1982
+ const result = await this.getSecurity(controller);
1482
1983
  if (loadToken === this.securityLoadToken) {
1483
1984
  this.securityData = result;
1484
1985
  }
@@ -1489,11 +1990,10 @@ class SecurityComponent {
1489
1990
  }
1490
1991
  }
1491
1992
  }
1492
- getSecurity(controller, id) {
1993
+ getSecurity(controller) {
1493
1994
  return this.httpClient.request({
1494
1995
  path: `/api/${controller}/get-security`,
1495
1996
  method: 'GET',
1496
- query: { id },
1497
1997
  secure: true,
1498
1998
  format: 'json'
1499
1999
  });
@@ -1507,8 +2007,8 @@ class SecurityComponent {
1507
2007
  type: ContentType.Json
1508
2008
  });
1509
2009
  }
1510
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: SecurityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1511
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: SecurityComponent, isStandalone: true, selector: "security", inputs: { id: "id", controller: "controller" }, usesOnChanges: true, ngImport: i0, template: `
2010
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SecurityComponent, deps: [{ token: L10nService }], target: i0.ɵɵFactoryTarget.Component }); }
2011
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SecurityComponent, isStandalone: true, selector: "security", inputs: { id: "id", controller: "controller" }, usesOnChanges: true, ngImport: i0, template: `
1512
2012
  <div class="flex flex-col md:flex-row gap-8">
1513
2013
  <div class="md:w-1/2">
1514
2014
  <div class="card flex flex-col gap-4">
@@ -1540,9 +2040,9 @@ class SecurityComponent {
1540
2040
  </div>
1541
2041
  </div>
1542
2042
  </div>
1543
- `, isInline: true, dependencies: [{ 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: "ngmodule", type: TooltipModule }, { kind: "directive", type: i2.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: "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: "pipe", type: TranslatePipe, name: "translate" }] }); }
2043
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i2.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: "ngmodule", type: TooltipModule }, { kind: "directive", type: i3.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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: "pipe", type: TranslatePipe, name: "translate" }] }); }
1544
2044
  }
1545
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: SecurityComponent, decorators: [{
2045
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SecurityComponent, decorators: [{
1546
2046
  type: Component,
1547
2047
  args: [{
1548
2048
  selector: 'security',
@@ -1582,7 +2082,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
1582
2082
  imports: [MultiSelectModule, TooltipModule, FormsModule, ButtonModule, TranslatePipe],
1583
2083
  standalone: true
1584
2084
  }]
1585
- }], propDecorators: { id: [{
2085
+ }], ctorParameters: () => [{ type: L10nService }], propDecorators: { id: [{
1586
2086
  type: Input
1587
2087
  }], controller: [{
1588
2088
  type: Input
@@ -1595,6 +2095,29 @@ const APP_THEME_PRESETS_MERGE_MODE = new InjectionToken('APP_THEME_PRESETS_MERGE
1595
2095
  factory: () => 'mergeWithDefaults'
1596
2096
  });
1597
2097
 
2098
+ var en$9 = {
2099
+ "app-configurator": {
2100
+ primary: "Primary",
2101
+ surface: "Surface",
2102
+ presets: "Presets",
2103
+ menuMode: "Menu Mode",
2104
+ menuModeStatic: "Static",
2105
+ menuModeOverlay: "Overlay"
2106
+ }
2107
+ };
2108
+
2109
+ var ru$9 = {
2110
+ "app-configurator": {
2111
+ primary: "Основной",
2112
+ surface: "Фон",
2113
+ presets: "Стиль",
2114
+ menuMode: "Режим меню",
2115
+ menuModeStatic: "Статичное",
2116
+ menuModeOverlay: "Всплывающее"
2117
+ }
2118
+ };
2119
+
2120
+ L10nService.registerTranslations({ en: en$9, ru: ru$9 });
1598
2121
  const DEFAULT_THEME_PRESETS = [
1599
2122
  { id: 'Aura', label: 'Aura', preset: Aura },
1600
2123
  { id: 'Lara', label: 'Lara', preset: Lara },
@@ -1619,7 +2142,7 @@ const PRIMARY_COLORS = [
1619
2142
  'rose'
1620
2143
  ];
1621
2144
  class AppConfiguratorComponent {
1622
- constructor() {
2145
+ constructor(l10nService) {
1623
2146
  this.router = inject(Router);
1624
2147
  this.config = inject(PrimeNG);
1625
2148
  this.layoutService = inject(LayoutService);
@@ -1634,8 +2157,8 @@ class AppConfiguratorComponent {
1634
2157
  this.presets = this.themePresets.map((theme) => ({ label: theme.label ?? theme.id, value: theme.id }));
1635
2158
  this.showMenuModeButton = signal(!this.router.url.includes('auth'), ...(ngDevMode ? [{ debugName: "showMenuModeButton" }] : []));
1636
2159
  this.menuModeOptions = [
1637
- { label: 'Static', value: 'static' },
1638
- { label: 'Overlay', value: 'overlay' }
2160
+ { label: 'app-configurator.menuModeStatic', value: 'static' },
2161
+ { label: 'app-configurator.menuModeOverlay', value: 'overlay' }
1639
2162
  ];
1640
2163
  this.surfaces = [
1641
2164
  {
@@ -1789,6 +2312,7 @@ class AppConfiguratorComponent {
1789
2312
  const activeThemePreset = this.getThemeById(this.layoutService.layoutConfig().preset);
1790
2313
  return this.getSurfaceColorOptions(activeThemePreset);
1791
2314
  }, ...(ngDevMode ? [{ debugName: "surfaceColors" }] : []));
2315
+ l10nService.get('app-configurator');
1792
2316
  }
1793
2317
  ngOnInit() {
1794
2318
  if (isPlatformBrowser(this.platformId)) {
@@ -2025,8 +2549,8 @@ class AppConfiguratorComponent {
2025
2549
  menuMode: event
2026
2550
  }));
2027
2551
  }
2028
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppConfiguratorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2029
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: AppConfiguratorComponent, isStandalone: true, selector: "app-configurator", host: { classAttribute: "hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]" }, ngImport: i0, template: `
2552
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppConfiguratorComponent, deps: [{ token: L10nService }], target: i0.ɵɵFactoryTarget.Component }); }
2553
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AppConfiguratorComponent, isStandalone: true, selector: "app-configurator", host: { classAttribute: "hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]" }, ngImport: i0, template: `
2030
2554
  <div class="flex flex-col gap-4">
2031
2555
  <div>
2032
2556
  <span class="text-sm text-muted-color font-semibold">{{ 'app-configurator.primary' | translate }}</span>
@@ -2091,13 +2615,17 @@ class AppConfiguratorComponent {
2091
2615
  [allowEmpty]="false"
2092
2616
  [ngModel]="menuMode()"
2093
2617
  [options]="menuModeOptions"
2094
- (ngModelChange)="onMenuModeChange($event)" />
2618
+ (ngModelChange)="onMenuModeChange($event)">
2619
+ <ng-template pTemplate="item" let-item>
2620
+ {{ item.label | translate }}
2621
+ </ng-template>
2622
+ </p-selectButton>
2095
2623
  </div>
2096
2624
  }
2097
2625
  </div>
2098
- `, 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: "pipe", type: TranslatePipe, name: "translate" }] }); }
2626
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: SelectButtonModule }, { kind: "component", type: i4.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$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
2099
2627
  }
2100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppConfiguratorComponent, decorators: [{
2628
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppConfiguratorComponent, decorators: [{
2101
2629
  type: Component,
2102
2630
  args: [{
2103
2631
  selector: 'app-configurator',
@@ -2168,7 +2696,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
2168
2696
  [allowEmpty]="false"
2169
2697
  [ngModel]="menuMode()"
2170
2698
  [options]="menuModeOptions"
2171
- (ngModelChange)="onMenuModeChange($event)" />
2699
+ (ngModelChange)="onMenuModeChange($event)">
2700
+ <ng-template pTemplate="item" let-item>
2701
+ {{ item.label | translate }}
2702
+ </ng-template>
2703
+ </p-selectButton>
2172
2704
  </div>
2173
2705
  }
2174
2706
  </div>
@@ -2177,7 +2709,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
2177
2709
  class: 'hidden absolute top-[3.25rem] right-0 w-72 p-4 bg-surface-0 dark:bg-surface-900 border border-surface rounded-border origin-top shadow-[0px_3px_5px_rgba(0,0,0,0.02),0px_0px_2px_rgba(0,0,0,0.05),0px_1px_4px_rgba(0,0,0,0.08)]'
2178
2710
  }
2179
2711
  }]
2180
- }] });
2712
+ }], ctorParameters: () => [{ type: L10nService }] });
2181
2713
 
2182
2714
  /* eslint-disable */
2183
2715
  /* tslint:disable */
@@ -2207,6 +2739,12 @@ class UserProfileApi extends HttpClient {
2207
2739
  type: ContentType.FormData,
2208
2740
  ...params,
2209
2741
  });
2742
+ this.deleteUserPhoto = (params = {}) => this.request({
2743
+ path: `/api/user-profile/delete-user-photo`,
2744
+ method: "DELETE",
2745
+ secure: true,
2746
+ ...params,
2747
+ });
2210
2748
  this.getSettings = (params = {}) => this.request({
2211
2749
  path: `/api/user-profile/get-settings`,
2212
2750
  method: "GET",
@@ -2223,10 +2761,10 @@ class UserProfileApi extends HttpClient {
2223
2761
  ...params,
2224
2762
  });
2225
2763
  }
2226
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UserProfileApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2227
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UserProfileApi }); }
2764
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2765
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileApi }); }
2228
2766
  }
2229
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UserProfileApi, decorators: [{
2767
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileApi, decorators: [{
2230
2768
  type: Injectable
2231
2769
  }] });
2232
2770
 
@@ -2294,7 +2832,11 @@ class UserService {
2294
2832
  this.createImageFromBlob(data);
2295
2833
  this.photoLoaded = true;
2296
2834
  }, (error) => {
2297
- this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToLoadPhoto'));
2835
+ // A 404 just means the user hasn't uploaded a photo yet (e.g. on first login) —
2836
+ // that's an expected state, not a failure, so fall back to initials silently.
2837
+ if (error?.status !== 404) {
2838
+ this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToLoadPhoto'));
2839
+ }
2298
2840
  this.photoLoaded = false;
2299
2841
  });
2300
2842
  }
@@ -2331,65 +2873,65 @@ class UserService {
2331
2873
  getCurrentUserPhotoKey(user) {
2332
2874
  return user?.sub || user?.userName || user?.preferred_username || user?.displayName || user?.name || null;
2333
2875
  }
2334
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2335
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UserService }); }
2876
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2877
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserService }); }
2336
2878
  }
2337
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UserService, decorators: [{
2879
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserService, decorators: [{
2338
2880
  type: Injectable
2339
2881
  }], ctorParameters: () => [] });
2340
2882
 
2341
2883
  class LogoComponent {
2342
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: LogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2343
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: LogoComponent, isStandalone: true, selector: "logo", inputs: { width: "width", height: "height" }, ngImport: i0, template: `
2344
- <svg
2345
- viewBox="0.8516 1.7159 60.0074 64.7142"
2346
- xmlns="http://www.w3.org/2000/svg"
2347
- [attr.height]="height + 'px'"
2348
- [attr.width]="width + 'px'">
2349
- <path
2350
- class="primary-logo-color"
2351
- d="M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z"
2352
- transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2353
- <path
2354
- class="primary-logo-color"
2355
- d="M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z"
2356
- transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2357
- <path
2358
- class="primary-logo-color"
2359
- d="M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z"
2360
- transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2361
- <path
2362
- class="secondary-logo-color"
2363
- d="M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z"
2364
- transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2365
- </svg>
2884
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2885
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: LogoComponent, isStandalone: true, selector: "logo", inputs: { width: "width", height: "height" }, ngImport: i0, template: `
2886
+ <svg
2887
+ viewBox="0.8516 1.7159 60.0074 64.7142"
2888
+ xmlns="http://www.w3.org/2000/svg"
2889
+ [attr.height]="height + 'px'"
2890
+ [attr.width]="width + 'px'">
2891
+ <path
2892
+ class="primary-logo-color"
2893
+ d="M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z"
2894
+ transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2895
+ <path
2896
+ class="primary-logo-color"
2897
+ d="M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z"
2898
+ transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2899
+ <path
2900
+ class="primary-logo-color"
2901
+ d="M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z"
2902
+ transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2903
+ <path
2904
+ class="secondary-logo-color"
2905
+ d="M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z"
2906
+ transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2907
+ </svg>
2366
2908
  `, isInline: true, styles: [".primary-logo-color{fill:var(--primary-color)}.secondary-logo-color{fill:var(--p-primary-600)}\n"] }); }
2367
2909
  }
2368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: LogoComponent, decorators: [{
2910
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LogoComponent, decorators: [{
2369
2911
  type: Component,
2370
- args: [{ selector: 'logo', standalone: true, template: `
2371
- <svg
2372
- viewBox="0.8516 1.7159 60.0074 64.7142"
2373
- xmlns="http://www.w3.org/2000/svg"
2374
- [attr.height]="height + 'px'"
2375
- [attr.width]="width + 'px'">
2376
- <path
2377
- class="primary-logo-color"
2378
- d="M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z"
2379
- transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2380
- <path
2381
- class="primary-logo-color"
2382
- d="M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z"
2383
- transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2384
- <path
2385
- class="primary-logo-color"
2386
- d="M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z"
2387
- transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2388
- <path
2389
- class="secondary-logo-color"
2390
- d="M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z"
2391
- transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2392
- </svg>
2912
+ args: [{ selector: 'logo', standalone: true, template: `
2913
+ <svg
2914
+ viewBox="0.8516 1.7159 60.0074 64.7142"
2915
+ xmlns="http://www.w3.org/2000/svg"
2916
+ [attr.height]="height + 'px'"
2917
+ [attr.width]="width + 'px'">
2918
+ <path
2919
+ class="primary-logo-color"
2920
+ d="M -130.45 -104.78 C -130.45 -105.9 -130.43 -107.01 -130.45 -108.13 C -130.49 -108.52 -130.28 -108.9 -129.92 -109.07 C -125.87 -111.4 -121.82 -113.74 -117.77 -116.08 C -115.7 -117.26 -113.63 -118.45 -111.58 -119.67 C -111.26 -119.89 -110.83 -119.89 -110.51 -119.67 C -101.66 -114.53 -92.787 -109.41 -83.915 -104.29 C -83.752 -104.2 -83.479 -104.16 -83.475 -103.94 C -83.472 -103.72 -83.766 -103.65 -83.947 -103.54 C -86.326 -102.16 -88.716 -100.79 -91.092 -99.39 C -91.377 -99.18 -91.761 -99.18 -92.046 -99.39 C -98.211 -102.98 -104.38 -106.55 -110.56 -110.12 C -110.85 -110.33 -111.23 -110.33 -111.52 -110.12 C -114.88 -108.16 -118.25 -106.22 -121.63 -104.28 C -122.01 -104.11 -122.24 -103.71 -122.2 -103.3 C -122.18 -101.11 -122.2 -98.922 -122.2 -96.736 C -122.19 -95.98 -122.21 -95.98 -122.84 -96.335 C -125.2 -97.7 -127.57 -99.07 -129.93 -100.42 C -130.27 -100.57 -130.49 -100.92 -130.46 -101.3 C -130.43 -102.46 -130.45 -103.62 -130.45 -104.78 Z"
2921
+ transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2922
+ <path
2923
+ class="primary-logo-color"
2924
+ d="M -70.504 -100.94 L -70.504 -90.438 C -70.447 -89.98 -70.692 -89.537 -71.11 -89.342 C -78.942 -84.839 -86.769 -80.325 -94.592 -75.8 C -95.635 -75.2 -96.684 -74.612 -97.713 -73.988 C -98.17 -73.708 -98.255 -73.846 -98.255 -74.314 L -98.255 -82.785 C -98.268 -83.116 -98.07 -83.419 -97.762 -83.541 C -92.003 -86.86 -86.269 -90.236 -80.468 -93.47 C -79.181 -94.179 -78.667 -94.934 -78.731 -96.441 C -78.869 -99.76 -78.791 -103.09 -78.755 -106.42 C -78.694 -107 -79.02 -107.56 -79.56 -107.8 C -81.436 -108.83 -83.28 -109.93 -85.138 -110.99 C -85.734 -111.34 -85.734 -111.34 -85.113 -111.7 C -82.748 -113.07 -80.379 -114.43 -78.021 -115.82 C -77.707 -116.05 -77.283 -116.06 -76.957 -115.84 C -74.962 -114.66 -72.953 -113.5 -70.929 -112.37 C -70.62 -112.19 -70.456 -111.84 -70.521 -111.49 C -70.514 -107.99 -70.508 -104.48 -70.504 -100.94 Z"
2925
+ transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2926
+ <path
2927
+ class="primary-logo-color"
2928
+ d="M -108.68 -85.743 L -108.68 -75.169 C -108.72 -74.754 -108.5 -74.358 -108.12 -74.179 C -104.77 -72.267 -101.44 -70.339 -98.117 -68.396 C -97.762 -68.141 -97.284 -68.141 -96.929 -68.396 C -95.028 -69.527 -93.096 -70.598 -91.195 -71.725 C -90.667 -72.041 -90.581 -71.892 -90.581 -71.371 C -90.596 -68.591 -90.596 -65.811 -90.581 -63.03 C -90.551 -62.7 -90.729 -62.386 -91.028 -62.243 C -93.083 -61.073 -95.13 -59.891 -97.17 -58.697 C -97.436 -58.537 -97.775 -58.569 -98.007 -58.775 C -102.74 -61.517 -107.47 -64.254 -112.22 -66.984 C -113.63 -67.796 -115.01 -68.615 -116.42 -69.406 C -116.77 -69.561 -116.97 -69.913 -116.94 -70.286 C -116.93 -80.555 -116.93 -90.823 -116.94 -101.09 C -116.94 -101.63 -116.86 -101.75 -116.35 -101.44 C -113.98 -100.05 -111.59 -98.667 -109.19 -97.303 C -108.84 -97.135 -108.62 -96.76 -108.66 -96.367 C -108.68 -92.833 -108.69 -89.291 -108.68 -85.743 Z"
2929
+ transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2930
+ <path
2931
+ class="secondary-logo-color"
2932
+ d="M -122.18 -85.807 L -122.18 -82.129 C -122.18 -81.637 -122.34 -81.615 -122.72 -81.839 C -125.16 -83.257 -127.6 -84.667 -130.05 -86.069 C -130.35 -86.219 -130.53 -86.535 -130.5 -86.867 L -130.5 -94.09 C -130.5 -94.64 -130.34 -94.679 -129.89 -94.417 C -127.49 -92.998 -125.09 -91.607 -122.67 -90.243 C -122.35 -90.103 -122.15 -89.772 -122.18 -89.42 C -122.21 -88.214 -122.18 -87.012 -122.18 -85.807 Z M -82.688 -119.15 C -83.954 -118.41 -85.17 -117.7 -86.365 -117.02 C -87.748 -116.22 -89.138 -115.44 -90.514 -114.63 C -90.761 -114.45 -91.093 -114.45 -91.34 -114.63 C -93.432 -115.86 -95.535 -117.07 -97.649 -118.27 C -98.053 -118.5 -98.191 -118.63 -97.67 -118.93 C -95.216 -120.32 -92.776 -121.74 -90.337 -123.15 C -90.134 -123.33 -89.845 -123.36 -89.61 -123.23 L -82.918 -119.33 C -82.862 -119.28 -82.812 -119.24 -82.688 -119.15 Z M -85.365 -65.616 L -85.365 -72.062 L -85.365 -74.622 C -85.403 -74.928 -85.24 -75.223 -84.961 -75.353 C -82.886 -76.534 -80.83 -77.736 -78.77 -78.931 C -78.174 -79.286 -78.135 -79.257 -78.135 -78.576 L -78.135 -70.303 C -78.135 -69.991 -78.135 -69.711 -78.468 -69.52 C -80.656 -68.275 -82.833 -67.013 -85.014 -65.761 C -85.127 -65.704 -85.245 -65.655 -85.365 -65.616 Z"
2933
+ transform="matrix(1, 0, 0, 1, 131.35482788085938, 125.0257797241211)" />
2934
+ </svg>
2393
2935
  `, styles: [".primary-logo-color{fill:var(--primary-color)}.secondary-logo-color{fill:var(--p-primary-600)}\n"] }]
2394
2936
  }], propDecorators: { width: [{
2395
2937
  type: Input
@@ -2411,10 +2953,10 @@ class LogoService {
2411
2953
  getLogoComponent() {
2412
2954
  return this.customLogoComponent || LogoComponent;
2413
2955
  }
2414
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: LogoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2415
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: LogoService, providedIn: 'root' }); }
2956
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LogoService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2957
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LogoService, providedIn: 'root' }); }
2416
2958
  }
2417
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: LogoService, decorators: [{
2959
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: LogoService, decorators: [{
2418
2960
  type: Injectable,
2419
2961
  args: [{ providedIn: 'root' }]
2420
2962
  }] });
@@ -2455,10 +2997,10 @@ class NotificationApi extends HttpClient {
2455
2997
  ...params,
2456
2998
  });
2457
2999
  }
2458
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: NotificationApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2459
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: NotificationApi }); }
3000
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
3001
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationApi }); }
2460
3002
  }
2461
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: NotificationApi, decorators: [{
3003
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationApi, decorators: [{
2462
3004
  type: Injectable
2463
3005
  }] });
2464
3006
 
@@ -2510,16 +3052,39 @@ class NotificationService {
2510
3052
  .then((response) => this.unreadNotificationCount.set(response.count ?? 0))
2511
3053
  .catch((error) => console.error('Failed to load notification count', error));
2512
3054
  }
2513
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2514
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
3055
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3056
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationService, providedIn: 'root' }); }
2515
3057
  }
2516
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: NotificationService, decorators: [{
3058
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotificationService, decorators: [{
2517
3059
  type: Injectable,
2518
3060
  args: [{ providedIn: 'root' }]
2519
3061
  }], ctorParameters: () => [] });
2520
3062
 
3063
+ var userNotifications$1 = {
3064
+ title: "Notifications",
3065
+ empty: "No unread notifications",
3066
+ refresh: "Refresh",
3067
+ markAsRead: "Read",
3068
+ markedAsRead: "Notification marked as read"
3069
+ };
3070
+ var en$8 = {
3071
+ userNotifications: userNotifications$1
3072
+ };
3073
+
3074
+ var userNotifications = {
3075
+ title: "Оповещения",
3076
+ empty: "Непрочитанных оповещений нет",
3077
+ refresh: "Обновить",
3078
+ markAsRead: "Прочитано",
3079
+ markedAsRead: "Оповещение отмечено прочитанным"
3080
+ };
3081
+ var ru$8 = {
3082
+ userNotifications: userNotifications
3083
+ };
3084
+
3085
+ L10nService.registerTranslations({ en: en$8, ru: ru$8 });
2521
3086
  class UserNotificationsComponent {
2522
- constructor() {
3087
+ constructor(l10nService) {
2523
3088
  this.notifications = [];
2524
3089
  this.totalCount = 0;
2525
3090
  this.skip = 0;
@@ -2534,6 +3099,7 @@ class UserNotificationsComponent {
2534
3099
  const count = this.unreadNotificationCount();
2535
3100
  return count > 99 ? '99+' : count.toString();
2536
3101
  }, ...(ngDevMode ? [{ debugName: "unreadNotificationBadge" }] : []));
3102
+ l10nService.get('userNotifications');
2537
3103
  }
2538
3104
  async toggle(event) {
2539
3105
  this.popover?.toggle(event);
@@ -2596,8 +3162,8 @@ class UserNotificationsComponent {
2596
3162
  return 'secondary';
2597
3163
  }
2598
3164
  }
2599
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UserNotificationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2600
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: UserNotificationsComponent, isStandalone: true, selector: "app-user-notifications", viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }], ngImport: i0, template: `
3165
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserNotificationsComponent, deps: [{ token: L10nService }], target: i0.ɵɵFactoryTarget.Component }); }
3166
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: UserNotificationsComponent, isStandalone: true, selector: "app-user-notifications", viewQueries: [{ propertyName: "popover", first: true, predicate: ["popover"], descendants: true }], ngImport: i0, template: `
2601
3167
  <button
2602
3168
  class="layout-topbar-action relative"
2603
3169
  id="oip-app-topbar-notification-button"
@@ -2676,7 +3242,7 @@ class UserNotificationsComponent {
2676
3242
  </div>
2677
3243
 
2678
3244
  <p-paginator
2679
- styleClass="mt-3"
3245
+ class="mt-3"
2680
3246
  [first]="skip"
2681
3247
  [rows]="take"
2682
3248
  [rowsPerPageOptions]="[5, 10, 20]"
@@ -2684,9 +3250,9 @@ class UserNotificationsComponent {
2684
3250
  (onPageChange)="onPageChange($event)"></p-paginator>
2685
3251
  }
2686
3252
  </p-popover>
2687
- `, 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" }] }); }
3253
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: BadgeModule }, { kind: "component", type: i2$3.Badge, selector: "p-badge", inputs: ["styleClass", "badgeSize", "size", "severity", "value", "badgeDisabled"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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: i4$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: i5.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: i2$1.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
2688
3254
  }
2689
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UserNotificationsComponent, decorators: [{
3255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserNotificationsComponent, decorators: [{
2690
3256
  type: Component,
2691
3257
  args: [{
2692
3258
  selector: 'app-user-notifications',
@@ -2781,7 +3347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
2781
3347
  </div>
2782
3348
 
2783
3349
  <p-paginator
2784
- styleClass="mt-3"
3350
+ class="mt-3"
2785
3351
  [first]="skip"
2786
3352
  [rows]="take"
2787
3353
  [rowsPerPageOptions]="[5, 10, 20]"
@@ -2791,7 +3357,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
2791
3357
  </p-popover>
2792
3358
  `
2793
3359
  }]
2794
- }], propDecorators: { popover: [{
3360
+ }], ctorParameters: () => [{ type: L10nService }], propDecorators: { popover: [{
2795
3361
  type: ViewChild,
2796
3362
  args: ['popover']
2797
3363
  }] } });
@@ -2838,10 +3404,10 @@ class ApplicationsApi extends HttpClient {
2838
3404
  ...params,
2839
3405
  });
2840
3406
  }
2841
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ApplicationsApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
2842
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ApplicationsApi }); }
3407
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationsApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
3408
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationsApi }); }
2843
3409
  }
2844
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ApplicationsApi, decorators: [{
3410
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationsApi, decorators: [{
2845
3411
  type: Injectable
2846
3412
  }] });
2847
3413
 
@@ -2861,10 +3427,10 @@ class ApplicationRegistryService {
2861
3427
  }
2862
3428
  window.location.href = application.baseUrl;
2863
3429
  }
2864
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ApplicationRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2865
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ApplicationRegistryService }); }
3430
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationRegistryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3431
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationRegistryService }); }
2866
3432
  }
2867
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ApplicationRegistryService, decorators: [{
3433
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationRegistryService, decorators: [{
2868
3434
  type: Injectable
2869
3435
  }] });
2870
3436
 
@@ -2891,49 +3457,49 @@ class AppTopbarApplicationSwitcherComponent {
2891
3457
  command: () => this.applicationRegistryService.openApplication(application)
2892
3458
  };
2893
3459
  }
2894
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppTopbarApplicationSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2895
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: AppTopbarApplicationSwitcherComponent, isStandalone: true, selector: "app-topbar-application-switcher", providers: [ApplicationsApi, ApplicationRegistryService], ngImport: i0, template: `
2896
- @if (applicationRegistryService.applications.length > 1) {
2897
- <p-button
2898
- class="layout-topbar-action"
2899
- id="oip-app-topbar-application-switcher-button"
2900
- severity="secondary"
2901
- type="button"
2902
- [rounded]="true"
2903
- [text]="true"
2904
- (click)="applicationMenu.toggle($event)">
2905
- <i [ngClass]="applicationRegistryService.currentApplication?.icon || 'pi pi-th-large'"></i>
2906
- <span class="ml-2 hidden md:inline">
2907
- {{ applicationRegistryService.currentApplication?.displayName || ('topbar.applications' | translate) }}
2908
- </span>
2909
- </p-button>
2910
- <p-menu #applicationMenu [model]="applicationMenuItems" [popup]="true" />
2911
- }
2912
- `, 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" }] }); }
3460
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTopbarApplicationSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3461
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AppTopbarApplicationSwitcherComponent, isStandalone: true, selector: "app-topbar-application-switcher", providers: [ApplicationsApi, ApplicationRegistryService], ngImport: i0, template: `
3462
+ @if (applicationRegistryService.applications.length > 1) {
3463
+ <p-button
3464
+ class="layout-topbar-action"
3465
+ id="oip-app-topbar-application-switcher-button"
3466
+ severity="secondary"
3467
+ type="button"
3468
+ [rounded]="true"
3469
+ [text]="true"
3470
+ (click)="applicationMenu.toggle($event)">
3471
+ <i [ngClass]="applicationRegistryService.currentApplication?.icon || 'pi pi-th-large'"></i>
3472
+ <span class="ml-2 hidden md:inline">
3473
+ {{ applicationRegistryService.currentApplication?.displayName || ('topbar.applications' | translate) }}
3474
+ </span>
3475
+ </p-button>
3476
+ <p-menu #applicationMenu [model]="applicationMenuItems" [popup]="true" />
3477
+ }
3478
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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$1.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" }] }); }
2913
3479
  }
2914
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppTopbarApplicationSwitcherComponent, decorators: [{
3480
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTopbarApplicationSwitcherComponent, decorators: [{
2915
3481
  type: Component,
2916
3482
  args: [{
2917
3483
  selector: 'app-topbar-application-switcher',
2918
3484
  standalone: true,
2919
3485
  imports: [CommonModule, ButtonModule, MenuModule, TranslatePipe],
2920
- template: `
2921
- @if (applicationRegistryService.applications.length > 1) {
2922
- <p-button
2923
- class="layout-topbar-action"
2924
- id="oip-app-topbar-application-switcher-button"
2925
- severity="secondary"
2926
- type="button"
2927
- [rounded]="true"
2928
- [text]="true"
2929
- (click)="applicationMenu.toggle($event)">
2930
- <i [ngClass]="applicationRegistryService.currentApplication?.icon || 'pi pi-th-large'"></i>
2931
- <span class="ml-2 hidden md:inline">
2932
- {{ applicationRegistryService.currentApplication?.displayName || ('topbar.applications' | translate) }}
2933
- </span>
2934
- </p-button>
2935
- <p-menu #applicationMenu [model]="applicationMenuItems" [popup]="true" />
2936
- }
3486
+ template: `
3487
+ @if (applicationRegistryService.applications.length > 1) {
3488
+ <p-button
3489
+ class="layout-topbar-action"
3490
+ id="oip-app-topbar-application-switcher-button"
3491
+ severity="secondary"
3492
+ type="button"
3493
+ [rounded]="true"
3494
+ [text]="true"
3495
+ (click)="applicationMenu.toggle($event)">
3496
+ <i [ngClass]="applicationRegistryService.currentApplication?.icon || 'pi pi-th-large'"></i>
3497
+ <span class="ml-2 hidden md:inline">
3498
+ {{ applicationRegistryService.currentApplication?.displayName || ('topbar.applications' | translate) }}
3499
+ </span>
3500
+ </p-button>
3501
+ <p-menu #applicationMenu [model]="applicationMenuItems" [popup]="true" />
3502
+ }
2937
3503
  `,
2938
3504
  providers: [ApplicationsApi, ApplicationRegistryService]
2939
3505
  }]
@@ -2984,111 +3550,112 @@ class AppTopbar {
2984
3550
  }
2985
3551
  });
2986
3552
  }
2987
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppTopbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2988
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: AppTopbar, isStandalone: true, selector: "app-topbar", providers: [ConfirmationService], ngImport: i0, template: ` <div class="layout-topbar">
2989
- <p-confirmDialog appendTo="body" />
2990
- <div class="layout-topbar-logo-container">
2991
- <button class="layout-menu-button layout-topbar-action" (click)="layoutService.onMenuToggle()">
2992
- <i class="pi pi-bars"></i>
2993
- </button>
2994
- <a class="layout-topbar-logo" id="oip-app-topbar-logo-link" routerLink="">
2995
- <ng-container
2996
- *ngComponentOutlet="logoService.getLogoComponent(); inputs: { width: 36, height: 36 }"></ng-container>
2997
- <span>{{ 'app-info.title' | translate }}</span>
2998
- </a>
2999
- </div>
3553
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTopbar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3554
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: AppTopbar, isStandalone: true, selector: "app-topbar", providers: [ConfirmationService], ngImport: i0, template: `
3555
+ <div class="layout-topbar">
3556
+ <p-confirmDialog appendTo="body"/>
3557
+ <div class="layout-topbar-logo-container">
3558
+ <button class="layout-menu-button layout-topbar-action" (click)="layoutService.onMenuToggle()">
3559
+ <i class="pi pi-bars"></i>
3560
+ </button>
3561
+ <a class="layout-topbar-logo" id="oip-app-topbar-logo-link" routerLink="">
3562
+ <ng-container
3563
+ *ngComponentOutlet="logoService.getLogoComponent(); inputs: { width: 36, height: 36 }"></ng-container>
3564
+ <span>{{ 'app-info.title' | translate }}</span>
3565
+ </a>
3566
+ </div>
3000
3567
 
3001
- @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {
3002
- <p-tabs
3003
- class="layout-topbar-tabs ml-2"
3004
- [value]="topBarService.activeId"
3005
- (valueChange)="onActiveTabChange($event)">
3006
- <p-tablist>
3007
- @for (tab of topBarService.availableTopBarItems; track tab.id) {
3008
- <p-tab id="oip-app-topbar-tab-{{ tab.id }}" [value]="tab.id">
3009
- <i class="pi {{ tab.icon }}"></i>
3010
- <span class="ml-2">{{ tab.caption }}</span>
3011
- </p-tab>
3012
- }
3013
- </p-tablist>
3014
- </p-tabs>
3015
- }
3016
- <div class="layout-topbar-actions">
3017
- <div class="layout-config-menu">
3018
- <app-topbar-application-switcher />
3019
- <app-user-notifications />
3020
- <p-button
3021
- class="layout-topbar-action"
3022
- id="oip-app-topbar-theme-button"
3023
- severity="secondary"
3024
- type="button"
3025
- [rounded]="true"
3026
- [text]="true"
3027
- (click)="toggleDarkMode()">
3028
- <i
3029
- class="pi"
3030
- [ngClass]="{
3568
+ @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {
3569
+ <p-tabs
3570
+ class="layout-topbar-tabs ml-2"
3571
+ [value]="topBarService.activeId"
3572
+ (valueChange)="onActiveTabChange($event)">
3573
+ <p-tablist>
3574
+ @for (tab of topBarService.availableTopBarItems; track tab.id) {
3575
+ <p-tab id="oip-app-topbar-tab-{{ tab.id }}" [value]="tab.id">
3576
+ <i class="pi {{ tab.icon }}"></i>
3577
+ <span class="ml-2">{{ tab.caption }}</span>
3578
+ </p-tab>
3579
+ }
3580
+ </p-tablist>
3581
+ </p-tabs>
3582
+ }
3583
+ <div class="layout-topbar-actions">
3584
+ <div class="layout-config-menu">
3585
+ <app-topbar-application-switcher/>
3586
+ <app-user-notifications/>
3587
+ <p-button
3588
+ class="layout-topbar-action"
3589
+ id="oip-app-topbar-theme-button"
3590
+ severity="secondary"
3591
+ type="button"
3592
+ [rounded]="true"
3593
+ [text]="true"
3594
+ (click)="toggleDarkMode()">
3595
+ <i
3596
+ class="pi"
3597
+ [ngClass]="{
3031
3598
  'pi-moon': layoutService.isDarkTheme(),
3032
3599
  'pi-sun': !layoutService.isDarkTheme()
3033
3600
  }"></i>
3034
- </p-button>
3035
- <div class="relative">
3036
- <p-button
3037
- class="layout-topbar-action layout-topbar-action-highlight"
3038
- enterActiveClass="animate-scalein"
3039
- enterFromClass="hidden"
3040
- id="oip-app-topbar-palette-button"
3041
- leaveActiveClass="animate-fadeout"
3042
- leaveToClass="hidden"
3043
- pStyleClass="@next"
3044
- [hideOnOutsideClick]="true"
3045
- [rounded]="true">
3046
- <i class="pi pi-palette"></i>
3047
3601
  </p-button>
3048
- <app-configurator />
3602
+ <div class="relative">
3603
+ <p-button
3604
+ class="layout-topbar-action layout-topbar-action-highlight"
3605
+ enterActiveClass="animate-scalein"
3606
+ enterFromClass="hidden"
3607
+ id="oip-app-topbar-palette-button"
3608
+ leaveActiveClass="animate-fadeout"
3609
+ leaveToClass="hidden"
3610
+ pStyleClass="@next"
3611
+ [hideOnOutsideClick]="true"
3612
+ [rounded]="true">
3613
+ <i class="pi pi-palette"></i>
3614
+ </p-button>
3615
+ <app-configurator/>
3616
+ </div>
3049
3617
  </div>
3050
- </div>
3051
3618
 
3052
- <button
3053
- class="layout-topbar-menu-button layout-topbar-action"
3054
- enterActiveClass="animate-scalein"
3055
- enterFromClass="hidden"
3056
- id="oip-app-topbar-menu-expand-button"
3057
- leaveActiveClass="animate-fadeout"
3058
- leaveToClass="hidden"
3059
- pStyleClass="@next"
3060
- [hideOnOutsideClick]="true">
3061
- <i class="pi pi-ellipsis-v"></i>
3062
- </button>
3063
-
3064
- <div class="layout-topbar-menu hidden lg:block">
3065
- <div class="layout-topbar-menu-content">
3066
- <button
3067
- class="layout-topbar-action"
3068
- id="oip-app-topbar-logout-button"
3069
- type="button"
3070
- (click)="confirmLogout()"
3071
- (keydown)="logoutKeyDown($event)">
3072
- <i class="pi pi-sign-out"></i>
3073
- <span>{{ 'topbar.logout' | translate }}</span>
3074
- </button>
3075
- <button class="layout-topbar-action" routerLink="config">
3076
- <p-avatar
3077
- class="p-link flex align-items-center"
3078
- id="oip-app-topbar-user-avatar"
3079
- shape="circle"
3080
- size="normal"
3081
- [image]="userService.photoLoaded ? userService.photo : null"
3619
+ <button
3620
+ class="layout-topbar-menu-button layout-topbar-action"
3621
+ enterActiveClass="animate-scalein"
3622
+ enterFromClass="hidden"
3623
+ id="oip-app-topbar-menu-expand-button"
3624
+ leaveActiveClass="animate-fadeout"
3625
+ leaveToClass="hidden"
3626
+ pStyleClass="@next"
3627
+ [hideOnOutsideClick]="true">
3628
+ <i class="pi pi-ellipsis-v"></i>
3629
+ </button>
3630
+
3631
+ <div class="layout-topbar-menu hidden lg:block">
3632
+ <div class="layout-topbar-menu-content">
3633
+ <button
3634
+ class="layout-topbar-action"
3635
+ id="oip-app-topbar-logout-button"
3636
+ type="button"
3637
+ (click)="confirmLogout()"
3638
+ (keydown)="logoutKeyDown($event)">
3639
+ <i class="pi pi-sign-out"></i>
3640
+ <span>{{ 'topbar.logout' | translate }}</span>
3641
+ </button>
3642
+ <button class="layout-topbar-action" routerLink="config">
3643
+ <p-avatar
3644
+ class="p-link flex align-items-center"
3645
+ id="oip-app-topbar-user-avatar"
3646
+ shape="circle"
3647
+ size="normal"
3648
+ [image]="userService.photoLoaded ? userService.photo : null"
3082
3649
  >{{ !userService.photoLoaded ? userService.shortLabel : null }}
3083
- </p-avatar>
3084
- <span class="ml-2">{{ 'topbar.profile' | translate }}</span>
3085
- </button>
3650
+ </p-avatar>
3651
+ <span class="ml-2">{{ 'topbar.profile' | translate }}</span>
3652
+ </button>
3653
+ </div>
3086
3654
  </div>
3087
3655
  </div>
3088
- </div>
3089
- </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$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" }] }); }
3656
+ </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: StyleClassModule }, { kind: "directive", type: i3$2.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: i3$3.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["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" }] }); }
3090
3657
  }
3091
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppTopbar, decorators: [{
3658
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppTopbar, decorators: [{
3092
3659
  type: Component,
3093
3660
  args: [{
3094
3661
  selector: 'app-topbar',
@@ -3108,108 +3675,109 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
3108
3675
  TranslatePipe,
3109
3676
  AppTopbarApplicationSwitcherComponent
3110
3677
  ],
3111
- template: ` <div class="layout-topbar">
3112
- <p-confirmDialog appendTo="body" />
3113
- <div class="layout-topbar-logo-container">
3114
- <button class="layout-menu-button layout-topbar-action" (click)="layoutService.onMenuToggle()">
3115
- <i class="pi pi-bars"></i>
3116
- </button>
3117
- <a class="layout-topbar-logo" id="oip-app-topbar-logo-link" routerLink="">
3118
- <ng-container
3119
- *ngComponentOutlet="logoService.getLogoComponent(); inputs: { width: 36, height: 36 }"></ng-container>
3120
- <span>{{ 'app-info.title' | translate }}</span>
3121
- </a>
3122
- </div>
3678
+ template: `
3679
+ <div class="layout-topbar">
3680
+ <p-confirmDialog appendTo="body"/>
3681
+ <div class="layout-topbar-logo-container">
3682
+ <button class="layout-menu-button layout-topbar-action" (click)="layoutService.onMenuToggle()">
3683
+ <i class="pi pi-bars"></i>
3684
+ </button>
3685
+ <a class="layout-topbar-logo" id="oip-app-topbar-logo-link" routerLink="">
3686
+ <ng-container
3687
+ *ngComponentOutlet="logoService.getLogoComponent(); inputs: { width: 36, height: 36 }"></ng-container>
3688
+ <span>{{ 'app-info.title' | translate }}</span>
3689
+ </a>
3690
+ </div>
3123
3691
 
3124
- @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {
3125
- <p-tabs
3126
- class="layout-topbar-tabs ml-2"
3127
- [value]="topBarService.activeId"
3128
- (valueChange)="onActiveTabChange($event)">
3129
- <p-tablist>
3130
- @for (tab of topBarService.availableTopBarItems; track tab.id) {
3131
- <p-tab id="oip-app-topbar-tab-{{ tab.id }}" [value]="tab.id">
3132
- <i class="pi {{ tab.icon }}"></i>
3133
- <span class="ml-2">{{ tab.caption }}</span>
3134
- </p-tab>
3135
- }
3136
- </p-tablist>
3137
- </p-tabs>
3138
- }
3139
- <div class="layout-topbar-actions">
3140
- <div class="layout-config-menu">
3141
- <app-topbar-application-switcher />
3142
- <app-user-notifications />
3143
- <p-button
3144
- class="layout-topbar-action"
3145
- id="oip-app-topbar-theme-button"
3146
- severity="secondary"
3147
- type="button"
3148
- [rounded]="true"
3149
- [text]="true"
3150
- (click)="toggleDarkMode()">
3151
- <i
3152
- class="pi"
3153
- [ngClass]="{
3692
+ @if (securityService.isAdmin() && topBarService.topBarItems.length > 0) {
3693
+ <p-tabs
3694
+ class="layout-topbar-tabs ml-2"
3695
+ [value]="topBarService.activeId"
3696
+ (valueChange)="onActiveTabChange($event)">
3697
+ <p-tablist>
3698
+ @for (tab of topBarService.availableTopBarItems; track tab.id) {
3699
+ <p-tab id="oip-app-topbar-tab-{{ tab.id }}" [value]="tab.id">
3700
+ <i class="pi {{ tab.icon }}"></i>
3701
+ <span class="ml-2">{{ tab.caption }}</span>
3702
+ </p-tab>
3703
+ }
3704
+ </p-tablist>
3705
+ </p-tabs>
3706
+ }
3707
+ <div class="layout-topbar-actions">
3708
+ <div class="layout-config-menu">
3709
+ <app-topbar-application-switcher/>
3710
+ <app-user-notifications/>
3711
+ <p-button
3712
+ class="layout-topbar-action"
3713
+ id="oip-app-topbar-theme-button"
3714
+ severity="secondary"
3715
+ type="button"
3716
+ [rounded]="true"
3717
+ [text]="true"
3718
+ (click)="toggleDarkMode()">
3719
+ <i
3720
+ class="pi"
3721
+ [ngClass]="{
3154
3722
  'pi-moon': layoutService.isDarkTheme(),
3155
3723
  'pi-sun': !layoutService.isDarkTheme()
3156
3724
  }"></i>
3157
- </p-button>
3158
- <div class="relative">
3159
- <p-button
3160
- class="layout-topbar-action layout-topbar-action-highlight"
3161
- enterActiveClass="animate-scalein"
3162
- enterFromClass="hidden"
3163
- id="oip-app-topbar-palette-button"
3164
- leaveActiveClass="animate-fadeout"
3165
- leaveToClass="hidden"
3166
- pStyleClass="@next"
3167
- [hideOnOutsideClick]="true"
3168
- [rounded]="true">
3169
- <i class="pi pi-palette"></i>
3170
3725
  </p-button>
3171
- <app-configurator />
3726
+ <div class="relative">
3727
+ <p-button
3728
+ class="layout-topbar-action layout-topbar-action-highlight"
3729
+ enterActiveClass="animate-scalein"
3730
+ enterFromClass="hidden"
3731
+ id="oip-app-topbar-palette-button"
3732
+ leaveActiveClass="animate-fadeout"
3733
+ leaveToClass="hidden"
3734
+ pStyleClass="@next"
3735
+ [hideOnOutsideClick]="true"
3736
+ [rounded]="true">
3737
+ <i class="pi pi-palette"></i>
3738
+ </p-button>
3739
+ <app-configurator/>
3740
+ </div>
3172
3741
  </div>
3173
- </div>
3174
3742
 
3175
- <button
3176
- class="layout-topbar-menu-button layout-topbar-action"
3177
- enterActiveClass="animate-scalein"
3178
- enterFromClass="hidden"
3179
- id="oip-app-topbar-menu-expand-button"
3180
- leaveActiveClass="animate-fadeout"
3181
- leaveToClass="hidden"
3182
- pStyleClass="@next"
3183
- [hideOnOutsideClick]="true">
3184
- <i class="pi pi-ellipsis-v"></i>
3185
- </button>
3186
-
3187
- <div class="layout-topbar-menu hidden lg:block">
3188
- <div class="layout-topbar-menu-content">
3189
- <button
3190
- class="layout-topbar-action"
3191
- id="oip-app-topbar-logout-button"
3192
- type="button"
3193
- (click)="confirmLogout()"
3194
- (keydown)="logoutKeyDown($event)">
3195
- <i class="pi pi-sign-out"></i>
3196
- <span>{{ 'topbar.logout' | translate }}</span>
3197
- </button>
3198
- <button class="layout-topbar-action" routerLink="config">
3199
- <p-avatar
3200
- class="p-link flex align-items-center"
3201
- id="oip-app-topbar-user-avatar"
3202
- shape="circle"
3203
- size="normal"
3204
- [image]="userService.photoLoaded ? userService.photo : null"
3743
+ <button
3744
+ class="layout-topbar-menu-button layout-topbar-action"
3745
+ enterActiveClass="animate-scalein"
3746
+ enterFromClass="hidden"
3747
+ id="oip-app-topbar-menu-expand-button"
3748
+ leaveActiveClass="animate-fadeout"
3749
+ leaveToClass="hidden"
3750
+ pStyleClass="@next"
3751
+ [hideOnOutsideClick]="true">
3752
+ <i class="pi pi-ellipsis-v"></i>
3753
+ </button>
3754
+
3755
+ <div class="layout-topbar-menu hidden lg:block">
3756
+ <div class="layout-topbar-menu-content">
3757
+ <button
3758
+ class="layout-topbar-action"
3759
+ id="oip-app-topbar-logout-button"
3760
+ type="button"
3761
+ (click)="confirmLogout()"
3762
+ (keydown)="logoutKeyDown($event)">
3763
+ <i class="pi pi-sign-out"></i>
3764
+ <span>{{ 'topbar.logout' | translate }}</span>
3765
+ </button>
3766
+ <button class="layout-topbar-action" routerLink="config">
3767
+ <p-avatar
3768
+ class="p-link flex align-items-center"
3769
+ id="oip-app-topbar-user-avatar"
3770
+ shape="circle"
3771
+ size="normal"
3772
+ [image]="userService.photoLoaded ? userService.photo : null"
3205
3773
  >{{ !userService.photoLoaded ? userService.shortLabel : null }}
3206
- </p-avatar>
3207
- <span class="ml-2">{{ 'topbar.profile' | translate }}</span>
3208
- </button>
3774
+ </p-avatar>
3775
+ <span class="ml-2">{{ 'topbar.profile' | translate }}</span>
3776
+ </button>
3777
+ </div>
3209
3778
  </div>
3210
3779
  </div>
3211
- </div>
3212
- </div>`,
3780
+ </div>`,
3213
3781
  providers: [ConfirmationService]
3214
3782
  }]
3215
3783
  }] });
@@ -3218,35 +3786,35 @@ class FooterComponent {
3218
3786
  constructor() {
3219
3787
  this.logoService = inject(LogoService);
3220
3788
  }
3221
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: FooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3222
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: FooterComponent, isStandalone: true, selector: "app-footer", ngImport: i0, template: `
3223
- <div class="layout-footer">
3224
- <div class="flex justify-center flex-1">
3225
- <div class="mr-2 -my-0.5">
3226
- <ng-container
3227
- *ngComponentOutlet="logoService.getLogoComponent(); inputs: { width: 18, height: 18 }"></ng-container>
3228
- </div>
3229
- <span class="font-medium">{{ 'app-info.footer' | translate }}</span>
3230
- </div>
3231
- <p class="mr-auto">{{ 'app-info.version' | translate }}</p>
3232
- </div>
3789
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3790
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: FooterComponent, isStandalone: true, selector: "app-footer", ngImport: i0, template: `
3791
+ <div class="layout-footer">
3792
+ <div class="flex justify-center flex-1">
3793
+ <div class="mr-2 -my-0.5">
3794
+ <ng-container
3795
+ *ngComponentOutlet="logoService.getLogoComponent(); inputs: { width: 18, height: 18 }"></ng-container>
3796
+ </div>
3797
+ <span class="font-medium">{{ 'app-info.footer' | translate }}</span>
3798
+ </div>
3799
+ <p class="mr-auto">{{ 'app-info.version' | translate }}</p>
3800
+ </div>
3233
3801
  `, isInline: true, dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3234
3802
  }
3235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: FooterComponent, decorators: [{
3803
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FooterComponent, decorators: [{
3236
3804
  type: Component,
3237
3805
  args: [{
3238
3806
  selector: 'app-footer',
3239
- template: `
3240
- <div class="layout-footer">
3241
- <div class="flex justify-center flex-1">
3242
- <div class="mr-2 -my-0.5">
3243
- <ng-container
3244
- *ngComponentOutlet="logoService.getLogoComponent(); inputs: { width: 18, height: 18 }"></ng-container>
3245
- </div>
3246
- <span class="font-medium">{{ 'app-info.footer' | translate }}</span>
3247
- </div>
3248
- <p class="mr-auto">{{ 'app-info.version' | translate }}</p>
3249
- </div>
3807
+ template: `
3808
+ <div class="layout-footer">
3809
+ <div class="flex justify-center flex-1">
3810
+ <div class="mr-2 -my-0.5">
3811
+ <ng-container
3812
+ *ngComponentOutlet="logoService.getLogoComponent(); inputs: { width: 18, height: 18 }"></ng-container>
3813
+ </div>
3814
+ <span class="font-medium">{{ 'app-info.footer' | translate }}</span>
3815
+ </div>
3816
+ <p class="mr-auto">{{ 'app-info.version' | translate }}</p>
3817
+ </div>
3250
3818
  `,
3251
3819
  standalone: true,
3252
3820
  imports: [TranslatePipe, NgComponentOutlet]
@@ -3266,6 +3834,14 @@ class MenuApi extends HttpClient {
3266
3834
  format: "json",
3267
3835
  ...params,
3268
3836
  });
3837
+ this.getModuleInstanceRights = (query, params = {}) => this.request({
3838
+ path: `/api/menu/get-module-instance-rights`,
3839
+ method: "GET",
3840
+ query: query,
3841
+ secure: true,
3842
+ format: "json",
3843
+ ...params,
3844
+ });
3269
3845
  this.getAdminMenu = (params = {}) => this.request({
3270
3846
  path: `/api/menu/get-admin-menu`,
3271
3847
  method: "GET",
@@ -3311,10 +3887,10 @@ class MenuApi extends HttpClient {
3311
3887
  ...params,
3312
3888
  });
3313
3889
  }
3314
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
3315
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuApi }); }
3890
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
3891
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuApi }); }
3316
3892
  }
3317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuApi, decorators: [{
3893
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuApi, decorators: [{
3318
3894
  type: Injectable
3319
3895
  }] });
3320
3896
 
@@ -3370,10 +3946,10 @@ class MenuService {
3370
3946
  editModuleInstance(item) {
3371
3947
  return this.menuDataService.editModuleInstance(item);
3372
3948
  }
3373
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3374
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuService }); }
3949
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3950
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuService }); }
3375
3951
  }
3376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuService, decorators: [{
3952
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuService, decorators: [{
3377
3953
  type: Injectable
3378
3954
  }] });
3379
3955
 
@@ -3610,8 +4186,8 @@ class MenuItemComponent {
3610
4186
  const currentIndex = items.findIndex((item) => item.moduleInstanceId == currentItem.moduleInstanceId);
3611
4187
  return this.findNextVisibleIndex(items, currentIndex) !== -1;
3612
4188
  }
3613
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$5.Router }, { token: MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
3614
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: MenuItemComponent, isStandalone: true, selector: "[app-menuitem]", inputs: { item: "item", index: "index", root: "root", parentKey: "parentKey", menuItemCreateDialogComponent: "menuItemCreateDialogComponent", menuItemEditDialogComponent: "menuItemEditDialogComponent", contextMenu: "contextMenu" }, host: { properties: { "class.layout-root-menuitem": "this.root", "class.active-menuitem": "this.activeClass" } }, providers: [ConfirmationService], ngImport: i0, template: `
4189
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$2.Router }, { token: MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
4190
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MenuItemComponent, isStandalone: true, selector: "[app-menuitem]", inputs: { item: "item", index: "index", root: "root", parentKey: "parentKey", menuItemCreateDialogComponent: "menuItemCreateDialogComponent", menuItemEditDialogComponent: "menuItemEditDialogComponent", contextMenu: "contextMenu" }, host: { properties: { "class.layout-root-menuitem": "this.root", "class.active-menuitem": "this.activeClass" } }, providers: [ConfirmationService], ngImport: i0, template: `
3615
4191
  <ng-container>
3616
4192
  <p-confirm-dialog />
3617
4193
  @if (root && item.visible !== false) {
@@ -3684,9 +4260,9 @@ class MenuItemComponent {
3684
4260
  </ul>
3685
4261
  }
3686
4262
  </ng-container>
3687
- `, 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: i3$4.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"] }] }); }
4263
+ `, 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$4.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"] }] }); }
3688
4264
  }
3689
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuItemComponent, decorators: [{
4265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemComponent, decorators: [{
3690
4266
  type: Component,
3691
4267
  args: [{
3692
4268
  // eslint-disable-next-line @angular-eslint/component-selector
@@ -3768,7 +4344,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
3768
4344
  imports: [RippleModule, NgClass, RouterLinkActive, RouterLink, ContextMenuModule, ConfirmDialog],
3769
4345
  providers: [ConfirmationService]
3770
4346
  }]
3771
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$5.Router }, { type: MenuService }], propDecorators: { item: [{
4347
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$2.Router }, { type: MenuService }], propDecorators: { item: [{
3772
4348
  type: Input
3773
4349
  }], index: [{
3774
4350
  type: Input
@@ -3851,8 +4427,8 @@ class MenuItemCreateDialogComponent {
3851
4427
  this.visible = true;
3852
4428
  this.visibleChange.emit(this.visible);
3853
4429
  }
3854
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuItemCreateDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3855
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: MenuItemCreateDialogComponent, isStandalone: true, selector: "menu-item-create-dialog", inputs: { visible: "visible" }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: `
4430
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemCreateDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4431
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MenuItemCreateDialogComponent, isStandalone: true, selector: "menu-item-create-dialog", inputs: { visible: "visible" }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: `
3856
4432
  <p-dialog
3857
4433
  header="{{ 'menuItemCreateDialogComponent.header' | translate }}"
3858
4434
  [modal]="true"
@@ -3886,10 +4462,14 @@ class MenuItemCreateDialogComponent {
3886
4462
  <p-select
3887
4463
  appendTo="body"
3888
4464
  class="flex-auto"
4465
+ filterBy="value"
4466
+ filterPlaceholder="{{ 'menuItemCreateDialogComponent.searchModule' | translate }}"
3889
4467
  id="oip-menu-item-create-module"
3890
4468
  optionLabel="value"
3891
4469
  optionValue="key"
3892
4470
  placeholder="{{ 'menuItemCreateDialogComponent.selectModule' | translate }}"
4471
+ scrollHeight="18rem"
4472
+ [filter]="true"
3893
4473
  [options]="modules"
3894
4474
  [(ngModel)]="selectModule" />
3895
4475
  </div>
@@ -3937,9 +4517,9 @@ class MenuItemCreateDialogComponent {
3937
4517
  (click)="save()" />
3938
4518
  </div>
3939
4519
  </p-dialog>
3940
- `, 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$2.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" }] }); }
4520
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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$2.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$2.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i5$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
3941
4521
  }
3942
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuItemCreateDialogComponent, decorators: [{
4522
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemCreateDialogComponent, decorators: [{
3943
4523
  type: Component,
3944
4524
  args: [{
3945
4525
  selector: 'menu-item-create-dialog',
@@ -3979,10 +4559,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
3979
4559
  <p-select
3980
4560
  appendTo="body"
3981
4561
  class="flex-auto"
4562
+ filterBy="value"
4563
+ filterPlaceholder="{{ 'menuItemCreateDialogComponent.searchModule' | translate }}"
3982
4564
  id="oip-menu-item-create-module"
3983
4565
  optionLabel="value"
3984
4566
  optionValue="key"
3985
4567
  placeholder="{{ 'menuItemCreateDialogComponent.selectModule' | translate }}"
4568
+ scrollHeight="18rem"
4569
+ [filter]="true"
3986
4570
  [options]="modules"
3987
4571
  [(ngModel)]="selectModule" />
3988
4572
  </div>
@@ -4044,7 +4628,6 @@ class MenuItemEditDialogComponent {
4044
4628
  this.securityApi = inject(SecurityApi);
4045
4629
  this.msgService = inject(MsgService);
4046
4630
  this.visibleChange = new EventEmitter();
4047
- this.modules = [];
4048
4631
  this.roles = [];
4049
4632
  this.iconOptions = Object.values(PrimeIcons)
4050
4633
  .filter((icon) => typeof icon === 'string')
@@ -4098,14 +4681,11 @@ class MenuItemEditDialogComponent {
4098
4681
  viewRoles: this.menuService.contextMenuItem?.securities
4099
4682
  };
4100
4683
  this.roles = await this.securityApi.getRealmRoles();
4101
- this.menuService.getModules().then((data) => {
4102
- this.modules = data;
4103
- });
4104
4684
  this.visible = true;
4105
4685
  this.visibleChange.emit(this.visible);
4106
4686
  }
4107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuItemEditDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4108
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: MenuItemEditDialogComponent, isStandalone: true, selector: "menu-item-edit-dialog", inputs: { visible: "visible" }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: `
4687
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemEditDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4688
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: MenuItemEditDialogComponent, isStandalone: true, selector: "menu-item-edit-dialog", inputs: { visible: "visible" }, outputs: { visibleChange: "visibleChange" }, ngImport: i0, template: `
4109
4689
  <p-dialog
4110
4690
  header="{{ 'menuItemEditDialogComponent.header' | translate }}"
4111
4691
  [modal]="true"
@@ -4183,9 +4763,9 @@ class MenuItemEditDialogComponent {
4183
4763
  (click)="save()" />
4184
4764
  </div>
4185
4765
  </p-dialog>
4186
- `, 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$2.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" }] }); }
4766
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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$2.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$2.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i5$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MultiSelectModule }, { kind: "component", type: i2.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" }] }); }
4187
4767
  }
4188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuItemEditDialogComponent, decorators: [{
4768
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuItemEditDialogComponent, decorators: [{
4189
4769
  type: Component,
4190
4770
  args: [{
4191
4771
  imports: [ButtonModule, DialogModule, InputTextModule, SelectModule, FormsModule, TranslatePipe, MultiSelectModule],
@@ -4302,8 +4882,8 @@ class MenuComponent {
4302
4882
  }
4303
4883
  ];
4304
4884
  }
4305
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4306
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: MenuComponent, isStandalone: true, selector: "app-menu", providers: [MenuApi], viewQueries: [{ propertyName: "menuItemCreateDialogComponent", first: true, predicate: MenuItemCreateDialogComponent, descendants: true }, { propertyName: "menuItemEditDialogComponent", first: true, predicate: MenuItemEditDialogComponent, descendants: true }, { propertyName: "contextMenu", first: true, predicate: ContextMenu, descendants: true }], ngImport: i0, template: ` <div #empty class="layout-sidebar" (contextmenu)="onContextMenu($event)">
4885
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4886
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: MenuComponent, isStandalone: true, selector: "app-menu", providers: [MenuApi], viewQueries: [{ propertyName: "menuItemCreateDialogComponent", first: true, predicate: MenuItemCreateDialogComponent, descendants: true }, { propertyName: "menuItemEditDialogComponent", first: true, predicate: MenuItemEditDialogComponent, descendants: true }, { propertyName: "contextMenu", first: true, predicate: ContextMenu, descendants: true }], ngImport: i0, template: ` <div #empty class="layout-sidebar" (contextmenu)="onContextMenu($event)">
4307
4887
  <ul class="layout-menu">
4308
4888
  @for (item of menuService.menu; track item; let i = $index) {
4309
4889
  <ng-container>
@@ -4327,9 +4907,9 @@ class MenuComponent {
4327
4907
  <p-contextMenu [target]="empty" />
4328
4908
  <menu-item-create-dialog />
4329
4909
  <menu-item-edit-dialog />
4330
- }`, isInline: true, dependencies: [{ kind: "component", type: MenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey", "menuItemCreateDialogComponent", "menuItemEditDialogComponent", "contextMenu"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i1$6.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: DialogModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "component", type: MenuItemCreateDialogComponent, selector: "menu-item-create-dialog", inputs: ["visible"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: MenuItemEditDialogComponent, selector: "menu-item-edit-dialog", inputs: ["visible"], outputs: ["visibleChange"] }] }); }
4910
+ }`, isInline: true, dependencies: [{ kind: "component", type: MenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey", "menuItemCreateDialogComponent", "menuItemEditDialogComponent", "contextMenu"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i1$3.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: DialogModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "component", type: MenuItemCreateDialogComponent, selector: "menu-item-create-dialog", inputs: ["visible"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: MenuItemEditDialogComponent, selector: "menu-item-edit-dialog", inputs: ["visible"], outputs: ["visibleChange"] }] }); }
4331
4911
  }
4332
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: MenuComponent, decorators: [{
4912
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: MenuComponent, decorators: [{
4333
4913
  type: Component,
4334
4914
  args: [{
4335
4915
  imports: [
@@ -4384,10 +4964,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
4384
4964
 
4385
4965
  class SidebarComponent {
4386
4966
  constructor() { }
4387
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4388
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: SidebarComponent, isStandalone: true, selector: "app-sidebar", ngImport: i0, template: ` <app-menu></app-menu>`, isInline: true, dependencies: [{ kind: "component", type: MenuComponent, selector: "app-menu" }] }); }
4967
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4968
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: SidebarComponent, isStandalone: true, selector: "app-sidebar", ngImport: i0, template: ` <app-menu></app-menu>`, isInline: true, dependencies: [{ kind: "component", type: MenuComponent, selector: "app-menu" }] }); }
4389
4969
  }
4390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: SidebarComponent, decorators: [{
4970
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SidebarComponent, decorators: [{
4391
4971
  type: Component,
4392
4972
  args: [{
4393
4973
  selector: 'app-sidebar',
@@ -4474,39 +5054,39 @@ class AppLayoutComponent {
4474
5054
  this.menuOutsideClickListener();
4475
5055
  }
4476
5056
  }
4477
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4478
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: AppLayoutComponent, isStandalone: true, selector: "app-layout", providers: [MenuService, MenuApi], viewQueries: [{ propertyName: "appSidebar", first: true, predicate: SidebarComponent, descendants: true }, { propertyName: "appTopBar", first: true, predicate: AppTopbar, descendants: true }], ngImport: i0, template: `
4479
- <div class="layout-wrapper" [ngClass]="containerClass">
4480
- <app-topbar></app-topbar>
4481
- <app-sidebar></app-sidebar>
4482
- <div class="layout-main-container">
4483
- <div class="layout-main">
4484
- <router-outlet></router-outlet>
4485
- </div>
4486
- <app-footer></app-footer>
4487
- </div>
4488
- <div class="layout-mask animate-fadein"></div>
4489
- </div>
4490
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppTopbar, selector: "app-topbar" }, { kind: "component", type: SidebarComponent, selector: "app-sidebar" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$5.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: FooterComponent, selector: "app-footer" }] }); }
5057
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5058
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: AppLayoutComponent, isStandalone: true, selector: "app-layout", providers: [MenuService, MenuApi], viewQueries: [{ propertyName: "appSidebar", first: true, predicate: SidebarComponent, descendants: true }, { propertyName: "appTopBar", first: true, predicate: AppTopbar, descendants: true }], ngImport: i0, template: `
5059
+ <div class="layout-wrapper" [ngClass]="containerClass">
5060
+ <app-topbar></app-topbar>
5061
+ <app-sidebar></app-sidebar>
5062
+ <div class="layout-main-container">
5063
+ <div class="layout-main">
5064
+ <router-outlet></router-outlet>
5065
+ </div>
5066
+ <app-footer></app-footer>
5067
+ </div>
5068
+ <div class="layout-mask animate-fadein"></div>
5069
+ </div>
5070
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: AppTopbar, selector: "app-topbar" }, { kind: "component", type: SidebarComponent, selector: "app-sidebar" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1$2.RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: FooterComponent, selector: "app-footer" }] }); }
4491
5071
  }
4492
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppLayoutComponent, decorators: [{
5072
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppLayoutComponent, decorators: [{
4493
5073
  type: Component,
4494
5074
  args: [{
4495
5075
  selector: 'app-layout',
4496
5076
  standalone: true,
4497
5077
  imports: [CommonModule, AppTopbar, SidebarComponent, RouterModule, FooterComponent],
4498
- template: `
4499
- <div class="layout-wrapper" [ngClass]="containerClass">
4500
- <app-topbar></app-topbar>
4501
- <app-sidebar></app-sidebar>
4502
- <div class="layout-main-container">
4503
- <div class="layout-main">
4504
- <router-outlet></router-outlet>
4505
- </div>
4506
- <app-footer></app-footer>
4507
- </div>
4508
- <div class="layout-mask animate-fadein"></div>
4509
- </div>
5078
+ template: `
5079
+ <div class="layout-wrapper" [ngClass]="containerClass">
5080
+ <app-topbar></app-topbar>
5081
+ <app-sidebar></app-sidebar>
5082
+ <div class="layout-main-container">
5083
+ <div class="layout-main">
5084
+ <router-outlet></router-outlet>
5085
+ </div>
5086
+ <app-footer></app-footer>
5087
+ </div>
5088
+ <div class="layout-mask animate-fadein"></div>
5089
+ </div>
4510
5090
  `,
4511
5091
  providers: [MenuService, MenuApi]
4512
5092
  }]
@@ -4529,8 +5109,8 @@ class AppFloatingConfiguratorComponent {
4529
5109
  darkTheme: !state.darkTheme
4530
5110
  }));
4531
5111
  }
4532
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppFloatingConfiguratorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4533
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: AppFloatingConfiguratorComponent, isStandalone: true, selector: "app-floating-configurator", ngImport: i0, template: `
5112
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppFloatingConfiguratorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5113
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: AppFloatingConfiguratorComponent, isStandalone: true, selector: "app-floating-configurator", ngImport: i0, template: `
4534
5114
  <div class="fixed flex gap-4 top-8 right-8">
4535
5115
  <p-button
4536
5116
  id="oip-app-floating-configurator-dark-theme-button"
@@ -4554,9 +5134,9 @@ class AppFloatingConfiguratorComponent {
4554
5134
  <app-configurator />
4555
5135
  </div>
4556
5136
  </div>
4557
- `, 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" }] }); }
5137
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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$2.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterFromClass", "enterActiveClass", "enterToClass", "leaveFromClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape", "hideOnResize", "resizeSelector"] }, { kind: "component", type: AppConfiguratorComponent, selector: "app-configurator" }] }); }
4558
5138
  }
4559
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppFloatingConfiguratorComponent, decorators: [{
5139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppFloatingConfiguratorComponent, decorators: [{
4560
5140
  type: Component,
4561
5141
  args: [{
4562
5142
  selector: 'app-floating-configurator',
@@ -4589,12 +5169,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
4589
5169
  }]
4590
5170
  }] });
4591
5171
 
5172
+ var notfound$1 = {
5173
+ title: "Not Found",
5174
+ errorCode: "404",
5175
+ description: "Requested resource is not available.",
5176
+ button: "Go to home"
5177
+ };
5178
+ var en$7 = {
5179
+ notfound: notfound$1
5180
+ };
5181
+
5182
+ var notfound = {
5183
+ title: "Не найдено",
5184
+ errorCode: "404",
5185
+ description: "Запрашиваемый ресурс недоступен.",
5186
+ button: "На главную"
5187
+ };
5188
+ var ru$7 = {
5189
+ notfound: notfound
5190
+ };
5191
+
5192
+ L10nService.registerTranslations({ en: en$7, ru: ru$7 });
4592
5193
  class NotfoundComponent {
4593
5194
  constructor(l10nService) {
4594
5195
  l10nService.get('notfound');
4595
5196
  }
4596
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: NotfoundComponent, deps: [{ token: L10nService }], target: i0.ɵɵFactoryTarget.Component }); }
4597
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: NotfoundComponent, isStandalone: true, selector: "app-notfound", ngImport: i0, template: ` <app-floating-configurator />
5197
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotfoundComponent, deps: [{ token: L10nService }], target: i0.ɵɵFactoryTarget.Component }); }
5198
+ 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 />
4598
5199
  <div class="flex items-center justify-center min-h-screen overflow-hidden">
4599
5200
  <div class="flex flex-col items-center justify-center">
4600
5201
  <div
@@ -4614,9 +5215,9 @@ class NotfoundComponent {
4614
5215
  </div>
4615
5216
  </div>
4616
5217
  </div>
4617
- </div>`, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["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: AppFloatingConfiguratorComponent, selector: "app-floating-configurator" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$3.TranslatePipe, name: "translate" }] }); }
5218
+ </div>`, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "component", type: Button, selector: "p-button", inputs: ["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: AppFloatingConfiguratorComponent, selector: "app-floating-configurator" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2$5.TranslatePipe, name: "translate" }] }); }
4618
5219
  }
4619
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: NotfoundComponent, decorators: [{
5220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: NotfoundComponent, decorators: [{
4620
5221
  type: Component,
4621
5222
  args: [{
4622
5223
  selector: 'app-notfound',
@@ -4663,68 +5264,68 @@ class UnauthorizedComponent {
4663
5264
  const returnUrl = this.route.snapshot.queryParamMap.get('returnUrl') || '/';
4664
5265
  this.securityService.authorize(returnUrl);
4665
5266
  }
4666
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UnauthorizedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4667
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: UnauthorizedComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
4668
- <app-floating-configurator />
4669
- <div
4670
- class="bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden">
4671
- <div class="flex flex-col items-center justify-center">
4672
- <div
4673
- style="border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)">
4674
- <div class="w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20" style="border-radius: 53px">
4675
- <div class="flex flex-col items-center justify-center">
4676
- <logo [height]="96" [width]="96" />
4677
- </div>
4678
- <div class="text-center mb-8">
4679
- <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
4680
- {{ 'unauthorized.welcomeToOip' | translate }}
4681
- </div>
4682
- <span class="text-muted-color font-medium">{{ 'unauthorized.signInToContinue' | translate }}</span>
4683
- </div>
4684
- <div>
4685
- <p-button
4686
- id="oip-unauthorized-error-sign-in-button"
4687
- label="{{ 'unauthorized.signIn' | translate }}"
4688
- styleClass="w-full"
4689
- (click)="signIn()"></p-button>
4690
- </div>
4691
- </div>
4692
- </div>
4693
- </div>
4694
- </div>
4695
- `, 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: RippleModule }, { kind: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "component", type: AppFloatingConfiguratorComponent, selector: "app-floating-configurator" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
5267
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UnauthorizedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5268
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: UnauthorizedComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
5269
+ <app-floating-configurator />
5270
+ <div
5271
+ class="bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden">
5272
+ <div class="flex flex-col items-center justify-center">
5273
+ <div
5274
+ style="border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)">
5275
+ <div class="w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20" style="border-radius: 53px">
5276
+ <div class="flex flex-col items-center justify-center">
5277
+ <logo [height]="96" [width]="96" />
5278
+ </div>
5279
+ <div class="text-center mb-8">
5280
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
5281
+ {{ 'unauthorized.welcomeToOip' | translate }}
5282
+ </div>
5283
+ <span class="text-muted-color font-medium">{{ 'unauthorized.signInToContinue' | translate }}</span>
5284
+ </div>
5285
+ <div>
5286
+ <p-button
5287
+ id="oip-unauthorized-error-sign-in-button"
5288
+ label="{{ 'unauthorized.signIn' | translate }}"
5289
+ styleClass="w-full"
5290
+ (click)="signIn()"></p-button>
5291
+ </div>
5292
+ </div>
5293
+ </div>
5294
+ </div>
5295
+ </div>
5296
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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: "component", type: LogoComponent, selector: "logo", inputs: ["width", "height"] }, { kind: "component", type: AppFloatingConfiguratorComponent, selector: "app-floating-configurator" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
4696
5297
  }
4697
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: UnauthorizedComponent, decorators: [{
5298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UnauthorizedComponent, decorators: [{
4698
5299
  type: Component,
4699
5300
  args: [{
4700
- template: `
4701
- <app-floating-configurator />
4702
- <div
4703
- class="bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden">
4704
- <div class="flex flex-col items-center justify-center">
4705
- <div
4706
- style="border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)">
4707
- <div class="w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20" style="border-radius: 53px">
4708
- <div class="flex flex-col items-center justify-center">
4709
- <logo [height]="96" [width]="96" />
4710
- </div>
4711
- <div class="text-center mb-8">
4712
- <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
4713
- {{ 'unauthorized.welcomeToOip' | translate }}
4714
- </div>
4715
- <span class="text-muted-color font-medium">{{ 'unauthorized.signInToContinue' | translate }}</span>
4716
- </div>
4717
- <div>
4718
- <p-button
4719
- id="oip-unauthorized-error-sign-in-button"
4720
- label="{{ 'unauthorized.signIn' | translate }}"
4721
- styleClass="w-full"
4722
- (click)="signIn()"></p-button>
4723
- </div>
4724
- </div>
4725
- </div>
4726
- </div>
4727
- </div>
5301
+ template: `
5302
+ <app-floating-configurator />
5303
+ <div
5304
+ class="bg-surface-50 dark:bg-surface-950 flex items-center justify-center min-h-screen min-w-[100vw] overflow-hidden">
5305
+ <div class="flex flex-col items-center justify-center">
5306
+ <div
5307
+ style="border-radius: 56px; padding: 0.3rem; background: linear-gradient(180deg, var(--primary-color) 10%, rgba(33, 150, 243, 0) 30%)">
5308
+ <div class="w-full bg-surface-0 dark:bg-surface-900 py-20 px-8 sm:px-20" style="border-radius: 53px">
5309
+ <div class="flex flex-col items-center justify-center">
5310
+ <logo [height]="96" [width]="96" />
5311
+ </div>
5312
+ <div class="text-center mb-8">
5313
+ <div class="text-surface-900 dark:text-surface-0 text-3xl font-medium mb-4">
5314
+ {{ 'unauthorized.welcomeToOip' | translate }}
5315
+ </div>
5316
+ <span class="text-muted-color font-medium">{{ 'unauthorized.signInToContinue' | translate }}</span>
5317
+ </div>
5318
+ <div>
5319
+ <p-button
5320
+ id="oip-unauthorized-error-sign-in-button"
5321
+ label="{{ 'unauthorized.signIn' | translate }}"
5322
+ styleClass="w-full"
5323
+ (click)="signIn()"></p-button>
5324
+ </div>
5325
+ </div>
5326
+ </div>
5327
+ </div>
5328
+ </div>
4728
5329
  `,
4729
5330
  imports: [
4730
5331
  ButtonModule,
@@ -4737,86 +5338,195 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
4737
5338
  }]
4738
5339
  }] });
4739
5340
 
4740
- class ErrorComponent {
4741
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4742
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: ErrorComponent, isStandalone: true, selector: "app-error", ngImport: i0, template: `<div
5341
+ class AccessComponent {
5342
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AccessComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5343
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: AccessComponent, isStandalone: true, selector: "app-access", ngImport: i0, template: `<div
4743
5344
  class="surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden">
4744
5345
  <div class="flex flex-column align-items-center justify-content-center">
4745
- <img alt="Sakai logo" class="mb-5 w-6rem flex-shrink-0" src="assets/demo/images/error/logo-error.svg" />
5346
+ <img alt="Sakai logo" class="mb-5 w-6rem flex-shrink-0" src="assets/demo/images/access/logo-orange.svg" />
4746
5347
  <div
4747
- style="border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);">
5348
+ style="border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(247, 149, 48, 0.4) 10%, rgba(247, 149, 48, 0) 30%);">
4748
5349
  <div
4749
5350
  class="w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center"
4750
5351
  style="border-radius:53px">
4751
- <div class="grid flex flex-column align-items-center">
5352
+ <div class="grid flex-column align-items-center">
4752
5353
  <div
4753
- class="flex justify-content-center align-items-center bg-pink-500 border-circle"
4754
- style="height:3.2rem; width:3.2rem;">
4755
- <i class="pi pi-fw pi-exclamation-circle text-2xl text-white"></i>
5354
+ class="flex justify-content-center align-items-center bg-orange-500 border-circle"
5355
+ style="width:3.2rem; height:3.2rem;">
5356
+ <i class="text-50 pi pi-fw pi-lock text-2xl"></i>
4756
5357
  </div>
4757
- <h1 class="text-900 font-bold text-5xl mb-2">Error Occured</h1>
4758
- <span class="text-600 mb-5">Requested resource is not available.</span>
4759
- <img alt="Error" class="mb-5" src="assets/demo/images/error/asset-error.svg" width="80%" />
4760
- <button
5358
+ <h1 class="text-900 font-bold text-4xl lg:text-5xl mb-2">Access Denied</h1>
5359
+ <span class="text-600 mb-5">You do not have the necessary permisions. Please contact admins.</span>
5360
+ <img alt="Access denied" class="mb-5" src="assets/demo/images/access/asset-access.svg" width="80%" />
5361
+ <p-button
4761
5362
  class="p-button-text"
4762
5363
  icon="pi pi-arrow-left"
4763
- id="oip-app-error-go-to-dashboard-button"
5364
+ id="oip-app-access-go-to-dashboard-button"
4764
5365
  label="Go to Dashboard"
4765
5366
  pButton
4766
5367
  pRipple
4767
- [routerLink]="['/']"></button>
5368
+ [routerLink]="['/']"></p-button>
4768
5369
  </div>
4769
5370
  </div>
4770
5371
  </div>
4771
5372
  </div>
4772
- </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: i3$4.Ripple, selector: "[pRipple]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
5373
+ </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$1.ButtonDirective, selector: "[pButton]", inputs: ["ptButtonDirective", "hostName", "text", "plain", "raised", "size", "outlined", "rounded", "iconPos", "loadingIcon", "fluid", "label", "icon", "loading", "buttonProps", "severity"] }, { kind: "component", type: i1$1.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$4.Ripple, selector: "[pRipple]" }] }); }
4773
5374
  }
4774
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ErrorComponent, decorators: [{
5375
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AccessComponent, decorators: [{
4775
5376
  type: Component,
4776
5377
  args: [{
4777
- selector: 'app-error',
5378
+ selector: 'app-access',
4778
5379
  template: `<div
4779
5380
  class="surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden">
4780
5381
  <div class="flex flex-column align-items-center justify-content-center">
4781
- <img alt="Sakai logo" class="mb-5 w-6rem flex-shrink-0" src="assets/demo/images/error/logo-error.svg" />
5382
+ <img alt="Sakai logo" class="mb-5 w-6rem flex-shrink-0" src="assets/demo/images/access/logo-orange.svg" />
4782
5383
  <div
4783
- style="border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);">
5384
+ style="border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(247, 149, 48, 0.4) 10%, rgba(247, 149, 48, 0) 30%);">
4784
5385
  <div
4785
5386
  class="w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center"
4786
5387
  style="border-radius:53px">
4787
- <div class="grid flex flex-column align-items-center">
5388
+ <div class="grid flex-column align-items-center">
4788
5389
  <div
4789
- class="flex justify-content-center align-items-center bg-pink-500 border-circle"
4790
- style="height:3.2rem; width:3.2rem;">
4791
- <i class="pi pi-fw pi-exclamation-circle text-2xl text-white"></i>
5390
+ class="flex justify-content-center align-items-center bg-orange-500 border-circle"
5391
+ style="width:3.2rem; height:3.2rem;">
5392
+ <i class="text-50 pi pi-fw pi-lock text-2xl"></i>
4792
5393
  </div>
4793
- <h1 class="text-900 font-bold text-5xl mb-2">Error Occured</h1>
4794
- <span class="text-600 mb-5">Requested resource is not available.</span>
4795
- <img alt="Error" class="mb-5" src="assets/demo/images/error/asset-error.svg" width="80%" />
4796
- <button
5394
+ <h1 class="text-900 font-bold text-4xl lg:text-5xl mb-2">Access Denied</h1>
5395
+ <span class="text-600 mb-5">You do not have the necessary permisions. Please contact admins.</span>
5396
+ <img alt="Access denied" class="mb-5" src="assets/demo/images/access/asset-access.svg" width="80%" />
5397
+ <p-button
4797
5398
  class="p-button-text"
4798
5399
  icon="pi pi-arrow-left"
4799
- id="oip-app-error-go-to-dashboard-button"
5400
+ id="oip-app-access-go-to-dashboard-button"
4800
5401
  label="Go to Dashboard"
4801
5402
  pButton
4802
5403
  pRipple
4803
- [routerLink]="['/']"></button>
5404
+ [routerLink]="['/']"></p-button>
4804
5405
  </div>
4805
5406
  </div>
4806
5407
  </div>
4807
5408
  </div>
5409
+ </div>`,
5410
+ imports: [RouterLink, ButtonModule, RippleModule],
5411
+ standalone: true
5412
+ }]
5413
+ }] });
5414
+
5415
+ class ErrorComponent {
5416
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5417
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: ErrorComponent, isStandalone: true, selector: "app-error", ngImport: i0, template: `<div
5418
+ class="surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden">
5419
+ <div class="flex flex-column align-items-center justify-content-center">
5420
+ <img alt="Sakai logo" class="mb-5 w-6rem flex-shrink-0" src="assets/demo/images/error/logo-error.svg" />
5421
+ <div
5422
+ style="border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);">
5423
+ <div
5424
+ class="w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center"
5425
+ style="border-radius:53px">
5426
+ <div class="grid flex flex-column align-items-center">
5427
+ <div
5428
+ class="flex justify-content-center align-items-center bg-pink-500 border-circle"
5429
+ style="height:3.2rem; width:3.2rem;">
5430
+ <i class="pi pi-fw pi-exclamation-circle text-2xl text-white"></i>
5431
+ </div>
5432
+ <h1 class="text-900 font-bold text-5xl mb-2">Error Occured</h1>
5433
+ <span class="text-600 mb-5">Requested resource is not available.</span>
5434
+ <img alt="Error" class="mb-5" src="assets/demo/images/error/asset-error.svg" width="80%" />
5435
+ <button
5436
+ class="p-button-text"
5437
+ icon="pi pi-arrow-left"
5438
+ id="oip-app-error-go-to-dashboard-button"
5439
+ label="Go to Dashboard"
5440
+ pButton
5441
+ pRipple
5442
+ [routerLink]="['/']"></button>
5443
+ </div>
5444
+ </div>
5445
+ </div>
5446
+ </div>
5447
+ </div>`, isInline: true, dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1$1.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$4.Ripple, selector: "[pRipple]" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
5448
+ }
5449
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ErrorComponent, decorators: [{
5450
+ type: Component,
5451
+ args: [{
5452
+ selector: 'app-error',
5453
+ template: `<div
5454
+ class="surface-ground flex align-items-center justify-content-center min-h-screen min-w-screen overflow-hidden">
5455
+ <div class="flex flex-column align-items-center justify-content-center">
5456
+ <img alt="Sakai logo" class="mb-5 w-6rem flex-shrink-0" src="assets/demo/images/error/logo-error.svg" />
5457
+ <div
5458
+ style="border-radius:56px; padding:0.3rem; background: linear-gradient(180deg, rgba(233, 30, 99, 0.4) 10%, rgba(33, 150, 243, 0) 30%);">
5459
+ <div
5460
+ class="w-full surface-card py-8 px-5 sm:px-8 flex flex-column align-items-center"
5461
+ style="border-radius:53px">
5462
+ <div class="grid flex flex-column align-items-center">
5463
+ <div
5464
+ class="flex justify-content-center align-items-center bg-pink-500 border-circle"
5465
+ style="height:3.2rem; width:3.2rem;">
5466
+ <i class="pi pi-fw pi-exclamation-circle text-2xl text-white"></i>
5467
+ </div>
5468
+ <h1 class="text-900 font-bold text-5xl mb-2">Error Occured</h1>
5469
+ <span class="text-600 mb-5">Requested resource is not available.</span>
5470
+ <img alt="Error" class="mb-5" src="assets/demo/images/error/asset-error.svg" width="80%" />
5471
+ <button
5472
+ class="p-button-text"
5473
+ icon="pi pi-arrow-left"
5474
+ id="oip-app-error-go-to-dashboard-button"
5475
+ label="Go to Dashboard"
5476
+ pButton
5477
+ pRipple
5478
+ [routerLink]="['/']"></button>
5479
+ </div>
5480
+ </div>
5481
+ </div>
5482
+ </div>
4808
5483
  </div>`,
4809
5484
  standalone: true,
4810
5485
  imports: [ButtonModule, RippleModule, RouterLink]
4811
5486
  }]
4812
5487
  }] });
4813
5488
 
4814
- class ProfileComponent {
4815
- constructor() {
5489
+ var profileComponent$1 = {
5490
+ changePhoto: "Upload Photo",
5491
+ successfullyUploaded: "Uploaded successfully",
5492
+ failedToLoadPhoto: "Failed to load user photo",
5493
+ deletePhoto: "Delete Photo",
5494
+ deletePhotoConfirmHeader: "Delete Photo",
5495
+ deletePhotoConfirmMessage: "Are you sure you want to delete your photo?",
5496
+ deletePhotoConfirmRejectButtonPropsLabel: "Cancel",
5497
+ deletePhotoConfirmAcceptButtonPropsLabel: "Delete",
5498
+ photoDeleted: "Photo deleted",
5499
+ failedToDeletePhoto: "Failed to delete user photo"
5500
+ };
5501
+ var en$6 = {
5502
+ profileComponent: profileComponent$1
5503
+ };
5504
+
5505
+ var profileComponent = {
5506
+ changePhoto: "Загрузить фото",
5507
+ successfullyUploaded: "Загружено",
5508
+ failedToLoadPhoto: "Не удалось загрузить фото пользователя",
5509
+ deletePhoto: "Удалить фото",
5510
+ deletePhotoConfirmHeader: "Удаление фото",
5511
+ deletePhotoConfirmMessage: "Вы уверены, что хотите удалить своё фото?",
5512
+ deletePhotoConfirmRejectButtonPropsLabel: "Отмена",
5513
+ deletePhotoConfirmAcceptButtonPropsLabel: "Удалить",
5514
+ photoDeleted: "Фото удалено",
5515
+ failedToDeletePhoto: "Не удалось удалить фото пользователя"
5516
+ };
5517
+ var ru$6 = {
5518
+ profileComponent: profileComponent
5519
+ };
5520
+
5521
+ L10nService.registerTranslations({ en: en$6, ru: ru$6 });
5522
+ class UserProfileComponent {
5523
+ constructor(l10nService) {
4816
5524
  this.userService = inject(UserService);
4817
5525
  this.msgService = inject(MsgService);
4818
5526
  this.translateService = inject(TranslateService);
4819
5527
  this.userProfileApi = inject(UserProfileApi);
5528
+ this.confirmationService = inject(ConfirmationService);
5529
+ l10nService.get('profileComponent');
4820
5530
  }
4821
5531
  async uploadPhoto(event) {
4822
5532
  const file = event.files?.[0];
@@ -4832,15 +5542,46 @@ class ProfileComponent {
4832
5542
  this.msgService.error(error);
4833
5543
  }
4834
5544
  }
4835
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ProfileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4836
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: ProfileComponent, isStandalone: true, selector: "user-profile", ngImport: i0, template: `
5545
+ confirmDeletePhoto(event) {
5546
+ this.confirmationService.confirm({
5547
+ target: event.target,
5548
+ header: this.translateService.instant('profileComponent.deletePhotoConfirmHeader'),
5549
+ message: this.translateService.instant('profileComponent.deletePhotoConfirmMessage'),
5550
+ icon: 'pi pi-trash',
5551
+ rejectButtonProps: {
5552
+ label: this.translateService.instant('profileComponent.deletePhotoConfirmRejectButtonPropsLabel'),
5553
+ severity: 'secondary',
5554
+ outlined: true
5555
+ },
5556
+ acceptButtonProps: {
5557
+ label: this.translateService.instant('profileComponent.deletePhotoConfirmAcceptButtonPropsLabel'),
5558
+ severity: 'danger'
5559
+ },
5560
+ accept: async () => {
5561
+ await this.deletePhoto();
5562
+ }
5563
+ });
5564
+ }
5565
+ async deletePhoto() {
5566
+ try {
5567
+ await this.userProfileApi.deleteUserPhoto();
5568
+ this.userService.refreshUserPhoto();
5569
+ this.msgService.success(this.translateService.instant('profileComponent.photoDeleted'));
5570
+ }
5571
+ catch (error) {
5572
+ this.msgService.errorFromException(error, this.translateService.instant('profileComponent.failedToDeletePhoto'));
5573
+ }
5574
+ }
5575
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileComponent, deps: [{ token: L10nService }], target: i0.ɵɵFactoryTarget.Component }); }
5576
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: UserProfileComponent, isStandalone: true, selector: "user-profile", providers: [ConfirmationService], ngImport: i0, template: `
5577
+ <p-confirmDialog></p-confirmDialog>
4837
5578
  <p-avatar
4838
5579
  class="mr-2"
4839
5580
  id="oip-user-profile-photo-avatar"
4840
5581
  shape="circle"
4841
5582
  size="xlarge"
4842
5583
  [image]="userService.photoLoaded ? userService.photo : null" />
4843
- <div class="mt-2">
5584
+ <div class="mt-2 flex gap-2">
4844
5585
  <p-fileupload
4845
5586
  accept="image/*"
4846
5587
  chooseIcon="pi pi-upload"
@@ -4852,23 +5593,34 @@ class ProfileComponent {
4852
5593
  [auto]="true"
4853
5594
  [customUpload]="true"
4854
5595
  (uploadHandler)="uploadPhoto($event)" />
5596
+ @if (userService.photoLoaded) {
5597
+ <p-button
5598
+ icon="pi pi-trash"
5599
+ id="oip-user-profile-delete-photo"
5600
+ label="{{ 'profileComponent.deletePhoto' | translate }}"
5601
+ severity="danger"
5602
+ [outlined]="true"
5603
+ (onClick)="confirmDeletePhoto($event)" />
5604
+ }
4855
5605
  </div>
4856
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i1$7.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: "pipe", type: TranslatePipe, name: "translate" }] }); }
5606
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FileUploadModule }, { kind: "component", type: i2$6.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: i3$3.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["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" }] }); }
4857
5607
  }
4858
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ProfileComponent, decorators: [{
5608
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: UserProfileComponent, decorators: [{
4859
5609
  type: Component,
4860
5610
  args: [{
4861
5611
  selector: 'user-profile',
4862
5612
  standalone: true,
4863
- imports: [FileUploadModule, ImageModule, AvatarModule, TranslatePipe],
5613
+ imports: [FileUploadModule, ImageModule, AvatarModule, ButtonModule, ConfirmDialog, TranslatePipe],
5614
+ providers: [ConfirmationService],
4864
5615
  template: `
5616
+ <p-confirmDialog></p-confirmDialog>
4865
5617
  <p-avatar
4866
5618
  class="mr-2"
4867
5619
  id="oip-user-profile-photo-avatar"
4868
5620
  shape="circle"
4869
5621
  size="xlarge"
4870
5622
  [image]="userService.photoLoaded ? userService.photo : null" />
4871
- <div class="mt-2">
5623
+ <div class="mt-2 flex gap-2">
4872
5624
  <p-fileupload
4873
5625
  accept="image/*"
4874
5626
  chooseIcon="pi pi-upload"
@@ -4880,11 +5632,61 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
4880
5632
  [auto]="true"
4881
5633
  [customUpload]="true"
4882
5634
  (uploadHandler)="uploadPhoto($event)" />
5635
+ @if (userService.photoLoaded) {
5636
+ <p-button
5637
+ icon="pi pi-trash"
5638
+ id="oip-user-profile-delete-photo"
5639
+ label="{{ 'profileComponent.deletePhoto' | translate }}"
5640
+ severity="danger"
5641
+ [outlined]="true"
5642
+ (onClick)="confirmDeletePhoto($event)" />
5643
+ }
4883
5644
  </div>
4884
5645
  `
4885
5646
  }]
4886
- }] });
5647
+ }], ctorParameters: () => [{ type: L10nService }] });
5648
+
5649
+ var config$1 = {
5650
+ all: "All",
5651
+ applicationManagement: "Application management",
5652
+ dateFormat: "Date format",
5653
+ dateTimeFormat: "Date and time format:",
5654
+ goTo: "Go to",
5655
+ localization: "Localization",
5656
+ menu: "Menu",
5657
+ moduleManagement: "Module management",
5658
+ photo: "Photo",
5659
+ profile: "Profile",
5660
+ selectLanguage: "Select language",
5661
+ timeFormat: "Time format",
5662
+ timeZone: "Time zone",
5663
+ usePhoto256x256Pixel: "Use photo 256x256 pixel"
5664
+ };
5665
+ var en$5 = {
5666
+ config: config$1
5667
+ };
5668
+
5669
+ var config = {
5670
+ all: "Все",
5671
+ applicationManagement: "Управление приложениями",
5672
+ dateFormat: "Формат даты",
5673
+ dateTimeFormat: "Формат даты и времени:",
5674
+ goTo: "Перейти",
5675
+ localization: "Локализация",
5676
+ menu: "Меню",
5677
+ moduleManagement: "Управление модулями",
5678
+ photo: "Фото",
5679
+ profile: "Профиль",
5680
+ selectLanguage: "Выберите язык",
5681
+ timeFormat: "Формат времени",
5682
+ timeZone: "Часовой пояс",
5683
+ usePhoto256x256Pixel: "Используйте фото 256x256 пикселей"
5684
+ };
5685
+ var ru$5 = {
5686
+ config: config
5687
+ };
4887
5688
 
5689
+ L10nService.registerTranslations({ en: en$5, ru: ru$5 });
4888
5690
  class ConfigComponent {
4889
5691
  constructor() {
4890
5692
  this.layoutService = inject(LayoutService);
@@ -4921,8 +5723,8 @@ class ConfigComponent {
4921
5723
  async onSwitchChange() {
4922
5724
  await this.menuService.loadMenu();
4923
5725
  }
4924
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4925
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: ConfigComponent, isStandalone: true, selector: "app-config", ngImport: i0, template: `
5726
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5727
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ConfigComponent, isStandalone: true, selector: "app-config", ngImport: i0, template: `
4926
5728
  <div class="flex flex-col md:flex-row gap-4">
4927
5729
  <div class="md:w-1/2">
4928
5730
  <div class="card flex flex-col gap-4">
@@ -5026,9 +5828,9 @@ class ConfigComponent {
5026
5828
  </div>
5027
5829
  }
5028
5830
  </div>
5029
- `, isInline: true, dependencies: [{ kind: "component", type: ProfileComponent, 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" }] }); }
5831
+ `, 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.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$7.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" }] }); }
5030
5832
  }
5031
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ConfigComponent, decorators: [{
5833
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ConfigComponent, decorators: [{
5032
5834
  type: Component,
5033
5835
  args: [{
5034
5836
  selector: 'app-config',
@@ -5138,7 +5940,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
5138
5940
  </div>
5139
5941
  `,
5140
5942
  imports: [
5141
- ProfileComponent,
5943
+ UserProfileComponent,
5142
5944
  Tooltip,
5143
5945
  FormsModule,
5144
5946
  Select,
@@ -5151,11 +5953,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
5151
5953
  }]
5152
5954
  }], ctorParameters: () => [] });
5153
5955
 
5956
+ var en$4 = {
5957
+ "db-migration": {
5958
+ migrationManager: "Migration manager",
5959
+ actions: {
5960
+ refresh: "Refresh",
5961
+ cleanFilter: "Clean filter",
5962
+ applyMigration: "Apply migration"
5963
+ },
5964
+ columns: {
5965
+ name: "Migration name",
5966
+ applied: "Applied",
5967
+ exist: "Exist",
5968
+ pending: "Pending"
5969
+ },
5970
+ messages: {
5971
+ errorRefreshing: "Error refreshing database"
5972
+ }
5973
+ }
5974
+ };
5975
+
5976
+ var ru$4 = {
5977
+ "db-migration": {
5978
+ migrationManager: "Менеджер миграций",
5979
+ actions: {
5980
+ refresh: "Обновить",
5981
+ cleanFilter: "Очистить фильтр",
5982
+ applyMigration: "Применить миграцию"
5983
+ },
5984
+ columns: {
5985
+ name: "Название миграции",
5986
+ applied: "Применена",
5987
+ exist: "Существует",
5988
+ pending: "Ожидает"
5989
+ },
5990
+ messages: {
5991
+ errorRefreshing: "Ошибка обновления базы данных"
5992
+ }
5993
+ }
5994
+ };
5995
+
5154
5996
  class DbMigrationComponent extends BaseModuleComponent {
5155
- constructor() {
5156
- super();
5157
- this.l10nService.loadComponentTranslations('db-migration');
5158
- }
5997
+ static { this.translations = { en: en$4, ru: ru$4 }; }
5159
5998
  async ngOnInit() {
5160
5999
  await super.ngOnInit();
5161
6000
  await this.refreshAction();
@@ -5177,8 +6016,8 @@ class DbMigrationComponent extends BaseModuleComponent {
5177
6016
  const request = { name: rowData.name };
5178
6017
  return this.applyModuleMigration(request);
5179
6018
  }
5180
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: DbMigrationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5181
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: DbMigrationComponent, isStandalone: true, selector: "db-migration", providers: [ConfirmationService], usesInheritance: true, ngImport: i0, template: `
6019
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DbMigrationComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
6020
+ 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: `
5182
6021
  @if (isContent) {
5183
6022
  <div class="card" style="height: 100%">
5184
6023
  <p-confirmDialog />
@@ -5256,9 +6095,9 @@ class DbMigrationComponent extends BaseModuleComponent {
5256
6095
  } @else if (isSecurity) {
5257
6096
  <security [controller]="controller" [id]="id" />
5258
6097
  }
5259
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$8.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$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$8.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i1$8.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i1$8.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i1$8.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" }] }); }
6098
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$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: i2$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "directive", type: i1$4.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i1$4.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i1$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: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: TextareaModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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" }] }); }
5260
6099
  }
5261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: DbMigrationComponent, decorators: [{
6100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DbMigrationComponent, decorators: [{
5262
6101
  type: Component,
5263
6102
  args: [{
5264
6103
  imports: [
@@ -5356,7 +6195,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
5356
6195
  `,
5357
6196
  providers: [ConfirmationService]
5358
6197
  }]
5359
- }], ctorParameters: () => [] });
6198
+ }] });
5360
6199
 
5361
6200
  /* eslint-disable */
5362
6201
  /* tslint:disable */
@@ -5403,10 +6242,10 @@ class ExtensionModulesApi extends HttpClient {
5403
6242
  ...params,
5404
6243
  });
5405
6244
  }
5406
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ExtensionModulesApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
5407
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ExtensionModulesApi }); }
6245
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtensionModulesApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
6246
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtensionModulesApi }); }
5408
6247
  }
5409
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ExtensionModulesApi, decorators: [{
6248
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtensionModulesApi, decorators: [{
5410
6249
  type: Injectable
5411
6250
  }] });
5412
6251
 
@@ -5447,13 +6286,76 @@ class ModuleApi extends HttpClient {
5447
6286
  ...params,
5448
6287
  });
5449
6288
  }
5450
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ModuleApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
5451
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ModuleApi }); }
6289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ModuleApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
6290
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ModuleApi }); }
5452
6291
  }
5453
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ModuleApi, decorators: [{
6292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ModuleApi, decorators: [{
5454
6293
  type: Injectable
5455
6294
  }] });
5456
6295
 
6296
+ var en$3 = {
6297
+ "app-modules": {
6298
+ title: "Modules",
6299
+ refreshTooltip: "Refresh",
6300
+ register: {
6301
+ manifestUrlPlaceholder: "External module manifest URL",
6302
+ button: "Register"
6303
+ },
6304
+ table: {
6305
+ moduleId: "Module ID",
6306
+ name: "Name",
6307
+ currentlyLoaded: "Currently Loaded",
6308
+ yes: "Yes",
6309
+ no: "No",
6310
+ deleteTooltip: "Delete"
6311
+ },
6312
+ confirm: {
6313
+ header: "Warning",
6314
+ message: "Are you sure you want to delete the module?",
6315
+ cancel: "Cancel",
6316
+ "delete": "Delete"
6317
+ },
6318
+ messages: {
6319
+ deleteSuccess: "Module deleted",
6320
+ deleteError: "Module delete failed",
6321
+ registerError: "External module registration failed",
6322
+ registerSuccess: "External module registered"
6323
+ }
6324
+ }
6325
+ };
6326
+
6327
+ var ru$3 = {
6328
+ "app-modules": {
6329
+ title: "Модули",
6330
+ refreshTooltip: "Обновить",
6331
+ register: {
6332
+ manifestUrlPlaceholder: "URL манифеста внешнего модуля",
6333
+ button: "Зарегистрировать"
6334
+ },
6335
+ table: {
6336
+ moduleId: "ID модуля",
6337
+ name: "Название",
6338
+ currentlyLoaded: "Загружен",
6339
+ yes: "Да",
6340
+ no: "Нет",
6341
+ deleteTooltip: "Удалить"
6342
+ },
6343
+ confirm: {
6344
+ header: "Внимание",
6345
+ message: "Вы уверены, что хотите удалить модуль?",
6346
+ cancel: "Отмена",
6347
+ "delete": "Удалить"
6348
+ },
6349
+ messages: {
6350
+ deleteSuccess: "Модуль удален",
6351
+ deleteError: "Не удалось удалить модуль",
6352
+ registerError: "Не удалось зарегистрировать внешний модуль",
6353
+ registerSuccess: "Внешний модуль зарегистрирован"
6354
+ }
6355
+ }
6356
+ };
6357
+
6358
+ L10nService.registerTranslations({ en: en$3, ru: ru$3 });
5457
6359
  class AppModulesComponent {
5458
6360
  constructor() {
5459
6361
  this.modules = [];
@@ -5531,8 +6433,8 @@ class AppModulesComponent {
5531
6433
  t(key) {
5532
6434
  return this.l10nService.instant(key);
5533
6435
  }
5534
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppModulesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5535
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.24", type: AppModulesComponent, isStandalone: true, selector: "app-modules", providers: [ConfirmationService, ModuleApi, ExtensionModulesApi], ngImport: i0, template: `
6436
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppModulesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6437
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.16", type: AppModulesComponent, isStandalone: true, selector: "app-modules", providers: [ConfirmationService, ModuleApi, ExtensionModulesApi], ngImport: i0, template: `
5536
6438
  <p-confirmDialog></p-confirmDialog>
5537
6439
  <div class="flex flex-col md:flex-row gap-4">
5538
6440
  <div class="card w-full">
@@ -5605,9 +6507,9 @@ class AppModulesComponent {
5605
6507
  </p-table>
5606
6508
  </div>
5607
6509
  </div>
5608
- `, 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$8.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$2.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" }] }); }
6510
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$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: i2$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.Button, selector: "p-button", inputs: ["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$2.Toolbar, selector: "p-toolbar", inputs: ["styleClass", "ariaLabelledBy"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "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$2.InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
5609
6511
  }
5610
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AppModulesComponent, decorators: [{
6512
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AppModulesComponent, decorators: [{
5611
6513
  type: Component,
5612
6514
  args: [{
5613
6515
  imports: [
@@ -5706,6 +6608,103 @@ var ServiceType;
5706
6608
  ServiceType["Application"] = "Application";
5707
6609
  })(ServiceType || (ServiceType = {}));
5708
6610
 
6611
+ var applications$1 = {
6612
+ title: "Applications",
6613
+ subtitle: "Manage the frontend application registry",
6614
+ searchPlaceholder: "Search applications",
6615
+ search: "Search",
6616
+ clear: "Clear",
6617
+ add: "Add",
6618
+ refreshTooltip: "Refresh",
6619
+ empty: "No applications found",
6620
+ table: {
6621
+ code: "Code",
6622
+ displayName: "Name",
6623
+ baseUrl: "Base URL",
6624
+ internalBaseUrl: "Internal Base URL",
6625
+ icon: "Icon",
6626
+ order: "Order",
6627
+ enabled: "Enabled",
6628
+ serviceType: "Service type",
6629
+ current: "Current",
6630
+ actions: "Actions",
6631
+ yes: "Yes",
6632
+ no: "No",
6633
+ editTooltip: "Edit",
6634
+ deleteTooltip: "Delete",
6635
+ saveTooltip: "Save",
6636
+ cancelTooltip: "Cancel"
6637
+ },
6638
+ serviceTypes: {
6639
+ service: "Service",
6640
+ application: "Application"
6641
+ },
6642
+ confirm: {
6643
+ header: "Warning",
6644
+ message: "Are you sure you want to delete application {{displayName}}?",
6645
+ cancel: "Cancel",
6646
+ "delete": "Delete"
6647
+ },
6648
+ messages: {
6649
+ requiredFields: "Fill code, name and Base URL",
6650
+ createSuccess: "Application created",
6651
+ updateSuccess: "Application updated",
6652
+ deleteSuccess: "Application deleted"
6653
+ }
6654
+ };
6655
+ var en$2 = {
6656
+ applications: applications$1
6657
+ };
6658
+
6659
+ var applications = {
6660
+ title: "Приложения",
6661
+ subtitle: "Управление реестром фронтенд-приложений",
6662
+ searchPlaceholder: "Поиск по приложениям",
6663
+ search: "Найти",
6664
+ clear: "Очистить",
6665
+ add: "Добавить",
6666
+ refreshTooltip: "Обновить",
6667
+ empty: "Приложения не найдены",
6668
+ table: {
6669
+ code: "Код",
6670
+ displayName: "Название",
6671
+ baseUrl: "Base URL",
6672
+ internalBaseUrl: "Internal Base URL",
6673
+ icon: "Иконка",
6674
+ order: "Порядок",
6675
+ enabled: "Включено",
6676
+ serviceType: "Тип сервиса",
6677
+ current: "Текущее",
6678
+ actions: "Действия",
6679
+ yes: "Да",
6680
+ no: "Нет",
6681
+ editTooltip: "Редактировать",
6682
+ deleteTooltip: "Удалить",
6683
+ saveTooltip: "Сохранить",
6684
+ cancelTooltip: "Отменить"
6685
+ },
6686
+ serviceTypes: {
6687
+ service: "Сервис",
6688
+ application: "Приложение"
6689
+ },
6690
+ confirm: {
6691
+ header: "Внимание",
6692
+ message: "Вы уверены, что хотите удалить приложение {{displayName}}?",
6693
+ cancel: "Отмена",
6694
+ "delete": "Удалить"
6695
+ },
6696
+ messages: {
6697
+ requiredFields: "Заполните код, название и Base URL",
6698
+ createSuccess: "Приложение создано",
6699
+ updateSuccess: "Приложение обновлено",
6700
+ deleteSuccess: "Приложение удалено"
6701
+ }
6702
+ };
6703
+ var ru$2 = {
6704
+ applications: applications
6705
+ };
6706
+
6707
+ L10nService.registerTranslations({ en: en$2, ru: ru$2 });
5709
6708
  class ApplicationsComponent {
5710
6709
  get serviceTypeOptions() {
5711
6710
  return [
@@ -5927,8 +6926,8 @@ class ApplicationsComponent {
5927
6926
  t(key, params) {
5928
6927
  return this.l10nService.instant(key, params);
5929
6928
  }
5930
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ApplicationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5931
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: ApplicationsComponent, isStandalone: true, selector: "app-applications", providers: [ApplicationsApi, ConfirmationService], ngImport: i0, template: `
6929
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6930
+ 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: `
5932
6931
  <p-confirmDialog></p-confirmDialog>
5933
6932
  <div class="flex flex-col gap-4">
5934
6933
  <div class="card w-full">
@@ -6158,9 +7157,9 @@ class ApplicationsComponent {
6158
7157
  </p-table>
6159
7158
  </div>
6160
7159
  </div>
6161
- `, 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$8.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$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$8.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i1$8.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" }] }); }
7160
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i1$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: i2$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i1$4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i1$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$1.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$2.Toolbar, selector: "p-toolbar", inputs: ["styleClass", "ariaLabelledBy"] }, { kind: "directive", type: Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "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$1.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: ToggleSwitchModule }, { kind: "component", type: i2$7.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" }] }); }
6162
7161
  }
6163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ApplicationsComponent, decorators: [{
7162
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ApplicationsComponent, decorators: [{
6164
7163
  type: Component,
6165
7164
  args: [{
6166
7165
  imports: [
@@ -6512,10 +7511,10 @@ class DiscussionApi extends HttpClient {
6512
7511
  ...params,
6513
7512
  });
6514
7513
  }
6515
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: DiscussionApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
6516
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: DiscussionApi }); }
7514
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DiscussionApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
7515
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DiscussionApi }); }
6517
7516
  }
6518
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: DiscussionApi, decorators: [{
7517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DiscussionApi, decorators: [{
6519
7518
  type: Injectable
6520
7519
  }] });
6521
7520
 
@@ -6532,8 +7531,97 @@ function getInitialsFromString(input) {
6532
7531
  return firstInitial + lastInitial;
6533
7532
  }
6534
7533
 
7534
+ var discussionComponent$1 = {
7535
+ writeCommentPlaceholder: "Write a comment. Use @email or @first.last for mentions.",
7536
+ mentionSuggestions: "Mention suggestions",
7537
+ edit: "Edit",
7538
+ preview: "Preview",
7539
+ attachFiles: "Attach files",
7540
+ send: "Send",
7541
+ loadingComments: "Loading comments...",
7542
+ noCommentsYet: "No comments yet.",
7543
+ edited: "Edited",
7544
+ editCommentPlaceholder: "Edit comment",
7545
+ addAttachment: "Add attachment",
7546
+ save: "Save",
7547
+ cancel: "Cancel",
7548
+ editHistory: "Edit history",
7549
+ loadingHistory: "Loading history...",
7550
+ before: "Before",
7551
+ after: "After",
7552
+ warning: "Warning",
7553
+ "delete": "Delete",
7554
+ confirmDeleteComment: "Are you sure you want to delete this comment?",
7555
+ confirmDeleteFile: "Are you sure you want to delete the file \"{{fileName}}\"?",
7556
+ units: {
7557
+ bytes: "B",
7558
+ kilobytes: "KB",
7559
+ megabytes: "MB"
7560
+ },
7561
+ errors: {
7562
+ loadComments: "Failed to load comments.",
7563
+ createComment: "Failed to create comment.",
7564
+ updateComment: "Failed to update comment.",
7565
+ loadEditHistory: "Failed to load edit history.",
7566
+ uploadAttachment: "Failed to upload attachment.",
7567
+ deleteComment: "Failed to delete comment.",
7568
+ deleteAttachment: "Failed to delete attachment.",
7569
+ downloadAttachment: "Failed to download attachment.",
7570
+ updateReaction: "Failed to update reaction.",
7571
+ addReaction: "Failed to add reaction."
7572
+ }
7573
+ };
7574
+ var en$1 = {
7575
+ discussionComponent: discussionComponent$1
7576
+ };
7577
+
7578
+ var discussionComponent = {
7579
+ writeCommentPlaceholder: "Напишите комментарий. Используйте @email или @first.last для упоминаний.",
7580
+ mentionSuggestions: "Варианты упоминаний",
7581
+ edit: "Редактировать",
7582
+ preview: "Предпросмотр",
7583
+ attachFiles: "Прикрепить файлы",
7584
+ send: "Отправить",
7585
+ loadingComments: "Загрузка комментариев...",
7586
+ noCommentsYet: "Комментариев пока нет.",
7587
+ edited: "Изменено",
7588
+ editCommentPlaceholder: "Изменить комментарий",
7589
+ addAttachment: "Добавить вложение",
7590
+ save: "Сохранить",
7591
+ cancel: "Отмена",
7592
+ editHistory: "История изменений",
7593
+ loadingHistory: "Загрузка истории...",
7594
+ before: "До",
7595
+ after: "После",
7596
+ warning: "Предупреждение",
7597
+ "delete": "Удалить",
7598
+ confirmDeleteComment: "Вы уверены, что хотите удалить этот комментарий?",
7599
+ confirmDeleteFile: "Вы уверены, что хотите удалить файл \"{{fileName}}\"?",
7600
+ units: {
7601
+ bytes: "Б",
7602
+ kilobytes: "КБ",
7603
+ megabytes: "МБ"
7604
+ },
7605
+ errors: {
7606
+ loadComments: "Не удалось загрузить комментарии.",
7607
+ createComment: "Не удалось создать комментарий.",
7608
+ updateComment: "Не удалось обновить комментарий.",
7609
+ loadEditHistory: "Не удалось загрузить историю изменений.",
7610
+ uploadAttachment: "Не удалось загрузить вложение.",
7611
+ deleteComment: "Не удалось удалить комментарий.",
7612
+ deleteAttachment: "Не удалось удалить вложение.",
7613
+ downloadAttachment: "Не удалось скачать вложение.",
7614
+ updateReaction: "Не удалось обновить реакцию.",
7615
+ addReaction: "Не удалось добавить реакцию."
7616
+ }
7617
+ };
7618
+ var ru$1 = {
7619
+ discussionComponent: discussionComponent
7620
+ };
7621
+
7622
+ L10nService.registerTranslations({ en: en$1, ru: ru$1 });
6535
7623
  class DiscussionComponent {
6536
- constructor() {
7624
+ constructor(l10nService) {
6537
7625
  this.msgService = inject(MsgService);
6538
7626
  this.discussionApi = inject(DiscussionApi);
6539
7627
  this.sanitizer = inject(DomSanitizer);
@@ -6556,6 +7644,7 @@ class DiscussionComponent {
6556
7644
  this.emojiPalette = ['👍', '👎', '🐳', '🍆', '🍑'];
6557
7645
  this.mentionSearchTimer = null;
6558
7646
  this.getInitialsFromString = getInitialsFromString;
7647
+ l10nService.get('discussionComponent');
6559
7648
  }
6560
7649
  ngOnChanges(changes) {
6561
7650
  if ((changes['objectTypeId'] || changes['objectId']) && this.objectTypeId && this.objectId) {
@@ -6932,8 +8021,8 @@ class DiscussionComponent {
6932
8021
  const match = value.match(/@([A-Za-z0-9._+\-@]*)$/);
6933
8022
  return match?.[1] ?? null;
6934
8023
  }
6935
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: DiscussionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6936
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: DiscussionComponent, isStandalone: true, selector: "discussion", inputs: { objectTypeId: "objectTypeId", objectId: "objectId" }, providers: [ConfirmationService, DiscussionApi], usesOnChanges: true, ngImport: i0, template: `
8024
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DiscussionComponent, deps: [{ token: L10nService }], target: i0.ɵɵFactoryTarget.Component }); }
8025
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DiscussionComponent, isStandalone: true, selector: "discussion", inputs: { objectTypeId: "objectTypeId", objectId: "objectId" }, providers: [ConfirmationService, DiscussionApi], usesOnChanges: true, ngImport: i0, template: `
6937
8026
  <p-confirmDialog />
6938
8027
 
6939
8028
  <section class="flex flex-col gap-4">
@@ -7247,9 +8336,9 @@ class DiscussionComponent {
7247
8336
  </div>
7248
8337
  }
7249
8338
  </section>
7250
- `, 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: i2$2.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 }); }
8339
+ `, 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.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i3$3.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }, { kind: "directive", type: i2$2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1$1.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: i6.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: i7.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: i8.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: i5.ProgressSpinner, selector: "p-progressSpinner, p-progress-spinner, p-progressspinner", inputs: ["styleClass", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i10.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: i2$1.DatePipe, name: "date" }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7251
8340
  }
7252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: DiscussionComponent, decorators: [{
8341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DiscussionComponent, decorators: [{
7253
8342
  type: Component,
7254
8343
  args: [{ selector: 'discussion', standalone: true, providers: [ConfirmationService, DiscussionApi], imports: [
7255
8344
  CommonModule,
@@ -7581,7 +8670,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
7581
8670
  }
7582
8671
  </section>
7583
8672
  `, changeDetection: ChangeDetectionStrategy.OnPush, 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"] }]
7584
- }], propDecorators: { objectTypeId: [{
8673
+ }], ctorParameters: () => [{ type: L10nService }], propDecorators: { objectTypeId: [{
7585
8674
  type: Input,
7586
8675
  args: [{ required: true }]
7587
8676
  }], objectId: [{
@@ -7589,13 +8678,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
7589
8678
  args: [{ required: true }]
7590
8679
  }] } });
7591
8680
 
8681
+ var en = {
8682
+ "iframe-module": {
8683
+ iframeModule: {
8684
+ urlPlaceholder: "Site URL",
8685
+ settingSaveButtonLabel: "Save",
8686
+ emptyUrlMessage: "Site URL is not specified.",
8687
+ siteLoadingMessage: "Failed to load the site."
8688
+ }
8689
+ }
8690
+ };
8691
+
8692
+ var ru = {
8693
+ "iframe-module": {
8694
+ iframeModule: {
8695
+ urlPlaceholder: "URL сайта",
8696
+ settingSaveButtonLabel: "Сохранить",
8697
+ emptyUrlMessage: "URL сайта не указан.",
8698
+ siteLoadingMessage: "Не удалось загрузить сайт."
8699
+ }
8700
+ }
8701
+ };
8702
+
7592
8703
  class IframeModuleComponent extends BaseModuleComponent {
8704
+ static { this.translations = { en, ru }; }
7593
8705
  constructor() {
7594
8706
  super();
7595
8707
  this.renderer = inject(Renderer2);
7596
8708
  this.translate = inject(TranslateService);
7597
8709
  this.iframeUrl = null;
7598
- this.l10nService.loadComponentTranslations('iframe-module');
7599
8710
  }
7600
8711
  set iframeElement(element) {
7601
8712
  this.iframe = element;
@@ -7646,8 +8757,8 @@ class IframeModuleComponent extends BaseModuleComponent {
7646
8757
  const errorMessage = this.translate.instant('iframe-module.iframeModule.siteLoadingMessage');
7647
8758
  this.msgService.error(errorMessage);
7648
8759
  }
7649
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: IframeModuleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7650
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: IframeModuleComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "iframeElement", first: true, predicate: ["iframe"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
8760
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IframeModuleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8761
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IframeModuleComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "iframeElement", first: true, predicate: ["iframe"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
7651
8762
  @if (isContent) {
7652
8763
  <iframe
7653
8764
  #iframe
@@ -7684,9 +8795,9 @@ class IframeModuleComponent extends BaseModuleComponent {
7684
8795
  } @else if (isSecurity) {
7685
8796
  <security [controller]="controller" [id]="id" />
7686
8797
  }
7687
- `, isInline: true, dependencies: [{ kind: "component", type: SecurityComponent, selector: "security", inputs: ["id", "controller"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { 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: 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: "pipe", type: TranslatePipe, name: "translate" }] }); }
8798
+ `, isInline: true, dependencies: [{ kind: "component", type: SecurityComponent, selector: "security", inputs: ["id", "controller"] }, { kind: "directive", type: InputText, selector: "[pInputText]", inputs: ["hostName", "ptInputText", "pSize", "variant", "fluid", "invalid"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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: "pipe", type: TranslatePipe, name: "translate" }] }); }
7688
8799
  }
7689
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: IframeModuleComponent, decorators: [{
8800
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IframeModuleComponent, decorators: [{
7690
8801
  type: Component,
7691
8802
  args: [{
7692
8803
  standalone: true,
@@ -7786,10 +8897,10 @@ class ExtensionLoaderService {
7786
8897
  this.loadedScripts.set(scriptUrl, loadPromise);
7787
8898
  return loadPromise;
7788
8899
  }
7789
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ExtensionLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
7790
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ExtensionLoaderService, providedIn: 'root' }); }
8900
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtensionLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8901
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtensionLoaderService, providedIn: 'root' }); }
7791
8902
  }
7792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ExtensionLoaderService, decorators: [{
8903
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtensionLoaderService, decorators: [{
7793
8904
  type: Injectable,
7794
8905
  args: [{ providedIn: 'root' }]
7795
8906
  }] });
@@ -8019,8 +9130,8 @@ class CustomElementExtensionModuleHostComponent extends BaseModuleComponent {
8019
9130
  this.container.nativeElement.appendChild(element);
8020
9131
  this.updateExtensionContext();
8021
9132
  }
8022
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: CustomElementExtensionModuleHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8023
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: CustomElementExtensionModuleHostComponent, isStandalone: true, selector: "ng-component", providers: [ExtensionModulesApi], viewQueries: [{ propertyName: "extensionContainer", first: true, predicate: ["extensionContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
9133
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomElementExtensionModuleHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: CustomElementExtensionModuleHostComponent, isStandalone: true, selector: "ng-component", providers: [ExtensionModulesApi], viewQueries: [{ propertyName: "extensionContainer", first: true, predicate: ["extensionContainer"], descendants: true }], usesInheritance: true, ngImport: i0, template: `
8024
9135
  @if (showContent) {
8025
9136
  <div class="min-h-[calc(100vh-10rem)] w-full">
8026
9137
  @if (loadError) {
@@ -8046,7 +9157,7 @@ class CustomElementExtensionModuleHostComponent extends BaseModuleComponent {
8046
9157
  }
8047
9158
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: SecurityComponent, selector: "security", inputs: ["id", "controller"] }, { 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: "pipe", type: TranslatePipe, name: "translate" }] }); }
8048
9159
  }
8049
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: CustomElementExtensionModuleHostComponent, decorators: [{
9160
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomElementExtensionModuleHostComponent, decorators: [{
8050
9161
  type: Component,
8051
9162
  args: [{
8052
9163
  standalone: true,
@@ -8258,8 +9369,8 @@ class ExtensionModuleHostComponent extends BaseModuleComponent {
8258
9369
  const baseUrl = document.getElementsByTagName('base')[0]?.href ?? `${window.location.origin}/`;
8259
9370
  return `${baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`}${path}`;
8260
9371
  }
8261
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ExtensionModuleHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8262
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.24", type: ExtensionModuleHostComponent, isStandalone: true, selector: "ng-component", providers: [ExtensionModulesApi], viewQueries: [{ propertyName: "extensionViewContainer", first: true, predicate: ["extensionContainer"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: `
9372
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtensionModuleHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9373
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: ExtensionModuleHostComponent, isStandalone: true, selector: "ng-component", providers: [ExtensionModulesApi], viewQueries: [{ propertyName: "extensionViewContainer", first: true, predicate: ["extensionContainer"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: `
8263
9374
  @if (loadError) {
8264
9375
  <div class="card flex flex-col gap-4">
8265
9376
  <div class="font-semibold text-xl">{{ loadError }}</div>
@@ -8270,7 +9381,7 @@ class ExtensionModuleHostComponent extends BaseModuleComponent {
8270
9381
  }
8271
9382
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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"] }] }); }
8272
9383
  }
8273
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: ExtensionModuleHostComponent, decorators: [{
9384
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ExtensionModuleHostComponent, decorators: [{
8274
9385
  type: Component,
8275
9386
  args: [{
8276
9387
  standalone: true,
@@ -8319,13 +9430,110 @@ class AuthGuardService {
8319
9430
  return false;
8320
9431
  }));
8321
9432
  }
8322
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AuthGuardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8323
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AuthGuardService }); }
9433
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthGuardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
9434
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthGuardService }); }
8324
9435
  }
8325
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: AuthGuardService, decorators: [{
9436
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: AuthGuardService, decorators: [{
8326
9437
  type: Injectable
8327
9438
  }] });
8328
9439
 
9440
+ /**
9441
+ * Reads the rights the current user has on a module instance.
9442
+ *
9443
+ * Results are cached per instance and dropped whenever the authenticated user changes.
9444
+ */
9445
+ class ModuleInstanceRightsService {
9446
+ static { this.readRight = 'read'; }
9447
+ constructor() {
9448
+ this.menuApi = inject(MenuApi);
9449
+ this.securityService = inject(SecurityService);
9450
+ this.cache = new Map();
9451
+ this.cachedIdentity = undefined;
9452
+ this.securityService.payload.subscribe((payload) => {
9453
+ // Rights depend on both the user and the roles of the current session.
9454
+ const roles = payload?.realm_access?.roles ?? [];
9455
+ const identity = `${payload?.preferred_username ?? ''}|${[...roles].sort().join(',')}`;
9456
+ if (identity !== this.cachedIdentity) {
9457
+ this.cachedIdentity = identity;
9458
+ this.clearCache();
9459
+ }
9460
+ });
9461
+ }
9462
+ /**
9463
+ * Gets the rights of the current user on the given module instance.
9464
+ */
9465
+ getRights(moduleInstanceId) {
9466
+ const cached = this.cache.get(moduleInstanceId);
9467
+ if (cached) {
9468
+ return cached;
9469
+ }
9470
+ const request = this.menuApi
9471
+ .getModuleInstanceRights({ id: moduleInstanceId })
9472
+ .then((rights) => rights ?? [])
9473
+ .catch((error) => {
9474
+ this.cache.delete(moduleInstanceId);
9475
+ throw error;
9476
+ });
9477
+ this.cache.set(moduleInstanceId, request);
9478
+ return request;
9479
+ }
9480
+ /**
9481
+ * Checks whether the current user has the `read` right on the given module instance.
9482
+ */
9483
+ async canRead(moduleInstanceId) {
9484
+ const rights = await this.getRights(moduleInstanceId);
9485
+ return rights.includes(ModuleInstanceRightsService.readRight);
9486
+ }
9487
+ /**
9488
+ * Drops every cached result, for example after module security was changed.
9489
+ */
9490
+ clearCache() {
9491
+ this.cache.clear();
9492
+ }
9493
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ModuleInstanceRightsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
9494
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ModuleInstanceRightsService }); }
9495
+ }
9496
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: ModuleInstanceRightsService, decorators: [{
9497
+ type: Injectable
9498
+ }], ctorParameters: () => [] });
9499
+
9500
+ /**
9501
+ * Guards module routes against direct navigation without the required rights.
9502
+ *
9503
+ * - Routes flagged with `data: { requireAdmin: true }` require the `admin` role.
9504
+ * - Routes carrying an `:id` segment require the `read` right on that module instance.
9505
+ * - Everything else is left to {@link AuthGuardService}.
9506
+ *
9507
+ * Denied navigation is redirected to the access denied page. This is a UX guard only:
9508
+ * the backend checks the same rights on every module endpoint.
9509
+ */
9510
+ const moduleAccessGuard = async (route) => {
9511
+ const router = inject(Router);
9512
+ const securityService = inject(SecurityService);
9513
+ const rightsService = inject(ModuleInstanceRightsService);
9514
+ const accessDenied = router.parseUrl('/access');
9515
+ if (route.data?.requireAdmin) {
9516
+ // Wait for the session payload so a direct URL entry does not read roles before they are loaded.
9517
+ await firstValueFrom(securityService.payload.pipe(filter((payload) => payload != null), take(1)));
9518
+ return securityService.isAdmin() ? true : accessDenied;
9519
+ }
9520
+ const routeId = route.paramMap.get('id');
9521
+ if (routeId == null) {
9522
+ return true;
9523
+ }
9524
+ const moduleInstanceId = Number(routeId);
9525
+ if (!Number.isFinite(moduleInstanceId)) {
9526
+ return accessDenied;
9527
+ }
9528
+ try {
9529
+ return (await rightsService.canRead(moduleInstanceId)) ? true : accessDenied;
9530
+ }
9531
+ catch (error) {
9532
+ console.error('Failed to load module instance rights', error);
9533
+ return accessDenied;
9534
+ }
9535
+ };
9536
+
8329
9537
  /**
8330
9538
  * Prime-ng table filter service
8331
9539
  */
@@ -8377,10 +9585,10 @@ class TableFilterService {
8377
9585
  }
8378
9586
  this.updateFiltersState(filters);
8379
9587
  }
8380
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: TableFilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
8381
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: TableFilterService }); }
9588
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TableFilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
9589
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TableFilterService }); }
8382
9590
  }
8383
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: TableFilterService, decorators: [{
9591
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: TableFilterService, decorators: [{
8384
9592
  type: Injectable
8385
9593
  }] });
8386
9594
 
@@ -8471,12 +9679,14 @@ function provideOip() {
8471
9679
  { provide: LocationStrategy, useClass: PathLocationStrategy },
8472
9680
  { provide: SecurityService, useClass: BffSecurityService },
8473
9681
  AuthGuardService,
9682
+ ModuleInstanceRightsService,
8474
9683
  MessageService,
8475
9684
  UserService,
8476
9685
  NotificationService,
8477
9686
  UserProfileApi,
8478
9687
  SecurityApi,
8479
9688
  NotificationApi,
9689
+ MenuApi,
8480
9690
  importProvidersFrom([
8481
9691
  TranslateModule.forRoot({
8482
9692
  loader: {
@@ -8495,19 +9705,18 @@ function provideOip() {
8495
9705
  class FolderModuleApi extends HttpClient {
8496
9706
  constructor() {
8497
9707
  super(...arguments);
8498
- this.getModuleInstanceSettings = (query, params = {}) => this.request({
9708
+ this.getModuleInstanceSettings = (params = {}) => this.request({
8499
9709
  path: `/api/folder-module/get-module-instance-settings`,
8500
9710
  method: "GET",
8501
- query: query,
8502
9711
  secure: true,
8503
9712
  format: "json",
8504
9713
  ...params,
8505
9714
  });
8506
9715
  }
8507
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: FolderModuleApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
8508
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: FolderModuleApi }); }
9716
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FolderModuleApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
9717
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FolderModuleApi }); }
8509
9718
  }
8510
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: FolderModuleApi, decorators: [{
9719
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: FolderModuleApi, decorators: [{
8511
9720
  type: Injectable
8512
9721
  }] });
8513
9722
 
@@ -8517,19 +9726,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
8517
9726
  class IframeModuleApi extends HttpClient {
8518
9727
  constructor() {
8519
9728
  super(...arguments);
8520
- this.getModuleInstanceSettings = (query, params = {}) => this.request({
9729
+ this.getModuleInstanceSettings = (params = {}) => this.request({
8521
9730
  path: `/api/iframe-module/get-module-instance-settings`,
8522
9731
  method: "GET",
8523
- query: query,
8524
9732
  secure: true,
8525
9733
  format: "json",
8526
9734
  ...params,
8527
9735
  });
8528
9736
  }
8529
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: IframeModuleApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
8530
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: IframeModuleApi }); }
9737
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IframeModuleApi, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
9738
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IframeModuleApi }); }
8531
9739
  }
8532
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImport: i0, type: IframeModuleApi, decorators: [{
9740
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IframeModuleApi, decorators: [{
8533
9741
  type: Injectable
8534
9742
  }] });
8535
9743
 
@@ -8539,5 +9747,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.24", ngImpo
8539
9747
  * Generated bundle index. Do not edit.
8540
9748
  */
8541
9749
 
8542
- export { APP_THEME_PRESETS, APP_THEME_PRESETS_MERGE_MODE, AppConfiguratorComponent, AppFloatingConfiguratorComponent, AppLayoutComponent, AppModulesComponent, AppTopbar, AppTopbarApplicationSwitcherComponent, ApplicationRegistryService, ApplicationsApi, ApplicationsComponent, AuthGuardService, BaseModuleComponent, BffSecurityService, ConfigComponent, ContentType, CustomElementExtensionModuleHostComponent, DbMigrationComponent, DiscussionComponent, ErrorComponent, ExtensionLoaderService, ExtensionModuleHostComponent, FolderModuleApi, FooterComponent, HttpClient, IframeModuleApi, IframeModuleComponent, L10nService, LOGO_COMPONENT_TOKEN, LayoutService, LogoComponent, LogoService, MenuComponent, MenuService, MsgService, NotfoundComponent, NotificationApi, NotificationService, OIP_EXTENSION_EVENTS, ProfileComponent, SecurityApi, SecurityComponent, SecurityService, SidebarComponent, TableFilterService, TopBarService, UnauthorizedComponent, UserNotificationsComponent, UserProfileApi, UserService, convertToPrimeNgDateFormat, defaultTheme, emitOipContextChange, emitOipError, emitOipNavigate, emitOipNotify, emitOipSettingsChange, emitOipTitleChange, langIntercept, mergeWithDefaults, provideAppThemes, provideLogoComponent, provideOip, replaceDefaults };
9750
+ export { APP_THEME_PRESETS, APP_THEME_PRESETS_MERGE_MODE, AccessComponent, AppConfiguratorComponent, AppFloatingConfiguratorComponent, AppLayoutComponent, AppModulesComponent, AppTopbar, AppTopbarApplicationSwitcherComponent, ApplicationRegistryService, ApplicationsApi, ApplicationsComponent, AuthGuardService, BaseModuleComponent, BffSecurityService, ConfigComponent, ContentType, CustomElementExtensionModuleHostComponent, DbMigrationComponent, DiscussionComponent, ErrorComponent, ExtensionLoaderService, ExtensionModuleHostComponent, FolderModuleApi, FooterComponent, HttpClient, IframeModuleApi, IframeModuleComponent, L10nService, LOGO_COMPONENT_TOKEN, LayoutService, LogoComponent, LogoService, MenuComponent, MenuService, ModuleInstanceRightsService, MsgService, NotfoundComponent, NotificationApi, NotificationService, OIP_EXTENSION_EVENTS, SecurityApi, SecurityComponent, SecurityService, SidebarComponent, TableFilterService, TopBarService, UnauthorizedComponent, UserNotificationsComponent, UserProfileApi, UserProfileComponent, UserService, convertToPrimeNgDateFormat, defaultTheme, emitOipContextChange, emitOipError, emitOipNavigate, emitOipNotify, emitOipSettingsChange, emitOipTitleChange, langIntercept, mergeWithDefaults, moduleAccessGuard, provideAppThemes, provideLogoComponent, provideOip, replaceDefaults };
8543
9751
  //# sourceMappingURL=oip-common.mjs.map