@esfaenza/core 15.2.42-beta1 → 15.2.42-beta3

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 (117) hide show
  1. package/components/components.module.d.ts +26 -16
  2. package/components/operations/ops-menu/ops-menu.component.d.ts +6 -0
  3. package/components/operations/ops-menu-category/ops-menu-category.component.d.ts +8 -0
  4. package/components/operations/ops-menu-operation/ops-menu-operation.component.d.ts +9 -0
  5. package/components/{sidebar → page-structure/sidebar}/sidebar.component.d.ts +6 -9
  6. package/components/page-structure/user-infos/user-infos.component.d.ts +63 -0
  7. package/components/page-structure/user-infos/user-infos.component.loc.d.ts +8 -0
  8. package/components/public-api.d.ts +25 -15
  9. package/components/search/es-filters/es-filters.component.d.ts +27 -0
  10. package/components/search/es-filters/es-filters.service.d.ts +6 -0
  11. package/components/search/filters-sidebar/filters-sidebar.component.d.ts +20 -0
  12. package/components/search/filters-sidebar-item/filters-sidebar-item.component.d.ts +16 -0
  13. package/components/search/filters-sidebar-section/filters-sidebar-section.component.d.ts +9 -0
  14. package/components/search/filters-topbar/filters-topbar.component.d.ts +38 -0
  15. package/components/span/labeled-span/labeled-span.component.d.ts +11 -0
  16. package/domain/models/decorators/decorators.d.ts +1 -0
  17. package/domain/models/user/UpdateAccountRecoverySettingsDto.d.ts +5 -0
  18. package/domain/models/user/UpdatePasswordDto.d.ts +9 -0
  19. package/domain/models/user/UpdateProfilePictureDto.d.ts +4 -0
  20. package/domain/public-api.d.ts +4 -0
  21. package/esm2020/components/components.module.mjs +90 -20
  22. package/esm2020/components/operations/ops-menu/ops-menu.component.mjs +12 -0
  23. package/esm2020/components/operations/ops-menu-category/ops-menu-category.component.mjs +21 -0
  24. package/esm2020/components/operations/ops-menu-operation/ops-menu-operation.component.mjs +19 -0
  25. package/esm2020/components/page-structure/back-top/back-top.component.mjs +43 -0
  26. package/esm2020/components/page-structure/base/base.component.mjs +55 -0
  27. package/esm2020/components/page-structure/base/reactive.component.mjs +26 -0
  28. package/esm2020/components/page-structure/breadcrumb/breadcrumb.component.mjs +70 -0
  29. package/esm2020/components/page-structure/error/404/pagenotfound.component.mjs +30 -0
  30. package/esm2020/components/page-structure/error/500/servererror.component.mjs +39 -0
  31. package/esm2020/components/page-structure/error/Angular/angularerror.component.mjs +55 -0
  32. package/esm2020/components/page-structure/external-page/external_pages.component.mjs +47 -0
  33. package/esm2020/components/{jace-login → page-structure/jace-login}/jace-login.component.mjs +1 -1
  34. package/esm2020/components/page-structure/jace-resource/jace-resource.component.mjs +65 -0
  35. package/esm2020/components/page-structure/navbar/modules-board/jace-modules-board.component.mjs +40 -0
  36. package/esm2020/components/page-structure/navbar/navbar.component.loc.mjs +36 -0
  37. package/esm2020/components/page-structure/navbar/navbar.component.mjs +161 -0
  38. package/esm2020/components/page-structure/page/pages.component.mjs +60 -0
  39. package/esm2020/components/page-structure/redirecter/redirecter.component.mjs +53 -0
  40. package/esm2020/components/page-structure/sidebar/sidebar.component.mjs +294 -0
  41. package/esm2020/components/page-structure/user-infos/user-infos.component.loc.mjs +43 -0
  42. package/esm2020/components/page-structure/user-infos/user-infos.component.mjs +160 -0
  43. package/esm2020/components/public-api.mjs +26 -16
  44. package/esm2020/components/search/es-filters/es-filters.component.mjs +56 -0
  45. package/esm2020/components/search/es-filters/es-filters.service.mjs +19 -0
  46. package/esm2020/components/search/filters-sidebar/filters-sidebar.component.mjs +65 -0
  47. package/esm2020/components/search/filters-sidebar-item/filters-sidebar-item.component.mjs +39 -0
  48. package/esm2020/components/search/filters-sidebar-section/filters-sidebar-section.component.mjs +22 -0
  49. package/esm2020/components/search/filters-topbar/filters-topbar.component.mjs +94 -0
  50. package/esm2020/components/span/labeled-span/labeled-span.component.mjs +25 -0
  51. package/esm2020/domain/models/decorators/decorators.mjs +6 -0
  52. package/esm2020/domain/models/user/UpdateAccountRecoverySettingsDto.mjs +7 -0
  53. package/esm2020/domain/models/user/UpdatePasswordDto.mjs +11 -0
  54. package/esm2020/domain/models/user/UpdateProfilePictureDto.mjs +6 -0
  55. package/esm2020/domain/public-api.mjs +5 -1
  56. package/esm2020/lib/app.component.mjs +2 -2
  57. package/esm2020/lib/core.module.mjs +7 -4
  58. package/esm2020/pipes/pipes.module.mjs +1 -1
  59. package/esm2020/services/classes/preferences/app.preference.persistor.mjs +1 -1
  60. package/esm2020/services/classes/preferences/user/app.userpreferences.base.mjs +68 -0
  61. package/esm2020/services/public-api.mjs +2 -1
  62. package/fesm2015/esfaenza-core-components.mjs +664 -75
  63. package/fesm2015/esfaenza-core-components.mjs.map +1 -1
  64. package/fesm2015/esfaenza-core-domain.mjs +31 -1
  65. package/fesm2015/esfaenza-core-domain.mjs.map +1 -1
  66. package/fesm2015/esfaenza-core-pipes.mjs.map +1 -1
  67. package/fesm2015/esfaenza-core-services.mjs +77 -5
  68. package/fesm2015/esfaenza-core-services.mjs.map +1 -1
  69. package/fesm2015/esfaenza-core.mjs +8 -5
  70. package/fesm2015/esfaenza-core.mjs.map +1 -1
  71. package/fesm2020/esfaenza-core-components.mjs +653 -75
  72. package/fesm2020/esfaenza-core-components.mjs.map +1 -1
  73. package/fesm2020/esfaenza-core-domain.mjs +31 -1
  74. package/fesm2020/esfaenza-core-domain.mjs.map +1 -1
  75. package/fesm2020/esfaenza-core-pipes.mjs.map +1 -1
  76. package/fesm2020/esfaenza-core-services.mjs +64 -5
  77. package/fesm2020/esfaenza-core-services.mjs.map +1 -1
  78. package/fesm2020/esfaenza-core.mjs +8 -5
  79. package/fesm2020/esfaenza-core.mjs.map +1 -1
  80. package/lib/core.module.d.ts +2 -1
  81. package/package.json +1 -1
  82. package/services/classes/preferences/user/app.userpreferences.base.d.ts +23 -0
  83. package/services/public-api.d.ts +1 -0
  84. package/theme/styles/_project-override.scss +63 -1
  85. package/theme/styles/_variables.scss +1 -1
  86. package/theme/styles/skins/enuma.scss +1 -0
  87. package/theme/styles/skins/jace.scss +63 -0
  88. package/esm2020/components/back-top/back-top.component.mjs +0 -43
  89. package/esm2020/components/base/base.component.mjs +0 -55
  90. package/esm2020/components/base/reactive.component.mjs +0 -26
  91. package/esm2020/components/breadcrumb/breadcrumb.component.mjs +0 -70
  92. package/esm2020/components/error/404/pagenotfound.component.mjs +0 -30
  93. package/esm2020/components/error/500/servererror.component.mjs +0 -39
  94. package/esm2020/components/error/Angular/angularerror.component.mjs +0 -55
  95. package/esm2020/components/external-page/external_pages.component.mjs +0 -47
  96. package/esm2020/components/jace-resource/jace-resource.component.mjs +0 -65
  97. package/esm2020/components/navbar/modules-board/jace-modules-board.component.mjs +0 -40
  98. package/esm2020/components/navbar/navbar.component.loc.mjs +0 -36
  99. package/esm2020/components/navbar/navbar.component.mjs +0 -161
  100. package/esm2020/components/page/pages.component.mjs +0 -60
  101. package/esm2020/components/redirecter/redirecter.component.mjs +0 -53
  102. package/esm2020/components/sidebar/sidebar.component.mjs +0 -293
  103. /package/components/{back-top → page-structure/back-top}/back-top.component.d.ts +0 -0
  104. /package/components/{base → page-structure/base}/base.component.d.ts +0 -0
  105. /package/components/{base → page-structure/base}/reactive.component.d.ts +0 -0
  106. /package/components/{breadcrumb → page-structure/breadcrumb}/breadcrumb.component.d.ts +0 -0
  107. /package/components/{error → page-structure/error}/404/pagenotfound.component.d.ts +0 -0
  108. /package/components/{error → page-structure/error}/500/servererror.component.d.ts +0 -0
  109. /package/components/{error → page-structure/error}/Angular/angularerror.component.d.ts +0 -0
  110. /package/components/{external-page → page-structure/external-page}/external_pages.component.d.ts +0 -0
  111. /package/components/{jace-login → page-structure/jace-login}/jace-login.component.d.ts +0 -0
  112. /package/components/{jace-resource → page-structure/jace-resource}/jace-resource.component.d.ts +0 -0
  113. /package/components/{navbar → page-structure/navbar}/modules-board/jace-modules-board.component.d.ts +0 -0
  114. /package/components/{navbar → page-structure/navbar}/navbar.component.d.ts +0 -0
  115. /package/components/{navbar → page-structure/navbar}/navbar.component.loc.d.ts +0 -0
  116. /package/components/{page → page-structure/page}/pages.component.d.ts +0 -0
  117. /package/components/{redirecter → page-structure/redirecter}/redirecter.component.d.ts +0 -0
@@ -2,35 +2,43 @@ import * as i0 from '@angular/core';
2
2
  import { Component, ViewEncapsulation, Input, ViewChild, HostListener, ChangeDetectionStrategy, Optional, Inject, Injectable, EventEmitter, Output, NgModule } from '@angular/core';
3
3
  import * as i2 from '@angular/common';
4
4
  import { NgIf, NgFor, NgTemplateOutlet, NgClass, CommonModule } from '@angular/common';
5
- import * as i1 from '@angular/router';
5
+ import * as i1$1 from '@angular/router';
6
6
  import { NavigationEnd, RouterLink, RouterLinkActive, RouterOutlet, ActivatedRoute, Router, RouterModule } from '@angular/router';
7
7
  import { combineLatest, of, firstValueFrom, ReplaySubject, interval, startWith, takeUntil, takeWhile } from 'rxjs';
8
8
  import { filter, map, mergeMap, takeUntil as takeUntil$1 } from 'rxjs/operators';
9
- import * as i3 from '@esfaenza/core/services';
9
+ import * as i1 from '@esfaenza/core/services';
10
10
  import { AppState } from '@esfaenza/core/services';
11
- import * as i3$1 from '@angular/platform-browser';
11
+ import * as i3 from '@angular/platform-browser';
12
12
  import * as i2$1 from '@esfaenza/httpservice';
13
13
  import { __awaiter } from 'tslib';
14
- import * as i1$1 from '@esfaenza/localizations';
14
+ import * as i1$2 from '@esfaenza/localizations';
15
15
  import { LocalizationModule, LocalizationService } from '@esfaenza/localizations';
16
- import { MENU_LOCALIZATION, MENU, CategoriesWithModules, NAVBAR_EXTENSIONS, REDIRECT_MAP, EMBEDDED_ROUTE, ROUTE } from '@esfaenza/core/domain';
16
+ import { MENU_LOCALIZATION, MENU, CategoriesWithModules, NAVBAR_EXTENSIONS, REDIRECT_MAP, EMBEDDED_ROUTE, ROUTE, UpdatePasswordDto } from '@esfaenza/core/domain';
17
17
  import { SlimScroll, ComponentHostDirective, EsModalDirective, Draggable, DirectivesModule } from '@esfaenza/core/directives';
18
- import { HttpParams } from '@angular/common/http';
19
- import * as i7 from '@esfaenza/es-table';
18
+ import * as i6 from '@esfaenza/es-table';
20
19
  import { EsTableColumnsDefinition, EsTableModule } from '@esfaenza/es-table';
21
- import * as i8 from '@angular/forms';
20
+ import * as i7 from '@angular/forms';
22
21
  import { FormsModule } from '@angular/forms';
23
- import * as i4 from '@esfaenza/extensions';
22
+ import * as i2$2 from '@esfaenza/extensions';
23
+ import { ExtensionsModule } from '@esfaenza/extensions';
24
24
  import * as i5 from '@esfaenza/access-control';
25
+ import { AccessControlModule } from '@esfaenza/access-control';
25
26
  import * as i10 from '@angular/material/slide-toggle';
26
27
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
27
28
  import * as i11 from 'ngx-bootstrap/progressbar';
28
29
  import { ProgressbarModule } from 'ngx-bootstrap/progressbar';
29
30
  import * as i9 from 'ngx-bootstrap/dropdown';
30
31
  import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
31
- import * as i1$2 from '@esfaenza/preferences';
32
- import * as i2$2 from '@esfaenza/signalr-notifications';
32
+ import * as i1$3 from '@esfaenza/preferences';
33
+ import * as i2$3 from '@esfaenza/signalr-notifications';
34
+ import * as i3$1 from '@esfaenza/forms-and-validations';
35
+ import { FormsAndValidationsModule } from '@esfaenza/forms-and-validations';
36
+ import * as i1$4 from '@angular/material/expansion';
37
+ import { MatExpansionModule } from '@angular/material/expansion';
38
+ import * as i7$1 from '@angular/material/tooltip';
39
+ import { MatTooltipModule } from '@angular/material/tooltip';
33
40
  import { ModalModule } from 'ngx-bootstrap/modal';
41
+ import { animation, style, animate, trigger, transition, useAnimation } from '@angular/animations';
34
42
 
35
43
  // Angular
36
44
  class BackTop {
@@ -52,10 +60,10 @@ class BackTop {
52
60
  }
53
61
  }
54
62
  BackTop.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BackTop, deps: [], target: i0.ɵɵFactoryTarget.Component });
55
- BackTop.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BackTop, isStandalone: true, selector: "back-top", inputs: { position: "position", showSpeed: "showSpeed", moveSpeed: "moveSpeed" }, host: { listeners: { "click": "_onClick()", "window:scroll.out-zone": "_onWindowScroll()" } }, viewQueries: [{ propertyName: "_selector", first: true, predicate: ["backTop"], descendants: true }], ngImport: i0, template: "<i #backTop class=\"fa fa-angle-up back-to-top\" title=\"Back to Top\"></i>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.back-to-top{position:fixed;width:40px;height:40px;cursor:pointer;z-index:9999;display:none;text-decoration:none;right:40px;bottom:40px!important;font-size:30px;text-align:center;opacity:.4;color:#191e29;background-color:#07adecbf;border-radius:50%;line-height:34px}.back-to-top:hover{opacity:.8}\n"], encapsulation: i0.ViewEncapsulation.None });
63
+ BackTop.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BackTop, isStandalone: true, selector: "back-top", inputs: { position: "position", showSpeed: "showSpeed", moveSpeed: "moveSpeed" }, host: { listeners: { "click": "_onClick()", "window:scroll.out-zone": "_onWindowScroll()" } }, viewQueries: [{ propertyName: "_selector", first: true, predicate: ["backTop"], descendants: true }], ngImport: i0, template: "<i #backTop class=\"fa fa-angle-up back-to-top\" title=\"Back to Top\"></i>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.back-to-top{position:fixed;width:40px;height:40px;cursor:pointer;z-index:9999;display:none;text-decoration:none;right:40px;bottom:40px!important;font-size:30px;text-align:center;opacity:.4;color:#191e29;background-color:#0056b3bf;border-radius:50%;line-height:34px}.back-to-top:hover{opacity:.8}\n"], encapsulation: i0.ViewEncapsulation.None });
56
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BackTop, decorators: [{
57
65
  type: Component,
58
- args: [{ selector: "back-top", encapsulation: ViewEncapsulation.None, standalone: true, template: "<i #backTop class=\"fa fa-angle-up back-to-top\" title=\"Back to Top\"></i>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.back-to-top{position:fixed;width:40px;height:40px;cursor:pointer;z-index:9999;display:none;text-decoration:none;right:40px;bottom:40px!important;font-size:30px;text-align:center;opacity:.4;color:#191e29;background-color:#07adecbf;border-radius:50%;line-height:34px}.back-to-top:hover{opacity:.8}\n"] }]
66
+ args: [{ selector: "back-top", encapsulation: ViewEncapsulation.None, standalone: true, template: "<i #backTop class=\"fa fa-angle-up back-to-top\" title=\"Back to Top\"></i>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.back-to-top{position:fixed;width:40px;height:40px;cursor:pointer;z-index:9999;display:none;text-decoration:none;right:40px;bottom:40px!important;font-size:30px;text-align:center;opacity:.4;color:#191e29;background-color:#0056b3bf;border-radius:50%;line-height:34px}.back-to-top:hover{opacity:.8}\n"] }]
59
67
  }], propDecorators: { position: [{
60
68
  type: Input
61
69
  }], showSpeed: [{
@@ -125,12 +133,12 @@ class Breadcrumb {
125
133
  return [route, params];
126
134
  }
127
135
  }
128
- Breadcrumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Breadcrumb, deps: [{ token: i3.AppState }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i3$1.Title }], target: i0.ɵɵFactoryTarget.Component });
129
- Breadcrumb.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Breadcrumb, isStandalone: true, selector: "breadcrumb", ngImport: i0, template: "<ol class=\"breadcrumb app-no-selection\">\r\n <li class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"['/pages/dashboard']\">Dashboard</li>\r\n <li *ngIf=\"MainLink?.title != 'Dashboard'\" [routerLink]=\"MainLink.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{MainLink.title}}</li>\r\n <li *ngFor=\"let link of SubLinks\" class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"link.routerLink\">{{link.title}}</li>\r\n</ol>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.breadcrumb{padding:0;margin:0;background:transparent;color:#132d46;font-size:14px}.breadcrumb-item+.breadcrumb-item:before{font-weight:400!important;color:#01c38d;font-family:\"Font Awesome 6 Pro\";font-size:.6rem;line-height:1.4rem;content:\"\\f054\"}.breadcrumb-item{float:left}.breadcrumb-link{cursor:pointer;font-weight:500;color:#01c38d!important}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], encapsulation: i0.ViewEncapsulation.None });
136
+ Breadcrumb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Breadcrumb, deps: [{ token: i1.AppState }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i3.Title }], target: i0.ɵɵFactoryTarget.Component });
137
+ Breadcrumb.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Breadcrumb, isStandalone: true, selector: "breadcrumb", ngImport: i0, template: "<ol class=\"breadcrumb app-no-selection\">\r\n <li class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"['/pages/dashboard']\">Dashboard</li>\r\n <li *ngIf=\"MainLink?.title != 'Dashboard'\" [routerLink]=\"MainLink.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{MainLink.title}}</li>\r\n <li *ngFor=\"let link of SubLinks\" class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"link.routerLink\">{{link.title}}</li>\r\n</ol>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.breadcrumb{padding:0;margin:0;background:transparent;color:#344154;font-size:14px}.breadcrumb-item+.breadcrumb-item:before{font-weight:400!important;color:#fff;font-family:\"Font Awesome 6 Pro\";font-size:.6rem;line-height:1.4rem;content:\"\\f054\"}.breadcrumb-item{float:left}.breadcrumb-link{cursor:pointer;font-weight:500;color:#fff!important}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], encapsulation: i0.ViewEncapsulation.None });
130
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Breadcrumb, decorators: [{
131
139
  type: Component,
132
- args: [{ selector: "breadcrumb", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf, NgFor, RouterLink], template: "<ol class=\"breadcrumb app-no-selection\">\r\n <li class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"['/pages/dashboard']\">Dashboard</li>\r\n <li *ngIf=\"MainLink?.title != 'Dashboard'\" [routerLink]=\"MainLink.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{MainLink.title}}</li>\r\n <li *ngFor=\"let link of SubLinks\" class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"link.routerLink\">{{link.title}}</li>\r\n</ol>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.breadcrumb{padding:0;margin:0;background:transparent;color:#132d46;font-size:14px}.breadcrumb-item+.breadcrumb-item:before{font-weight:400!important;color:#01c38d;font-family:\"Font Awesome 6 Pro\";font-size:.6rem;line-height:1.4rem;content:\"\\f054\"}.breadcrumb-item{float:left}.breadcrumb-link{cursor:pointer;font-weight:500;color:#01c38d!important}\n"] }]
133
- }], ctorParameters: function () { return [{ type: i3.AppState }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i3$1.Title }]; } });
140
+ args: [{ selector: "breadcrumb", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf, NgFor, RouterLink], template: "<ol class=\"breadcrumb app-no-selection\">\r\n <li class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"['/pages/dashboard']\">Dashboard</li>\r\n <li *ngIf=\"MainLink?.title != 'Dashboard'\" [routerLink]=\"MainLink.routerLink\" class=\"breadcrumb-item text-uppercase breadcrumb-link\">{{MainLink.title}}</li>\r\n <li *ngFor=\"let link of SubLinks\" class=\"breadcrumb-item text-uppercase breadcrumb-link\" [routerLink]=\"link.routerLink\">{{link.title}}</li>\r\n</ol>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.breadcrumb{padding:0;margin:0;background:transparent;color:#344154;font-size:14px}.breadcrumb-item+.breadcrumb-item:before{font-weight:400!important;color:#fff;font-family:\"Font Awesome 6 Pro\";font-size:.6rem;line-height:1.4rem;content:\"\\f054\"}.breadcrumb-item{float:left}.breadcrumb-link{cursor:pointer;font-weight:500;color:#fff!important}\n"] }]
141
+ }], ctorParameters: function () { return [{ type: i1.AppState }, { type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i3.Title }]; } });
134
142
  class BreadcrumbItem {
135
143
  }
136
144
 
@@ -152,12 +160,12 @@ class PageNotFoundComponent {
152
160
  this.router.navigate([url]);
153
161
  }
154
162
  }
155
- PageNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PageNotFoundComponent, deps: [{ token: i1.Router }, { token: i2.Location }, { token: i3.AppState }], target: i0.ɵɵFactoryTarget.Component });
163
+ PageNotFoundComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PageNotFoundComponent, deps: [{ token: i1$1.Router }, { token: i2.Location }, { token: i1.AppState }], target: i0.ɵɵFactoryTarget.Component });
156
164
  PageNotFoundComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PageNotFoundComponent, isStandalone: true, selector: "pagenotfound", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\">404</h1>\r\n <h6 class=\"card-title\">La risorsa richiesta non &egrave; stata trovata ma in futuro potrebbe essere disponibile.</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", encapsulation: i0.ViewEncapsulation.None });
157
165
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PageNotFoundComponent, decorators: [{
158
166
  type: Component,
159
167
  args: [{ selector: "pagenotfound", encapsulation: ViewEncapsulation.None, standalone: true, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\">404</h1>\r\n <h6 class=\"card-title\">La risorsa richiesta non &egrave; stata trovata ma in futuro potrebbe essere disponibile.</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
160
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }, { type: i3.AppState }]; } });
168
+ }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i2.Location }, { type: i1.AppState }]; } });
161
169
 
162
170
  // Angular
163
171
  class ServerErrorComponent {
@@ -186,12 +194,12 @@ class ServerErrorComponent {
186
194
  this.router.navigate([url]);
187
195
  }
188
196
  }
189
- ServerErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ServerErrorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i3.AppState }], target: i0.ɵɵFactoryTarget.Component });
197
+ ServerErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ServerErrorComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i1.AppState }], target: i0.ɵɵFactoryTarget.Component });
190
198
  ServerErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ServerErrorComponent, isStandalone: true, selector: "servererror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\">&nbsp;&nbsp;&nbsp;</h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\">&nbsp;&nbsp;&nbsp;</h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
191
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ServerErrorComponent, decorators: [{
192
200
  type: Component,
193
201
  args: [{ selector: "servererror", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf], template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-6 col-md-6 col-10 offset-xl-3 offset-md-3 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-1\" *ngIf=\"!statusCode\">&nbsp;&nbsp;&nbsp;</h1>\r\n <h1 class=\"display-1\" *ngIf=\"statusCode\">{{statusCode}}</h1>\r\n <h6 class=\"card-title\" *ngIf=\"!statusText\">&nbsp;&nbsp;&nbsp;</h6>\r\n <h6 class=\"card-title\" style=\"word-wrap:break-word; max-height: 500px; overflow: auto\" *ngIf=\"statusText\">{{statusText}}</h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-left\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
194
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i3.AppState }]; } });
202
+ }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i1.AppState }]; } });
195
203
 
196
204
  // Angular
197
205
  class AngularErrorComponent {
@@ -235,17 +243,17 @@ class AngularErrorComponent {
235
243
  this.router.navigate([url]);
236
244
  }
237
245
  }
238
- AngularErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AngularErrorComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2$1.HTTPService }, { token: i3.TokenService }, { token: i3.AppState }], target: i0.ɵɵFactoryTarget.Component });
246
+ AngularErrorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AngularErrorComponent, deps: [{ token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i2$1.HTTPService }, { token: i1.TokenService }, { token: i1.AppState }], target: i0.ɵɵFactoryTarget.Component });
239
247
  AngularErrorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AngularErrorComponent, isStandalone: true, selector: "angularerror", ngImport: i0, template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa &egrave; andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si &egrave; verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
240
248
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AngularErrorComponent, decorators: [{
241
249
  type: Component,
242
250
  args: [{ selector: "angularerror", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf], template: "<div class=\"container\">\r\n <div class=\"row\">\r\n <div class=\"col-xl-8 col-md-10 col-10 offset-xl-2 offset-xs-1 p-t-10\">\r\n <div class=\"card\">\r\n <div class=\"card-body text-center\">\r\n <h1 class=\"display-4\">Qualcosa &egrave; andato storto.</h1>\r\n <h6>\r\n <small>\r\n Si &egrave; verificato un errore interno all'applicazione. Questo non dovrebbe accadere. Prova a ricaricare la pagina precedente e rieffettuare le stesse operazioni, se il problema persiste contatta il service desk allegando una breve descrizione delle operazioni che stavi eseguendo e questo messaggio d'errore:\r\n </small>\r\n </h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"identityInfos\"><em>{{identityInfos}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorFrom\"><em>{{errorFrom}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorLastCalls\"><em>{{errorLastCalls}}</em></h6>\r\n <h6 class=\"card-title text-danger app-margin-top-10 text-left\" style=\"word-wrap:break-word\" *ngIf=\"errorMessage\"><em>{{errorMessage}}</em></h6>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right\" (click)=\"goDashboard()\">Vai alla Dashboard</button>\r\n <button type=\"button\" class=\"btn btn-secondary pull-right app-margin-right-10\" (click)=\"goPreviousPage()\">Torna alla pagina precedente</button>\r\n <div class=\"clearfix\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }]
243
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2$1.HTTPService }, { type: i3.TokenService }, { type: i3.AppState }]; } });
251
+ }], ctorParameters: function () { return [{ type: i1$1.Router }, { type: i1$1.ActivatedRoute }, { type: i2$1.HTTPService }, { type: i1.TokenService }, { type: i1.AppState }]; } });
244
252
 
245
253
  // Chiamate ai Repository
246
254
  const GET_Users_GetProfilePicture = "/api/Users/GetProfilePicture";
247
255
  class Sidebar {
248
- constructor(lc, lcMenu, cdr, _elementRef, _router, _state, zone, utiExts, aac, menuItemsRaw, menuFilteringService, sr, https, msgs, globalSearchService) {
256
+ constructor(lc, lcMenu, cdr, _elementRef, _router, _state, zone, utiExts, aac, menuItemsRaw, menuFilteringService, sr, globalSearchService, profile) {
249
257
  this.lc = lc;
250
258
  this.cdr = cdr;
251
259
  this._elementRef = _elementRef;
@@ -257,17 +265,15 @@ class Sidebar {
257
265
  this.menuItemsRaw = menuItemsRaw;
258
266
  this.menuFilteringService = menuFilteringService;
259
267
  this.sr = sr;
260
- this.https = https;
261
- this.msgs = msgs;
262
268
  this.globalSearchService = globalSearchService;
269
+ this.profile = profile;
263
270
  this.isMenuCollapsed = false;
264
271
  this.isMenuShouldCollapsed = false;
265
272
  this.applicationVersion = myconfig.AppData.ComponentVersion;
273
+ this.applicationName = myconfig.AppData.ModuleDescription;
266
274
  this.user = "";
267
275
  this.tenant = "";
268
276
  this.SearchModel = "";
269
- // TODO: Salvare dentro una service preferenze account
270
- this.safeprofilepic = null;
271
277
  // ***************************************** Gestione Ricerca Globale *****************************************
272
278
  this.SelectedResult = null;
273
279
  this.ShowSingleTable = false;
@@ -303,15 +309,19 @@ class Sidebar {
303
309
  });
304
310
  }
305
311
  getMenuItems() {
312
+ var _a, _b;
306
313
  var items = [];
307
314
  for (let i = 0; i < this.menuItemsRaw.length; i++) {
308
315
  let t = this.menuItemsRaw[i];
309
316
  t.level = 1;
310
317
  if (!t.ac || this.aac.has(t.ac)) {
311
- if (!t.subMenu || t.subMenu.length == 0)
318
+ if (!t.subMenu || t.subMenu.length == 0) {
319
+ t.icon = (_a = t.icon) !== null && _a !== void 0 ? _a : "far fa-circle-small";
312
320
  items.push(t);
321
+ }
313
322
  else {
314
323
  var toPush = this.checkSubMenuOverClaims(t, 1);
324
+ toPush.icon = (_b = toPush.icon) !== null && _b !== void 0 ? _b : "far fa-circle-small";
315
325
  items.push(toPush);
316
326
  }
317
327
  }
@@ -319,16 +329,20 @@ class Sidebar {
319
329
  return items;
320
330
  }
321
331
  checkSubMenuOverClaims(menuItem, level) {
332
+ var _a, _b;
322
333
  var item = this.utiExts.deepClone(menuItem);
323
334
  item.subMenu = [];
324
335
  for (let i = 0; i < menuItem.subMenu.length; i++) {
325
336
  let t = menuItem.subMenu[i];
326
337
  t.level = level + 1;
327
338
  if (!t.ac || this.aac.has(t.ac)) {
328
- if (!t.subMenu || t.subMenu.length == 0)
339
+ if (!t.subMenu || t.subMenu.length == 0) {
340
+ t.icon = (_a = t.icon) !== null && _a !== void 0 ? _a : "far fa-circle-small";
329
341
  item.subMenu.push(t);
342
+ }
330
343
  else {
331
344
  var toPush = this.checkSubMenuOverClaims(t, level + 1);
345
+ toPush.icon = (_b = toPush.icon) !== null && _b !== void 0 ? _b : "far fa-circle-small";
332
346
  item.subMenu.push(toPush);
333
347
  }
334
348
  }
@@ -362,12 +376,14 @@ class Sidebar {
362
376
  this._state.setSidebarWidth(this.sidebar.nativeElement.offsetWidth);
363
377
  }
364
378
  hoverItem(jQueryevent) {
365
- this.showHoverElem = true;
366
- this.hoverElemHeight = jQueryevent.currentTarget.clientHeight;
367
- this.hoverElemTop = jQueryevent.currentTarget.getBoundingClientRect().top;
368
- jQuery(".sidebar-hover-elem").css("top", this.hoverElemTop + "px");
369
- jQuery(".sidebar-hover-elem").css("height", this.hoverElemHeight + "px");
370
- jQuery(".sidebar-hover-elem").addClass("show-hover-elem");
379
+ if (!this.isMenuCollapsed) {
380
+ this.showHoverElem = true;
381
+ this.hoverElemHeight = jQueryevent.currentTarget.clientHeight;
382
+ this.hoverElemTop = jQueryevent.currentTarget.getBoundingClientRect().top;
383
+ jQuery(".sidebar-hover-elem").css("top", this.hoverElemTop + "px");
384
+ jQuery(".sidebar-hover-elem").css("height", this.hoverElemHeight + "px");
385
+ jQuery(".sidebar-hover-elem").addClass("show-hover-elem");
386
+ }
371
387
  }
372
388
  sendAwayHoverElement() {
373
389
  this.hoverElemTop = -200;
@@ -447,10 +463,7 @@ class Sidebar {
447
463
  if (identity) {
448
464
  this.user = identity.FullName;
449
465
  this.tenant = identity.TenantName;
450
- // TODO: Mettere logica dentro una service preferenze account
451
- this.https.get(GET_Users_GetProfilePicture, new HttpParams().set('id', identity.IdAccount.toString())).subscribe(t => {
452
- //this._state.setSanitizerPicProfile(t.image);
453
- });
466
+ this.profile.doReloadProfilePicture();
454
467
  }
455
468
  }
456
469
  onSearchRequest() {
@@ -491,21 +504,21 @@ class Sidebar {
491
504
  });
492
505
  }
493
506
  }
494
- Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Sidebar, deps: [{ token: i1$1.LocalizationService }, { token: MENU_LOCALIZATION, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.Router }, { token: i3.AppState }, { token: i0.NgZone }, { token: i4.UtilityService }, { token: i5.AccessControlService }, { token: MENU }, { token: i3.MenuFilteringService }, { token: i3.TokenService }, { token: i2$1.HTTPService }, { token: i4.MessageService }, { token: i3.GlobalSearchService }], target: i0.ɵɵFactoryTarget.Component });
495
- Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Sidebar, isStandalone: true, selector: "sidebar", host: { listeners: { "window:resize.out-zone": "onWindowResize()" } }, viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img app-logo-placeholder d-flex\">\r\n <div class=\"app-margin-left-10\">\r\n <i style=\"color: #00aeef;\" class=\"fas fa-chevron-left\"></i>&nbsp;\r\n <i style=\"color: #01C38D;\" class=\"fas fa-chevron-right\"></i>&nbsp;&nbsp;\r\n </div>\r\n <div class=\"app-margin-left-10\">Template a15</div>\r\n </div>\r\n <!--<img *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img\" src=\"../dist/assets/img/logo/logo.png\" alt=\"\">\r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"../dist/assets/img/logo/logo_sm.png\" alt=\"\">-->\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\">\r\n <li *ngFor=\"let item of menuItems; let last = last;\" \r\n class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\" \r\n [class.has-sub-menu]=\"item.subMenu\"\r\n [class.sidebar-item-expanded]=\"item.expanded\" \r\n [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: item }\"></ng-container>\r\n </li>\r\n </ul>\r\n <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div class=\"app-padding-15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!safeprofilepic\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"safeprofilepic\">\r\n <img [src]=\"safeprofilepic\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile/user_info']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\">\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-from-bracket\"></i>&nbsp;Logout</div>\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-left\"></i>&nbsp;Cambia Tenant</div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.app-sidebar{background:#132D46;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid #191E29}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#0e2032}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#183a5a}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #191E29}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;padding-left:30px!important;height:42px;line-height:42px}.sidebar-sublist li a:hover{background-color:#0e2032}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#183a5a}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#01c38d;position:absolute;top:-90px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{color:#01c38d!important;font-weight:700!important;background-color:#183a5a}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#132d46;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #191E29;color:#fff}.app-sidebar-search{height:39px}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-img{width:210px;margin:10px 0 0 10px}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#132d46}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#132d46,rgba(19,45,70,0));height:42px;width:230px;z-index:100}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #191E29}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#01c38d;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#183a5a;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #191E29}\n"], dependencies: [{ kind: "directive", type: SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$1.LocalizePipe, name: "localize" }, { kind: "ngmodule", type: EsTableModule }, { kind: "component", type: i7.EsTableComponent, selector: "es-table", inputs: ["EsTableTemplate", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
507
+ Sidebar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Sidebar, deps: [{ token: i1$2.LocalizationService }, { token: MENU_LOCALIZATION, optional: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$1.Router }, { token: i1.AppState }, { token: i0.NgZone }, { token: i2$2.UtilityService }, { token: i5.AccessControlService }, { token: MENU }, { token: i1.MenuFilteringService }, { token: i1.TokenService }, { token: i1.GlobalSearchService }, { token: i1.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component });
508
+ Sidebar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Sidebar, isStandalone: true, selector: "sidebar", host: { listeners: { "window:resize.out-zone": "onWindowResize()" } }, viewQueries: [{ propertyName: "sidebar", first: true, predicate: ["sidebar"], descendants: true, static: true }], ngImport: i0, template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <!-- <div *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img app-logo-placeholder d-flex\">\r\n <div class=\"app-margin-left-10\">\r\n <i style=\"color: #00aeef;\" class=\"fas fa-chevron-left\"></i>&nbsp;\r\n <i style=\"color: #01C38D;\" class=\"fas fa-chevron-right\"></i>&nbsp;&nbsp;\r\n </div>\r\n <div class=\"app-margin-left-10\">{{applicationName}}</div>\r\n </div> -->\r\n <img *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img\" src=\"assets/img/logo/logo.png\" alt=\"\">\r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/logo_sm.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\">\r\n <li *ngFor=\"let item of menuItems; let last = last;\" \r\n class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\" \r\n [class.has-sub-menu]=\"item.subMenu\"\r\n [class.sidebar-item-expanded]=\"item.expanded\" \r\n [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: item }\"></ng-container>\r\n </li>\r\n </ul>\r\n <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div class=\"app-padding-15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\">\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-from-bracket\"></i>&nbsp;Logout</div>\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-left\"></i>&nbsp;Cambia Tenant</div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"far fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: subitem }\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#3e4d64}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;padding-left:30px!important;height:42px;line-height:42px}.sidebar-sublist li a:hover{background-color:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#fffac2;position:absolute;top:-90px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{color:#fffac2!important;font-weight:700!important;background-color:#3e4d64}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-img{width:210px;margin:10px 0 0 10px}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fffac2;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}\n"], dependencies: [{ kind: "directive", type: SlimScroll, selector: "[slim-scroll]", inputs: ["slimScrollOptions"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$2.LocalizePipe, name: "localize" }, { kind: "ngmodule", type: EsTableModule }, { kind: "component", type: i6.EsTableComponent, selector: "es-table", inputs: ["EsTableTemplate", "CornerMenuOptions", "ColumnsResizable", "ColumnsPinnable", "AutoUpdate", "Height", "EmptySpaceBackgroundColor", "EsTableHandledSearch", "MaxHeight", "ContainerClass", "XLSXExport", "CSVExport", "AllSearch", "HighCellDensity", "Selection", "ShowLoadingOnBootstrap", "Removal", "RemovalCondition", "Export", "ShiftClick", "CountLabel", "HidePaging", "HidePagingCount", "HidePagingButtons", "ContextMenu", "ExportFileName", "TableClass", "ExportFunction", "ExportOnlyVisibleColumns", "HasHeaderGroup", "HasSecondaryHeaderGroup", "HeaderHidden", "BodyHidden", "SelectionDisabled", "SingleSelection", "RowClassAssigner", "OrderByColumn", "MultipleOrderingDirectives", "HiddenColumns", "ColumnsOrdering", "SearchView", "SelectAll", "UseArrayModePaging", "DynamicRowColumnsDefinition", "DynamicOperations", "Hierarchy", "ParentKey", "OwnKey", "StartsExpanded", "SavePreferences", "DefaultAlignment", "PagingStyle", "RowGroupingPagingStyle", "ItemSourceProperty", "UseSelectionCache", "ShowItemGroupsColumns", "Editable", "RangeSelection", "SearchThrottle", "ArraymodeItemsPerPage"], outputs: ["onOrderChanged", "onSearchRequest", "onSelectionChanged", "onRemoval", "onAbortRemoval", "onModelChange", "onOpenContextMenu", "onCornerAction", "onDynamicOperation"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
496
509
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Sidebar, decorators: [{
497
510
  type: Component,
498
- args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgClass, SlimScroll, NgFor, NgTemplateOutlet, NgIf, RouterLinkActive, RouterLink, LocalizationModule, EsTableModule, FormsModule], template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img app-logo-placeholder d-flex\">\r\n <div class=\"app-margin-left-10\">\r\n <i style=\"color: #00aeef;\" class=\"fas fa-chevron-left\"></i>&nbsp;\r\n <i style=\"color: #01C38D;\" class=\"fas fa-chevron-right\"></i>&nbsp;&nbsp;\r\n </div>\r\n <div class=\"app-margin-left-10\">Template a15</div>\r\n </div>\r\n <!--<img *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img\" src=\"../dist/assets/img/logo/logo.png\" alt=\"\">\r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"../dist/assets/img/logo/logo_sm.png\" alt=\"\">-->\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\">\r\n <li *ngFor=\"let item of menuItems; let last = last;\" \r\n class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\" \r\n [class.has-sub-menu]=\"item.subMenu\"\r\n [class.sidebar-item-expanded]=\"item.expanded\" \r\n [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: item }\"></ng-container>\r\n </li>\r\n </ul>\r\n <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div class=\"app-padding-15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!safeprofilepic\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"safeprofilepic\">\r\n <img [src]=\"safeprofilepic\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile/user_info']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\">\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-from-bracket\"></i>&nbsp;Logout</div>\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-left\"></i>&nbsp;Cambia Tenant</div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"fa fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : {$implicit: subitem}\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.app-sidebar{background:#132D46;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid #191E29}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#0e2032}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#183a5a}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #191E29}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;padding-left:30px!important;height:42px;line-height:42px}.sidebar-sublist li a:hover{background-color:#0e2032}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#183a5a}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#01c38d;position:absolute;top:-90px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{color:#01c38d!important;font-weight:700!important;background-color:#183a5a}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#132d46;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #191E29;color:#fff}.app-sidebar-search{height:39px}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-img{width:210px;margin:10px 0 0 10px}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#132d46}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#132d46,rgba(19,45,70,0));height:42px;width:230px;z-index:100}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #191E29}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#01c38d;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#183a5a;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #191E29}\n"] }]
511
+ args: [{ selector: "sidebar", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgClass, SlimScroll, NgFor, NgTemplateOutlet, NgIf, RouterLinkActive, RouterLink, LocalizationModule, EsTableModule, FormsModule], template: "<div #sidebar class=\"app-sidebar\" [class.menu-collapsed]=\"isMenuCollapsed\" (mouseleave.out-zone)=\"sendAwayHoverElement();\">\r\n <!--Jace Logo-->\r\n <div class=\"app-logo-container\">\r\n <div class=\"app-pointer\" [routerLink]=\"['/pages/dashboard']\" style=\"margin-bottom: 10px; overflow: hidden\">\r\n <!-- <div *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img app-logo-placeholder d-flex\">\r\n <div class=\"app-margin-left-10\">\r\n <i style=\"color: #00aeef;\" class=\"fas fa-chevron-left\"></i>&nbsp;\r\n <i style=\"color: #01C38D;\" class=\"fas fa-chevron-right\"></i>&nbsp;&nbsp;\r\n </div>\r\n <div class=\"app-margin-left-10\">{{applicationName}}</div>\r\n </div> -->\r\n <img *ngIf=\"!isMenuCollapsed\" class=\"app-logo-img\" src=\"assets/img/logo/logo.png\" alt=\"\">\r\n <img *ngIf=\"isMenuCollapsed\" class=\"app-logo-img-sm\" src=\"assets/img/logo/logo_sm.png\" alt=\"\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-search\">\r\n <form novalidate role=\"search\" class=\"app-search\" (ngSubmit)=\"onSearchRequest()\">\r\n <input type=\"text\" placeholder=\"Ricerca...\" [(ngModel)]=\"searchTerm\" (ngModelChange)=\"onSearchModelChanged()\" name=\"search\" class=\"form-control\" autocomplete=\"off\">\r\n <a><i class=\"far fa-magnifying-glass\"></i></a>\r\n </form>\r\n </div>\r\n <!--Barra laterale con tutte le voci di Menu-->\r\n <ul class=\"nav nav-sidebar flex-column flex-nowrap\" style=\"position: relative; zoom: 1\" slim-scroll [slimScrollOptions]=\"{height: menuHeight}\">\r\n <li *ngFor=\"let item of menuItems; let last = last;\" \r\n class=\"sidebar-list-item level-{{item.level}}\" \r\n [style.margin-bottom]=\"last ? '42px' : '0px'\" \r\n [class.has-sub-menu]=\"item.subMenu\"\r\n [class.sidebar-item-expanded]=\"item.expanded\" \r\n [class.sidebar-item-wip]=\"item.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: item }\"></ng-container>\r\n </li>\r\n </ul>\r\n <!--Selettore Barra dei Menu-->\r\n <div class=\"sidebar-hover-elem\"></div>\r\n <!--Footer-->\r\n <div *ngIf=\"!isMenuCollapsed\" class=\"app-sidebar-footer\">\r\n <!--Minuscolo fade tra sidebar e inizio footer-->\r\n <div class=\"app-sidebar-footer-fade\"></div>\r\n <div class=\"app-padding-15\">\r\n <!--Informazioni utente collegato-->\r\n <div class=\"app-sidebar-footer-user-container\">\r\n <!--Mentre sto ancora caricando la ProfilePic mi assicuro di mostrare un placeholder-->\r\n <div *ngIf=\"!profile.ProfilePicture\" class=\"app-sidebar-footer-user-img-placeholder\">\r\n <i class=\"far fa-2x fa-spinner fa-spin-pulse\" style=\"color: black; margin-top: 5px;\"></i>\r\n </div>\r\n <!--Una volta caricata la ProfilePic nascondo il placeholder e la mostro-->\r\n <ng-container *ngIf=\"profile.ProfilePicture\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"\" class=\"app-sidebar-footer-user-img app-pointer\" [routerLink]=\"['/pages/profile']\">\r\n <div class=\"app-sidebar-footer-user-status\"></div>\r\n </ng-container>\r\n <!--Username animato quando supera i 15 caratteri-->\r\n <div class=\"app-sidebar-footer-user-name-container\">\r\n <div class=\"username-text\" [class.username-text-animator]=\"user?.length > 15\">{{user}}</div>\r\n <div class=\"tenantname-text\">{{tenant}}</div>\r\n </div>\r\n </div>\r\n <!--Operazioni rapide (Logout, Cambia tenant, Guida, Supporto,...)-->\r\n <div class=\"app-sidebar-footer-quick-ops\">\r\n <div (click)=\"onLogout();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-from-bracket\"></i>&nbsp;Logout</div>\r\n <div (click)=\"onChangeTenant();\" class=\"app-sidebar-footer-op app-no-selection\"><i class=\"far fa-right-left\"></i>&nbsp;Cambia Tenant</div>\r\n </div>\r\n <!--Versione corrente applicazione-->\r\n <div class=\"app-sidebar-footer-ver\">\r\n v{{applicationVersion}}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template #menuItem let-item>\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"(!item.routerLink && !item.subMenu) || item.wip\" [href]=\"item.link ? item.link : '#'\" (click)=\"item.wip && $event.preventDefault()\" target=\"_blank\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.routerLink && !item.subMenu && !item.wip\" class=\"sidebar-list-link {{item.cssClass || ''}}\" [routerLink]=\"[item.routerLink]\" [queryParams]=\"item.queryParams\" routerLinkActive=\"active-link\" (click.out-zone)=\"collapseMenu($event, item)\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n </a>\r\n\r\n <a [attr.style.padding_left]=\"item.padding_left\" *ngIf=\"item.subMenu && !item.wip\" (click.out-zone)=\"collapseMenu($event, item)\" [attr.href]=\"''\" class=\"sidebar-list-link {{item.cssClass || ''}}\" (mouseenter.out-zone)=\"hoverItem($event)\">\r\n <i *ngIf=\"item.icon\" class=\"{{ item.icon }}\"></i><span>{{ item.title | localize : lc }}</span>\r\n <b class=\"far fa-angle-down\"></b>\r\n </a>\r\n\r\n <ul *ngIf=\"item.subMenu\" class=\"sidebar-sublist\">\r\n <li *ngFor=\"let subitem of item.subMenu\" class=\"sidebar-sublist-item level-{{subitem.level}}\" [class.sidebar-item-wip]=\"subitem.wip\">\r\n <ng-container *ngTemplateOutlet=\"menuItem; context : { $implicit: subitem }\"></ng-container>\r\n </li>\r\n </ul>\r\n</ng-template>\r\n\r\n<!-- Overlay per la ricerca globale -->\r\n<ng-container *ngIf=\"searchingTerm || searchResult\">\r\n <div class=\"app-absolute app-search-background\">\r\n <div class=\"app-search-result-box\">\r\n <ng-container *ngIf=\"searchingTerm\">\r\n <div class=\"app-search-card\"><i class=\"fa fa-spinner fa-spin\"></i>Sto effettuando la ricerca...</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"searchResult && !searchingTerm\">\r\n <div class=\"row\" style=\"height: 100%;\">\r\n <!-- Spazio a sinistra -->\r\n <div class=\"col-md-1\"></div>\r\n <!-- Blocco con le categorie dei risultati -->\r\n <div class=\"col-md-3\">\r\n <div class=\"app-search-card\">\r\n <div class=\"app-relative\"><a class=\"fa fa-times text-danger app-absolute app-right-0 app-fs-20 app-pointer\" (click)=\"closeSearch();\"></a></div>\r\n <h4>Categorie di Ricerca</h4>\r\n <div class=\"app-pointer app-link\" [class.app-bold]=\"!SelectedResult && !ShowSingleTable\">\r\n <span (click)=\"FilterSearchResults()\">{{SelectedResult ? '-' : '>'}} Mostra Tutto</span>\r\n </div>\r\n <div *ngFor=\"let item of searchResult.results\" class=\"app-pointer app-link\" [class.app-bold]=\"SelectedResult?.description == item.description\">\r\n <span (click)=\"FilterSearchResults(item)\">{{SelectedResult?.description == item.description ? '>' : '-'}} Mostra {{item.description}} ({{item.items?.length}})</span>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Dettaglio risultati -->\r\n <div class=\"col-md-7\" style=\"overflow: auto; height: 100%;\">\r\n <ng-container *ngIf=\"!SelectedResult && !ShowSingleTable\">\r\n <div *ngFor=\"let res of searchResult.results; let i = index;\" class=\"app-search-card\" [style.margin-bottom.px]=\"i == (searchResult.results?.length - 1) ? 2 : 10\">\r\n <h4>{{res.description}}</h4>\r\n <es-table [(ngModel)]=\"res.items\" [DynamicRowColumnsDefinition]=\"res.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"SelectedResult && ShowSingleTable\">\r\n <div class=\"app-search-card\">\r\n <h4>{{SelectedResult.description}}</h4>\r\n <es-table [(ngModel)]=\"SelectedResult.items\" [DynamicRowColumnsDefinition]=\"SelectedResult.est_cols\" [ArraymodeItemsPerPage]=\"10\"></es-table>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <!-- Spazio a destra -->\r\n <div class=\"col-md-1\"></div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-container>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.app-sidebar{background:#344154;box-shadow:8px 0 6px -6px #1313130a,12px 0 16px -16px #1313130d;height:100%;min-height:100%;width:230px;overflow:hidden;display:block;z-index:9}.app-sidebar.menu-collapsed{width:50px}.app-sidebar.menu-collapsed a.sidebar-list-link b{display:none}.app-sidebar.menu-collapsed .sidebar-sublist{position:absolute;top:-1px;left:52px;width:0;display:block;overflow:hidden}.sidebar-list-item{display:block;position:relative;float:none;padding:0;border-bottom:1px solid #485974}.sidebar-item-wip{cursor:default}a.sidebar-list-link{display:block;height:42px;padding-left:18px!important;padding-top:0!important;text-shadow:none;font-size:13px;letter-spacing:.02em;text-decoration:none;color:#fff;line-height:42px;white-space:nowrap;overflow:hidden;cursor:pointer;transition:all .2s ease}a.sidebar-list-link i{margin-right:16px;width:16px;display:inline-block}a.sidebar-list-link b{display:block;opacity:1;width:14px;height:14px;line-height:14px;text-shadow:none;font-size:18px;position:absolute;right:10px;top:14px;padding:0;text-align:center;transition:transform .2s linear}a.sidebar-list-link:hover{background-color:#2a3544}.sidebar-list-item.sidebar-item-expanded>.sidebar-list-link b,.sidebar-sublist-item.sidebar-item-expanded>.sidebar-list-link b{transform:rotate(180deg)}.sidebar-sublist{display:none;padding:0;list-style:none;position:relative;background-color:#3e4d64}.sidebar-sublist li{display:block;float:none;padding:0;border-bottom:none;position:relative;border-top:1px solid #485974}.sidebar-sublist li a{display:block;text-shadow:none;font-size:13px;text-decoration:none;padding-left:30px!important;height:42px;line-height:42px}.sidebar-sublist li a:hover{background-color:#2a3544}.sidebar-item-expanded>ul.sidebar-sublist{display:block;background-color:#3e4d64}.subitem-submenu-link .fa{top:14px}.sidebar-hover-elem{width:4px;background-color:#fffac2;position:absolute;top:-90px;left:226px;transition:all .2s ease;transition-property:top,height;height:36px;display:block}.sidebar.menu-collapsed .sidebar-hover-elem{left:46px}.active-link{color:#fffac2!important;font-weight:700!important;background-color:#3e4d64}@media (max-width: 544px){.sidebar.menu-collapsed{width:0}.sidebar-hover-elem,.sidebar-select-elem{display:none}}.app-logo-container{height:60px;background-color:#2a3544;display:flex;position:relative;z-index:10;margin-bottom:-1px;border-bottom:1px solid #485974;color:#fff}.app-sidebar-search{height:39px;border-bottom:42px solid #344154}.app-logo-placeholder{text-align:center;font-size:1.2rem;text-transform:uppercase;font-weight:700;margin-top:15px!important}.app-logo-img{width:210px;margin:10px 0 0 10px}.app-logo-img-sm{padding-top:10px}.app-sidebar-footer{position:relative;background-color:#344154}.app-sidebar-footer-fade{top:-42px;position:absolute;background-image:linear-gradient(to top,#344154,rgba(52,65,84,0));height:42px;width:230px;z-index:100}.app-sidebar-footer-user-container{position:relative;display:flex;margin-top:5px;color:#fff}.app-sidebar-footer-user-img-placeholder{height:40px;min-width:40px;width:40px;text-align:center}.app-sidebar-footer-user-img{height:40px;min-height:40px;min-width:40px;width:40px;border-radius:50%;border:1px solid #485974}.app-sidebar-footer-user-status{background-color:#32cd32;border:1px solid green;border-radius:50%;position:absolute;left:29px;top:29px;height:11px;width:11px}.app-sidebar-footer-user-name-container{width:150px;white-space:nowrap;overflow:hidden;margin-left:10px}.username-text{z-index:1;min-width:140px;display:flex;font-size:16px}.username-text-animator:hover{transform:translate(100%);animation:my-animation 3s linear infinite}@keyframes my-animation{0%{transform:translate(0)}to{transform:translate(-50%)}}.tenantname-text{font-size:12px}.app-sidebar-footer-quick-ops{margin-top:10px;display:flex;justify-content:space-between}.app-sidebar-footer-op{color:#fffac2;font-weight:700;cursor:pointer}.app-sidebar-footer-ver{text-align:right;margin-top:30px;color:#fff}.app-search{position:relative}.app-search a{position:absolute;top:8px;right:14px;font-size:16px;color:#fff!important}.app-search .form-control{font-size:12px;letter-spacing:.03em;height:40px;color:#fff;padding:7px 40px 7px 20px;background:#3e4d64;box-shadow:none!important;border-top:none!important;border-left:none!important;border-right:none!important;border-bottom:1px solid #485974}\n"] }]
499
512
  }], ctorParameters: function () {
500
- return [{ type: i1$1.LocalizationService }, { type: i0.Type, decorators: [{
513
+ return [{ type: i1$2.LocalizationService }, { type: i0.Type, decorators: [{
501
514
  type: Optional
502
515
  }, {
503
516
  type: Inject,
504
517
  args: [MENU_LOCALIZATION]
505
- }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.Router }, { type: i3.AppState }, { type: i0.NgZone }, { type: i4.UtilityService }, { type: i5.AccessControlService }, { type: undefined, decorators: [{
518
+ }] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$1.Router }, { type: i1.AppState }, { type: i0.NgZone }, { type: i2$2.UtilityService }, { type: i5.AccessControlService }, { type: undefined, decorators: [{
506
519
  type: Inject,
507
520
  args: [MENU]
508
- }] }, { type: i3.MenuFilteringService }, { type: i3.TokenService }, { type: i2$1.HTTPService }, { type: i4.MessageService }, { type: i3.GlobalSearchService }];
521
+ }] }, { type: i1.MenuFilteringService }, { type: i1.TokenService }, { type: i1.GlobalSearchService }, { type: i1.UserPreferencesService }];
509
522
  }, propDecorators: { sidebar: [{
510
523
  type: ViewChild,
511
524
  args: ["sidebar", { static: true }]
@@ -598,12 +611,12 @@ class JaceModulesBoardComponent {
598
611
  });
599
612
  }
600
613
  }
601
- JaceModulesBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: JaceModulesBoardComponent, deps: [{ token: i3.TokenService }], target: i0.ɵɵFactoryTarget.Component });
602
- JaceModulesBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: JaceModulesBoardComponent, isStandalone: true, selector: "jace-modules-board", inputs: { Modules: "Modules" }, ngImport: i0, template: "<div class=\"module-backdrop\">\r\n <div class=\"module-container\">\r\n <div *ngFor=\"let cat of Categories; let catFirst = first;\">\r\n <h5 class=\"module-title\" [style.margin-top.px]=\"catFirst ? 0 : 10\">{{cat.category}}</h5>\r\n <div *ngFor=\"let row of cat.module_rows\" class=\"d-flex\">\r\n <ng-container *ngFor=\"let mod of row; let modFirst = first;\">\r\n <a *ngIf=\"mod.href\" [href]=\"mod.href\">\r\n <div class=\"module module-available\" [style.margin]=\"modFirst ? '0px' : '0px 0px 15px 15px'\">\r\n <div class=\"module-name\"><span>{{mod.name}}</span></div>\r\n <div class=\"module-footer\">{{'Disponibile'}}</div>\r\n </div>\r\n </a>\r\n <a *ngIf=\"!mod.href\">\r\n <div class=\"module module-unavailable\" [style.margin]=\"modFirst ? '0px' : '0px 0px 15px 15px'\">\r\n <div class=\"module-name\"><span>{{mod.name}}</span></div>\r\n <div class=\"module-footer\">{{'Non disponibile'}}</div>\r\n </div>\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.module-backdrop{position:fixed;width:100vw;height:calc(100vh - 60px);top:60px;left:0;background-color:#0009;z-index:1039;display:flex}.module-container{margin:auto;padding:15px;background:linear-gradient(217deg,#183a5a,#132D46 70.71%),linear-gradient(127deg,#132D46,#0e2032 70.71%),linear-gradient(336deg,#0e2032,#183a5a 70.71%);box-shadow:0 8px 6px #1313130a,0 12px 16px #1313130d}.module{padding:10px;background:#183a5a;height:94px;width:282px;position:relative;border:1px solid}.module-title{color:#fff;font-size:22px;font-family:Sora,sans-serif;text-transform:capitalize}.module-name{color:#fff;font-size:18px;font-family:Lato,sans-serif;text-transform:capitalize}.module-footer{color:#fff}.module-available{cursor:pointer;border-color:#84cc16}.module-available:hover{background-color:#0e2032}.module-available:hover .module-name{color:#01aa7b;font-weight:700}.module-available:hover .module-footer{color:#01aa7b}.module-unavailable{cursor:not-allowed;border-color:#fbbf24}.module-unavailable .module-name,.module-unavailable .module-footer{cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
614
+ JaceModulesBoardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: JaceModulesBoardComponent, deps: [{ token: i1.TokenService }], target: i0.ɵɵFactoryTarget.Component });
615
+ JaceModulesBoardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: JaceModulesBoardComponent, isStandalone: true, selector: "jace-modules-board", inputs: { Modules: "Modules" }, ngImport: i0, template: "<div class=\"module-backdrop\">\r\n <div class=\"module-container\">\r\n <div class=\"module-container-title\">Cambia Modulo</div>\r\n <div *ngFor=\"let cat of Categories; let catFirst = first;\">\r\n <div class=\"module-title\" [style.margin-top.px]=\"catFirst ? 0 : 10\">{{cat.category}}</div>\r\n <div *ngFor=\"let row of cat.module_rows\" class=\"d-flex\">\r\n <ng-container *ngFor=\"let mod of row; let modFirst = first;\">\r\n <a *ngIf=\"mod.href\" [href]=\"mod.href\">\r\n <div class=\"module module-available\" [style.margin]=\"modFirst ? '0px' : '0px 0px 15px 15px'\">\r\n <div class=\"module-name\"><span>{{mod.name}}</span></div>\r\n <div class=\"module-footer\">{{'Disponibile'}}</div>\r\n </div>\r\n </a>\r\n <a *ngIf=\"!mod.href\">\r\n <div class=\"module module-unavailable\" [style.margin]=\"modFirst ? '0px' : '0px 0px 15px 15px'\">\r\n <div class=\"module-name\"><span>{{mod.name}}</span></div>\r\n <div class=\"module-footer\">{{'Non disponibile'}}</div>\r\n </div>\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.module-backdrop{position:fixed;width:100vw;height:calc(100vh - 60px);top:60px;left:0;background-color:#0009;z-index:1039;display:flex}.module-container{margin:auto;padding:15px;background:linear-gradient(217deg,#3e4d64,#344154 70.71%),linear-gradient(127deg,#344154,#2a3544 70.71%),linear-gradient(336deg,#2a3544,#3e4d64 70.71%);box-shadow:0 8px 6px #1313130a,0 12px 16px #1313130d;min-width:600px;min-height:200px}.module-container-title{font-size:22px;color:#fffac2;margin-bottom:15px;margin-top:-5px;border-bottom:1px solid #F2F2F2}.module{padding:10px;background:#3e4d64;height:94px;width:282px;position:relative;border:1px solid}.module-title{color:#fff;font-size:20px;font-family:Sora,sans-serif;text-transform:capitalize;margin-bottom:10px}.module-name{color:#fff;font-size:18px;font-family:Lato,sans-serif;text-transform:capitalize}.module-footer{color:#fff;font-size:12px}.module-available{cursor:pointer;border-color:#84cc16}.module-available:hover{background-color:#2a3544}.module-available:hover .module-name{color:#fff8a9;font-weight:700}.module-available:hover .module-footer{color:#fff8a9}.module-unavailable{cursor:not-allowed;border-color:#fbbf24}.module-unavailable .module-name,.module-unavailable .module-footer{cursor:not-allowed}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
603
616
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: JaceModulesBoardComponent, decorators: [{
604
617
  type: Component,
605
- args: [{ selector: "jace-modules-board", changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf, NgFor], template: "<div class=\"module-backdrop\">\r\n <div class=\"module-container\">\r\n <div *ngFor=\"let cat of Categories; let catFirst = first;\">\r\n <h5 class=\"module-title\" [style.margin-top.px]=\"catFirst ? 0 : 10\">{{cat.category}}</h5>\r\n <div *ngFor=\"let row of cat.module_rows\" class=\"d-flex\">\r\n <ng-container *ngFor=\"let mod of row; let modFirst = first;\">\r\n <a *ngIf=\"mod.href\" [href]=\"mod.href\">\r\n <div class=\"module module-available\" [style.margin]=\"modFirst ? '0px' : '0px 0px 15px 15px'\">\r\n <div class=\"module-name\"><span>{{mod.name}}</span></div>\r\n <div class=\"module-footer\">{{'Disponibile'}}</div>\r\n </div>\r\n </a>\r\n <a *ngIf=\"!mod.href\">\r\n <div class=\"module module-unavailable\" [style.margin]=\"modFirst ? '0px' : '0px 0px 15px 15px'\">\r\n <div class=\"module-name\"><span>{{mod.name}}</span></div>\r\n <div class=\"module-footer\">{{'Non disponibile'}}</div>\r\n </div>\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.module-backdrop{position:fixed;width:100vw;height:calc(100vh - 60px);top:60px;left:0;background-color:#0009;z-index:1039;display:flex}.module-container{margin:auto;padding:15px;background:linear-gradient(217deg,#183a5a,#132D46 70.71%),linear-gradient(127deg,#132D46,#0e2032 70.71%),linear-gradient(336deg,#0e2032,#183a5a 70.71%);box-shadow:0 8px 6px #1313130a,0 12px 16px #1313130d}.module{padding:10px;background:#183a5a;height:94px;width:282px;position:relative;border:1px solid}.module-title{color:#fff;font-size:22px;font-family:Sora,sans-serif;text-transform:capitalize}.module-name{color:#fff;font-size:18px;font-family:Lato,sans-serif;text-transform:capitalize}.module-footer{color:#fff}.module-available{cursor:pointer;border-color:#84cc16}.module-available:hover{background-color:#0e2032}.module-available:hover .module-name{color:#01aa7b;font-weight:700}.module-available:hover .module-footer{color:#01aa7b}.module-unavailable{cursor:not-allowed;border-color:#fbbf24}.module-unavailable .module-name,.module-unavailable .module-footer{cursor:not-allowed}\n"] }]
606
- }], ctorParameters: function () { return [{ type: i3.TokenService }]; }, propDecorators: { Modules: [{
618
+ args: [{ selector: "jace-modules-board", changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf, NgFor], template: "<div class=\"module-backdrop\">\r\n <div class=\"module-container\">\r\n <div class=\"module-container-title\">Cambia Modulo</div>\r\n <div *ngFor=\"let cat of Categories; let catFirst = first;\">\r\n <div class=\"module-title\" [style.margin-top.px]=\"catFirst ? 0 : 10\">{{cat.category}}</div>\r\n <div *ngFor=\"let row of cat.module_rows\" class=\"d-flex\">\r\n <ng-container *ngFor=\"let mod of row; let modFirst = first;\">\r\n <a *ngIf=\"mod.href\" [href]=\"mod.href\">\r\n <div class=\"module module-available\" [style.margin]=\"modFirst ? '0px' : '0px 0px 15px 15px'\">\r\n <div class=\"module-name\"><span>{{mod.name}}</span></div>\r\n <div class=\"module-footer\">{{'Disponibile'}}</div>\r\n </div>\r\n </a>\r\n <a *ngIf=\"!mod.href\">\r\n <div class=\"module module-unavailable\" [style.margin]=\"modFirst ? '0px' : '0px 0px 15px 15px'\">\r\n <div class=\"module-name\"><span>{{mod.name}}</span></div>\r\n <div class=\"module-footer\">{{'Non disponibile'}}</div>\r\n </div>\r\n </a>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.module-backdrop{position:fixed;width:100vw;height:calc(100vh - 60px);top:60px;left:0;background-color:#0009;z-index:1039;display:flex}.module-container{margin:auto;padding:15px;background:linear-gradient(217deg,#3e4d64,#344154 70.71%),linear-gradient(127deg,#344154,#2a3544 70.71%),linear-gradient(336deg,#2a3544,#3e4d64 70.71%);box-shadow:0 8px 6px #1313130a,0 12px 16px #1313130d;min-width:600px;min-height:200px}.module-container-title{font-size:22px;color:#fffac2;margin-bottom:15px;margin-top:-5px;border-bottom:1px solid #F2F2F2}.module{padding:10px;background:#3e4d64;height:94px;width:282px;position:relative;border:1px solid}.module-title{color:#fff;font-size:20px;font-family:Sora,sans-serif;text-transform:capitalize;margin-bottom:10px}.module-name{color:#fff;font-size:18px;font-family:Lato,sans-serif;text-transform:capitalize}.module-footer{color:#fff;font-size:12px}.module-available{cursor:pointer;border-color:#84cc16}.module-available:hover{background-color:#2a3544}.module-available:hover .module-name{color:#fff8a9;font-weight:700}.module-available:hover .module-footer{color:#fff8a9}.module-unavailable{cursor:not-allowed;border-color:#fbbf24}.module-unavailable .module-name,.module-unavailable .module-footer{cursor:not-allowed}\n"] }]
619
+ }], ctorParameters: function () { return [{ type: i1.TokenService }]; }, propDecorators: { Modules: [{
607
620
  type: Input
608
621
  }] } });
609
622
 
@@ -725,13 +738,13 @@ class Navbar extends ReactiveComponent {
725
738
  this.showModules = !this.showModules;
726
739
  }
727
740
  }
728
- Navbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Navbar, deps: [{ token: i1$2.PreferencesService }, { token: i1$2.CacheService }, { token: i2$2.BaseMessageService }, { token: i2$2.NotificationsService }, { token: i4.MessageService }, { token: i1$1.LocalizationService }, { token: i2$1.HTTPService }, { token: i0.ChangeDetectorRef }, { token: i3.AppState }, { token: i3.TokenService }, { token: i1.Router }, { token: i3.CompletedJobRedirectionService }, { token: NAVBAR_EXTENSIONS }], target: i0.ɵɵFactoryTarget.Component });
729
- Navbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Navbar, isStandalone: true, selector: "navbar", viewQueries: [{ propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nav #navbar class=\"nav enuma-navbar\" [style.width]=\"isMenuCollapsed ? 'calc(100vw - 42px)' : 'calc(100vw - 230px)'\">\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <div><a (click)=\"toggleMenu()\" class=\"far fa-bars nav-icon app-padding-top-5 app-padding-left-15\"></a></div>\r\n <div class=\"app-padding-top-5 app-padding-left-15\"><ng-content></ng-content></div>\r\n <div style=\"margin-left: auto; display: flex;\">\r\n <!--Notifications (Jobs)-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <!--TODO: Spostare in modulo a parte _state.jobsInProgress, _state.jobsInProgress, ecc...-->\r\n <div *ngIf=\"_state.jobsInProgress > 0\" class=\"fa-beat-fade nav-jobs-icon-notification\"></div>\r\n <a [class.fa-shake]=\"_state.jobsInProgress > 0\" class=\"far fa-bell module-nav-menu-link dropdown-toggle app-pointer\" style=\"--fa-animation-duration: 3s; --fa-animation-iteration-count: 1;\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\"\r\n class=\"app-link app-no-selection app-inline app-pointer\"\r\n (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{'Completed' | localize : lc}}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\"\r\n [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\"\r\n [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n \r\n <!--Other Modules-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a (click)=\"onShowModules()\" class=\"far fa-cubes module-nav-menu-link dropdown-toggle app-pointer\"></a>\r\n <jace-modules-board *ngIf=\"showModules\" [Modules]=\"Modules\"></jace-modules-board>\r\n </div>\r\n \r\n <!--Quick Actions-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-folder-gear module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"d-flex dropdown-title-bg\">\r\n <div class=\"dropdown-title\">Gestisci Cache Utente</div>\r\n </li>\r\n <li class=\"dropdown-top\"></li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\">\r\n <i class=\"far fa-user-times app-margin-right-10\"></i>{{'Ripulisci le Preferenze Utente' | localize : lc}}\r\n </li>\r\n <!-- <li class=\"dropdown-divider\"></li> -->\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearAll()\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-bot\"></li>\r\n </ul>\r\n </div>\r\n \r\n <!--Punti di estensione per Calendar, Chatroom e chi pi\u00F9 ne ha pi\u00F9 ne metta...-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" *ngFor=\"let comp of extensionComponents\">\r\n <ng-template [componentHost]=\"comp\"></ng-template>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"nav-environment app-no-selection\">\r\n <ng-container *ngIf=\"applicationEnvironment == 1\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 2\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 5\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 6\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n </div>\r\n </div>\r\n <!--Debugging ruoli e permessi-->\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity.Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n</nav>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#01c38d!important;font-size:20px}.nav-jobs-icon-notification{top:7px;left:-7px;position:absolute;background-color:#07adec;border-radius:50%;height:8px;width:8px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #183a5a}.nav-jobs-menu-header{background-color:#132d46;padding:8px;font-size:14px;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#01c38d}.user-menu .dropdown-menu a:hover{color:#01aa7b;background-color:red}.user-menu .dropdown-menu a i{margin-right:8px}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 11px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.module-nav-menu-link{color:#01c38d!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.dropdown-title-bg{background-color:#132d46;border:1px solid #183a5a;border-bottom:0px}.dropdown-title{color:#fff;margin:auto;padding:8px 0;font-size:18px}.dropdown-menu{background-color:#fff;border:none}.dropdown-divider{border-top:1px solid #eeeeee}.dropdown-item{background-color:#fff;color:#07adec}.dropdown-item:hover{color:#069bd3!important;background-color:#eee}.dropdown-top{background-color:#fff;height:0;margin-bottom:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.dropdown-bot{background-color:#fff;height:0;margin-top:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.enuma-navbar{height:60px;align-items:center;background-color:#132d46;box-shadow:0 8px 6px -6px #1313130a,0 12px 16px -16px #1313130d;margin-bottom:-1px;border-bottom:1px solid #191E29}.nav-environment{color:#fff;background-color:#183a5a;text-align:center;padding:5px 10px;margin:5px 10px 0 0}.nav-icon{color:#01c38d!important;font-size:20px;cursor:pointer}.nav-right-section{position:absolute;right:10px;top:10px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i9.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i9.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i9.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ProgressbarModule }, { kind: "component", type: i11.ProgressbarComponent, selector: "progressbar", inputs: ["max", "animate", "striped", "type", "value"] }, { kind: "component", type: JaceModulesBoardComponent, selector: "jace-modules-board", inputs: ["Modules"] }, { kind: "directive", type: ComponentHostDirective, selector: "[componentHost]", inputs: ["componentHost", "Inputs"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$1.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
741
+ Navbar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Navbar, deps: [{ token: i1$3.PreferencesService }, { token: i1$3.CacheService }, { token: i2$3.BaseMessageService }, { token: i2$3.NotificationsService }, { token: i2$2.MessageService }, { token: i1$2.LocalizationService }, { token: i2$1.HTTPService }, { token: i0.ChangeDetectorRef }, { token: i1.AppState }, { token: i1.TokenService }, { token: i1$1.Router }, { token: i1.CompletedJobRedirectionService }, { token: NAVBAR_EXTENSIONS }], target: i0.ɵɵFactoryTarget.Component });
742
+ Navbar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: Navbar, isStandalone: true, selector: "navbar", viewQueries: [{ propertyName: "navbar", first: true, predicate: ["navbar"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<nav #navbar class=\"nav enuma-navbar\" [style.width]=\"isMenuCollapsed ? 'calc(100vw - 42px)' : 'calc(100vw - 230px)'\">\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <div><a (click)=\"toggleMenu()\" class=\"far fa-bars nav-icon app-padding-top-5 app-padding-left-15\"></a></div>\r\n <div class=\"app-padding-top-5 app-padding-left-15\"><ng-content></ng-content></div>\r\n <div style=\"margin-left: auto; display: flex;\">\r\n <!--Notifications (Jobs)-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <!--TODO: Spostare in modulo a parte _state.jobsInProgress, _state.jobsInProgress, ecc...-->\r\n <div *ngIf=\"_state.jobsInProgress > 0\" class=\"fa-beat-fade nav-jobs-icon-notification\"></div>\r\n <a [class.fa-shake]=\"_state.jobsInProgress > 0\" class=\"far fa-bell module-nav-menu-link dropdown-toggle app-pointer\" style=\"--fa-animation-duration: 3s; --fa-animation-iteration-count: 1;\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\"\r\n class=\"app-link app-no-selection app-inline app-pointer\"\r\n (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{'Completed' | localize : lc}}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\"\r\n [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\"\r\n [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n \r\n <!--Other Modules-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a (click)=\"onShowModules()\" class=\"far fa-cubes module-nav-menu-link dropdown-toggle app-pointer\"></a>\r\n </div>\r\n \r\n <!--Quick Actions-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-folder-gear module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"d-flex dropdown-title-bg\">\r\n <div class=\"dropdown-title\">Gestisci Cache Utente</div>\r\n </li>\r\n <li class=\"dropdown-top\"></li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\">\r\n <i class=\"far fa-user-times app-margin-right-10\"></i>{{'Ripulisci le Preferenze Utente' | localize : lc}}\r\n </li>\r\n <!-- <li class=\"dropdown-divider\"></li> -->\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearAll()\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-bot\"></li>\r\n </ul>\r\n </div>\r\n \r\n <!--Punti di estensione per Calendar, Chatroom e chi pi\u00F9 ne ha pi\u00F9 ne metta...-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" *ngFor=\"let comp of extensionComponents\">\r\n <ng-template [componentHost]=\"comp\"></ng-template>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"nav-environment app-no-selection\">\r\n <ng-container *ngIf=\"applicationEnvironment == 1\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 2\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 5\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 6\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n </div>\r\n </div>\r\n <!--Debugging ruoli e permessi-->\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity.Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<jace-modules-board *ngIf=\"showModules\" [Modules]=\"Modules\"></jace-modules-board>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-icon-notification{top:7px;left:-7px;position:absolute;background-color:#0056b3;border-radius:50%;height:8px;width:8px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #3e4d64}.nav-jobs-menu-header{background-color:#344154;padding:8px;font-size:14px;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#fffac2}.user-menu .dropdown-menu a:hover{color:#fff8a9;background-color:red}.user-menu .dropdown-menu a i{margin-right:8px}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 11px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.dropdown-title-bg{background-color:#344154;border:1px solid #3e4d64;border-bottom:0px}.dropdown-title{color:#fff;margin:auto;padding:8px 0;font-size:18px}.dropdown-menu{background-color:#fff;border:none}.dropdown-divider{border-top:1px solid #eeeeee}.dropdown-item{background-color:#fff;color:#0056b3}.dropdown-item:hover{color:#004a9a!important;background-color:#eee}.dropdown-top{background-color:#fff;height:0;margin-bottom:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.dropdown-bot{background-color:#fff;height:0;margin-top:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.enuma-navbar{height:60px;align-items:center;background-color:#2a3544;box-shadow:0 8px 6px -6px #1313130a,0 12px 16px -16px #1313130d;margin-bottom:-1px;border-bottom:1px solid #191E29}.nav-environment{color:#fff;background-color:#3e4d64;text-align:center;padding:5px 10px;margin:5px 10px 0 0}.nav-icon{color:#fff!important;font-size:20px;cursor:pointer}.nav-right-section{position:absolute;right:10px;top:10px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i9.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i9.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i9.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i10.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ProgressbarModule }, { kind: "component", type: i11.ProgressbarComponent, selector: "progressbar", inputs: ["max", "animate", "striped", "type", "value"] }, { kind: "component", type: JaceModulesBoardComponent, selector: "jace-modules-board", inputs: ["Modules"] }, { kind: "directive", type: ComponentHostDirective, selector: "[componentHost]", inputs: ["componentHost", "Inputs"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$2.LocalizePipe, name: "localize" }], viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
730
743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: Navbar, decorators: [{
731
744
  type: Component,
732
- args: [{ selector: "navbar", viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [RouterLink, FormsModule, BsDropdownModule, MatSlideToggleModule, NgIf, NgFor, ProgressbarModule, JaceModulesBoardComponent, ComponentHostDirective, NgTemplateOutlet, LocalizationModule], template: "<nav #navbar class=\"nav enuma-navbar\" [style.width]=\"isMenuCollapsed ? 'calc(100vw - 42px)' : 'calc(100vw - 230px)'\">\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <div><a (click)=\"toggleMenu()\" class=\"far fa-bars nav-icon app-padding-top-5 app-padding-left-15\"></a></div>\r\n <div class=\"app-padding-top-5 app-padding-left-15\"><ng-content></ng-content></div>\r\n <div style=\"margin-left: auto; display: flex;\">\r\n <!--Notifications (Jobs)-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <!--TODO: Spostare in modulo a parte _state.jobsInProgress, _state.jobsInProgress, ecc...-->\r\n <div *ngIf=\"_state.jobsInProgress > 0\" class=\"fa-beat-fade nav-jobs-icon-notification\"></div>\r\n <a [class.fa-shake]=\"_state.jobsInProgress > 0\" class=\"far fa-bell module-nav-menu-link dropdown-toggle app-pointer\" style=\"--fa-animation-duration: 3s; --fa-animation-iteration-count: 1;\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\"\r\n class=\"app-link app-no-selection app-inline app-pointer\"\r\n (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{'Completed' | localize : lc}}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\"\r\n [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\"\r\n [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n \r\n <!--Other Modules-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a (click)=\"onShowModules()\" class=\"far fa-cubes module-nav-menu-link dropdown-toggle app-pointer\"></a>\r\n <jace-modules-board *ngIf=\"showModules\" [Modules]=\"Modules\"></jace-modules-board>\r\n </div>\r\n \r\n <!--Quick Actions-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-folder-gear module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"d-flex dropdown-title-bg\">\r\n <div class=\"dropdown-title\">Gestisci Cache Utente</div>\r\n </li>\r\n <li class=\"dropdown-top\"></li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\">\r\n <i class=\"far fa-user-times app-margin-right-10\"></i>{{'Ripulisci le Preferenze Utente' | localize : lc}}\r\n </li>\r\n <!-- <li class=\"dropdown-divider\"></li> -->\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearAll()\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-bot\"></li>\r\n </ul>\r\n </div>\r\n \r\n <!--Punti di estensione per Calendar, Chatroom e chi pi\u00F9 ne ha pi\u00F9 ne metta...-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" *ngFor=\"let comp of extensionComponents\">\r\n <ng-template [componentHost]=\"comp\"></ng-template>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"nav-environment app-no-selection\">\r\n <ng-container *ngIf=\"applicationEnvironment == 1\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 2\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 5\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 6\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n </div>\r\n </div>\r\n <!--Debugging ruoli e permessi-->\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity.Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n</nav>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#01c38d!important;font-size:20px}.nav-jobs-icon-notification{top:7px;left:-7px;position:absolute;background-color:#07adec;border-radius:50%;height:8px;width:8px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #183a5a}.nav-jobs-menu-header{background-color:#132d46;padding:8px;font-size:14px;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#01c38d}.user-menu .dropdown-menu a:hover{color:#01aa7b;background-color:red}.user-menu .dropdown-menu a i{margin-right:8px}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 11px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.module-nav-menu-link{color:#01c38d!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.dropdown-title-bg{background-color:#132d46;border:1px solid #183a5a;border-bottom:0px}.dropdown-title{color:#fff;margin:auto;padding:8px 0;font-size:18px}.dropdown-menu{background-color:#fff;border:none}.dropdown-divider{border-top:1px solid #eeeeee}.dropdown-item{background-color:#fff;color:#07adec}.dropdown-item:hover{color:#069bd3!important;background-color:#eee}.dropdown-top{background-color:#fff;height:0;margin-bottom:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.dropdown-bot{background-color:#fff;height:0;margin-top:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.enuma-navbar{height:60px;align-items:center;background-color:#132d46;box-shadow:0 8px 6px -6px #1313130a,0 12px 16px -16px #1313130d;margin-bottom:-1px;border-bottom:1px solid #191E29}.nav-environment{color:#fff;background-color:#183a5a;text-align:center;padding:5px 10px;margin:5px 10px 0 0}.nav-icon{color:#01c38d!important;font-size:20px;cursor:pointer}.nav-right-section{position:absolute;right:10px;top:10px}\n"] }]
745
+ args: [{ selector: "navbar", viewProviders: [{ provide: LocalizationService, useClass: NavBarLoc }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [RouterLink, FormsModule, BsDropdownModule, MatSlideToggleModule, NgIf, NgFor, ProgressbarModule, JaceModulesBoardComponent, ComponentHostDirective, NgTemplateOutlet, LocalizationModule], template: "<nav #navbar class=\"nav enuma-navbar\" [style.width]=\"isMenuCollapsed ? 'calc(100vw - 42px)' : 'calc(100vw - 230px)'\">\r\n <div class=\"d-flex\" style=\"width: 100%;\">\r\n <div><a (click)=\"toggleMenu()\" class=\"far fa-bars nav-icon app-padding-top-5 app-padding-left-15\"></a></div>\r\n <div class=\"app-padding-top-5 app-padding-left-15\"><ng-content></ng-content></div>\r\n <div style=\"margin-left: auto; display: flex;\">\r\n <!--Notifications (Jobs)-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <!--TODO: Spostare in modulo a parte _state.jobsInProgress, _state.jobsInProgress, ecc...-->\r\n <div *ngIf=\"_state.jobsInProgress > 0\" class=\"fa-beat-fade nav-jobs-icon-notification\"></div>\r\n <a [class.fa-shake]=\"_state.jobsInProgress > 0\" class=\"far fa-bell module-nav-menu-link dropdown-toggle app-pointer\" style=\"--fa-animation-duration: 3s; --fa-animation-iteration-count: 1;\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"nav-jobs-menu\" role=\"menu\">\r\n <div class=\"nav-jobs-menu-header\">\r\n <span>{{'Job Applicativi' | localize : lc}}</span>\r\n <span class=\"pull-right m-t-min-2\"><mat-slide-toggle [(ngModel)]=\"_state.notifyOnCompletedJobs\" (click)=\"clearMessages(); $event.stopPropagation();\"></mat-slide-toggle></span>\r\n <span class=\"pull-right app-margin-right-5\">{{'Notifiche' | localize : lc}}:</span>\r\n </div>\r\n <div class=\"nav-jobs-menu-list\">\r\n <div *ngIf=\"_state.allJobs.length == 0\" class=\"nav-jobs-menu-list-empty\">\r\n <div>{{\"Al momento non c'\u00E8 nulla in esecuzione\" | localize : lc}}</div>\r\n </div>\r\n <div *ngFor=\"let job of _state.allJobs; let last = last\" [class.app-margin-bottom-5]=\"!last\">\r\n <span class=\"nav-jobs-menu-list-description\">\r\n <span *ngIf=\"!job.completed\" title=\"{{job.description}}\">{{job.smalldescription}}</span>\r\n <span *ngIf=\"job.completed\" title=\"{{job.description}}\"\r\n class=\"app-link app-no-selection app-inline app-pointer\"\r\n (click)=\"completedJobClicked(job); $event.stopPropagation();\">{{job.smalldescription}}</span>\r\n <strong class=\"pull-right\" *ngIf=\"!job.completed\">{{job.percentage}}%</strong>\r\n <strong class=\"pull-right\" *ngIf=\"job.completed\">{{'Completed' | localize : lc}}</strong>\r\n </span>\r\n <div class=\"progress progress-sm\">\r\n <progressbar *ngIf=\"!job.completed\" [max]=\"100\" [value]=\"job.percentage\" [striped]=\"true\"\r\n [animate]=\"true\"></progressbar>\r\n <progressbar *ngIf=\"job.completed\" type=\"success\" [max]=\"100\" [value]=\"100\" [striped]=\"false\"\r\n [animate]=\"false\"></progressbar>\r\n </div>\r\n </div>\r\n </div>\r\n </ul>\r\n </div>\r\n \r\n <!--Other Modules-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a (click)=\"onShowModules()\" class=\"far fa-cubes module-nav-menu-link dropdown-toggle app-pointer\"></a>\r\n </div>\r\n \r\n <!--Quick Actions-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" dropdown container=\"body\" placement=\"bottom right\">\r\n <a class=\"far fa-folder-gear module-nav-menu-link dropdown-toggle app-pointer\" dropdownToggle></a>\r\n <ul *dropdownMenu class=\"dropdown-menu dropdown-menu-right-user app-no-padding\" role=\"menu\">\r\n <li class=\"d-flex dropdown-title-bg\">\r\n <div class=\"dropdown-title\">Gestisci Cache Utente</div>\r\n </li>\r\n <li class=\"dropdown-top\"></li>\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearUserPreferences()\">\r\n <i class=\"far fa-user-times app-margin-right-10\"></i>{{'Ripulisci le Preferenze Utente' | localize : lc}}\r\n </li>\r\n <!-- <li class=\"dropdown-divider\"></li> -->\r\n <li class=\"dropdown-item app-pointer\" (click)=\"clearAll()\">\r\n <i class=\"far fa-broom-wide app-margin-right-10\"></i>{{'Ripulisci la Cache' | localize : lc}}\r\n </li>\r\n <li class=\"dropdown-bot\"></li>\r\n </ul>\r\n </div>\r\n \r\n <!--Punti di estensione per Calendar, Chatroom e chi pi\u00F9 ne ha pi\u00F9 ne metta...-->\r\n <div class=\"user-menu app-no-selection app-margin-right-15\" *ngFor=\"let comp of extensionComponents\">\r\n <ng-template [componentHost]=\"comp\"></ng-template>\r\n </div>\r\n </div>\r\n <div>\r\n <div class=\"nav-environment app-no-selection\">\r\n <ng-container *ngIf=\"applicationEnvironment == 1\">{{'Ambiente di Produzione' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 2\">{{'Ambiente di Sviluppo' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 5\">{{'Ambiente di Staging' | localize : lc}}</ng-container>\r\n <ng-container *ngIf=\"applicationEnvironment == 6\">{{'Ambiente di Staging A' | localize : lc}}</ng-container>\r\n </div>\r\n </div>\r\n <!--Debugging ruoli e permessi-->\r\n <div [hidden]=\"true\">\r\n <div>Permissions:</div>\r\n <div *ngFor=\"let p of CurrentIdentity.Permissions\">{{p}}</div>\r\n <div>Roles:</div>\r\n <div *ngFor=\"let r of CurrentIdentity.Roles\">{{r}}</div>\r\n </div>\r\n </div>\r\n</nav>\r\n\r\n<jace-modules-board *ngIf=\"showModules\" [Modules]=\"Modules\"></jace-modules-board>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.nav-jobs-icon{position:absolute;left:-20px;margin:0;padding:0;top:10px;color:#fff!important;font-size:20px}.nav-jobs-icon-notification{top:7px;left:-7px;position:absolute;background-color:#0056b3;border-radius:50%;height:8px;width:8px}.nav-jobs-menu{width:350px;height:250px;background:white;margin:2px 0 0;padding:5px;border:1px solid #3e4d64}.nav-jobs-menu-header{background-color:#344154;padding:8px;font-size:14px;margin-top:-5px;margin-left:-5px;margin-right:-5px}.nav-jobs-menu-header span{color:#fffc}.nav-jobs-menu-list{position:relative;overflow:auto;width:auto;height:203px;padding:5px}.nav-jobs-menu-list-description{font-size:13px;color:#666}.nav-jobs-menu-list-empty{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:15px;text-align:center}.user-menu{font-size:14px}.user-menu .dropdown-toggle:after{display:none}.user-menu .dropdown-menu{right:0;top:auto!important;left:auto!important;margin-top:10px;padding-top:0;overflow:hidden;border-radius:0;font-size:14px;box-shadow:0 6px 12px #0003;transform:none!important}.user-menu .dropdown-menu a{color:#fffac2}.user-menu .dropdown-menu a:hover{color:#fff8a9;background-color:red}.user-menu .dropdown-menu a i{margin-right:8px}.navbar-help{font-size:20px!important;color:#ffffff80!important;border:1px solid rgba(255,255,255,.1);margin-left:5px!important;padding:5px 10px 2px 11px!important;border-radius:50%;background-color:#ffffff0d;cursor:pointer;width:31px;height:31px}.navbar-fill{margin-top:-5px;margin-bottom:-5px;margin-left:10px;width:calc(100% - 530px)}.navbar-fillable{width:calc(100% - 231px)}.navbar-floating-label{position:absolute;top:-9px;left:-5px;background:#242D3A;padding-left:5px;padding-right:5px;color:#ffffffe6!important}.module-nav-menu-link{color:#fff!important;font-size:20px;padding-top:10px;padding-right:5px;cursor:pointer}.module-board-menu{position:relative;top:1px;background-color:#1f1f1f;padding:15px}.dropdown-title-bg{background-color:#344154;border:1px solid #3e4d64;border-bottom:0px}.dropdown-title{color:#fff;margin:auto;padding:8px 0;font-size:18px}.dropdown-menu{background-color:#fff;border:none}.dropdown-divider{border-top:1px solid #eeeeee}.dropdown-item{background-color:#fff;color:#0056b3}.dropdown-item:hover{color:#004a9a!important;background-color:#eee}.dropdown-top{background-color:#fff;height:0;margin-bottom:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.dropdown-bot{background-color:#fff;height:0;margin-top:.5rem;overflow:hidden;border-top:1px solid #eeeeee}.enuma-navbar{height:60px;align-items:center;background-color:#2a3544;box-shadow:0 8px 6px -6px #1313130a,0 12px 16px -16px #1313130d;margin-bottom:-1px;border-bottom:1px solid #191E29}.nav-environment{color:#fff;background-color:#3e4d64;text-align:center;padding:5px 10px;margin:5px 10px 0 0}.nav-icon{color:#fff!important;font-size:20px;cursor:pointer}.nav-right-section{position:absolute;right:10px;top:10px}\n"] }]
733
746
  }], ctorParameters: function () {
734
- return [{ type: i1$2.PreferencesService }, { type: i1$2.CacheService }, { type: i2$2.BaseMessageService }, { type: i2$2.NotificationsService }, { type: i4.MessageService }, { type: i1$1.LocalizationService }, { type: i2$1.HTTPService }, { type: i0.ChangeDetectorRef }, { type: i3.AppState }, { type: i3.TokenService }, { type: i1.Router }, { type: i3.CompletedJobRedirectionService }, { type: undefined, decorators: [{
747
+ return [{ type: i1$3.PreferencesService }, { type: i1$3.CacheService }, { type: i2$3.BaseMessageService }, { type: i2$3.NotificationsService }, { type: i2$2.MessageService }, { type: i1$2.LocalizationService }, { type: i2$1.HTTPService }, { type: i0.ChangeDetectorRef }, { type: i1.AppState }, { type: i1.TokenService }, { type: i1$1.Router }, { type: i1.CompletedJobRedirectionService }, { type: undefined, decorators: [{
735
748
  type: Inject,
736
749
  args: [NAVBAR_EXTENSIONS]
737
750
  }] }];
@@ -777,12 +790,12 @@ class PagesComponent {
777
790
  this.getHeight();
778
791
  }
779
792
  }
780
- PagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PagesComponent, deps: [{ token: i3$1.DomSanitizer }, { token: i3.AppState }, { token: i2.Location }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
781
- PagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PagesComponent, isStandalone: true, selector: "pages", host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<div class=\"pages-container\">\r\n <sidebar></sidebar>\r\n <div>\r\n <navbar>\r\n <breadcrumb></breadcrumb>\r\n </navbar>\r\n <div class=\"main-wrapper\" [style.max-height.px]=\"maxHeight\" [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\">\r\n <div class=\"az-overlay\" *ngIf=\"!isMenuCollapsed\" (click)=\"hideMenu()\"></div>\r\n <div class=\"main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <back-top [position]=\"200\"></back-top>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.main-wrapper{padding:20px 40px;position:relative;width:100%;overflow:auto}.main{height:100%;min-height:650px}.az-overlay{position:fixed;inset:0;z-index:8;background:rgba(7,173,236,.2);width:100%;height:100%;display:none}.pages-container{height:100vh;width:100vw;display:flex}@media (max-width: 544px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:0;padding:30px 20px}.az-overlay{display:block}.footer .footer-main,.footer .created{float:none}}@media (min-width: 544px) and (max-width: 768px){.az-overlay{display:block}}\n"], dependencies: [{ kind: "component", type: Navbar, selector: "navbar" }, { kind: "component", type: Sidebar, selector: "sidebar" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: Breadcrumb, selector: "breadcrumb" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: BackTop, selector: "back-top", inputs: ["position", "showSpeed", "moveSpeed"] }], encapsulation: i0.ViewEncapsulation.None });
793
+ PagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PagesComponent, deps: [{ token: i3.DomSanitizer }, { token: i1.AppState }, { token: i2.Location }, { token: i1$1.Router }], target: i0.ɵɵFactoryTarget.Component });
794
+ PagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PagesComponent, isStandalone: true, selector: "pages", host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<div class=\"pages-container\">\r\n <sidebar></sidebar>\r\n <div>\r\n <navbar>\r\n <breadcrumb></breadcrumb>\r\n </navbar>\r\n <div class=\"main-wrapper\" [style.max-height.px]=\"maxHeight\" [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\">\r\n <div class=\"az-overlay\" *ngIf=\"!isMenuCollapsed\" (click)=\"hideMenu()\"></div>\r\n <div class=\"main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <back-top [position]=\"200\"></back-top>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.main-wrapper{padding:20px 40px;position:relative;width:100%;height:100%;overflow:auto}.main{height:100%;min-height:650px}.az-overlay{position:fixed;inset:0;z-index:8;background:rgba(0,86,179,.2);width:100%;height:100%;display:none}.pages-container{height:100vh;width:100vw;display:flex}@media (max-width: 544px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:0;padding:30px 20px}.az-overlay{display:block}.footer .footer-main,.footer .created{float:none}}@media (min-width: 544px) and (max-width: 768px){.az-overlay{display:block}}\n"], dependencies: [{ kind: "component", type: Navbar, selector: "navbar" }, { kind: "component", type: Sidebar, selector: "sidebar" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: Breadcrumb, selector: "breadcrumb" }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: BackTop, selector: "back-top", inputs: ["position", "showSpeed", "moveSpeed"] }], encapsulation: i0.ViewEncapsulation.None });
782
795
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PagesComponent, decorators: [{
783
796
  type: Component,
784
- args: [{ selector: "pages", encapsulation: ViewEncapsulation.None, standalone: true, imports: [Navbar, Sidebar, NgClass, NgIf, Breadcrumb, RouterOutlet, BackTop], template: "<div class=\"pages-container\">\r\n <sidebar></sidebar>\r\n <div>\r\n <navbar>\r\n <breadcrumb></breadcrumb>\r\n </navbar>\r\n <div class=\"main-wrapper\" [style.max-height.px]=\"maxHeight\" [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\">\r\n <div class=\"az-overlay\" *ngIf=\"!isMenuCollapsed\" (click)=\"hideMenu()\"></div>\r\n <div class=\"main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <back-top [position]=\"200\"></back-top>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.main-wrapper{padding:20px 40px;position:relative;width:100%;overflow:auto}.main{height:100%;min-height:650px}.az-overlay{position:fixed;inset:0;z-index:8;background:rgba(7,173,236,.2);width:100%;height:100%;display:none}.pages-container{height:100vh;width:100vw;display:flex}@media (max-width: 544px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:0;padding:30px 20px}.az-overlay{display:block}.footer .footer-main,.footer .created{float:none}}@media (min-width: 544px) and (max-width: 768px){.az-overlay{display:block}}\n"] }]
785
- }], ctorParameters: function () { return [{ type: i3$1.DomSanitizer }, { type: i3.AppState }, { type: i2.Location }, { type: i1.Router }]; }, propDecorators: { onResize: [{
797
+ args: [{ selector: "pages", encapsulation: ViewEncapsulation.None, standalone: true, imports: [Navbar, Sidebar, NgClass, NgIf, Breadcrumb, RouterOutlet, BackTop], template: "<div class=\"pages-container\">\r\n <sidebar></sidebar>\r\n <div>\r\n <navbar>\r\n <breadcrumb></breadcrumb>\r\n </navbar>\r\n <div class=\"main-wrapper\" [style.max-height.px]=\"maxHeight\" [ngClass]=\"{'menu-collapsed': isMenuCollapsed}\">\r\n <div class=\"az-overlay\" *ngIf=\"!isMenuCollapsed\" (click)=\"hideMenu()\"></div>\r\n <div class=\"main\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n <back-top [position]=\"200\"></back-top>\r\n </div>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.main-wrapper{padding:20px 40px;position:relative;width:100%;height:100%;overflow:auto}.main{height:100%;min-height:650px}.az-overlay{position:fixed;inset:0;z-index:8;background:rgba(0,86,179,.2);width:100%;height:100%;display:none}.pages-container{height:100vh;width:100vw;display:flex}@media (max-width: 544px){.main-wrapper,.main-wrapper.menu-collapsed{margin-left:0;padding:30px 20px}.az-overlay{display:block}.footer .footer-main,.footer .created{float:none}}@media (min-width: 544px) and (max-width: 768px){.az-overlay{display:block}}\n"] }]
798
+ }], ctorParameters: function () { return [{ type: i3.DomSanitizer }, { type: i1.AppState }, { type: i2.Location }, { type: i1$1.Router }]; }, propDecorators: { onResize: [{
786
799
  type: HostListener,
787
800
  args: ['window:resize', ['$event']]
788
801
  }] } });
@@ -819,12 +832,12 @@ class ExternalPagesComponent {
819
832
  });
820
833
  }
821
834
  }
822
- ExternalPagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExternalPagesComponent, deps: [{ token: i5.AccessControlService }, { token: i1$1.LocalizationService }, { token: i2$1.HTTPService }, { token: i3.AppState }, { token: i1.ActivatedRoute }, { token: i3.TokenService }], target: i0.ɵɵFactoryTarget.Component });
835
+ ExternalPagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExternalPagesComponent, deps: [{ token: i5.AccessControlService }, { token: i1$2.LocalizationService }, { token: i2$1.HTTPService }, { token: i1.AppState }, { token: i1$1.ActivatedRoute }, { token: i1.TokenService }], target: i0.ɵɵFactoryTarget.Component });
823
836
  ExternalPagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ExternalPagesComponent, isStandalone: true, selector: "external-pages", ngImport: i0, template: "<router-outlet></router-outlet>", dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
824
837
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExternalPagesComponent, decorators: [{
825
838
  type: Component,
826
839
  args: [{ selector: "external-pages", standalone: true, imports: [RouterOutlet], template: "<router-outlet></router-outlet>" }]
827
- }], ctorParameters: function () { return [{ type: i5.AccessControlService }, { type: i1$1.LocalizationService }, { type: i2$1.HTTPService }, { type: i3.AppState }, { type: i1.ActivatedRoute }, { type: i3.TokenService }]; } });
840
+ }], ctorParameters: function () { return [{ type: i5.AccessControlService }, { type: i1$2.LocalizationService }, { type: i2$1.HTTPService }, { type: i1.AppState }, { type: i1$1.ActivatedRoute }, { type: i1.TokenService }]; } });
828
841
 
829
842
  // Angular
830
843
  class JaceLoginComponent {
@@ -876,13 +889,13 @@ class RedirecterComponent {
876
889
  }
877
890
  }
878
891
  }
879
- RedirecterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RedirecterComponent, deps: [{ token: i3.AppState }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: REDIRECT_MAP, optional: true }], target: i0.ɵɵFactoryTarget.Component });
892
+ RedirecterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RedirecterComponent, deps: [{ token: i1.AppState }, { token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: REDIRECT_MAP, optional: true }], target: i0.ɵɵFactoryTarget.Component });
880
893
  RedirecterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RedirecterComponent, isStandalone: true, selector: "redirecter", ngImport: i0, template: "<div *ngIf=\"Error\">{{Error}}</div>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
881
894
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RedirecterComponent, decorators: [{
882
895
  type: Component,
883
896
  args: [{ selector: "redirecter", encapsulation: ViewEncapsulation.None, standalone: true, imports: [NgIf], template: "<div *ngIf=\"Error\">{{Error}}</div>" }]
884
897
  }], ctorParameters: function () {
885
- return [{ type: i3.AppState }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: undefined, decorators: [{
898
+ return [{ type: i1.AppState }, { type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: undefined, decorators: [{
886
899
  type: Optional
887
900
  }, {
888
901
  type: Inject,
@@ -982,12 +995,12 @@ class JaceResourceComponent {
982
995
  this.sanitizedSourceResource = this.sanitizer.bypassSecurityTrustResourceUrl(finalUrl);
983
996
  }
984
997
  }
985
- JaceResourceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: JaceResourceComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i3.AppState }, { token: i3$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
998
+ JaceResourceComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: JaceResourceComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AppState }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
986
999
  JaceResourceComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: JaceResourceComponent, isStandalone: true, selector: "jace-resource", inputs: { Module: "Module", ModuleKeyType: "ModuleKeyType", Page: "Page", Localhost: "Localhost" }, ngImport: i0, template: "<iframe *ngIf=\"!!sanitizedSourceResource\" id=\"externalFrame\" style=\"width: 100%; border: none;\" [style.height.px]=\"Height\" \r\n [src]=\"sanitizedSourceResource\">\r\n</iframe>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
987
1000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: JaceResourceComponent, decorators: [{
988
1001
  type: Component,
989
1002
  args: [{ selector: "jace-resource", encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIf], template: "<iframe *ngIf=\"!!sanitizedSourceResource\" id=\"externalFrame\" style=\"width: 100%; border: none;\" [style.height.px]=\"Height\" \r\n [src]=\"sanitizedSourceResource\">\r\n</iframe>" }]
990
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i3.AppState }, { type: i3$1.DomSanitizer }]; }, propDecorators: { Module: [{
1003
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.AppState }, { type: i3.DomSanitizer }]; }, propDecorators: { Module: [{
991
1004
  type: Input
992
1005
  }], ModuleKeyType: [{
993
1006
  type: Input
@@ -997,6 +1010,46 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
997
1010
  type: Input
998
1011
  }] } });
999
1012
 
1013
+ class UserInfoComponentLoc extends LocalizationService {
1014
+ constructor(injector) {
1015
+ super(injector);
1016
+ super.set("en->it", "Name", ["Nome"]);
1017
+ super.set("en->it", "Last Login Date", ["Data ultimo accesso"]);
1018
+ super.set("en->it", "ID Account", ["Codice Account"]);
1019
+ super.set("en->it", "ID User", ["Codice Utente"]);
1020
+ super.set("en->it", "Description", ["Descrizione"]);
1021
+ super.set("en->it", "Tenant Name", ["Nome Tenant"]);
1022
+ super.set("en->it", "Delete", ["Cancella"]);
1023
+ super.set("en->it", "Save", ["Salva"]);
1024
+ super.set("en->it", "Clear User Preferences", ["Ripulisci Preferenze Utente"]);
1025
+ super.set("en->it", "Old Password", ["Vecchia Password"]);
1026
+ super.set("en->it", "New Password", ["Nuova Password"]);
1027
+ super.set("en->it", "Confirm Password", ["Conferma nuova password"]);
1028
+ super.set("en->it", "Phone Number", ["Numero di Cellulare"]);
1029
+ super.set("en->it", "Email", ["Email"]);
1030
+ super.set("en->it", "Change password for all tenants", ["Cambia password per tutti i Tenant"]);
1031
+ super.set("en->it", "Change password for external systems", ["Cambia password per sistemi esterni"]);
1032
+ super.set("en->it", "Change", ["Modifica"]);
1033
+ super.set("en->it", "Recovery Info", ["Informazioni di Recupero"]);
1034
+ super.set("en->it", "Visibility Info", ["Info Visibilita'"]);
1035
+ super.set("en->it", "Roles", ["Ruoli"]);
1036
+ super.set("en->it", "Permissions", ["Permessi"]);
1037
+ super.set("en->it", "Preference", ["Preferenze"]);
1038
+ super.set("en->it", "Reset", ["Reimposta"]);
1039
+ super.set("en->it", "Upload Image", ["Carica Immagine"]);
1040
+ super.set("en->it", "Show Advanced", ["Mostra Avanzate"]);
1041
+ super.set("en->it", "Change Profile Picture", ["Cambia Immagine del Profilo"]);
1042
+ super.set("en->it", "Delete Profile Picture", ["Rimuovi Immagine del Profilo"]);
1043
+ super.set("en->it", "Password", ["Password"]);
1044
+ super.set("en->it", "Error", ["Errore"]);
1045
+ }
1046
+ }
1047
+ UserInfoComponentLoc.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfoComponentLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
1048
+ UserInfoComponentLoc.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfoComponentLoc });
1049
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfoComponentLoc, decorators: [{
1050
+ type: Injectable
1051
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
1052
+
1000
1053
  // Angular
1001
1054
  class EsModalComponent {
1002
1055
  constructor(_state) {
@@ -1010,12 +1063,12 @@ class EsModalComponent {
1010
1063
  show() { this.Modal.show(); }
1011
1064
  hide() { this.Modal.hide(); }
1012
1065
  }
1013
- EsModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsModalComponent, deps: [{ token: i3.AppState }], target: i0.ɵɵFactoryTarget.Component });
1066
+ EsModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsModalComponent, deps: [{ token: i1.AppState }], target: i0.ɵɵFactoryTarget.Component });
1014
1067
  EsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EsModalComponent, isStandalone: true, selector: "es-modal", inputs: { Size: "Size", IgnoreBackdrop: "IgnoreBackdrop", HasOverlap: "HasOverlap" }, outputs: { onShow: "onShow", onHide: "onHide" }, viewQueries: [{ propertyName: "Modal", first: true, predicate: ["modalRef"], descendants: true }], ngImport: i0, template: "<div esModal #modalRef=\"es-modal\"\r\n class=\"modal fade\"\r\n role=\"dialog\"\r\n aria-hidden=\"true\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onHide.emit()\"\r\n [config]=\"{backdrop: true, ignoreBackdropClick: IgnoreBackdrop}\">\r\n <div class=\"modal-dialog\"\r\n [class.modal-sm]=\"Size == 'S'\"\r\n [class.modal-md]=\"Size == 'M'\"\r\n [class.modal-lg]=\"Size == 'L'\"\r\n [class.modal-xl]=\"Size == 'XL'\"\r\n [class.modal-xxl]=\"Size == 'XXL'\"\r\n [class.modal-feminist]=\"Size == 'HOLYSHIT'\"\r\n emaDraggable>\r\n <div class=\"modal-content\" [class.app-bg-lightgrey]=\"HasOverlap\"\r\n style=\"cursor: default;\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>", dependencies: [{ kind: "directive", type: EsModalDirective, selector: "[esModal]", exportAs: ["es-modal"] }, { kind: "directive", type: Draggable, selector: "[emaDraggable]", inputs: ["emaDraggable"] }] });
1015
1068
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsModalComponent, decorators: [{
1016
1069
  type: Component,
1017
1070
  args: [{ selector: "es-modal", standalone: true, imports: [EsModalDirective, Draggable], template: "<div esModal #modalRef=\"es-modal\"\r\n class=\"modal fade\"\r\n role=\"dialog\"\r\n aria-hidden=\"true\"\r\n (onShow)=\"onShow.emit()\"\r\n (onHide)=\"onHide.emit()\"\r\n [config]=\"{backdrop: true, ignoreBackdropClick: IgnoreBackdrop}\">\r\n <div class=\"modal-dialog\"\r\n [class.modal-sm]=\"Size == 'S'\"\r\n [class.modal-md]=\"Size == 'M'\"\r\n [class.modal-lg]=\"Size == 'L'\"\r\n [class.modal-xl]=\"Size == 'XL'\"\r\n [class.modal-xxl]=\"Size == 'XXL'\"\r\n [class.modal-feminist]=\"Size == 'HOLYSHIT'\"\r\n emaDraggable>\r\n <div class=\"modal-content\" [class.app-bg-lightgrey]=\"HasOverlap\"\r\n style=\"cursor: default;\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>" }]
1018
- }], ctorParameters: function () { return [{ type: i3.AppState }]; }, propDecorators: { Size: [{
1071
+ }], ctorParameters: function () { return [{ type: i1.AppState }]; }, propDecorators: { Size: [{
1019
1072
  type: Input
1020
1073
  }], IgnoreBackdrop: [{
1021
1074
  type: Input
@@ -1040,15 +1093,491 @@ class EsModalHeadComponent {
1040
1093
  this.Close.emit();
1041
1094
  }
1042
1095
  }
1043
- EsModalHeadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsModalHeadComponent, deps: [{ token: i3.AppState }], target: i0.ɵɵFactoryTarget.Component });
1096
+ EsModalHeadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsModalHeadComponent, deps: [{ token: i1.AppState }], target: i0.ɵɵFactoryTarget.Component });
1044
1097
  EsModalHeadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EsModalHeadComponent, isStandalone: true, selector: "es-modal-head", outputs: { Close: "Close" }, ngImport: i0, template: "<div class=\"modal-header\">\r\n <div class=\"modal-title modal-head pull-left\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"close modal-close-button\"\r\n (click)=\"CloseFunction();\" \r\n aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </div>\r\n</div>", styles: [".modal-head{font-size:1.25rem}.modal-close-button{margin:auto;padding:0 10px}\n"] });
1045
1098
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsModalHeadComponent, decorators: [{
1046
1099
  type: Component,
1047
1100
  args: [{ selector: "es-modal-head", standalone: true, template: "<div class=\"modal-header\">\r\n <div class=\"modal-title modal-head pull-left\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"close modal-close-button\"\r\n (click)=\"CloseFunction();\" \r\n aria-label=\"Close\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </div>\r\n</div>", styles: [".modal-head{font-size:1.25rem}.modal-close-button{margin:auto;padding:0 10px}\n"] }]
1048
- }], ctorParameters: function () { return [{ type: i3.AppState }]; }, propDecorators: { Close: [{
1101
+ }], ctorParameters: function () { return [{ type: i1.AppState }]; }, propDecorators: { Close: [{
1049
1102
  type: Output
1050
1103
  }] } });
1051
1104
 
1105
+ class LabeledSpanComponent {
1106
+ constructor() {
1107
+ this.H_MODE = "Horizontal";
1108
+ this.V_MODE = "Vertical";
1109
+ this.First = false;
1110
+ this.Label = "";
1111
+ this.Display = "Horizontal";
1112
+ }
1113
+ }
1114
+ LabeledSpanComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LabeledSpanComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1115
+ LabeledSpanComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LabeledSpanComponent, isStandalone: true, selector: "labeled-span", inputs: { First: "First", Label: "Label", Display: "Display" }, ngImport: i0, template: "<div [class.app-margin-top-10]=\"First\" \r\n [style.display]=\"Display == V_MODE ? 'inline-grid' : 'block'\"\r\n [style.margin-right.px]=\"Display == V_MODE ? 10 : 0\">\r\n <strong class=\"text-uppercase\" style=\"font-size: .7rem !important;\">\r\n {{Label}}<span *ngIf=\"Display == H_MODE\">:&nbsp;&nbsp;</span>\r\n </strong>\r\n <span><ng-content></ng-content></span>\r\n</div>", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1116
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LabeledSpanComponent, decorators: [{
1117
+ type: Component,
1118
+ args: [{ selector: "labeled-span", standalone: true, imports: [NgIf], template: "<div [class.app-margin-top-10]=\"First\" \r\n [style.display]=\"Display == V_MODE ? 'inline-grid' : 'block'\"\r\n [style.margin-right.px]=\"Display == V_MODE ? 10 : 0\">\r\n <strong class=\"text-uppercase\" style=\"font-size: .7rem !important;\">\r\n {{Label}}<span *ngIf=\"Display == H_MODE\">:&nbsp;&nbsp;</span>\r\n </strong>\r\n <span><ng-content></ng-content></span>\r\n</div>" }]
1119
+ }], ctorParameters: function () { return []; }, propDecorators: { First: [{
1120
+ type: Input
1121
+ }], Label: [{
1122
+ type: Input
1123
+ }], Display: [{
1124
+ type: Input
1125
+ }] } });
1126
+
1127
+ class OperationsMenuComponent {
1128
+ constructor() { }
1129
+ }
1130
+ OperationsMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperationsMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1131
+ OperationsMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OperationsMenuComponent, isStandalone: true, selector: "ops-menu", ngImport: i0, template: "<h5 class=\"app-bold\">Operazioni</h5>\r\n\r\n<div class=\"card app-margin-top-10\">\r\n <div>\r\n <ng-content></ng-content>\r\n </div>\r\n</div>" });
1132
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperationsMenuComponent, decorators: [{
1133
+ type: Component,
1134
+ args: [{ selector: "ops-menu", standalone: true, template: "<h5 class=\"app-bold\">Operazioni</h5>\r\n\r\n<div class=\"card app-margin-top-10\">\r\n <div>\r\n <ng-content></ng-content>\r\n </div>\r\n</div>" }]
1135
+ }], ctorParameters: function () { return []; } });
1136
+
1137
+ class OperationsMenuCategoryComponent {
1138
+ constructor() {
1139
+ this.Name = "Nuova categoria";
1140
+ this.Expanded = false;
1141
+ }
1142
+ }
1143
+ OperationsMenuCategoryComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperationsMenuCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1144
+ OperationsMenuCategoryComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OperationsMenuCategoryComponent, isStandalone: true, selector: "ops-menu-category", inputs: { Name: "Name", Expanded: "Expanded" }, ngImport: i0, template: "<mat-accordion>\r\n <mat-expansion-panel [expanded]=\"Expanded\" (opened)=\"Expanded = true\" (closed)=\"Expanded = false\">\r\n <!--Header-->\r\n <mat-expansion-panel-header style=\"max-height: 48px !important\">\r\n <mat-panel-title class=\"app-no-selection\">{{Name}}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <!--Operations-->\r\n <ng-content></ng-content>\r\n </mat-expansion-panel>\r\n</mat-accordion>", dependencies: [{ kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i1$4.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i1$4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i1$4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i1$4.MatExpansionPanelTitle, selector: "mat-panel-title" }] });
1145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperationsMenuCategoryComponent, decorators: [{
1146
+ type: Component,
1147
+ args: [{ selector: "ops-menu-category", standalone: true, imports: [MatExpansionModule], template: "<mat-accordion>\r\n <mat-expansion-panel [expanded]=\"Expanded\" (opened)=\"Expanded = true\" (closed)=\"Expanded = false\">\r\n <!--Header-->\r\n <mat-expansion-panel-header style=\"max-height: 48px !important\">\r\n <mat-panel-title class=\"app-no-selection\">{{Name}}</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <!--Operations-->\r\n <ng-content></ng-content>\r\n </mat-expansion-panel>\r\n</mat-accordion>" }]
1148
+ }], ctorParameters: function () { return []; }, propDecorators: { Name: [{
1149
+ type: Input
1150
+ }], Expanded: [{
1151
+ type: Input
1152
+ }] } });
1153
+
1154
+ class OperationsMenuOperationComponent {
1155
+ constructor() {
1156
+ this.onClick = new EventEmitter();
1157
+ }
1158
+ emitClick() {
1159
+ this.onClick.emit();
1160
+ }
1161
+ }
1162
+ OperationsMenuOperationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperationsMenuOperationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1163
+ OperationsMenuOperationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: OperationsMenuOperationComponent, isStandalone: true, selector: "ops-menu-operation", outputs: { onClick: "onClick" }, ngImport: i0, template: "<div class=\"app-padding-left-10\">\r\n <a class=\"app-link app-inline-wrapped\" (click)=\"emitClick()\"><ng-content></ng-content></a>\r\n</div>" });
1164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OperationsMenuOperationComponent, decorators: [{
1165
+ type: Component,
1166
+ args: [{ selector: "ops-menu-operation", standalone: true, template: "<div class=\"app-padding-left-10\">\r\n <a class=\"app-link app-inline-wrapped\" (click)=\"emitClick()\"><ng-content></ng-content></a>\r\n</div>" }]
1167
+ }], ctorParameters: function () { return []; }, propDecorators: { onClick: [{
1168
+ type: Output
1169
+ }] } });
1170
+
1171
+ class UserInfosComponent extends BaseComponent {
1172
+ constructor(inj, tks, msgExts, expExts, utiExts, lc, _state, profile) {
1173
+ super(inj);
1174
+ this.inj = inj;
1175
+ this.tks = tks;
1176
+ this.msgExts = msgExts;
1177
+ this.expExts = expExts;
1178
+ this.utiExts = utiExts;
1179
+ this.lc = lc;
1180
+ this._state = _state;
1181
+ this.profile = profile;
1182
+ this.UpdateProfilePictureDTO = null;
1183
+ this.UpdateRecoverySettingsDTO = null;
1184
+ this.UpdatePasswordDTO = null;
1185
+ }
1186
+ ngOnInit() {
1187
+ this.getAccountDetails();
1188
+ }
1189
+ getAccountDetails() {
1190
+ // Recupero le informazioni Account partendo dalla identity
1191
+ let identity = this.tks.getJaceIdentity();
1192
+ this.AccountRoles = identity.Roles;
1193
+ this.AccountPermissions = identity.Permissions;
1194
+ // TODO: Rimuovere, placeholder per grafica
1195
+ this.AccountDetails = new JaceUserAccount();
1196
+ this.AccountDetails.username = "TESTUSR";
1197
+ this.AccountDetails.idtenant = "FX";
1198
+ this.AccountDetails.firstname = "Utente";
1199
+ this.AccountDetails.lastname = "di Test";
1200
+ this.AccountDetails.recoveryemail = "testusr@enuma.it";
1201
+ this.AccountDetails.dtvalidfrom = new Date();
1202
+ this.AccountDetails.dtvalidto = new Date();
1203
+ // TODO: Definire API per i dati dell Account loggato
1204
+ //let pars = new HttpParams().set("idAccount", identity.IdAccount.toString());
1205
+ //this.http.get<JaceUserAccount>(GET_Accounts_GetEntityAccount, pars).subscribe(res => { this.AccountDetails = res; });
1206
+ }
1207
+ onShowAccountRoles() {
1208
+ this.dlgShowAccountRoles.show();
1209
+ }
1210
+ onUpdateProfilePicture() {
1211
+ this.UpdateProfilePictureDTO = null;
1212
+ requestAnimationFrame(() => {
1213
+ this.UpdateProfilePictureDTO = { image: null };
1214
+ this.dlgUpdateProfilePicture.show();
1215
+ });
1216
+ }
1217
+ doUpdateProfilePicture() {
1218
+ return __awaiter(this, void 0, void 0, function* () {
1219
+ let res = yield this.profile.doUpdateProfilePicture(this.UpdateProfilePictureDTO.image);
1220
+ this.msgExts.manageCallResultResponse(res, "Modifica eseguita con Successo", "Errori nella modifica", () => {
1221
+ this.dlgUpdateProfilePicture.hide();
1222
+ });
1223
+ });
1224
+ }
1225
+ //#endregion
1226
+ //#region Delete Profile Picture
1227
+ onDeleteProfilePicture() {
1228
+ this.msgExts.simpleWarningWithChoice("Conferma eliminazione", "Si e' certi di voler rimuovere la foto profilo?", () => {
1229
+ this.doDeleteProfilePicture();
1230
+ });
1231
+ }
1232
+ doDeleteProfilePicture() {
1233
+ return __awaiter(this, void 0, void 0, function* () {
1234
+ let res = yield this.profile.doDeleteProfilePicture();
1235
+ this.msgExts.manageCallResultResponse(res, "Foto profilo rimossa con successo", "Errori nella rimozione della foto profilo", () => {
1236
+ this.dlgUpdateProfilePicture.hide();
1237
+ });
1238
+ });
1239
+ }
1240
+ onUpdateRecoverySettings() {
1241
+ this.UpdateRecoverySettingsDTO = null;
1242
+ requestAnimationFrame(() => {
1243
+ this.UpdateRecoverySettingsDTO = { email: this.AccountDetails.recoveryemail };
1244
+ this.dlgUpdateRecoverySettings.show();
1245
+ });
1246
+ }
1247
+ doUpdateRecoverySettings() {
1248
+ return __awaiter(this, void 0, void 0, function* () {
1249
+ let res = yield this.profile.doUpdateRecoverySettings(this.UpdateRecoverySettingsDTO.email);
1250
+ this.msgExts.manageCallResultResponse(res, "Modifica eseguita con Successo", "Errori nella modifica", () => {
1251
+ this.getAccountDetails();
1252
+ this.dlgUpdateRecoverySettings.hide();
1253
+ });
1254
+ });
1255
+ }
1256
+ onUpdatePassword() {
1257
+ this.UpdatePasswordDTO = null;
1258
+ requestAnimationFrame(() => {
1259
+ this.CustomError = "";
1260
+ this.UpdatePasswordDTO = new UpdatePasswordDto();
1261
+ this.dlgUpdatePassword.show();
1262
+ });
1263
+ }
1264
+ doUpdatePassword() {
1265
+ return __awaiter(this, void 0, void 0, function* () {
1266
+ if (this.UpdatePasswordDTO.newpwd != this.UpdatePasswordDTO.confirmpwd)
1267
+ this.CustomError = "Le password inserite non coincidono.";
1268
+ else {
1269
+ let res = yield this.profile.doUpdatePassword(this.UpdatePasswordDTO.oldpwd, this.UpdatePasswordDTO.newpwd, this.UpdatePasswordDTO.confirmpwd);
1270
+ this.msgExts.manageCallResultResponse(res, "Password modificata con Successo", "Errori nella modifica della Password", () => { this.dlgUpdatePassword.hide(); });
1271
+ }
1272
+ });
1273
+ }
1274
+ }
1275
+ UserInfosComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfosComponent, deps: [{ token: i0.Injector }, { token: i1.TokenService }, { token: i2$2.MessageService }, { token: i2$2.ExportService }, { token: i2$2.UtilityService }, { token: i1$2.LocalizationService }, { token: i1.AppState }, { token: i1.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component });
1276
+ UserInfosComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserInfosComponent, isStandalone: true, selector: "user-infos", viewQueries: [{ propertyName: "dlgShowAccountRoles", first: true, predicate: ["dlgShowAccountRoles"], descendants: true }, { propertyName: "dlgUpdateProfilePicture", first: true, predicate: ["dlgUpdateProfilePicture"], descendants: true }, { propertyName: "dlgUpdateRecoverySettings", first: true, predicate: ["dlgUpdateRecoverySettings"], descendants: true }, { propertyName: "dlgUpdatePassword", first: true, predicate: ["dlgUpdatePassword"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"height: 100%; width: 100%; display: flex;\">\r\n <div style=\"margin: auto;\">\r\n <div class=\"user-img-container\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"user-img\" class=\"user-img\" />\r\n <div class=\"app-pointer user-img-btn\">\r\n <div class=\"app-opacity user-img-btn-body\" (click)=\"onUpdateProfilePicture();\">\r\n <i class=\"far fa-pen\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-15\" style=\"position: relative;\" *ngIf=\"AccountDetails\">\r\n <div class=\"card card-body app-no-margin app-padding-15\">\r\n <div class=\"row\">\r\n <div *ac=\"'R:Jace Admin'\" class=\"user-roles-btn\" [matTooltip]=\"'Visualizza Ruoli e Permessi'\" matTooltipPosition=\"above\" (click)=\"onShowAccountRoles();\">\r\n <i class=\"far fa-book-user\"></i>\r\n </div>\r\n <div class=\"col-md-6\"><labeled-span [Label]=\"'Utente' | localize : lc\" Display=\"Vertical\">{{AccountDetails.username}}</labeled-span></div>\r\n <div class=\"col-md-6\"><labeled-span [Label]=\"'Tenant' | localize : lc\" Display=\"Vertical\">{{AccountDetails.idtenant}}</labeled-span></div>\r\n <div class=\"col-md-6 app-margin-top-10\"><labeled-span [Label]=\"'Nome' | localize : lc\" Display=\"Vertical\">{{AccountDetails.firstname}}</labeled-span></div>\r\n <div class=\"col-md-6 app-margin-top-10\"><labeled-span [Label]=\"'Cognome' | localize : lc\" Display=\"Vertical\">{{AccountDetails.lastname}}</labeled-span> </div>\r\n <div class=\"col-md-12 app-margin-top-10\"><labeled-span [Label]=\"'Email' | localize : lc\" Display=\"Vertical\">{{AccountDetails.recoveryemail || 'Non disponibile'}}</labeled-span></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-10 row\">\r\n <div class=\"col-md-6\" style=\"padding-right: 5px;\">\r\n <button type=\"button\" style=\"width: 100%;\" class=\"btn btn-primary\" (click)=\"onUpdatePassword()\">Modifica Password</button>\r\n </div>\r\n <div class=\"col-md-6\" style=\"padding-left: 5px;\">\r\n <button type=\"button\" style=\"width: 100%;\" class=\"btn btn-primary\" (click)=\"onUpdateRecoverySettings()\">Modifica Email</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--Update Password-->\r\n<es-modal #dlgUpdatePassword [Size]=\"'M'\">\r\n <es-modal-head (Close)=\"dlgUpdatePassword.hide();\">\r\n <h5 class=\"modal-title pull-left\">Modifica Password</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdatePasswordDTO\" #formUpdatePassword=\"ngForm\" (ngSubmit)=\"formUpdatePassword.valid && doUpdatePassword()\">\r\n <div class=\"modal-body lastfix\">\r\n <form-input [Password]=\"true\" [Label]=\"'Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.oldpwd\" name=\"oldpw\" required></form-input>\r\n <form-input [Password]=\"true\" [Label]=\"'Nuova Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.newpwd\" name=\"newpw\" required></form-input>\r\n <form-input [Password]=\"true\" [Label]=\"'Conferma Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.confirmpwd\" name=\"confpw\" required></form-input>\r\n <!--Validazione Custom-->\r\n <div *ngIf=\"CustomError\" class=\"app-white-text app-margin-top-15 app-margin-bottom-0 card app-padding-10 card-danger\">\r\n <strong>{{'Error' | localize : lc}}:&nbsp;</strong>{{CustomError}}\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdatePassword.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">Conferma</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Update Extra Info-->\r\n<es-modal #dlgUpdateRecoverySettings [Size]=\"'M'\">\r\n <es-modal-head (Close)=\"dlgUpdateRecoverySettings.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Modifica Email' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdateRecoverySettingsDTO\" #formUpdateInfos=\"ngForm\" (ngSubmit)=\"formUpdateInfos.valid && doUpdateRecoverySettings()\">\r\n <div class=\"modal-body lastfix\">\r\n <form-input [LabelInputRatio]=\"'3 9'\" [Label]=\"'Email' | localize: lc\" [(ngModel)]=\"UpdateRecoverySettingsDTO.email\" name=\"email\"></form-input>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdateRecoverySettings.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">Conferma</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Upload Picture-->\r\n<es-modal #dlgUpdateProfilePicture [Size]=\"'M'\">\r\n <es-modal-head (Close)=\"dlgUpdateProfilePicture.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Carica Avatar' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdateProfilePictureDTO\" #formUpdateProfilePicture=\"ngForm\" (ngSubmit)=\"formUpdateProfilePicture && doUpdateProfilePicture();\">\r\n <div class=\"modal-body lastfix\">\r\n <form-file Label=\"File\" [FancyMode]=\"true\" [(ngModel)]=\"UpdateProfilePictureDTO.image\" name=\"up_file\"></form-file>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-danger\" style=\"margin-right: auto;\" (click)=\"onDeleteProfilePicture();\">{{'Rimuovi' | localize : lc}}</button>\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdateProfilePicture.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">{{'Save' | localize : lc}}</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Ruoli e Permessi-->\r\n<es-modal #dlgShowAccountRoles [Size]=\"'L'\">\r\n <es-modal-head (Close)=\"dlgShowAccountRoles.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Ruoli e Permessi' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <div class=\"modal-body\" style=\"max-height: 600px; overflow-y: auto;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngIf=\"AccountRoles\">\r\n <labeled-span [Label]=\"'Ruoli'\" Display=\"Vertical\">\r\n <div *ngFor=\"let r of AccountRoles;\">{{r}}</div>\r\n </labeled-span>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"AccountPermissions\">\r\n <labeled-span [Label]=\"'Permessi'\" Display=\"Vertical\">\r\n <div *ngFor=\"let p of AccountPermissions;\">{{p}}</div>\r\n </labeled-span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"dlgShowAccountRoles.hide();\">{{'Chiudi' | localize : lc}}</button>\r\n </div>\r\n</es-modal>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.app-wideplus{width:100%;text-align:center;border:1px solid #ccc;border-radius:5px;padding:5px}.btn-outline-main-modified{color:#242d3a;border-color:#242d3a;background:transparent}.btn-outline-main-modified:hover{color:#fff;background:#242D3A;border-color:#242d3a}.user-img-container{position:relative;width:200px;margin:auto}.user-img{object-fit:cover;max-height:200px;min-height:200px;min-width:200px;max-width:200px;border-radius:50%;box-shadow:0 8px 6px #1313130a,0 12px 16px #1313130d}.user-img-btn{position:absolute;right:0;width:40px;height:40px;margin-top:-50px}.user-img-btn-body{background-color:#0056b3;color:#fff;border-radius:50%;text-align:center;height:100%;font-size:1.2rem;line-height:2.5rem}.user-roles-btn{position:absolute;top:0;right:2px;font-size:1.2rem;padding:5px;z-index:1;color:#0056b3;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsAndValidationsModule }, { kind: "component", type: i3$1.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i3$1.FormFileComponent, selector: "form-file", inputs: ["Multiple", "AllowDownload", "MaxSize", "FancyMode"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$2.LocalizePipe, name: "localize" }, { kind: "component", type: EsModalComponent, selector: "es-modal", inputs: ["Size", "IgnoreBackdrop", "HasOverlap"], outputs: ["onShow", "onHide"] }, { kind: "component", type: EsModalHeadComponent, selector: "es-modal-head", outputs: ["Close"] }, { kind: "component", type: LabeledSpanComponent, selector: "labeled-span", inputs: ["First", "Label", "Display"] }, { kind: "ngmodule", type: ExtensionsModule }, { kind: "ngmodule", type: AccessControlModule }, { kind: "directive", type: i5.AccessControlDirective, selector: "[ac]", inputs: ["ac", "acAbsolute"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], viewProviders: [{ provide: LocalizationService, useClass: UserInfoComponentLoc }] });
1277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfosComponent, decorators: [{
1278
+ type: Component,
1279
+ args: [{ selector: "user-infos", viewProviders: [{ provide: LocalizationService, useClass: UserInfoComponentLoc }], standalone: true, imports: [
1280
+ FormsModule,
1281
+ FormsAndValidationsModule,
1282
+ NgIf,
1283
+ NgFor,
1284
+ LocalizationModule,
1285
+ EsModalComponent,
1286
+ EsModalHeadComponent,
1287
+ OperationsMenuComponent,
1288
+ OperationsMenuCategoryComponent,
1289
+ OperationsMenuOperationComponent,
1290
+ LabeledSpanComponent,
1291
+ ExtensionsModule,
1292
+ AccessControlModule,
1293
+ MatTooltipModule
1294
+ ], template: "<div style=\"height: 100%; width: 100%; display: flex;\">\r\n <div style=\"margin: auto;\">\r\n <div class=\"user-img-container\">\r\n <img [src]=\"profile.ProfilePicture\" alt=\"user-img\" class=\"user-img\" />\r\n <div class=\"app-pointer user-img-btn\">\r\n <div class=\"app-opacity user-img-btn-body\" (click)=\"onUpdateProfilePicture();\">\r\n <i class=\"far fa-pen\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-15\" style=\"position: relative;\" *ngIf=\"AccountDetails\">\r\n <div class=\"card card-body app-no-margin app-padding-15\">\r\n <div class=\"row\">\r\n <div *ac=\"'R:Jace Admin'\" class=\"user-roles-btn\" [matTooltip]=\"'Visualizza Ruoli e Permessi'\" matTooltipPosition=\"above\" (click)=\"onShowAccountRoles();\">\r\n <i class=\"far fa-book-user\"></i>\r\n </div>\r\n <div class=\"col-md-6\"><labeled-span [Label]=\"'Utente' | localize : lc\" Display=\"Vertical\">{{AccountDetails.username}}</labeled-span></div>\r\n <div class=\"col-md-6\"><labeled-span [Label]=\"'Tenant' | localize : lc\" Display=\"Vertical\">{{AccountDetails.idtenant}}</labeled-span></div>\r\n <div class=\"col-md-6 app-margin-top-10\"><labeled-span [Label]=\"'Nome' | localize : lc\" Display=\"Vertical\">{{AccountDetails.firstname}}</labeled-span></div>\r\n <div class=\"col-md-6 app-margin-top-10\"><labeled-span [Label]=\"'Cognome' | localize : lc\" Display=\"Vertical\">{{AccountDetails.lastname}}</labeled-span> </div>\r\n <div class=\"col-md-12 app-margin-top-10\"><labeled-span [Label]=\"'Email' | localize : lc\" Display=\"Vertical\">{{AccountDetails.recoveryemail || 'Non disponibile'}}</labeled-span></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"app-margin-top-10 row\">\r\n <div class=\"col-md-6\" style=\"padding-right: 5px;\">\r\n <button type=\"button\" style=\"width: 100%;\" class=\"btn btn-primary\" (click)=\"onUpdatePassword()\">Modifica Password</button>\r\n </div>\r\n <div class=\"col-md-6\" style=\"padding-left: 5px;\">\r\n <button type=\"button\" style=\"width: 100%;\" class=\"btn btn-primary\" (click)=\"onUpdateRecoverySettings()\">Modifica Email</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--Update Password-->\r\n<es-modal #dlgUpdatePassword [Size]=\"'M'\">\r\n <es-modal-head (Close)=\"dlgUpdatePassword.hide();\">\r\n <h5 class=\"modal-title pull-left\">Modifica Password</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdatePasswordDTO\" #formUpdatePassword=\"ngForm\" (ngSubmit)=\"formUpdatePassword.valid && doUpdatePassword()\">\r\n <div class=\"modal-body lastfix\">\r\n <form-input [Password]=\"true\" [Label]=\"'Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.oldpwd\" name=\"oldpw\" required></form-input>\r\n <form-input [Password]=\"true\" [Label]=\"'Nuova Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.newpwd\" name=\"newpw\" required></form-input>\r\n <form-input [Password]=\"true\" [Label]=\"'Conferma Password' | localize: lc\" [(ngModel)]=\"UpdatePasswordDTO.confirmpwd\" name=\"confpw\" required></form-input>\r\n <!--Validazione Custom-->\r\n <div *ngIf=\"CustomError\" class=\"app-white-text app-margin-top-15 app-margin-bottom-0 card app-padding-10 card-danger\">\r\n <strong>{{'Error' | localize : lc}}:&nbsp;</strong>{{CustomError}}\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdatePassword.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">Conferma</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Update Extra Info-->\r\n<es-modal #dlgUpdateRecoverySettings [Size]=\"'M'\">\r\n <es-modal-head (Close)=\"dlgUpdateRecoverySettings.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Modifica Email' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdateRecoverySettingsDTO\" #formUpdateInfos=\"ngForm\" (ngSubmit)=\"formUpdateInfos.valid && doUpdateRecoverySettings()\">\r\n <div class=\"modal-body lastfix\">\r\n <form-input [LabelInputRatio]=\"'3 9'\" [Label]=\"'Email' | localize: lc\" [(ngModel)]=\"UpdateRecoverySettingsDTO.email\" name=\"email\"></form-input>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdateRecoverySettings.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">Conferma</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Upload Picture-->\r\n<es-modal #dlgUpdateProfilePicture [Size]=\"'M'\">\r\n <es-modal-head (Close)=\"dlgUpdateProfilePicture.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Carica Avatar' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <form *ngIf=\"UpdateProfilePictureDTO\" #formUpdateProfilePicture=\"ngForm\" (ngSubmit)=\"formUpdateProfilePicture && doUpdateProfilePicture();\">\r\n <div class=\"modal-body lastfix\">\r\n <form-file Label=\"File\" [FancyMode]=\"true\" [(ngModel)]=\"UpdateProfilePictureDTO.image\" name=\"up_file\"></form-file>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-danger\" style=\"margin-right: auto;\" (click)=\"onDeleteProfilePicture();\">{{'Rimuovi' | localize : lc}}</button>\r\n <button type=\"button\" class=\"btn btn-secondary app-margin-right-10\" (click)=\"dlgUpdateProfilePicture.hide();\">{{'Cancel' | localize : lc}}</button>\r\n <button type=\"submit\" class=\"btn btn-primary\">{{'Save' | localize : lc}}</button>\r\n </div>\r\n </form>\r\n</es-modal>\r\n\r\n<!--Ruoli e Permessi-->\r\n<es-modal #dlgShowAccountRoles [Size]=\"'L'\">\r\n <es-modal-head (Close)=\"dlgShowAccountRoles.hide();\">\r\n <h5 class=\"modal-title pull-left\">{{'Ruoli e Permessi' | localize : lc}}</h5>\r\n </es-modal-head>\r\n <div class=\"modal-body\" style=\"max-height: 600px; overflow-y: auto;\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\" *ngIf=\"AccountRoles\">\r\n <labeled-span [Label]=\"'Ruoli'\" Display=\"Vertical\">\r\n <div *ngFor=\"let r of AccountRoles;\">{{r}}</div>\r\n </labeled-span>\r\n </div>\r\n <div class=\"col-md-6\" *ngIf=\"AccountPermissions\">\r\n <labeled-span [Label]=\"'Permessi'\" Display=\"Vertical\">\r\n <div *ngFor=\"let p of AccountPermissions;\">{{p}}</div>\r\n </labeled-span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"dlgShowAccountRoles.hide();\">{{'Chiudi' | localize : lc}}</button>\r\n </div>\r\n</es-modal>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.app-wideplus{width:100%;text-align:center;border:1px solid #ccc;border-radius:5px;padding:5px}.btn-outline-main-modified{color:#242d3a;border-color:#242d3a;background:transparent}.btn-outline-main-modified:hover{color:#fff;background:#242D3A;border-color:#242d3a}.user-img-container{position:relative;width:200px;margin:auto}.user-img{object-fit:cover;max-height:200px;min-height:200px;min-width:200px;max-width:200px;border-radius:50%;box-shadow:0 8px 6px #1313130a,0 12px 16px #1313130d}.user-img-btn{position:absolute;right:0;width:40px;height:40px;margin-top:-50px}.user-img-btn-body{background-color:#0056b3;color:#fff;border-radius:50%;text-align:center;height:100%;font-size:1.2rem;line-height:2.5rem}.user-roles-btn{position:absolute;top:0;right:2px;font-size:1.2rem;padding:5px;z-index:1;color:#0056b3;cursor:pointer}\n"] }]
1295
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.TokenService }, { type: i2$2.MessageService }, { type: i2$2.ExportService }, { type: i2$2.UtilityService }, { type: i1$2.LocalizationService }, { type: i1.AppState }, { type: i1.UserPreferencesService }]; }, propDecorators: { dlgShowAccountRoles: [{
1296
+ type: ViewChild,
1297
+ args: ["dlgShowAccountRoles"]
1298
+ }], dlgUpdateProfilePicture: [{
1299
+ type: ViewChild,
1300
+ args: ["dlgUpdateProfilePicture"]
1301
+ }], dlgUpdateRecoverySettings: [{
1302
+ type: ViewChild,
1303
+ args: ["dlgUpdateRecoverySettings"]
1304
+ }], dlgUpdatePassword: [{
1305
+ type: ViewChild,
1306
+ args: ["dlgUpdatePassword"]
1307
+ }] } });
1308
+ // TODO: Definire meglio entita ACCOUNT
1309
+ class JaceUserAccount {
1310
+ }
1311
+
1312
+ // Angular
1313
+ class FiltersHorizontalComponent {
1314
+ constructor(cbs, msgs) {
1315
+ this.cbs = cbs;
1316
+ this.msgs = msgs;
1317
+ this.searchView = null;
1318
+ this.sources = [];
1319
+ this.DefaultFilters = [];
1320
+ this.onShowFilters = new EventEmitter();
1321
+ this.onSendSearch = new EventEmitter();
1322
+ this.Filters = [];
1323
+ this.trackByFilter = (_, item) => item.id + "_" + item.value;
1324
+ }
1325
+ // ********************************* Public API *********************************
1326
+ onUpdateFilters() {
1327
+ this.doUpdateFilters();
1328
+ }
1329
+ onRemoveFilter(id) {
1330
+ this.doRemoveFilter(id);
1331
+ }
1332
+ onClipboardCopy(item) {
1333
+ return this.doClipboardCopy(item.value);
1334
+ }
1335
+ onRemoveAllFilters() {
1336
+ this.doRemoveAllFilters();
1337
+ }
1338
+ // ********************************* Private API *********************************
1339
+ doUpdateFilters() {
1340
+ let keys = Object.keys(this.searchView).filter(f => f.startsWith("filter"));
1341
+ this.Filters = [];
1342
+ this.Filters = keys.map(m => {
1343
+ var _a, _b, _c;
1344
+ let value = (_c = (_b = (_a = this.sources.find(x => x.id == m)) === null || _a === void 0 ? void 0 : _a.source.find(y => y.id == this.searchView[m])) === null || _b === void 0 ? void 0 : _b.description) !== null && _c !== void 0 ? _c : this.searchView[m];
1345
+ return new EstableFilter(m, this.searchView[m + "_label"], value, this.DefaultFilters.includes(m));
1346
+ }).filter(f => {
1347
+ return f.value;
1348
+ });
1349
+ }
1350
+ doRemoveFilter(id, update = false) {
1351
+ if (this.DefaultFilters.includes(id))
1352
+ return;
1353
+ this.searchView[id] = "";
1354
+ if (!update)
1355
+ this.doUpdateFilters();
1356
+ }
1357
+ doClipboardCopy(value) {
1358
+ this.cbs.copyTextToClipboard(value);
1359
+ this.msgs.simpleInfo(`Testo copiato!`); // TODO: Toast
1360
+ return false;
1361
+ }
1362
+ doRemoveAllFilters() {
1363
+ let keys = Object.keys(this.searchView).filter(f => f.startsWith("filter"));
1364
+ keys.forEach(k => {
1365
+ this.doRemoveFilter(k, true);
1366
+ this.doUpdateFilters();
1367
+ });
1368
+ }
1369
+ // ************************** Private API, used by HTML **************************
1370
+ emitShowFilters() {
1371
+ this.onShowFilters.emit();
1372
+ }
1373
+ emitSendSearch() {
1374
+ this.onSendSearch.emit();
1375
+ }
1376
+ }
1377
+ FiltersHorizontalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersHorizontalComponent, deps: [{ token: i2$2.ClipboardService }, { token: i2$2.MessageService }], target: i0.ɵɵFactoryTarget.Component });
1378
+ FiltersHorizontalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FiltersHorizontalComponent, isStandalone: true, selector: "filters-topbar", inputs: { searchView: "searchView", sources: "sources", DefaultFilters: "DefaultFilters" }, outputs: { onShowFilters: "onShowFilters", onSendSearch: "onSendSearch" }, ngImport: i0, template: "<div class=\"es-table-filters app-margin-top-10 d-flex\">\r\n <div class=\"d-flex\">\r\n <div *ngIf=\"Filters.length > 0\" class=\"filters-floating-display\" (click)=\"onRemoveAllFilters();\">\r\n <span>Rimuovi filtri</span>&nbsp;&nbsp;<i class=\"far fa-broom-wide\" style=\"font-size: 12px;\"></i>\r\n </div>\r\n <div *ngFor=\"let f of Filters; trackBy: trackByFilter\" class=\"filters-floating-display\"\r\n [class.filters-floating-display-default]=\"f.isdefault\" (contextmenu)=\"onClipboardCopy(f);\"\r\n (click)=\"onRemoveFilter(f.id);\">\r\n <span>{{f.label}}: {{f.value}}</span>&nbsp;\r\n <i *ngIf=\"!f.isdefault\" class=\"far fa-close\"></i>\r\n </div>\r\n </div>\r\n <div class=\"d-flex\" style=\"margin-left: auto;\">\r\n <button class=\"filters-btn\" (click)=\"emitShowFilters()\" [disabled]=\"searchView.searchinprogress\">\r\n <i class=\"far fa-filter\"></i>\r\n </button>\r\n <button class=\"filters-btn app-margin-left-10\" (click)=\"emitSendSearch();\" [disabled]=\"searchView.searchinprogress\">\r\n <i *ngIf=\"!searchView.searchinprogress\" class=\"far fa-search\"></i>\r\n <i *ngIf=\"searchView.searchinprogress\" class=\"far fa-spinner fa-spin\"></i>\r\n </button>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.filters-floating-display{padding:2px 10px;background-color:#0056b3;color:#fff;height:24px;cursor:pointer;margin-top:auto;margin-bottom:auto;margin-right:15px}.filters-floating-display-default{background-color:#004a9a}.filters-btn{padding:8px 12px;font-size:1rem;color:#0056b3;background-color:#fff;border:none}.filters-btn:disabled{cursor:not-allowed;opacity:.65}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
1379
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersHorizontalComponent, decorators: [{
1380
+ type: Component,
1381
+ args: [{ selector: "filters-topbar", standalone: true, imports: [NgIf, NgFor], template: "<div class=\"es-table-filters app-margin-top-10 d-flex\">\r\n <div class=\"d-flex\">\r\n <div *ngIf=\"Filters.length > 0\" class=\"filters-floating-display\" (click)=\"onRemoveAllFilters();\">\r\n <span>Rimuovi filtri</span>&nbsp;&nbsp;<i class=\"far fa-broom-wide\" style=\"font-size: 12px;\"></i>\r\n </div>\r\n <div *ngFor=\"let f of Filters; trackBy: trackByFilter\" class=\"filters-floating-display\"\r\n [class.filters-floating-display-default]=\"f.isdefault\" (contextmenu)=\"onClipboardCopy(f);\"\r\n (click)=\"onRemoveFilter(f.id);\">\r\n <span>{{f.label}}: {{f.value}}</span>&nbsp;\r\n <i *ngIf=\"!f.isdefault\" class=\"far fa-close\"></i>\r\n </div>\r\n </div>\r\n <div class=\"d-flex\" style=\"margin-left: auto;\">\r\n <button class=\"filters-btn\" (click)=\"emitShowFilters()\" [disabled]=\"searchView.searchinprogress\">\r\n <i class=\"far fa-filter\"></i>\r\n </button>\r\n <button class=\"filters-btn app-margin-left-10\" (click)=\"emitSendSearch();\" [disabled]=\"searchView.searchinprogress\">\r\n <i *ngIf=\"!searchView.searchinprogress\" class=\"far fa-search\"></i>\r\n <i *ngIf=\"searchView.searchinprogress\" class=\"far fa-spinner fa-spin\"></i>\r\n </button>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.filters-floating-display{padding:2px 10px;background-color:#0056b3;color:#fff;height:24px;cursor:pointer;margin-top:auto;margin-bottom:auto;margin-right:15px}.filters-floating-display-default{background-color:#004a9a}.filters-btn{padding:8px 12px;font-size:1rem;color:#0056b3;background-color:#fff;border:none}.filters-btn:disabled{cursor:not-allowed;opacity:.65}\n"] }]
1382
+ }], ctorParameters: function () { return [{ type: i2$2.ClipboardService }, { type: i2$2.MessageService }]; }, propDecorators: { searchView: [{
1383
+ type: Input
1384
+ }], sources: [{
1385
+ type: Input
1386
+ }], DefaultFilters: [{
1387
+ type: Input
1388
+ }], onShowFilters: [{
1389
+ type: Output
1390
+ }], onSendSearch: [{
1391
+ type: Output
1392
+ }] } });
1393
+ // TODO: Spostare nella classe
1394
+ class EstableFilter {
1395
+ constructor(id, label, value, isdefault) {
1396
+ this.id = id;
1397
+ this.label = label;
1398
+ this.value = value;
1399
+ this.isdefault = isdefault;
1400
+ }
1401
+ }
1402
+
1403
+ // Angular
1404
+ // Animazione
1405
+ const SlideInFromRight = animation([
1406
+ style({ right: -400 }),
1407
+ animate('0.4s ease-out', style({ right: 0 }))
1408
+ ]);
1409
+ class FiltersVerticalComponent {
1410
+ constructor(utiExts) {
1411
+ this.utiExts = utiExts;
1412
+ this.DefaultFilters = [];
1413
+ this.Title = "Filtri";
1414
+ this.Description = "Impostare qui i filtri di interesse";
1415
+ this.onSendSearch = new EventEmitter();
1416
+ }
1417
+ // ************************** Public API **************************
1418
+ onShowFilters() {
1419
+ this.doShowFilters();
1420
+ }
1421
+ onHideFilters(confirm) {
1422
+ this.doHideFilters(confirm);
1423
+ }
1424
+ // ************************** Private API **************************
1425
+ doShowFilters() {
1426
+ this.BackupView = this.utiExts.deepClone(this.searchView);
1427
+ }
1428
+ doHideFilters(confirm) {
1429
+ if (confirm) {
1430
+ this.onSendSearch.emit();
1431
+ }
1432
+ else {
1433
+ this.searchView = this.utiExts.deepClone(this.BackupView);
1434
+ }
1435
+ this.BackupView = null;
1436
+ }
1437
+ }
1438
+ FiltersVerticalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersVerticalComponent, deps: [{ token: i2$2.UtilityService }], target: i0.ɵɵFactoryTarget.Component });
1439
+ FiltersVerticalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FiltersVerticalComponent, isStandalone: true, selector: "filters-sidebar", inputs: { searchView: "searchView", DefaultFilters: "DefaultFilters", Title: "Title", Description: "Description" }, outputs: { onSendSearch: "onSendSearch" }, ngImport: i0, template: "<div *ngIf=\"!!BackupView\" class=\"filters-backdrop app-no-selection\">\r\n <div [@FiltersAnimation] class=\"filters-container\">\r\n <div class=\"filters-header\">\r\n <div class=\"filters-close\" (click)=\"onHideFilters(false)\"><i class=\"far fa-close\"></i></div>\r\n <div class=\"filters-header-title\">{{Title}}</div>\r\n <div class=\"filters-header-desc\">{{Description}}</div>\r\n </div>\r\n <form>\r\n <div class=\"filters-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"filters-footer\">\r\n <button type=\"submit\" class=\"filters-button-main\" (click)=\"onHideFilters(true)\">Ricerca con i filtri applicati</button>\r\n </div>\r\n </form>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.filters-backdrop{position:fixed;width:100vw;height:100vh;background-color:#0009;left:0;top:0;z-index:1098}.filters-container{position:absolute;width:400px;height:100vh;right:0;top:0}.filters-header{padding:15px;height:90px;position:relative;background-color:#344154}.filters-close{position:absolute;top:15px;right:15px;color:#ef4444;cursor:pointer;padding:5px}.filters-header-title{color:#fff;font-size:1.4rem;font-weight:700}.filters-header-desc{color:#fff;font-size:1rem}.filters-body{background-color:#fff;overflow-y:auto;height:calc(100vh - 160px)}.filters-footer{background-color:#344154;padding:15px;height:70px;display:flex;justify-content:space-between}.filters-button-main{background-color:#0056b3;color:#fff;width:370px;padding:5px 10px;text-align:center;font-size:1.2rem;font-weight:700;cursor:pointer;border:none;transition:.5s}.filters-button-main:hover{transition:1s;background-color:#004a9a}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [
1440
+ trigger("FiltersAnimation", [
1441
+ transition(":enter", [useAnimation(SlideInFromRight)])
1442
+ ])
1443
+ ] });
1444
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersVerticalComponent, decorators: [{
1445
+ type: Component,
1446
+ args: [{ selector: "filters-sidebar", animations: [
1447
+ trigger("FiltersAnimation", [
1448
+ transition(":enter", [useAnimation(SlideInFromRight)])
1449
+ ])
1450
+ ], standalone: true, imports: [NgIf], template: "<div *ngIf=\"!!BackupView\" class=\"filters-backdrop app-no-selection\">\r\n <div [@FiltersAnimation] class=\"filters-container\">\r\n <div class=\"filters-header\">\r\n <div class=\"filters-close\" (click)=\"onHideFilters(false)\"><i class=\"far fa-close\"></i></div>\r\n <div class=\"filters-header-title\">{{Title}}</div>\r\n <div class=\"filters-header-desc\">{{Description}}</div>\r\n </div>\r\n <form>\r\n <div class=\"filters-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n <div class=\"filters-footer\">\r\n <button type=\"submit\" class=\"filters-button-main\" (click)=\"onHideFilters(true)\">Ricerca con i filtri applicati</button>\r\n </div>\r\n </form>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.filters-backdrop{position:fixed;width:100vw;height:100vh;background-color:#0009;left:0;top:0;z-index:1098}.filters-container{position:absolute;width:400px;height:100vh;right:0;top:0}.filters-header{padding:15px;height:90px;position:relative;background-color:#344154}.filters-close{position:absolute;top:15px;right:15px;color:#ef4444;cursor:pointer;padding:5px}.filters-header-title{color:#fff;font-size:1.4rem;font-weight:700}.filters-header-desc{color:#fff;font-size:1rem}.filters-body{background-color:#fff;overflow-y:auto;height:calc(100vh - 160px)}.filters-footer{background-color:#344154;padding:15px;height:70px;display:flex;justify-content:space-between}.filters-button-main{background-color:#0056b3;color:#fff;width:370px;padding:5px 10px;text-align:center;font-size:1.2rem;font-weight:700;cursor:pointer;border:none;transition:.5s}.filters-button-main:hover{transition:1s;background-color:#004a9a}\n"] }]
1451
+ }], ctorParameters: function () { return [{ type: i2$2.UtilityService }]; }, propDecorators: { searchView: [{
1452
+ type: Input
1453
+ }], DefaultFilters: [{
1454
+ type: Input
1455
+ }], Title: [{
1456
+ type: Input
1457
+ }], Description: [{
1458
+ type: Input
1459
+ }], onSendSearch: [{
1460
+ type: Output
1461
+ }] } });
1462
+
1463
+ // Angular
1464
+ class FiltersVerticalSectionComponent {
1465
+ constructor() {
1466
+ this.Title = "Placeholder";
1467
+ this.isCollapsed = false;
1468
+ }
1469
+ onCollapse() {
1470
+ this.isCollapsed = !this.isCollapsed;
1471
+ }
1472
+ }
1473
+ FiltersVerticalSectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersVerticalSectionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1474
+ FiltersVerticalSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FiltersVerticalSectionComponent, isStandalone: true, selector: "filters-sidebar-section", inputs: { Title: "Title" }, ngImport: i0, template: "<div class=\"filters-section\">\r\n <div class=\"filters-section-title\">\r\n <div class=\"app-bold\">{{Title}}</div>\r\n <div class=\"filters-section-title-caret\">\r\n <i class=\"far\" (click)=\"onCollapse()\" [class.fa-caret-down]=\"!isCollapsed\" [class.fa-caret-up]=\"isCollapsed\"></i>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isCollapsed\" class=\"app-margin-top-5\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.filters-section{color:#000;border-bottom:1px solid #eeeeee;padding:15px}.filters-section-title{display:flex;font-size:1.2rem}.filters-section-title-caret{margin-left:auto;color:#0056b3;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1475
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersVerticalSectionComponent, decorators: [{
1476
+ type: Component,
1477
+ args: [{ selector: "filters-sidebar-section", standalone: true, imports: [NgIf], template: "<div class=\"filters-section\">\r\n <div class=\"filters-section-title\">\r\n <div class=\"app-bold\">{{Title}}</div>\r\n <div class=\"filters-section-title-caret\">\r\n <i class=\"far\" (click)=\"onCollapse()\" [class.fa-caret-down]=\"!isCollapsed\" [class.fa-caret-up]=\"isCollapsed\"></i>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!isCollapsed\" class=\"app-margin-top-5\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";.filters-section{color:#000;border-bottom:1px solid #eeeeee;padding:15px}.filters-section-title{display:flex;font-size:1.2rem}.filters-section-title-caret{margin-left:auto;color:#0056b3;cursor:pointer}\n"] }]
1478
+ }], ctorParameters: function () { return []; }, propDecorators: { Title: [{
1479
+ type: Input
1480
+ }] } });
1481
+
1482
+ // Angular
1483
+ class EsFiltersService {
1484
+ constructor() {
1485
+ this.SearchViews = [];
1486
+ }
1487
+ setView(sv, name) {
1488
+ console.log("Assegno alla SearchView della service: " + JSON.stringify(sv));
1489
+ if (this.SearchViews[name])
1490
+ this.SearchViews[name].view = sv;
1491
+ else {
1492
+ this.SearchViews[name] = { view: sv };
1493
+ }
1494
+ }
1495
+ getView(name) {
1496
+ console.log("Ottengo valore della SearchView della service: " + JSON.stringify(this.SearchViews[name].view));
1497
+ return this.SearchViews[name].view;
1498
+ }
1499
+ }
1500
+
1501
+ // Angular
1502
+ class FiltersVerticalItemComponent {
1503
+ get labelName() { return this.propName + "_label"; }
1504
+ constructor(filtersService) {
1505
+ this.filtersService = filtersService;
1506
+ this.Required = false;
1507
+ this.propName = "";
1508
+ this.type = "input";
1509
+ this.source = [];
1510
+ }
1511
+ ngOnInit() {
1512
+ //this.SearchView = this.filtersService.getView(this.ViewName);
1513
+ }
1514
+ }
1515
+ FiltersVerticalItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersVerticalItemComponent, deps: [{ token: EsFiltersService }], target: i0.ɵɵFactoryTarget.Component });
1516
+ FiltersVerticalItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FiltersVerticalItemComponent, isStandalone: true, selector: "filters-sidebar-item", inputs: { SearchView: "SearchView", Required: "Required", propName: "propName", type: "type", source: "source" }, ngImport: i0, template: "<!--TODO: multiselect-->\r\n<ng-container *ngIf=\"type == 'input'\">\r\n <form-input [Validation]=\"false\" [Placeholder]=\"'...'\" [FloatingLabel]=\"false\" [LabelInputRatio]=\"'0 12'\"\r\n [(ngModel)]=\"SearchView[propName]\" [Label]=\"'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + SearchView[labelName]\"\r\n [name]=\"propName\" [required]=\"Required\"></form-input>\r\n</ng-container>\r\n<ng-container *ngIf=\"type == 'select'\">\r\n <form-select [Validation]=\"false\" [Placeholder]=\"'...'\" [FloatingLabel]=\"false\" [LabelInputRatio]=\"'0 12'\"\r\n [(ngModel)]=\"SearchView[propName]\" [Label]=\"'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + SearchView[labelName]\"\r\n [Source]=\"source\" [name]=\"propName\" [required]=\"Required\"></form-select>\r\n</ng-container>\r\n<ng-container *ngIf=\"type == 'date'\">\r\n <form-date [Validation]=\"false\" [FloatingLabel]=\"false\" [LabelInputRatio]=\"'0 12'\"\r\n [(ngModel)]=\"SearchView[propName]\" [Label]=\"'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + SearchView[labelName]\"\r\n [name]=\"propName\" [required]=\"Required\"></form-date>\r\n</ng-container>\r\n<ng-container *ngIf=\"type == 'boolean'\">\r\n <form-checkbox [Validation]=\"false\" [FloatingLabel]=\"false\" [LabelInputRatio]=\"'0 12'\"\r\n [(ngModel)]=\"SearchView[propName]\" [Label]=\"'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + SearchView[labelName]\"\r\n [name]=\"propName\" [required]=\"Required\"></form-checkbox>\r\n</ng-container>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormsAndValidationsModule }, { kind: "component", type: i3$1.FormCheckboxComponent, selector: "form-checkbox", inputs: ["SliderMode"] }, { kind: "component", type: i3$1.FormDateComponent, selector: "form-date", inputs: ["JsDates"] }, { kind: "component", type: i3$1.FormInputComponent, selector: "form-input", inputs: ["Password"], outputs: ["onSuffixAction", "onPrefixAction"] }, { kind: "component", type: i3$1.FormSelectComponent, selector: "form-select", inputs: ["SelectLabel", "PlaceholderValue", "RequiredPlaceholder", "EmptyFieldValue", "ShowValidationSymbol", "OptionTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FiltersVerticalItemComponent, decorators: [{
1518
+ type: Component,
1519
+ args: [{ selector: "filters-sidebar-item", standalone: true, imports: [FormsModule, FormsAndValidationsModule, NgIf], template: "<!--TODO: multiselect-->\r\n<ng-container *ngIf=\"type == 'input'\">\r\n <form-input [Validation]=\"false\" [Placeholder]=\"'...'\" [FloatingLabel]=\"false\" [LabelInputRatio]=\"'0 12'\"\r\n [(ngModel)]=\"SearchView[propName]\" [Label]=\"'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + SearchView[labelName]\"\r\n [name]=\"propName\" [required]=\"Required\"></form-input>\r\n</ng-container>\r\n<ng-container *ngIf=\"type == 'select'\">\r\n <form-select [Validation]=\"false\" [Placeholder]=\"'...'\" [FloatingLabel]=\"false\" [LabelInputRatio]=\"'0 12'\"\r\n [(ngModel)]=\"SearchView[propName]\" [Label]=\"'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + SearchView[labelName]\"\r\n [Source]=\"source\" [name]=\"propName\" [required]=\"Required\"></form-select>\r\n</ng-container>\r\n<ng-container *ngIf=\"type == 'date'\">\r\n <form-date [Validation]=\"false\" [FloatingLabel]=\"false\" [LabelInputRatio]=\"'0 12'\"\r\n [(ngModel)]=\"SearchView[propName]\" [Label]=\"'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + SearchView[labelName]\"\r\n [name]=\"propName\" [required]=\"Required\"></form-date>\r\n</ng-container>\r\n<ng-container *ngIf=\"type == 'boolean'\">\r\n <form-checkbox [Validation]=\"false\" [FloatingLabel]=\"false\" [LabelInputRatio]=\"'0 12'\"\r\n [(ngModel)]=\"SearchView[propName]\" [Label]=\"'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + SearchView[labelName]\"\r\n [name]=\"propName\" [required]=\"Required\"></form-checkbox>\r\n</ng-container>", styles: ["@import\"https://fonts.googleapis.com/css2?family=Lato&family=Sora&display=swap\";\n"] }]
1520
+ }], ctorParameters: function () { return [{ type: EsFiltersService }]; }, propDecorators: { SearchView: [{
1521
+ type: Input
1522
+ }], Required: [{
1523
+ type: Input
1524
+ }], propName: [{
1525
+ type: Input
1526
+ }], type: [{
1527
+ type: Input
1528
+ }], source: [{
1529
+ type: Input
1530
+ }] } });
1531
+
1532
+ // Angular
1533
+ class EsFiltersComponent {
1534
+ constructor(filtersService) {
1535
+ this.filtersService = filtersService;
1536
+ this.DefaultFilters = [];
1537
+ this.Title = "Filtri";
1538
+ this.Description = "Impostare qui i filtri di interesse";
1539
+ this.onSendSearch = new EventEmitter();
1540
+ // TODO: Automatico
1541
+ this.Sources = [];
1542
+ }
1543
+ ngOnInit() {
1544
+ //this.filtersService.setView(this.SearchView, "search");
1545
+ }
1546
+ onUpdateFiltersTop() {
1547
+ this.filters_h.onUpdateFilters();
1548
+ }
1549
+ onShowFilters() {
1550
+ this.filters_v.onShowFilters();
1551
+ }
1552
+ emitSendSearch() {
1553
+ this.onSendSearch.emit();
1554
+ }
1555
+ }
1556
+ EsFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsFiltersComponent, deps: [{ token: EsFiltersService }], target: i0.ɵɵFactoryTarget.Component });
1557
+ EsFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: EsFiltersComponent, isStandalone: true, selector: "es-filters", inputs: { SearchView: "SearchView", DefaultFilters: "DefaultFilters", Title: "Title", Description: "Description", Sources: "Sources" }, outputs: { onSendSearch: "onSendSearch" }, providers: [EsFiltersService], viewQueries: [{ propertyName: "filters_h", first: true, predicate: FiltersHorizontalComponent, descendants: true }, { propertyName: "filters_v", first: true, predicate: FiltersVerticalComponent, descendants: true }], ngImport: i0, template: "<filters-topbar [searchView]=\"SearchView\" (onSendSearch)=\"emitSendSearch();\" (onShowFilters)=\"onShowFilters();\" [DefaultFilters]=\"DefaultFilters\" [sources]=\"Sources\"></filters-topbar>\r\n<filters-sidebar [searchView]=\"SearchView\" (onSendSearch)=\"emitSendSearch();\" [DefaultFilters]=\"DefaultFilters\" [Title]=\"Title\" [Description]=\"Description\">\r\n <ng-content></ng-content>\r\n</filters-sidebar>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: FiltersVerticalComponent, selector: "filters-sidebar", inputs: ["searchView", "DefaultFilters", "Title", "Description"], outputs: ["onSendSearch"] }, { kind: "component", type: FiltersHorizontalComponent, selector: "filters-topbar", inputs: ["searchView", "sources", "DefaultFilters"], outputs: ["onShowFilters", "onSendSearch"] }] });
1558
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: EsFiltersComponent, decorators: [{
1559
+ type: Component,
1560
+ args: [{ selector: "es-filters", providers: [EsFiltersService], standalone: true, imports: [CommonModule, FiltersVerticalComponent, FiltersHorizontalComponent], template: "<filters-topbar [searchView]=\"SearchView\" (onSendSearch)=\"emitSendSearch();\" (onShowFilters)=\"onShowFilters();\" [DefaultFilters]=\"DefaultFilters\" [sources]=\"Sources\"></filters-topbar>\r\n<filters-sidebar [searchView]=\"SearchView\" (onSendSearch)=\"emitSendSearch();\" [DefaultFilters]=\"DefaultFilters\" [Title]=\"Title\" [Description]=\"Description\">\r\n <ng-content></ng-content>\r\n</filters-sidebar>" }]
1561
+ }], ctorParameters: function () { return [{ type: EsFiltersService }]; }, propDecorators: { SearchView: [{
1562
+ type: Input
1563
+ }], DefaultFilters: [{
1564
+ type: Input
1565
+ }], Title: [{
1566
+ type: Input
1567
+ }], Description: [{
1568
+ type: Input
1569
+ }], onSendSearch: [{
1570
+ type: Output
1571
+ }], filters_h: [{
1572
+ type: ViewChild,
1573
+ args: [FiltersHorizontalComponent]
1574
+ }], filters_v: [{
1575
+ type: ViewChild,
1576
+ args: [FiltersVerticalComponent]
1577
+ }], Sources: [{
1578
+ type: Input
1579
+ }] } });
1580
+
1052
1581
  // Angular
1053
1582
  const COMPONENTS = [
1054
1583
  BackTop,
@@ -1065,12 +1594,31 @@ const COMPONENTS = [
1065
1594
  Sidebar,
1066
1595
  JaceResourceComponent,
1067
1596
  EsModalComponent,
1068
- EsModalHeadComponent
1597
+ EsModalHeadComponent,
1598
+ FiltersHorizontalComponent,
1599
+ FiltersVerticalComponent,
1600
+ FiltersVerticalSectionComponent,
1601
+ FiltersVerticalItemComponent,
1602
+ EsFiltersComponent,
1603
+ OperationsMenuComponent,
1604
+ OperationsMenuCategoryComponent,
1605
+ OperationsMenuOperationComponent,
1606
+ LabeledSpanComponent
1069
1607
  ];
1070
1608
  class ComponentsModule {
1071
1609
  }
1072
1610
  ComponentsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1073
- ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ComponentsModule, imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule, EsTableModule, ModalModule, BackTop,
1611
+ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: ComponentsModule, imports: [CommonModule,
1612
+ RouterModule,
1613
+ FormsModule,
1614
+ DirectivesModule,
1615
+ LocalizationModule,
1616
+ ProgressbarModule,
1617
+ MatSlideToggleModule,
1618
+ BsDropdownModule,
1619
+ EsTableModule,
1620
+ ModalModule,
1621
+ FormsAndValidationsModule, BackTop,
1074
1622
  Breadcrumb,
1075
1623
  PageNotFoundComponent,
1076
1624
  ServerErrorComponent,
@@ -1084,7 +1632,16 @@ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
1084
1632
  Sidebar,
1085
1633
  JaceResourceComponent,
1086
1634
  EsModalComponent,
1087
- EsModalHeadComponent], exports: [BackTop,
1635
+ EsModalHeadComponent,
1636
+ FiltersHorizontalComponent,
1637
+ FiltersVerticalComponent,
1638
+ FiltersVerticalSectionComponent,
1639
+ FiltersVerticalItemComponent,
1640
+ EsFiltersComponent,
1641
+ OperationsMenuComponent,
1642
+ OperationsMenuCategoryComponent,
1643
+ OperationsMenuOperationComponent,
1644
+ LabeledSpanComponent], exports: [BackTop,
1088
1645
  Breadcrumb,
1089
1646
  PageNotFoundComponent,
1090
1647
  ServerErrorComponent,
@@ -1098,12 +1655,44 @@ ComponentsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
1098
1655
  Sidebar,
1099
1656
  JaceResourceComponent,
1100
1657
  EsModalComponent,
1101
- EsModalHeadComponent] });
1102
- ComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ComponentsModule, imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule, EsTableModule, ModalModule, COMPONENTS] });
1658
+ EsModalHeadComponent,
1659
+ FiltersHorizontalComponent,
1660
+ FiltersVerticalComponent,
1661
+ FiltersVerticalSectionComponent,
1662
+ FiltersVerticalItemComponent,
1663
+ EsFiltersComponent,
1664
+ OperationsMenuComponent,
1665
+ OperationsMenuCategoryComponent,
1666
+ OperationsMenuOperationComponent,
1667
+ LabeledSpanComponent] });
1668
+ ComponentsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ComponentsModule, imports: [CommonModule,
1669
+ RouterModule,
1670
+ FormsModule,
1671
+ DirectivesModule,
1672
+ LocalizationModule,
1673
+ ProgressbarModule,
1674
+ MatSlideToggleModule,
1675
+ BsDropdownModule,
1676
+ EsTableModule,
1677
+ ModalModule,
1678
+ FormsAndValidationsModule, COMPONENTS] });
1103
1679
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ComponentsModule, decorators: [{
1104
1680
  type: NgModule,
1105
1681
  args: [{
1106
- imports: [CommonModule, RouterModule, FormsModule, DirectivesModule, LocalizationModule, ProgressbarModule, MatSlideToggleModule, BsDropdownModule, EsTableModule, ModalModule, ...COMPONENTS],
1682
+ imports: [
1683
+ CommonModule,
1684
+ RouterModule,
1685
+ FormsModule,
1686
+ DirectivesModule,
1687
+ LocalizationModule,
1688
+ ProgressbarModule,
1689
+ MatSlideToggleModule,
1690
+ BsDropdownModule,
1691
+ EsTableModule,
1692
+ ModalModule,
1693
+ FormsAndValidationsModule,
1694
+ ...COMPONENTS
1695
+ ],
1107
1696
  exports: [...COMPONENTS]
1108
1697
  }]
1109
1698
  }] });
@@ -1112,5 +1701,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1112
1701
  * Generated bundle index. Do not edit.
1113
1702
  */
1114
1703
 
1115
- export { AngularErrorComponent, BackTop, BaseComponent, Breadcrumb, BreadcrumbItem, ComponentsModule, EsModalComponent, EsModalHeadComponent, ExternalPagesComponent, JaceLoginComponent, JaceModulesBoardComponent, JaceResourceComponent, Navbar, PageNotFoundComponent, PagesComponent, ProfilePicture, ReactiveComponent, RedirecterComponent, ServerErrorComponent, Sidebar };
1704
+ export { AngularErrorComponent, BackTop, BaseComponent, Breadcrumb, BreadcrumbItem, ComponentsModule, EsFiltersComponent, EsModalComponent, EsModalHeadComponent, EstableFilter, ExternalPagesComponent, FiltersHorizontalComponent, FiltersVerticalComponent, FiltersVerticalItemComponent, FiltersVerticalSectionComponent, JaceLoginComponent, JaceModulesBoardComponent, JaceResourceComponent, JaceUserAccount, LabeledSpanComponent, Navbar, OperationsMenuCategoryComponent, OperationsMenuComponent, OperationsMenuOperationComponent, PageNotFoundComponent, PagesComponent, ProfilePicture, ReactiveComponent, RedirecterComponent, ServerErrorComponent, Sidebar, SlideInFromRight, UserInfosComponent };
1116
1705
  //# sourceMappingURL=esfaenza-core-components.mjs.map